package cat.nyaa.nyaautils.elytra; import cat.nyaa.nyaacore.utils.InventoryUtils; import cat.nyaa.nyaautils.I18n; import cat.nyaa.nyaautils.NyaaUtils; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; import java.util.ArrayList; import java.util.List; import java.util.Random; public class FuelManager { private final NyaaUtils plugin; public String lore_prefix = ChatColor.translateAlternateColorCodes('&', "&r&9&e&a&1&4&0&2&r"); public FuelManager(NyaaUtils pl) { plugin = pl; } public int getFuelAmount(Player player, boolean exact) { int fuel = 0; if (InventoryUtils.hasItem(player, plugin.cfg.fuelConfig.elytra_fuel, 1)) { fuel = InventoryUtils.getAmount(player, plugin.cfg.fuelConfig.elytra_fuel); } for (int i = 0; i <= player.getInventory().getSize(); i++) { if (!exact && fuel > plugin.cfg.elytra_fuel_notify) { return fuel; } ItemStack item = player.getInventory().getItem(i); int fuelID = getFuelID(item); if (fuelID != -1 && plugin.cfg.fuelConfig.fuel.containsKey(fuelID)) { fuel += getFuelDurability(item); } } return fuel; } public boolean useFuel(Player player) { if (plugin.cfg.fuelConfig.elytra_fuel != null && plugin.cfg.fuelConfig.elytra_fuel.getType() != Material.AIR) { if (InventoryUtils.removeItem(player, plugin.cfg.fuelConfig.elytra_fuel, 1)) { return true; } } for (int i = 0; i <= player.getInventory().getSize(); i++) { ItemStack item = player.getInventory().getItem(i); int fuelID = getFuelID(item); if (fuelID != -1 && getFuel(fuelID) != null) { int durability = getFuelDurability(item); FuelItem fuel = getFuel(fuelID); if (durability > fuel.getMaxDurability()) { durability = fuel.getMaxDurability(); } durability--; if (durability <= 0) { player.getInventory().setItem(i, new ItemStack(Material.AIR)); } else { updateItem(item, fuelID, durability); } return true; } } return false; } public void updateItem(ItemStack item, int fuelID, int durability) { FuelItem fuel = plugin.cfg.fuelConfig.fuel.get(fuelID); if (fuel == null) { return; } String hex = toHexString(fuelID) + toHexString(durability) + toHexString(new Random().nextInt(65535)); String str = ""; for (int i = 0; i < hex.length(); i++) { str += ChatColor.COLOR_CHAR + hex.substring(i, i + 1); } str += ChatColor.COLOR_CHAR + "r"; ItemMeta meta = fuel.getItem().getItemMeta(); List<String> lore; if (meta.hasLore()) { lore = meta.getLore(); lore.set(0, lore_prefix + str + lore.get(0)); lore.add(lore_prefix + I18n.format("user.elytra_enhance.fuel_durability", durability, fuel.getMaxDurability())); } else { lore = new ArrayList<>(); lore.add(lore_prefix + str + I18n.format("user.elytra_enhance.fuel_durability", durability, fuel.getMaxDurability())); } item.setType(fuel.getItem().getType()); item.setData(fuel.getItem().getData()); meta.setLore(lore); item.setItemMeta(meta); } public int getFuelID(ItemStack item) { if (item != null && !item.getType().equals(Material.AIR) && item.hasItemMeta() && item.getItemMeta().hasLore()) { String lore = item.getItemMeta().getLore().get(0); if (lore != null && lore.length() >= (lore_prefix.length() + 24 + 2) && lore.startsWith(lore_prefix)) { try { return Integer.parseInt(lore.substring(lore_prefix.length(), lore_prefix.length() + 8).replaceAll(String.valueOf(ChatColor.COLOR_CHAR), ""), 16); } catch (NumberFormatException e) { return -1; } } } return -1; } public int getFuelDurability(ItemStack item) { if (item != null && !item.getType().equals(Material.AIR) && item.hasItemMeta() && item.getItemMeta().hasLore()) { String lore = item.getItemMeta().getLore().get(0); if (lore != null && lore.length() >= (lore_prefix.length() + 24 + 2) && lore.contains(lore_prefix)) { try { return Integer.parseInt(lore.substring(lore_prefix.length() + 8, lore_prefix.length() + 16).replaceAll(String.valueOf(ChatColor.COLOR_CHAR), ""), 16); } catch (NumberFormatException e) { return -1; } } } return -1; } public FuelItem getFuel(int fuelID) { if (plugin.cfg.fuelConfig.fuel.containsKey(fuelID)) { return plugin.cfg.fuelConfig.fuel.get(fuelID); } return null; } public String toHexString(int i) { String string = Integer.toHexString(i); if (string.length() < 4) { return "0000".substring(0, 4 - string.length()) + string; } return string; } }