diff --git a/src/main/java/com/songoda/epicfarming/EpicFarming.java b/src/main/java/com/songoda/epicfarming/EpicFarming.java index b05d8aa..457ce57 100644 --- a/src/main/java/com/songoda/epicfarming/EpicFarming.java +++ b/src/main/java/com/songoda/epicfarming/EpicFarming.java @@ -16,10 +16,7 @@ import com.songoda.epicfarming.farming.Level; import com.songoda.epicfarming.farming.LevelManager; import com.songoda.epicfarming.listeners.BlockListeners; import com.songoda.epicfarming.listeners.InteractListeners; -import com.songoda.epicfarming.listeners.InventoryListeners; -import com.songoda.epicfarming.player.PlayerActionManager; -import com.songoda.epicfarming.player.PlayerData; -import com.songoda.epicfarming.settings.Settings; +import com.songoda.epicfarming.settings.Setting; import com.songoda.epicfarming.storage.Storage; import com.songoda.epicfarming.storage.StorageRow; import com.songoda.epicfarming.storage.types.StorageYaml; @@ -53,7 +50,6 @@ public class EpicFarming extends SongodaPlugin { private final GuiManager guiManager = new GuiManager(this); private FarmManager farmManager; private LevelManager levelManager; - private PlayerActionManager playerActionManager; private CommandManager commandManager; private BoostManager boostManager; @@ -76,10 +72,6 @@ public class EpicFarming extends SongodaPlugin { public void onPluginDisable() { saveToFile(); this.storage.closeConnection(); - for (PlayerData playerData : playerActionManager.getRegisteredPlayers()) { - if (playerData.getPlayer() != null) - playerData.getPlayer().closeInventory(); - } } @Override @@ -91,11 +83,11 @@ public class EpicFarming extends SongodaPlugin { EconomyManager.load(); // Setup Config - Settings.setupConfig(); - this.setLocale(Settings.LANGUGE_MODE.getString(), false); + Setting.setupConfig(); + this.setLocale(Setting.LANGUGE_MODE.getString(), false); // Set economy preference - EconomyManager.getManager().setPreferredHook(Settings.ECONOMY_PLUGIN.getString()); + EconomyManager.getManager().setPreferredHook(Setting.ECONOMY_PLUGIN.getString()); // Register commands this.commandManager = new CommandManager(this); @@ -114,7 +106,6 @@ public class EpicFarming extends SongodaPlugin { this.loadLevelManager(); this.farmManager = new FarmManager(); - this.playerActionManager = new PlayerActionManager(); this.boostManager = new BoostManager(); /* @@ -130,7 +121,7 @@ public class EpicFarming extends SongodaPlugin { List items = row.get("contents").asItemStackList(); UUID placedBY = UUID.fromString(row.get("placedby").asString()); Farm farm = new Farm(location, levelManager.getLevel(level), placedBY); - farm.loadInventory(items); + farm.setItems(items); farmManager.addFarm(location, farm); } } @@ -160,7 +151,6 @@ public class EpicFarming extends SongodaPlugin { PluginManager pluginManager = Bukkit.getPluginManager(); pluginManager.registerEvents(new BlockListeners(this), this); pluginManager.registerEvents(new InteractListeners(this), this); - pluginManager.registerEvents(new InventoryListeners(this), this); // Start tasks this.growthTask = GrowthTask.startTask(this); @@ -230,7 +220,7 @@ public class EpicFarming extends SongodaPlugin { } public ItemStack makeFarmItem(Level level) { - ItemStack item = Settings.FARM_BLOCK_MATERIAL.getMaterial().getItem(); + ItemStack item = Setting.FARM_BLOCK_MATERIAL.getMaterial().getItem(); ItemMeta meta = item.getItemMeta(); meta.setDisplayName(Methods.formatText(Methods.formatName(level.getLevel(), true))); String line = getLocale().getMessage("general.nametag.lore").getMessage(); @@ -255,10 +245,6 @@ public class EpicFarming extends SongodaPlugin { return boostManager; } - public PlayerActionManager getPlayerActionManager() { - return playerActionManager; - } - public GrowthTask getGrowthTask() { return growthTask; } diff --git a/src/main/java/com/songoda/epicfarming/farming/Farm.java b/src/main/java/com/songoda/epicfarming/farming/Farm.java index 6cd6712..5dc6b6f 100644 --- a/src/main/java/com/songoda/epicfarming/farming/Farm.java +++ b/src/main/java/com/songoda/epicfarming/farming/Farm.java @@ -1,27 +1,19 @@ package com.songoda.epicfarming.farming; import com.songoda.core.compatibility.CompatibleMaterial; -import com.songoda.core.compatibility.CompatibleParticleHandler; import com.songoda.core.compatibility.CompatibleSound; import com.songoda.core.compatibility.ServerVersion; import com.songoda.core.hooks.EconomyManager; import com.songoda.epicfarming.EpicFarming; -import com.songoda.epicfarming.boost.BoostData; -import com.songoda.epicfarming.player.PlayerData; -import com.songoda.epicfarming.settings.Settings; -import com.songoda.epicfarming.utils.Methods; +import com.songoda.epicfarming.gui.OverviewGui; +import com.songoda.epicfarming.settings.Setting; import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; -import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; -import java.util.UUID; +import java.util.*; public class Farm { @@ -29,7 +21,8 @@ public class Farm { private final List cachedCrops = new ArrayList<>(); private Location location; private Level level; - private Inventory inventory; + private List items = new ArrayList<>(); + private OverviewGui opened = null; private UUID placedBy; private UUID viewing = null; private long lastCached = 0; @@ -38,138 +31,17 @@ public class Farm { this.location = location; this.level = level; this.placedBy = placedBy; - this.inventory = Bukkit.createInventory(null, 54, Methods.formatName(level.getLevel(), false)); } - public void view(Player player) { - if (!player.hasPermission("epicfarming.view")) + public void view(Player player, boolean force) { + if (!player.hasPermission("epicfarming.view") && !force) return; - if (viewing != null) return; + if (opened != null && !force) return; - setupOverview(player); + opened = new OverviewGui(this, player); - player.openInventory(inventory); - this.viewing = player.getUniqueId(); - - PlayerData playerData = EpicFarming.getInstance().getPlayerActionManager().getPlayerAction(player); - - playerData.setFarm(this); - - getInventory(); - } - - private void setupOverview(Player player) { - Inventory inventory = Bukkit.createInventory(null, 54, Methods.formatName(level.getLevel(), false)); - inventory.setContents(this.inventory.getContents()); - this.inventory = inventory; - - EpicFarming instance = EpicFarming.getInstance(); - - Level nextLevel = instance.getLevelManager().getHighestLevel().getLevel() > level.getLevel() ? instance.getLevelManager().getLevel(level.getLevel() + 1) : null; - - int level = this.level.getLevel(); - - ItemStack item = new ItemStack(Material.valueOf(instance.getConfig().getString("Main.Farm Block Material")), 1); - ItemMeta itemmeta = item.getItemMeta(); - itemmeta.setDisplayName(instance.getLocale().getMessage("general.nametag.farm") - .processPlaceholder("level", level).getMessage()); - List lore = this.level.getDescription(); - lore.add(""); - if (nextLevel == null) lore.add(instance.getLocale().getMessage("event.upgrade.maxed").getMessage()); - else { - lore.add(instance.getLocale().getMessage("interface.button.level") - .processPlaceholder("level", nextLevel.getLevel()).getMessage()); - lore.addAll(nextLevel.getDescription()); - } - - BoostData boostData = instance.getBoostManager().getBoost(placedBy); - if (boostData != null) { - String[] parts = instance.getLocale().getMessage("interface.button.boostedstats") - .processPlaceholder("amount", Integer.toString(boostData.getMultiplier())) - .processPlaceholder("time", Methods.makeReadable(boostData.getEndTime() - System.currentTimeMillis())) - .getMessage().split("\\|"); - lore.add(""); - for (String line : parts) - lore.add(Methods.formatText(line)); - } - - itemmeta.setLore(lore); - item.setItemMeta(itemmeta); - - ItemStack itemXP = Settings.XP_ICON.getMaterial().getItem(); - ItemMeta itemmetaXP = itemXP.getItemMeta(); - itemmetaXP.setDisplayName(instance.getLocale().getMessage("interface.button.upgradewithxp").getMessage()); - ArrayList loreXP = new ArrayList<>(); - if (nextLevel != null) - loreXP.add(instance.getLocale().getMessage("interface.button.upgradewithxplore") - .processPlaceholder("cost", nextLevel.getCostExperiance()).getMessage()); - else - loreXP.add(instance.getLocale().getMessage("event.upgrade.maxed").getMessage()); - itemmetaXP.setLore(loreXP); - itemXP.setItemMeta(itemmetaXP); - - ItemStack itemECO = Settings.ECO_ICON.getMaterial().getItem(); - ItemMeta itemmetaECO = itemECO.getItemMeta(); - itemmetaECO.setDisplayName(instance.getLocale().getMessage("interface.button.upgradewitheconomy").getMessage()); - ArrayList loreECO = new ArrayList<>(); - if (nextLevel != null) - loreECO.add(instance.getLocale().getMessage("interface.button.upgradewitheconomylore") - .processPlaceholder("cost", Methods.formatEconomy(nextLevel.getCostEconomy())) - .getMessage()); - else - loreECO.add(instance.getLocale().getMessage("event.upgrade.maxed").getMessage()); - itemmetaECO.setLore(loreECO); - itemECO.setItemMeta(itemmetaECO); - - if (instance.getConfig().getBoolean("Main.Upgrade With XP") && player != null && player.hasPermission("EpicFarming.Upgrade.XP")) { - inventory.setItem(11, itemXP); - } - - inventory.setItem(13, item); - - if (instance.getConfig().getBoolean("Main.Upgrade With Economy") && player != null && player.hasPermission("EpicFarming.Upgrade.ECO")) { - inventory.setItem(15, itemECO); - } -/* - inventory.setItem(0, Methods.getBackgroundGlass(true)); - inventory.setItem(1, Methods.getBackgroundGlass(true)); - inventory.setItem(2, Methods.getBackgroundGlass(false)); - inventory.setItem(6, Methods.getBackgroundGlass(false)); - inventory.setItem(7, Methods.getBackgroundGlass(true)); - inventory.setItem(8, Methods.getBackgroundGlass(true)); - inventory.setItem(9, Methods.getBackgroundGlass(true)); - inventory.setItem(10, Methods.getBackgroundGlass(false)); - inventory.setItem(16, Methods.getBackgroundGlass(false)); - inventory.setItem(17, Methods.getBackgroundGlass(true)); - inventory.setItem(18, Methods.getBackgroundGlass(true)); - inventory.setItem(19, Methods.getBackgroundGlass(true)); - inventory.setItem(20, Methods.getBackgroundGlass(false)); - inventory.setItem(24, Methods.getBackgroundGlass(false)); - inventory.setItem(25, Methods.getBackgroundGlass(true)); - inventory.setItem(26, Methods.getBackgroundGlass(true)); */ - } - - public Inventory getInventory() { - return inventory; - } - - public void loadInventory(List items) { - setupOverview(null); - int i = 27; - for (ItemStack item : items) { - inventory.setItem(i++, item); - } - } - - public List dumpInventory() { - List items = new ArrayList<>(); - - for (int i = 27; i < inventory.getSize(); i++) { - items.add(inventory.getItem(i)); - } - - return items; + EpicFarming.getInstance().getGuiManager().showGUI(player, opened); } public void upgrade(UpgradeType type, Player player) { @@ -237,7 +109,7 @@ public class Farm { } public boolean tillLand(Location location) { - if (Settings.DISABLE_AUTO_TIL_LAND.getBoolean()) return true; + if (Setting.DISABLE_AUTO_TIL_LAND.getBoolean()) return true; Block block = location.getBlock(); int radius = level.getRadius(); int bx = block.getX(); @@ -277,6 +149,57 @@ public class Farm { return false; } + public List getItems() { + return Collections.unmodifiableList(items); + } + + public void addItem(ItemStack toAdd) { + for (ItemStack item : getItems()) { + if (item.getType() != toAdd.getType() + || item.getAmount() + toAdd.getAmount() > item.getMaxStackSize()) continue; + item.setAmount(item.getAmount() + toAdd.getAmount()); + if (opened != null) + opened.updateInventory(); + return; + } + items.add(toAdd); + if (opened != null) + opened.updateInventory(); + } + + + public void removeMaterial(Material material, int amount) { + for (ItemStack item : getItems()) { + if (material == item.getType()) { + item.setAmount(item.getAmount() - amount); + + if (item.getAmount() <= 0) + this.items.remove(item); + if (opened != null) + opened.updateInventory(); + return; + } + } + } + + public boolean willFit(ItemStack item) { + if (items.size() < 27) return true; + + for (ItemStack stack : items) { + if (stack.isSimilar(item) && stack.getAmount() < stack.getMaxStackSize()) { + return true; + } + } + return false; + } + + public void setItems(List items) { + this.items.clear(); + this.items.addAll(items); + if (opened != null) + opened.updateInventory(); + } + public UUID getViewing() { return viewing; } @@ -328,4 +251,8 @@ public class Farm { public Level getLevel() { return level; } + + public void close() { + this.opened = null; + } } \ No newline at end of file diff --git a/src/main/java/com/songoda/epicfarming/gui/GUIOverview.java b/src/main/java/com/songoda/epicfarming/gui/GUIOverview.java deleted file mode 100644 index 5659eb6..0000000 --- a/src/main/java/com/songoda/epicfarming/gui/GUIOverview.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.songoda.epicfarming.gui; - -import com.songoda.core.gui.Gui; - -public class GUIOverview extends Gui { -} diff --git a/src/main/java/com/songoda/epicfarming/gui/OverviewGui.java b/src/main/java/com/songoda/epicfarming/gui/OverviewGui.java new file mode 100644 index 0000000..7a2b56d --- /dev/null +++ b/src/main/java/com/songoda/epicfarming/gui/OverviewGui.java @@ -0,0 +1,166 @@ +package com.songoda.epicfarming.gui; + +import com.songoda.core.gui.Gui; +import com.songoda.core.gui.GuiUtils; +import com.songoda.epicfarming.EpicFarming; +import com.songoda.epicfarming.boost.BoostData; +import com.songoda.epicfarming.farming.Farm; +import com.songoda.epicfarming.farming.Level; +import com.songoda.epicfarming.farming.UpgradeType; +import com.songoda.epicfarming.settings.Setting; +import com.songoda.epicfarming.utils.Methods; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.List; + +public class OverviewGui extends Gui { + + private EpicFarming plugin; + private Farm farm; + private Level level; + private Player player; + + public OverviewGui(Farm farm, Player player) { + this.plugin = EpicFarming.getInstance(); + this.farm = farm; + this.level = farm.getLevel(); + this.player = player; + this.setRows(6); + this.setTitle(Methods.formatName(level.getLevel(), false)); + this.setAcceptsItems(true); + this.setUnlockedRange(3, 0, 5, 8); + + constructGUI(); + } + + private void constructGUI() { + ItemStack glass1 = GuiUtils.getBorderItem(Setting.GLASS_TYPE_1.getMaterial()); + ItemStack glass2 = GuiUtils.getBorderItem(Setting.GLASS_TYPE_2.getMaterial()); + ItemStack glass3 = GuiUtils.getBorderItem(Setting.GLASS_TYPE_3.getMaterial()); + + this.setDefaultItem(null); + + GuiUtils.mirrorFill(this, 0, 0, false, true, glass2); + GuiUtils.mirrorFill(this, 0, 1, false, true, glass2); + GuiUtils.mirrorFill(this, 0, 2, false, true, glass3); + GuiUtils.mirrorFill(this, 1, 0, false, true, glass2); + GuiUtils.mirrorFill(this, 1, 1, false, true, glass3); + GuiUtils.mirrorFill(this, 2, 0, false, true, glass2); + GuiUtils.mirrorFill(this, 2, 1, false, true, glass2); + GuiUtils.mirrorFill(this, 2, 2, false, true, glass3); + + GuiUtils.mirrorFill(this, 0, 3, false, true, glass1); + GuiUtils.mirrorFill(this, 0, 4, false, false, glass1); + GuiUtils.mirrorFill(this, 1, 3, false, true, glass1); + GuiUtils.mirrorFill(this, 1, 2, false, true, glass1); + GuiUtils.mirrorFill(this, 2, 3, false, true, glass1); + GuiUtils.mirrorFill(this, 2, 4, false, false, glass1); + + Level nextLevel = plugin.getLevelManager().getHighestLevel().getLevel() > level.getLevel() ? plugin.getLevelManager().getLevel(level.getLevel() + 1) : null; + + + ItemStack item = new ItemStack(Material.valueOf(plugin.getConfig().getString("Main.Farm Block Material")), 1); + ItemMeta itemmeta = item.getItemMeta(); + itemmeta.setDisplayName(plugin.getLocale().getMessage("general.nametag.farm") + .processPlaceholder("level", level.getLevel()).getMessage()); + List lore = level.getDescription(); + lore.add(""); + if (nextLevel == null) lore.add(plugin.getLocale().getMessage("event.upgrade.maxed").getMessage()); + else { + lore.add(plugin.getLocale().getMessage("interface.button.level") + .processPlaceholder("level", nextLevel.getLevel()).getMessage()); + lore.addAll(nextLevel.getDescription()); + } + + BoostData boostData = plugin.getBoostManager().getBoost(farm.getPlacedBy()); + if (boostData != null) { + String[] parts = plugin.getLocale().getMessage("interface.button.boostedstats") + .processPlaceholder("amount", Integer.toString(boostData.getMultiplier())) + .processPlaceholder("time", Methods.makeReadable(boostData.getEndTime() - System.currentTimeMillis())) + .getMessage().split("\\|"); + lore.add(""); + for (String line : parts) + lore.add(Methods.formatText(line)); + } + + itemmeta.setLore(lore); + item.setItemMeta(itemmeta); + + ItemStack itemXP = Setting.XP_ICON.getMaterial().getItem(); + ItemMeta itemmetaXP = itemXP.getItemMeta(); + itemmetaXP.setDisplayName(plugin.getLocale().getMessage("interface.button.upgradewithxp").getMessage()); + ArrayList loreXP = new ArrayList<>(); + if (nextLevel != null) + loreXP.add(plugin.getLocale().getMessage("interface.button.upgradewithxplore") + .processPlaceholder("cost", nextLevel.getCostExperiance()).getMessage()); + else + loreXP.add(plugin.getLocale().getMessage("event.upgrade.maxed").getMessage()); + itemmetaXP.setLore(loreXP); + itemXP.setItemMeta(itemmetaXP); + + ItemStack itemECO = Setting.ECO_ICON.getMaterial().getItem(); + ItemMeta itemmetaECO = itemECO.getItemMeta(); + itemmetaECO.setDisplayName(plugin.getLocale().getMessage("interface.button.upgradewitheconomy").getMessage()); + ArrayList loreECO = new ArrayList<>(); + if (nextLevel != null) + loreECO.add(plugin.getLocale().getMessage("interface.button.upgradewitheconomylore") + .processPlaceholder("cost", Methods.formatEconomy(nextLevel.getCostEconomy())) + .getMessage()); + else + loreECO.add(plugin.getLocale().getMessage("event.upgrade.maxed").getMessage()); + itemmetaECO.setLore(loreECO); + itemECO.setItemMeta(itemmetaECO); + + if (plugin.getConfig().getBoolean("Main.Upgrade With XP") && player != null && player.hasPermission("EpicFarming.Upgrade.XP")) { + setButton(11, itemXP, (event) -> { + farm.upgrade(UpgradeType.EXPERIENCE, player); + farm.view(player, true); + }); + } + + setItem(13, item); + + if (plugin.getConfig().getBoolean("Main.Upgrade With Economy") && player != null && player.hasPermission("EpicFarming.Upgrade.ECO")) { + setButton(15, itemECO, (event) -> { + farm.upgrade(UpgradeType.ECONOMY, player); + farm.view(player, true); + }); + } + // events + this.setOnOpen((event) -> updateInventory()); + this.setDefaultAction((event) -> + Bukkit.getScheduler().runTaskLater(plugin, this::updateFarm, 0L)); + this.setOnClose((event) -> farm.close()); + + updateInventory(); + } + + public void updateInventory() { + for (int i = 27; i <= 54; i++) { + if (farm.getItems().size() <= (i - 27)) + setItem(i, null); + else + setItem(i, farm.getItems().get(i - 27)); + } + } + + public void updateFarm() { + List items = new ArrayList<>(); + for (int i = 27; i <= 54; i++) { + ItemStack item = getItem(i); + if (item == null || item.getType() == Material.AIR) continue; + items.add(item); + } + farm.setItems(items); + } + + public Inventory getInventory() { + return inventory; + } +} diff --git a/src/main/java/com/songoda/epicfarming/listeners/BlockListeners.java b/src/main/java/com/songoda/epicfarming/listeners/BlockListeners.java index d1fe41b..2e0664a 100644 --- a/src/main/java/com/songoda/epicfarming/listeners/BlockListeners.java +++ b/src/main/java/com/songoda/epicfarming/listeners/BlockListeners.java @@ -4,7 +4,7 @@ import com.songoda.epicfarming.EpicFarming; import com.songoda.epicfarming.farming.Farm; import com.songoda.epicfarming.farming.FarmManager; import com.songoda.epicfarming.farming.Level; -import com.songoda.epicfarming.settings.Settings; +import com.songoda.epicfarming.settings.Setting; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -134,7 +134,7 @@ public class BlockListeners implements Listener { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent event) { - if (event.getBlock().getType() != Settings.FARM_BLOCK_MATERIAL.getMaterial().getMaterial()) + if (event.getBlock().getType() != Setting.FARM_BLOCK_MATERIAL.getMaterial().getMaterial()) return; Farm farm = instance.getFarmManager().removeFarm(event.getBlock().getLocation()); @@ -152,8 +152,7 @@ public class BlockListeners implements Listener { block.setType(Material.AIR); block.getLocation().getWorld().dropItemNaturally(block.getLocation().add(.5, .5, .5), item); - for (ItemStack itemStack : farm.dumpInventory()) { - if (itemStack == null) continue; + for (ItemStack itemStack : farm.getItems()) { farm.getLocation().getWorld().dropItemNaturally(farm.getLocation().add(.5, .5, .5), itemStack); } } @@ -208,8 +207,7 @@ public class BlockListeners implements Listener { block.setType(Material.AIR); block.getLocation().getWorld().dropItemNaturally(block.getLocation().add(.5, .5, .5), item); - for (ItemStack itemStack : ((Farm) farm).dumpInventory()) { - if (itemStack == null) continue; + for (ItemStack itemStack : farm.getItems()) { farm.getLocation().getWorld().dropItemNaturally(farm.getLocation().add(.5, .5, .5), itemStack); } } diff --git a/src/main/java/com/songoda/epicfarming/listeners/InteractListeners.java b/src/main/java/com/songoda/epicfarming/listeners/InteractListeners.java index 34cde5d..bcb9904 100644 --- a/src/main/java/com/songoda/epicfarming/listeners/InteractListeners.java +++ b/src/main/java/com/songoda/epicfarming/listeners/InteractListeners.java @@ -1,9 +1,8 @@ package com.songoda.epicfarming.listeners; import com.songoda.epicfarming.EpicFarming; -import com.songoda.epicfarming.settings.Settings; +import com.songoda.epicfarming.settings.Setting; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -24,7 +23,7 @@ public class InteractListeners implements Listener { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockInteract(PlayerInteractEvent e) { if (e.getClickedBlock() == null - || e.getClickedBlock().getType() != Settings.FARM_BLOCK_MATERIAL.getMaterial().getMaterial()) + || e.getClickedBlock().getType() != Setting.FARM_BLOCK_MATERIAL.getMaterial().getMaterial()) return; if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return; @@ -33,7 +32,7 @@ public class InteractListeners implements Listener { if (instance.getFarmManager().getFarms().containsKey(location)) { e.setCancelled(true); - instance.getFarmManager().getFarm(location).view(e.getPlayer()); + instance.getFarmManager().getFarm(location).view(e.getPlayer(), false); } } } \ No newline at end of file diff --git a/src/main/java/com/songoda/epicfarming/listeners/InventoryListeners.java b/src/main/java/com/songoda/epicfarming/listeners/InventoryListeners.java deleted file mode 100644 index 0507e04..0000000 --- a/src/main/java/com/songoda/epicfarming/listeners/InventoryListeners.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.songoda.epicfarming.listeners; - -import com.songoda.epicfarming.EpicFarming; -import com.songoda.epicfarming.farming.Farm; -import com.songoda.epicfarming.farming.UpgradeType; -import com.songoda.epicfarming.player.PlayerData; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryCloseEvent; -import org.bukkit.event.inventory.InventoryType; - -/** - * Created by songoda on 3/14/2017. - */ -public class InventoryListeners implements Listener { - - private EpicFarming instance; - - public InventoryListeners(EpicFarming instance) { - this.instance = instance; - } - - @EventHandler - public void onInventoryClick(InventoryClickEvent event) { - if (instance.getPlayerActionManager().getPlayerAction((Player) event.getWhoClicked()).getFarm() == null - || event.getRawSlot() >= event.getView().getTopInventory().getSize()) return; - - if (event.getInventory().getType() != InventoryType.CHEST) return; - - PlayerData playerData = instance.getPlayerActionManager().getPlayerAction((Player) event.getWhoClicked()); - Farm farm = playerData.getFarm(); - if (event.getSlot() <= 26) { - event.setCancelled(true); - } - - Player player = (Player) event.getWhoClicked(); - - if (event.getSlot() == 11 && player.hasPermission("EpicFarming.Upgrade.XP")) { - if (!event.getCurrentItem().getItemMeta().getDisplayName().equals("§l")) { - farm.upgrade(UpgradeType.EXPERIENCE, player); - player.closeInventory(); - } - } else if (event.getSlot() == 15 && player.hasPermission("EpicFarming.Upgrade.ECO")) { - if (!event.getCurrentItem().getItemMeta().getDisplayName().equals("§l")) { - farm.upgrade(UpgradeType.ECONOMY, player); - player.closeInventory(); - } - } - } - - @EventHandler - public void onClose(InventoryCloseEvent event) { - PlayerData playerData = instance.getPlayerActionManager().getPlayerAction((Player) event.getPlayer()); - - if (playerData.getFarm() != null) { - playerData.getFarm().setViewing(null); - } - - instance.getPlayerActionManager().getPlayerAction((Player) event.getPlayer()).setFarm(null); - } -} \ No newline at end of file diff --git a/src/main/java/com/songoda/epicfarming/player/PlayerActionManager.java b/src/main/java/com/songoda/epicfarming/player/PlayerActionManager.java deleted file mode 100644 index fb6138e..0000000 --- a/src/main/java/com/songoda/epicfarming/player/PlayerActionManager.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.songoda.epicfarming.player; - -import org.bukkit.entity.Player; - -import java.util.*; - -public class PlayerActionManager { - - private final Map registeredPlayers = new HashMap<>(); - - public PlayerData getPlayerAction(Player player) { - return (player != null) ? registeredPlayers.computeIfAbsent(player.getUniqueId(), p -> new PlayerData(player.getUniqueId())) : null; - } - - public Collection getRegisteredPlayers() { - return Collections.unmodifiableCollection(registeredPlayers.values()); - } -} \ No newline at end of file diff --git a/src/main/java/com/songoda/epicfarming/player/PlayerData.java b/src/main/java/com/songoda/epicfarming/player/PlayerData.java deleted file mode 100644 index 1de4a3d..0000000 --- a/src/main/java/com/songoda/epicfarming/player/PlayerData.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.songoda.epicfarming.player; - -import com.songoda.epicfarming.farming.Farm; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import java.util.UUID; - -public class PlayerData { - - private final UUID playerUUID; - private Farm farm = null; - - PlayerData(UUID playerUUID) { - this.playerUUID = playerUUID; - } - - public Farm getFarm() { - return farm; - } - - public void setFarm(Farm farm) { - this.farm = farm; - } - - public Player getPlayer() { - return Bukkit.getPlayer(playerUUID); - } -} diff --git a/src/main/java/com/songoda/epicfarming/settings/Settings.java b/src/main/java/com/songoda/epicfarming/settings/Setting.java similarity index 99% rename from src/main/java/com/songoda/epicfarming/settings/Settings.java rename to src/main/java/com/songoda/epicfarming/settings/Setting.java index 766bb0f..0108cec 100644 --- a/src/main/java/com/songoda/epicfarming/settings/Settings.java +++ b/src/main/java/com/songoda/epicfarming/settings/Setting.java @@ -9,7 +9,7 @@ import com.songoda.epicfarming.EpicFarming; import java.util.stream.Collectors; -public class Settings { +public class Setting { static final Config config = EpicFarming.getInstance().getConfig().getCoreConfig(); diff --git a/src/main/java/com/songoda/epicfarming/storage/Storage.java b/src/main/java/com/songoda/epicfarming/storage/Storage.java index 45cd2ba..8dbfcee 100644 --- a/src/main/java/com/songoda/epicfarming/storage/Storage.java +++ b/src/main/java/com/songoda/epicfarming/storage/Storage.java @@ -36,7 +36,7 @@ public abstract class Storage { prepareSaveItem("farms", new StorageItem("location", locstr), new StorageItem("level", farm.getLevel().getLevel()), new StorageItem("placedby", farm.getPlacedBy().toString()), - new StorageItem("contents", ((Farm) farm).dumpInventory())); + new StorageItem("contents", farm.getItems())); } /* diff --git a/src/main/java/com/songoda/epicfarming/storage/StorageItem.java b/src/main/java/com/songoda/epicfarming/storage/StorageItem.java index f828792..69f0fe7 100644 --- a/src/main/java/com/songoda/epicfarming/storage/StorageItem.java +++ b/src/main/java/com/songoda/epicfarming/storage/StorageItem.java @@ -9,9 +9,10 @@ import java.util.List; public class StorageItem { - private Object object; private String key = null; + private Object object; + public StorageItem(Object object) { this.object = object; } @@ -21,10 +22,13 @@ public class StorageItem { this.object = object; } - public StorageItem(String key, List string) { + public StorageItem(String key, List material) { + if (material == null || material.isEmpty()) return; StringBuilder object = new StringBuilder(); - for (String s : string) { - object.append(s).append(";"); + for (ItemStack m : material) { + if (m == null) continue; + object.append(Serializers.serialize(m)); + object.append(";;"); } this.key = key; this.object = object.toString(); @@ -36,49 +40,32 @@ public class StorageItem { public String asString() { if (object == null) return null; - return (String) object; + return (String)object; } public boolean asBoolean() { if (object == null) return false; - if (object instanceof Integer) return (Integer) object == 1; - return (boolean) object; + return (boolean)object; } public int asInt() { if (object == null) return 0; - return (int) object; + return (int)object; } public Object asObject() { - if (object == null) return null; - if (object instanceof Boolean) return (Boolean) object ? 1 : 0; return object; } - public List asStringList() { - if (object instanceof ArrayList) return new ArrayList<>(); - List list = new ArrayList<>(); - if (object == null) return list; - String[] stack = ((String) object).split(";"); - for (String item : stack) { - if (item.equals("")) continue; - list.add(item); - } - return list; - } - public List asItemStackList() { List list = new ArrayList<>(); if (object == null) return list; String obj = (String) object; - if (obj.equals("[]")) return list; + if (obj.equals("[]"))return list; List sers = new ArrayList<>(Arrays.asList(obj.split(";;"))); for (String ser : sers) { list.add(Serializers.deserialize(ser)); } return list; } - - } diff --git a/src/main/java/com/songoda/epicfarming/tasks/EntityTask.java b/src/main/java/com/songoda/epicfarming/tasks/EntityTask.java index cad2919..fc57e5d 100644 --- a/src/main/java/com/songoda/epicfarming/tasks/EntityTask.java +++ b/src/main/java/com/songoda/epicfarming/tasks/EntityTask.java @@ -155,12 +155,8 @@ public class EntityTask extends BukkitRunnable { if (entry.getValue() >= 2 && entry.getValue() < plugin.getConfig().getInt("Main.Auto Breeding Cap")) { EntityType entityType = entry.getKey(); - Inventory inventory = farm.getInventory(); - for (int i = 27; i < inventory.getSize(); i++) { - if (inventory.getItem(i) == null || inventory.getItem(i).getType() == Material.AIR) continue; - - ItemStack item = inventory.getItem(i); + for (ItemStack item : farm.getItems()) { try { if (item.getType() != EntityInfo.valueOf(entityType.name()).getMaterial() || item.getAmount() < 2) @@ -169,12 +165,7 @@ public class EntityTask extends BukkitRunnable { continue; } - int newAmt = item.getAmount() - 2; - - if (newAmt <= 0) - inventory.setItem(i, null); - else - item.setAmount(newAmt); + farm.removeMaterial(item.getType(), 2); Location location = entity.getLocation(); Entity newSpawn = location.getWorld().spawnEntity(location, entityType); @@ -193,22 +184,11 @@ public class EntityTask extends BukkitRunnable { stack.setAmount(stack.getAmount() * (boostData == null ? 1 : boostData.getMultiplier())); - if (!canMove(farm.getInventory(), stack)) return false; - farm.getInventory().addItem(stack); + if (farm.willFit(stack)) return false; + farm.addItem(stack); return true; } - private boolean canMove(Inventory inventory, ItemStack item) { - if (inventory.firstEmpty() != -1) return true; - - for (ItemStack stack : inventory.getContents()) { - if (stack.isSimilar(item) && stack.getAmount() < stack.getMaxStackSize()) { - return true; - } - } - return false; - } - public Map getTicksLived() { return Collections.unmodifiableMap(ticksLived); } diff --git a/src/main/java/com/songoda/epicfarming/tasks/FarmTask.java b/src/main/java/com/songoda/epicfarming/tasks/FarmTask.java index 30520d6..2a0d82d 100644 --- a/src/main/java/com/songoda/epicfarming/tasks/FarmTask.java +++ b/src/main/java/com/songoda/epicfarming/tasks/FarmTask.java @@ -8,14 +8,13 @@ import com.songoda.epicfarming.farming.Crop; import com.songoda.epicfarming.farming.Farm; import com.songoda.epicfarming.utils.CropType; import com.songoda.epicfarming.utils.Methods; -import java.util.HashMap; -import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; +import java.util.HashMap; import java.util.List; import java.util.Random; @@ -73,29 +72,18 @@ public class FarmTask extends BukkitRunnable { ItemStack stack = new ItemStack(cropTypeData.getYieldMaterial(), (useBoneMeal(farm) ? random.nextInt(2) + 2 : 1) * (boostData == null ? 1 : boostData.getMultiplier())); ItemStack seedStack = new ItemStack(cropTypeData.getSeedMaterial(), random.nextInt(3) + 1 + (useBoneMeal(farm) ? 1 : 0)); - if (!canMove(farm.getInventory(), stack) || !canMove(farm.getInventory(), seedStack)) return false; + if (!farm.willFit(stack) || !farm.willFit(seedStack)) return false; Methods.animate(farm.getLocation(), cropTypeData.getYieldMaterial()); - farm.getInventory().addItem(stack); - farm.getInventory().addItem(seedStack); + farm.addItem(stack); + farm.addItem(seedStack); return true; } private boolean useBoneMeal(Farm farm) { - Inventory inventory = farm.getInventory(); - - for (int i = 27; i < inventory.getSize(); i++) { - if (inventory.getItem(i) == null || inventory.getItem(i).getType() == Material.AIR) continue; - - ItemStack item = inventory.getItem(i); - + for (ItemStack item : farm.getItems()) { if (item.getType() != Material.BONE_MEAL) continue; - int newAmt = item.getAmount() - 1; - - if (newAmt <= 0) - inventory.setItem(i, null); - else - item.setAmount(newAmt); + farm.removeMaterial(Material.BONE_MEAL, 1); return true; diff --git a/src/main/java/com/songoda/epicfarming/tasks/HopperTask.java b/src/main/java/com/songoda/epicfarming/tasks/HopperTask.java index 4e2ba68..921faac 100644 --- a/src/main/java/com/songoda/epicfarming/tasks/HopperTask.java +++ b/src/main/java/com/songoda/epicfarming/tasks/HopperTask.java @@ -52,27 +52,16 @@ public class HopperTask extends BukkitRunnable { if (block.getType() != Material.HOPPER) continue; - Inventory inventory = farm.getInventory(); Inventory hopperInventory = ((Hopper) block.getState()).getInventory(); - for (int i = 27; i < inventory.getSize(); i++) { - if (inventory.getItem(i) == null || inventory.getItem(i).getType() == Material.AIR) continue; - - int amtToMove = 1; - - ItemStack item = inventory.getItem(i); + for (ItemStack item : farm.getItems()) { if (item.getType() == Material.BONE_MEAL) continue; ItemStack toMove = item.clone(); - toMove.setAmount(amtToMove); - - int newAmt = item.getAmount() - amtToMove; + toMove.setAmount(1); if (canHop(hopperInventory, toMove)) { - if (newAmt <= 0) - inventory.setItem(i, null); - else - item.setAmount(newAmt); + farm.removeMaterial(toMove.getType(), 1); hopperInventory.addItem(toMove); } break;