From 27ca9db717f768bb48fab19c01c186061fa8e65e Mon Sep 17 00:00:00 2001 From: Brianna O'Keefe Date: Mon, 17 Sep 2018 17:06:27 -0400 Subject: [PATCH] Package name changed. Cleaned up code. Updated to the new CommandManager Moved GrowthHandler to a task and improved its performance. Clear task removed, improving performance. All handlers removed improving performance. --- .../epicfarming/EpicFarmingPlugin.java | 144 ++++++++------- .../epicfarming/command/AbstractCommand.java | 41 +++++ .../epicfarming/command/CommandManager.java | 81 ++++++++ .../command/commands/CommandEpicFarming.java | 43 +++++ .../command/commands/CommandGiveFarmItem.java | 66 +++++++ .../command/commands/CommandReload.java | 35 ++++ .../command/commands/CommandSettings.java | 34 ++++ .../epicfarming/handlers/CommandHandler.java | 95 ---------- .../epicfarming/handlers/FarmingHandler.java | 174 ------------------ .../{events => listeners}/BlockListeners.java | 6 +- .../EntityListeners.java | 2 +- .../InteractListeners.java | 2 +- .../InventoryListeners.java | 2 +- .../songoda/epicfarming/tasks/FarmTask.java | 124 +++++++++++++ .../GrowthTask.java} | 57 ++++-- .../songoda/epicfarming/tasks/HopperTask.java | 88 +++++++++ .../songoda/epicfarming/utils/Debugger.java | 2 +- .../songoda/epicfarming/utils/Methods.java | 8 +- .../epicfarming/utils/SettingsManager.java | 17 +- 19 files changed, 643 insertions(+), 378 deletions(-) create mode 100644 EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/AbstractCommand.java create mode 100644 EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/CommandManager.java create mode 100644 EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/commands/CommandEpicFarming.java create mode 100644 EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/commands/CommandGiveFarmItem.java create mode 100644 EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/commands/CommandReload.java create mode 100644 EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/commands/CommandSettings.java delete mode 100644 EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/handlers/CommandHandler.java delete mode 100644 EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/handlers/FarmingHandler.java rename EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/{events => listeners}/BlockListeners.java (96%) rename EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/{events => listeners}/EntityListeners.java (93%) rename EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/{events => listeners}/InteractListeners.java (97%) rename EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/{events => listeners}/InventoryListeners.java (98%) create mode 100644 EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/tasks/FarmTask.java rename EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/{handlers/GrowthHandler.java => tasks/GrowthTask.java} (61%) create mode 100644 EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/tasks/HopperTask.java diff --git a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/EpicFarmingPlugin.java b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/EpicFarmingPlugin.java index c3e3cc5..6583444 100644 --- a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/EpicFarmingPlugin.java +++ b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/EpicFarmingPlugin.java @@ -8,20 +8,20 @@ import com.songoda.epicfarming.api.farming.Farm; import com.songoda.epicfarming.api.farming.Level; import com.songoda.epicfarming.api.utils.ClaimableProtectionPluginHook; import com.songoda.epicfarming.api.utils.ProtectionPluginHook; -import com.songoda.epicfarming.events.BlockListeners; -import com.songoda.epicfarming.events.EntityListeners; -import com.songoda.epicfarming.events.InteractListeners; -import com.songoda.epicfarming.events.InventoryListeners; +import com.songoda.epicfarming.command.CommandManager; +import com.songoda.epicfarming.listeners.BlockListeners; +import com.songoda.epicfarming.listeners.EntityListeners; +import com.songoda.epicfarming.listeners.InteractListeners; +import com.songoda.epicfarming.listeners.InventoryListeners; import com.songoda.epicfarming.farming.EFarm; import com.songoda.epicfarming.farming.EFarmManager; -import com.songoda.epicfarming.farming.ELevel; import com.songoda.epicfarming.farming.ELevelManager; -import com.songoda.epicfarming.handlers.CommandHandler; -import com.songoda.epicfarming.handlers.FarmingHandler; -import com.songoda.epicfarming.handlers.GrowthHandler; import com.songoda.epicfarming.hooks.*; import com.songoda.epicfarming.player.PlayerActionManager; import com.songoda.epicfarming.player.PlayerData; +import com.songoda.epicfarming.tasks.FarmTask; +import com.songoda.epicfarming.tasks.GrowthTask; +import com.songoda.epicfarming.tasks.HopperTask; import com.songoda.epicfarming.utils.Debugger; import com.songoda.epicfarming.utils.Methods; import com.songoda.epicfarming.utils.SettingsManager; @@ -32,6 +32,7 @@ import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.command.CommandSender; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -52,20 +53,19 @@ public class EpicFarmingPlugin extends JavaPlugin implements EpicFarming { private List protectionHooks = new ArrayList<>(); private ClaimableProtectionPluginHook factionsHook, townyHook, aSkyblockHook, uSkyblockHook; - public SettingsManager settingsManager; - public References references; + private SettingsManager settingsManager; + private References references; private ConfigWrapper hooksFile = new ConfigWrapper(this, "", "hooks.yml"); - public ConfigWrapper dataFile = new ConfigWrapper(this, "", "data.yml"); + private ConfigWrapper dataFile = new ConfigWrapper(this, "", "data.yml"); private Locale locale; - private FarmingHandler farmingHandler; - private GrowthHandler growthHandler; private EFarmManager farmManager; private ELevelManager levelManager; private PlayerActionManager playerActionManager; + private CommandManager commandManager; - public static EpicFarmingPlugin pl() { - return INSTANCE; - } + private GrowthTask growthTask; + private HopperTask hopperTask; + private FarmTask farmTask; public static EpicFarmingPlugin getInstance() { return INSTANCE; @@ -105,7 +105,7 @@ public class EpicFarmingPlugin extends JavaPlugin implements EpicFarming { Locale.saveDefaultLocale("en_US"); this.locale = Locale.getLocale(this.getConfig().getString("Locale", "en_US")); - settingsManager = new SettingsManager(this); + this.settingsManager = new SettingsManager(this); setupConfig(); dataFile.createNewFile("Loading Data File", "EpicFarming Data File"); @@ -113,7 +113,9 @@ public class EpicFarmingPlugin extends JavaPlugin implements EpicFarming { loadLevelManager(); - farmManager = new EFarmManager(); + this.farmManager = new EFarmManager(); + this.playerActionManager = new PlayerActionManager(); + this.commandManager = new CommandManager(this); /* * Register Farms into FarmManger from configuration @@ -132,14 +134,8 @@ public class EpicFarmingPlugin extends JavaPlugin implements EpicFarming { farmManager.addFarm(location, farm); } } - playerActionManager = new PlayerActionManager(); - - farmingHandler = new FarmingHandler(this); - growthHandler = new GrowthHandler(this); - references = new References(); - - this.getCommand("EpicFarming").setExecutor(new CommandHandler(this)); + this.references = new References(); PluginManager pluginManager = Bukkit.getPluginManager(); @@ -160,7 +156,11 @@ public class EpicFarmingPlugin extends JavaPlugin implements EpicFarming { if (pluginManager.isPluginEnabled("USkyBlock")) this.register(HookUSkyBlock::new); if (pluginManager.isPluginEnabled("WorldGuard")) this.register(HookWorldGuard::new); - + // Start tasks + this.growthTask = GrowthTask.startTask(this); + this.hopperTask = HopperTask.startTask(this); + this.farmTask = FarmTask.startTask(this); + Bukkit.getScheduler().scheduleSyncRepeatingTask(this, this::saveToFile, 6000, 6000); new MCUpdate(this, true); @@ -235,46 +235,48 @@ public class EpicFarmingPlugin extends JavaPlugin implements EpicFarming { private void setupConfig() { settingsManager.updateSettings(); + + ConfigurationSection levels = getConfig().createSection("settings.levels"); - if (!getConfig().contains("settings.levels.Level-1")) { - getConfig().addDefault("settings.levels.Level-1.Radius", 1); - getConfig().addDefault("settings.levels.Level-1.Speed-Multiplier", 1); - getConfig().addDefault("settings.levels.Level-1.Cost-xp", 20); - getConfig().addDefault("settings.levels.Level-1.Cost-eco", 5000); + if (!levels.contains("Level-1")) { + levels.set("Level-1.Radius", 1); + levels.set("Level-1.Speed-Multiplier", 1); + levels.set("Level-1.Cost-xp", 20); + levels.set("Level-1.Cost-eco", 5000); - getConfig().addDefault("settings.levels.Level-2.Radius", 2); - getConfig().addDefault("settings.levels.Level-2.Speed-Multiplier", 1.5); - getConfig().addDefault("settings.levels.Level-2.Auto-Harvest", true); - getConfig().addDefault("settings.levels.Level-2.Cost-xp", 20); - getConfig().addDefault("settings.levels.Level-2.Cost-eco", 5000); + levels.set("Level-2.Radius", 2); + levels.set("Level-2.Speed-Multiplier", 1.5); + levels.set("Level-2.Auto-Harvest", true); + levels.set("Level-2.Cost-xp", 20); + levels.set("Level-2.Cost-eco", 5000); - getConfig().addDefault("settings.levels.Level-3.Radius", 3); - getConfig().addDefault("settings.levels.Level-3.Speed-Multiplier", 1.5); - getConfig().addDefault("settings.levels.Level-3.Auto-Harvest", true); - getConfig().addDefault("settings.levels.Level-3.Auto-Replant", true); - getConfig().addDefault("settings.levels.Level-3.Cost-xp", 25); - getConfig().addDefault("settings.levels.Level-3.Cost-eco", 7500); + levels.set("Level-3.Radius", 3); + levels.set("Level-3.Speed-Multiplier", 1.5); + levels.set("Level-3.Auto-Harvest", true); + levels.set("Level-3.Auto-Replant", true); + levels.set("Level-3.Cost-xp", 25); + levels.set("Level-3.Cost-eco", 7500); - getConfig().addDefault("settings.levels.Level-4.Radius", 3); - getConfig().addDefault("settings.levels.Level-4.Speed-Multiplier", 2); - getConfig().addDefault("settings.levels.Level-4.Auto-Harvest", true); - getConfig().addDefault("settings.levels.Level-4.Auto-Replant", true); - getConfig().addDefault("settings.levels.Level-4.Cost-xp", 30); - getConfig().addDefault("settings.levels.Level-4.Cost-eco", 10000); + levels.set("Level-4.Radius", 3); + levels.set("Level-4.Speed-Multiplier", 2); + levels.set("Level-4.Auto-Harvest", true); + levels.set("Level-4.Auto-Replant", true); + levels.set("Level-4.Cost-xp", 30); + levels.set("Level-4.Cost-eco", 10000); - getConfig().addDefault("settings.levels.Level-5.Radius", 3); - getConfig().addDefault("settings.levels.Level-5.Speed-Multiplier", 2.5); - getConfig().addDefault("settings.levels.Level-5.Auto-Harvest", true); - getConfig().addDefault("settings.levels.Level-5.Auto-Replant", true); - getConfig().addDefault("settings.levels.Level-5.Cost-xp", 35); - getConfig().addDefault("settings.levels.Level-5.Cost-eco", 12000); + levels.set("Level-5.Radius", 3); + levels.set("Level-5.Speed-Multiplier", 2.5); + levels.set("Level-5.Auto-Harvest", true); + levels.set("Level-5.Auto-Replant", true); + levels.set("Level-5.Cost-xp", 35); + levels.set("Level-5.Cost-eco", 12000); - getConfig().addDefault("settings.levels.Level-6.Radius", 4); - getConfig().addDefault("settings.levels.Level-6.Speed-Multiplier", 3); - getConfig().addDefault("settings.levels.Level-6.Auto-Harvest", true); - getConfig().addDefault("settings.levels.Level-6.Auto-Replant", true); - getConfig().addDefault("settings.levels.Level-6.Cost-xp", 40); - getConfig().addDefault("settings.levels.Level-6.Cost-eco", 25000); + levels.set("Level-6.Radius", 4); + levels.set("Level-6.Speed-Multiplier", 3); + levels.set("Level-6.Auto-Harvest", true); + levels.set("Level-6.Auto-Replant", true); + levels.set("Level-6.Cost-xp", 40); + levels.set("Level-6.Cost-eco", 25000); } getConfig().options().copyDefaults(true); @@ -290,12 +292,10 @@ public class EpicFarmingPlugin extends JavaPlugin implements EpicFarming { return locale; } - private void register(Supplier hookSupplier) { this.registerProtectionHook(hookSupplier.get()); } - @Override public void registerProtectionHook(ProtectionPluginHook hook) { Preconditions.checkNotNull(hook, "Cannot register null hook"); @@ -359,15 +359,27 @@ public class EpicFarmingPlugin extends JavaPlugin implements EpicFarming { return levelManager; } - public FarmingHandler getFarmingHandler() { - return farmingHandler; + public References getReferences() { + return references; + } + + public SettingsManager getSettingsManager() { + return settingsManager; + } + + public CommandManager getCommandManager() { + return commandManager; } public PlayerActionManager getPlayerActionManager() { return playerActionManager; } - public GrowthHandler getGrowthHandler() { - return growthHandler; + public GrowthTask getGrowthTask() { + return growthTask; + } + + public FarmTask getFarmTask() { + return farmTask; } } \ No newline at end of file diff --git a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/AbstractCommand.java b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/AbstractCommand.java new file mode 100644 index 0000000..f9d8135 --- /dev/null +++ b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/AbstractCommand.java @@ -0,0 +1,41 @@ +package com.songoda.epicfarming.command; + +import com.songoda.epicfarming.EpicFarmingPlugin; +import org.bukkit.command.CommandSender; + +public abstract class AbstractCommand { + + public enum ReturnType { SUCCESS, FAILURE, SYNTAX_ERROR } + + private final AbstractCommand parent; + + private final String command; + + private final boolean noConsole; + + protected AbstractCommand(String command, AbstractCommand parent, boolean noConsole) { + this.command = command; + this.parent = parent; + this.noConsole = noConsole; + } + + public AbstractCommand getParent() { + return parent; + } + + public String getCommand() { + return command; + } + + public boolean isNoConsole() { + return noConsole; + } + + protected abstract ReturnType runCommand(EpicFarmingPlugin instance, CommandSender sender, String... args); + + public abstract String getPermissionNode(); + + public abstract String getSyntax(); + + public abstract String getDescription(); +} diff --git a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/CommandManager.java b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/CommandManager.java new file mode 100644 index 0000000..fd47301 --- /dev/null +++ b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/CommandManager.java @@ -0,0 +1,81 @@ +package com.songoda.epicfarming.command; + +import com.songoda.arconix.api.methods.formatting.TextComponent; +import com.songoda.epicfarming.EpicFarmingPlugin; +import com.songoda.epicfarming.api.EpicFarming; +import com.songoda.epicfarming.command.commands.CommandEpicFarming; +import com.songoda.epicfarming.command.commands.CommandGiveFarmItem; +import com.songoda.epicfarming.command.commands.CommandReload; +import com.songoda.epicfarming.command.commands.CommandSettings; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class CommandManager implements CommandExecutor { + + private EpicFarmingPlugin instance; + + private List commands = new ArrayList<>(); + + public CommandManager(EpicFarmingPlugin instance) { + this.instance = instance; + + instance.getCommand("EpicFarming").setExecutor(this); + + AbstractCommand commandEpicSpawners = addCommand(new CommandEpicFarming()); + + addCommand(new CommandReload(commandEpicSpawners)); + addCommand(new CommandSettings(commandEpicSpawners)); + addCommand(new CommandGiveFarmItem(commandEpicSpawners)); + } + + private AbstractCommand addCommand(AbstractCommand abstractCommand) { + commands.add(abstractCommand); + return abstractCommand; + } + + @Override + public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) { + for (AbstractCommand abstractCommand : commands) { + if (abstractCommand.getCommand().equalsIgnoreCase(command.getName())) { + if (strings.length == 0) { + processRequirements(abstractCommand, commandSender, strings); + return true; + } + } else if (strings.length != 0 && abstractCommand.getParent() != null && abstractCommand.getParent().getCommand().equalsIgnoreCase(command.getName())) { + String cmd = strings[0]; + if (cmd.equalsIgnoreCase(abstractCommand.getCommand())) { + processRequirements(abstractCommand, commandSender, strings); + return true; + } + } + } + commandSender.sendMessage(instance.getReferences().getPrefix() + TextComponent.formatText("&7The command you entered does not exist or is spelt incorrectly.")); + return true; + } + + private void processRequirements(AbstractCommand command, CommandSender sender, String[] strings) { + if (!(sender instanceof Player) && command.isNoConsole()) { + sender.sendMessage("You must be a player to use this command."); + return; + } + if (command.getPermissionNode() == null || sender.hasPermission(command.getPermissionNode())) { + AbstractCommand.ReturnType returnType = command.runCommand(instance, sender, strings); + if (returnType == AbstractCommand.ReturnType.SYNTAX_ERROR) { + sender.sendMessage(instance.getReferences().getPrefix() + TextComponent.formatText("&cInvalid Syntax!")); + sender.sendMessage(instance.getReferences().getPrefix() + TextComponent.formatText("&7The valid syntax is: &6" + command.getSyntax() + "&7.")); + } + return; + } + sender.sendMessage(instance.getReferences().getPrefix() + instance.getLocale().getMessage("event.general.nopermission")); + } + + public List getCommands() { + return Collections.unmodifiableList(commands); + } +} diff --git a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/commands/CommandEpicFarming.java b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/commands/CommandEpicFarming.java new file mode 100644 index 0000000..40150de --- /dev/null +++ b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/commands/CommandEpicFarming.java @@ -0,0 +1,43 @@ +package com.songoda.epicfarming.command.commands; + +import com.songoda.arconix.api.methods.formatting.TextComponent; +import com.songoda.epicfarming.EpicFarmingPlugin; +import com.songoda.epicfarming.command.AbstractCommand; +import org.bukkit.command.CommandSender; + +public class CommandEpicFarming extends AbstractCommand { + + public CommandEpicFarming() { + super("EpicFarming", null, false); + } + + @Override + protected ReturnType runCommand(EpicFarmingPlugin instance, CommandSender sender, String... args) { + sender.sendMessage(""); + sender.sendMessage(TextComponent.formatText(instance.getReferences().getPrefix() + "&7Version " + instance.getDescription().getVersion() + " Created with <3 by &5&l&oBrianna")); + + for (AbstractCommand command : instance.getCommandManager().getCommands()) { + if (command.getPermissionNode() == null || sender.hasPermission(command.getPermissionNode())) { + sender.sendMessage(TextComponent.formatText("&8 - &a" + command.getSyntax() + "&7 - " + command.getDescription())); + } + } + sender.sendMessage(""); + + return ReturnType.SUCCESS; + } + + @Override + public String getPermissionNode() { + return null; + } + + @Override + public String getSyntax() { + return "/EpicFarming"; + } + + @Override + public String getDescription() { + return "Displays this page."; + } +} diff --git a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/commands/CommandGiveFarmItem.java b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/commands/CommandGiveFarmItem.java new file mode 100644 index 0000000..43372e0 --- /dev/null +++ b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/commands/CommandGiveFarmItem.java @@ -0,0 +1,66 @@ +package com.songoda.epicfarming.command.commands; + +import com.sk89q.worldedit.internal.expression.runtime.Return; +import com.songoda.arconix.api.methods.formatting.TextComponent; +import com.songoda.arconix.plugin.Arconix; +import com.songoda.epicfarming.EpicFarmingPlugin; +import com.songoda.epicfarming.command.AbstractCommand; +import com.songoda.epicfarming.farming.ELevel; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class CommandGiveFarmItem extends AbstractCommand { + + public CommandGiveFarmItem(AbstractCommand parent) { + super("givefarmitem", parent, false); + } + + @Override + protected ReturnType runCommand(EpicFarmingPlugin instance, CommandSender sender, String... args) { + if (args.length == 2) return ReturnType.SYNTAX_ERROR; + + ELevel level = instance.getLevelManager().getLowestLevel(); + Player player; + if (args.length != 1 && Bukkit.getPlayer(args[1]) == null) { + sender.sendMessage(instance.getReferences().getPrefix() + Arconix.pl().getApi().format().formatText("&cThat player does not exist or is currently offline.")); + return ReturnType.FAILURE; + } else if (args.length == 1) { + if (!(sender instanceof Player)) { + sender.sendMessage(instance.getReferences().getPrefix() + Arconix.pl().getApi().format().formatText("&cYou need to be a player to give a farm item to yourself.")); + return ReturnType.FAILURE; + } + player = (Player)sender; + } else { + player = Bukkit.getPlayer(args[1]); + } + + + if (args.length >= 3 && !instance.getLevelManager().isLevel(Integer.parseInt(args[2]))) { + sender.sendMessage(instance.getReferences().getPrefix() + Arconix.pl().getApi().format().formatText("&cNot a valid level... The current valid levels are: &4" + instance.getLevelManager().getLowestLevel().getLevel() + "-" + instance.getLevelManager().getHighestLevel().getLevel() + "&c.")); + return ReturnType.FAILURE; + } else if (args.length != 1){ + + level = instance.getLevelManager().getLevel(Integer.parseInt(args[2])); + } + player.getInventory().addItem(instance.makeFarmItem(level)); + player.sendMessage(instance.getReferences().getPrefix() + instance.getLocale().getMessage("command.give.success", level.getLevel())); + + return ReturnType.SUCCESS; + } + + @Override + public String getPermissionNode() { + return "epicfarming.admin"; + } + + @Override + public String getSyntax() { + return "/efa givefarmitem [player] "; + } + + @Override + public String getDescription() { + return "Give a farm item to a player."; + } +} diff --git a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/commands/CommandReload.java b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/commands/CommandReload.java new file mode 100644 index 0000000..69d9c20 --- /dev/null +++ b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/commands/CommandReload.java @@ -0,0 +1,35 @@ +package com.songoda.epicfarming.command.commands; + +import com.songoda.arconix.api.methods.formatting.TextComponent; +import com.songoda.epicfarming.EpicFarmingPlugin; +import com.songoda.epicfarming.command.AbstractCommand; +import org.bukkit.command.CommandSender; + +public class CommandReload extends AbstractCommand { + + public CommandReload(AbstractCommand parent) { + super("reload", parent, false); + } + + @Override + protected ReturnType runCommand(EpicFarmingPlugin instance, CommandSender sender, String... args) { + instance.reload(); + sender.sendMessage(TextComponent.formatText(instance.getReferences().getPrefix() + "&7Configuration and Language files reloaded.")); + return ReturnType.SUCCESS; + } + + @Override + public String getPermissionNode() { + return "epicfarming.admin"; + } + + @Override + public String getSyntax() { + return "/efa reload"; + } + + @Override + public String getDescription() { + return "Reload the Configuration and Language files."; + } +} diff --git a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/commands/CommandSettings.java b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/commands/CommandSettings.java new file mode 100644 index 0000000..4071a19 --- /dev/null +++ b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/command/commands/CommandSettings.java @@ -0,0 +1,34 @@ +package com.songoda.epicfarming.command.commands; + +import com.songoda.epicfarming.EpicFarmingPlugin; +import com.songoda.epicfarming.command.AbstractCommand; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class CommandSettings extends AbstractCommand { + + public CommandSettings(AbstractCommand parent) { + super("settings", parent, true); + } + + @Override + protected ReturnType runCommand(EpicFarmingPlugin instance, CommandSender sender, String... args) { + instance.getSettingsManager().openSettingsManager((Player)sender); + return ReturnType.SUCCESS; + } + + @Override + public String getPermissionNode() { + return "epicfarming.admin"; + } + + @Override + public String getSyntax() { + return "/efa settings"; + } + + @Override + public String getDescription() { + return "Edit the EpicFarming Settings."; + } +} diff --git a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/handlers/CommandHandler.java b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/handlers/CommandHandler.java deleted file mode 100644 index 557348d..0000000 --- a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/handlers/CommandHandler.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.songoda.epicfarming.handlers; - -import com.songoda.arconix.plugin.Arconix; -import com.songoda.epicfarming.EpicFarmingPlugin; -import com.songoda.epicfarming.farming.ELevel; -import com.songoda.epicfarming.utils.Debugger; -import com.songoda.epicfarming.utils.Methods; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -/** - * Created by songoda on 3/14/2017. - */ - -public class CommandHandler implements CommandExecutor { - - private EpicFarmingPlugin instance; - - public CommandHandler(EpicFarmingPlugin instance) { - this.instance = instance; - } - - @Override - public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { - try { - if (args.length == 0 || args[0].equalsIgnoreCase("help") || args[0].equalsIgnoreCase("?")) { - sender.sendMessage(""); - sender.sendMessage(Arconix.pl().getApi().format().formatText(instance.references.getPrefix() + "&7" + instance.getDescription().getVersion() + " Created by &5&l&oBrianna")); - sender.sendMessage(Arconix.pl().getApi().format().formatText(" &8- &aEFA help &7Displays this page.")); - sender.sendMessage(Arconix.pl().getApi().format().formatText(" &8- &aEFA settings &7Edit the EpicFarming Settings.")); - sender.sendMessage(Arconix.pl().getApi().format().formatText(" &8- &aEFA reload &7Reloads Configuration and Language files.")); - sender.sendMessage(Arconix.pl().getApi().format().formatText(" &8- &aEFA givefarmitem [player] [level] &7Give a farm item to a player.")); - sender.sendMessage(""); - } else if (args[0].equalsIgnoreCase("reload")) { - if (!sender.hasPermission("epicfarming.admin")) { - sender.sendMessage(instance.references.getPrefix() + instance.getLocale().getMessage("event.general.nopermission")); - } else { - instance.reload(); - sender.sendMessage(Arconix.pl().getApi().format().formatText(instance.references.getPrefix() + "&8Configuration and Language files reloaded.")); - } - } else if (args[0].equalsIgnoreCase("givefarmitem")) { - if (!sender.hasPermission("epicfarming.admin")) { - sender.sendMessage(instance.references.getPrefix() + instance.getLocale().getMessage("event.general.nopermission")); - return true; - } - if (args.length >= 1) { - - ELevel level = instance.getLevelManager().getLowestLevel(); - Player player; - if (args.length != 1 && Bukkit.getPlayer(args[1]) == null) { - sender.sendMessage(instance.references.getPrefix() + Arconix.pl().getApi().format().formatText("&cThat player does not exist or is currently offline.")); - return true; - } else if (args.length == 1) { - if (!(sender instanceof Player)) { - sender.sendMessage(instance.references.getPrefix() + Arconix.pl().getApi().format().formatText("&cYou need to be a player to give a farm item to yourself.")); - return true; - } - player = (Player)sender; - } else { - player = Bukkit.getPlayer(args[1]); - } - - - if (args.length >= 3 && !instance.getLevelManager().isLevel(Integer.parseInt(args[2]))) { - sender.sendMessage(instance.references.getPrefix() + Arconix.pl().getApi().format().formatText("&cNot a valid level... The current valid levels are: &4" + instance.getLevelManager().getLowestLevel().getLevel() + "-" + instance.getLevelManager().getHighestLevel().getLevel() + "&c.")); - return true; - } else if (args.length != 1){ - level = instance.getLevelManager().getLevel(Integer.parseInt(args[2])); - } - player.getInventory().addItem(instance.makeFarmItem(level)); - player.sendMessage(instance.references.getPrefix() + instance.getLocale().getMessage("command.give.success", level.getLevel())); - - } else if (Bukkit.getPlayerExact(args[1]) == null) { - sender.sendMessage(instance.references.getPrefix() + Arconix.pl().getApi().format().formatText("&cThat username does not exist, or the user is not online!")); - } - } else if (sender instanceof Player) { - if (args[0].equalsIgnoreCase("settings")) { - if (!sender.hasPermission("epicfarming.admin")) { - sender.sendMessage(instance.references.getPrefix() + instance.getLocale().getMessage("event.general.nopermission")); - } else { - Player p = (Player) sender; - instance.settingsManager.openSettingsManager(p); - } - } - } - - } catch (Exception ex) { - Debugger.runReport(ex); - } - return true; - } -} \ No newline at end of file diff --git a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/handlers/FarmingHandler.java b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/handlers/FarmingHandler.java deleted file mode 100644 index def2c48..0000000 --- a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/handlers/FarmingHandler.java +++ /dev/null @@ -1,174 +0,0 @@ -package com.songoda.epicfarming.handlers; - -import com.songoda.epicfarming.EpicFarmingPlugin; -import com.songoda.epicfarming.api.farming.Farm; -import com.songoda.epicfarming.farming.Crop; -import com.songoda.epicfarming.farming.EFarm; -import com.songoda.epicfarming.utils.CropType; -import com.songoda.epicfarming.utils.Debugger; -import org.bukkit.Bukkit; -import org.bukkit.CropState; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.BlockState; -import org.bukkit.block.Hopper; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.material.Crops; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -public class FarmingHandler { - - private EpicFarmingPlugin instance; - - public FarmingHandler(EpicFarmingPlugin instance) { - this.instance = instance; - Bukkit.getScheduler().scheduleSyncRepeatingTask(EpicFarmingPlugin.getInstance(), this::farmRunner, 0, instance.getConfig().getInt("Main.Farm Tick Speed")); - Bukkit.getScheduler().scheduleSyncRepeatingTask(EpicFarmingPlugin.getInstance(), this::hopRunner, 0, 8); - } - - - private void farmRunner() { - try { - for (Farm farm : instance.getFarmManager().getFarms().values()) { - if (farm.getLocation() == null) continue; - for (Block block : getCrops(farm, true)) { - Crops crop = (Crops) block.getState().getData(); - - // Add to GrowthHandler - if (!instance.getGrowthHandler().liveCrops.containsKey(block.getLocation())) - instance.getGrowthHandler().liveCrops.put(block.getLocation(), new Crop(block.getLocation(), farm)); - - if (!farm.getLevel().isAutoHarvest() - || !crop.getState().equals(CropState.RIPE) - || !doDrop(farm, block.getType())) continue; - - - if (farm.getLevel().isAutoReplant()) { - BlockState cropState = block.getState(); - Crops cropData = (Crops) cropState.getData(); - cropData.setState(CropState.VERY_SMALL); - cropState.setData(cropData); - cropState.update(); - continue; - } - block.setType(Material.AIR); - } - } - } catch (Exception ex) { - Debugger.runReport(ex); - } - } - - private void hopRunner() { - for (Farm farm : instance.getFarmManager().getFarms().values()) { - if (farm.getLocation() == null || farm.getLocation().getBlock() == null) { - instance.getFarmManager().removeFarm(farm.getLocation()); - continue; - } - Block block = farm.getLocation().getBlock(); - - if (block.getRelative(BlockFace.DOWN).getType() != Material.HOPPER) - return; - - Inventory inventory = farm.getInventory(); - Inventory hopperInventory = ((Hopper) block.getRelative(BlockFace.DOWN).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); - - ItemStack toMove = item.clone(); - toMove.setAmount(amtToMove); - - int newAmt = item.getAmount() - amtToMove; - - if (canHop(hopperInventory, toMove)) { - if (newAmt <= 0) - inventory.setItem(i, null); - else - item.setAmount(newAmt); - hopperInventory.addItem(toMove); - } - break; - } - } - - } - - private boolean canHop(Inventory i, ItemStack item) { - if (i.firstEmpty() != -1) return true; - for (ItemStack it : i.getContents()) { - if (it == null || it.isSimilar(item) && (it.getAmount() + item.getAmount()) <= it.getMaxStackSize()) { - return true; - } - } - return false; - } - - private boolean doDrop(Farm farm, Material material) { - Random random = new Random(); - - CropType cropTypeData = CropType.getCropType(material); - - if (material == null || farm == null || cropTypeData == null) return false; - - - ItemStack stack = new ItemStack(cropTypeData.getYieldMaterial()); - ItemStack seedStack = new ItemStack(cropTypeData.getSeedMaterial(), random.nextInt(3) + 1); - - if (!canMove(farm.getInventory(), stack)) return false; - farm.getInventory().addItem(stack); - farm.getInventory().addItem(seedStack); - return true; - } - - public List getCrops(Farm farm, boolean add) { - List crops = new ArrayList<>(); - - Block block = farm.getLocation().getBlock(); - int radius = farm.getLevel().getRadius(); - int bx = block.getX(); - int by = block.getY(); - int bz = block.getZ(); - for (int fx = -radius; fx <= radius; fx++) { - for (int fy = -2; fy <= 1; fy++) { - for (int fz = -radius; fz <= radius; fz++) { - Block b2 = block.getWorld().getBlockAt(bx + fx, by + fy, bz + fz); - - if (!(b2.getState().getData() instanceof Crops)) continue; - - if (add) - crops.add(b2); - else { - instance.getGrowthHandler().liveCrops.remove(b2.getLocation()); - } - - } - } - } - return crops; - } - - private boolean canMove(Inventory inventory, ItemStack item) { - try { - if (inventory.firstEmpty() != -1) return true; - - for (ItemStack stack : inventory.getContents()) { - if (stack.isSimilar(item) && stack.getAmount() < stack.getMaxStackSize()) { - return true; - } - } - } catch (Exception e) { - Debugger.runReport(e); - } - return false; - } -} diff --git a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/events/BlockListeners.java b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/listeners/BlockListeners.java similarity index 96% rename from EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/events/BlockListeners.java rename to EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/listeners/BlockListeners.java index 6da08d6..c7752b7 100644 --- a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/events/BlockListeners.java +++ b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/listeners/BlockListeners.java @@ -1,13 +1,11 @@ -package com.songoda.epicfarming.events; +package com.songoda.epicfarming.listeners; import com.songoda.epicfarming.EpicFarmingPlugin; import com.songoda.epicfarming.api.farming.Farm; import com.songoda.epicfarming.api.farming.Level; import com.songoda.epicfarming.farming.EFarm; import com.songoda.epicfarming.farming.EFarmManager; -import com.songoda.epicfarming.farming.ELevel; import com.songoda.epicfarming.utils.Debugger; -import com.songoda.epicfarming.utils.Methods; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -125,7 +123,7 @@ public class BlockListeners implements Listener { Farm farm = instance.getFarmManager().removeFarm(event.getBlock().getLocation()); - instance.getFarmingHandler().getCrops(farm, false); + instance.getFarmTask().getCrops(farm, false); if (farm == null) return; diff --git a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/events/EntityListeners.java b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/listeners/EntityListeners.java similarity index 93% rename from EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/events/EntityListeners.java rename to EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/listeners/EntityListeners.java index 2d8fdbe..32e97e8 100644 --- a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/events/EntityListeners.java +++ b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/listeners/EntityListeners.java @@ -1,4 +1,4 @@ -package com.songoda.epicfarming.events; +package com.songoda.epicfarming.listeners; import com.songoda.epicfarming.utils.Debugger; import org.bukkit.event.EventHandler; diff --git a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/events/InteractListeners.java b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/listeners/InteractListeners.java similarity index 97% rename from EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/events/InteractListeners.java rename to EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/listeners/InteractListeners.java index b554224..bfbd231 100644 --- a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/events/InteractListeners.java +++ b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/listeners/InteractListeners.java @@ -1,4 +1,4 @@ -package com.songoda.epicfarming.events; +package com.songoda.epicfarming.listeners; import com.songoda.epicfarming.EpicFarmingPlugin; import com.songoda.epicfarming.farming.EFarm; diff --git a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/events/InventoryListeners.java b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/listeners/InventoryListeners.java similarity index 98% rename from EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/events/InventoryListeners.java rename to EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/listeners/InventoryListeners.java index 673079a..a063ef7 100644 --- a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/events/InventoryListeners.java +++ b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/listeners/InventoryListeners.java @@ -1,4 +1,4 @@ -package com.songoda.epicfarming.events; +package com.songoda.epicfarming.listeners; import com.songoda.epicfarming.EpicFarmingPlugin; import com.songoda.epicfarming.api.farming.UpgradeType; diff --git a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/tasks/FarmTask.java b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/tasks/FarmTask.java new file mode 100644 index 0000000..72f0eb6 --- /dev/null +++ b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/tasks/FarmTask.java @@ -0,0 +1,124 @@ +package com.songoda.epicfarming.tasks; + +import com.songoda.epicfarming.EpicFarmingPlugin; +import com.songoda.epicfarming.api.EpicFarming; +import com.songoda.epicfarming.api.farming.Farm; +import com.songoda.epicfarming.farming.Crop; +import com.songoda.epicfarming.utils.CropType; +import com.songoda.epicfarming.utils.Debugger; +import org.bukkit.CropState; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockState; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.material.Crops; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.*; + +public class FarmTask extends BukkitRunnable { + + private static FarmTask instance; + private static EpicFarmingPlugin plugin; + + private static final Random random = new Random(); + + public static FarmTask startTask(EpicFarmingPlugin pl) { + if (instance == null) { + instance = new FarmTask(); + plugin = pl; + instance.runTaskTimer(plugin, 0, plugin.getConfig().getInt("Main.Growth Tick Speed")); + } + + return instance; + } + + @Override + public void run() { + for (Farm farm : plugin.getFarmManager().getFarms().values()) { + if (farm.getLocation() == null) continue; + for (Block block : getCrops(farm, true)) { + Crops crop = (Crops) block.getState().getData(); + + // Add to GrowthTask + plugin.getGrowthTask().addLiveCrop(block.getLocation(), new Crop(block.getLocation(), farm)); + + if (!farm.getLevel().isAutoHarvest() + || !crop.getState().equals(CropState.RIPE) + || !doDrop(farm, block.getType())) continue; + + if (farm.getLevel().isAutoReplant()) { + BlockState cropState = block.getState(); + Crops cropData = (Crops) cropState.getData(); + cropData.setState(CropState.VERY_SMALL); + cropState.setData(cropData); + cropState.update(); + continue; + } + block.setType(Material.AIR); + } + } + } + + private boolean doDrop(Farm farm, Material material) { + Random random = new Random(); + + CropType cropTypeData = CropType.getCropType(material); + + if (material == null || farm == null || cropTypeData == null) return false; + + + ItemStack stack = new ItemStack(cropTypeData.getYieldMaterial()); + ItemStack seedStack = new ItemStack(cropTypeData.getSeedMaterial(), random.nextInt(3) + 1); + + if (!canMove(farm.getInventory(), stack)) return false; + farm.getInventory().addItem(stack); + farm.getInventory().addItem(seedStack); + return true; + } + + public List getCrops(Farm farm, boolean add) { + List crops = new ArrayList<>(); + + Block block = farm.getLocation().getBlock(); + int radius = farm.getLevel().getRadius(); + int bx = block.getX(); + int by = block.getY(); + int bz = block.getZ(); + for (int fx = -radius; fx <= radius; fx++) { + for (int fy = -2; fy <= 1; fy++) { + for (int fz = -radius; fz <= radius; fz++) { + Block b2 = block.getWorld().getBlockAt(bx + fx, by + fy, bz + fz); + + if (!(b2.getState().getData() instanceof Crops)) continue; + + if (add) { + crops.add(b2); + continue; + } + plugin.getGrowthTask().removeCropByLocation(b2.getLocation()); + + } + } + } + return crops; + } + + private boolean canMove(Inventory inventory, ItemStack item) { + try { + if (inventory.firstEmpty() != -1) return true; + + for (ItemStack stack : inventory.getContents()) { + if (stack.isSimilar(item) && stack.getAmount() < stack.getMaxStackSize()) { + return true; + } + } + } catch (Exception e) { + Debugger.runReport(e); + } + return false; + } + +} \ No newline at end of file diff --git a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/handlers/GrowthHandler.java b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/tasks/GrowthTask.java similarity index 61% rename from EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/handlers/GrowthHandler.java rename to EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/tasks/GrowthTask.java index 2663f88..2850ac6 100644 --- a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/handlers/GrowthHandler.java +++ b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/tasks/GrowthTask.java @@ -1,34 +1,43 @@ -package com.songoda.epicfarming.handlers; +package com.songoda.epicfarming.tasks; import com.songoda.epicfarming.EpicFarmingPlugin; import com.songoda.epicfarming.farming.Crop; -import org.bukkit.Bukkit; import org.bukkit.CropState; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.BlockState; import org.bukkit.material.Crops; +import org.bukkit.scheduler.BukkitRunnable; -import java.util.HashMap; -import java.util.Map; -import java.util.Random; +import java.util.*; -public class GrowthHandler { +public class GrowthTask extends BukkitRunnable { - public GrowthHandler(EpicFarmingPlugin instance) { - Bukkit.getScheduler().scheduleSyncRepeatingTask(EpicFarmingPlugin.getInstance(), this::growthRunner, 0, instance.getConfig().getInt("Main.Growth Tick Speed")); - Bukkit.getScheduler().scheduleSyncRepeatingTask(EpicFarmingPlugin.getInstance(), this::clear, 0, instance.getConfig().getInt("Main.Clear Tick Speed")); - } + private static GrowthTask instance; - Map liveCrops = new HashMap<>(); + private Map liveCrops = new HashMap<>(); private static final Random random = new Random(); - private void growthRunner() { + public static GrowthTask startTask(EpicFarmingPlugin plugin) { + if (instance == null) { + instance = new GrowthTask(); + instance.runTaskTimer(plugin, 0, plugin.getConfig().getInt("Main.Growth Tick Speed")); + } + + return instance; + } + + @Override + public void run() { + List toRemove = new ArrayList<>(); for (Crop crop : liveCrops.values()) { - if (!(crop.getLocation().getBlock().getState().getData() instanceof Crops)) continue; + if (!(crop.getLocation().getBlock().getState().getData() instanceof Crops)) { + toRemove.add(crop); + continue; + } //ToDO: This should be in config. int cap = (int)Math.ceil(60 / crop.getFarm().getLevel().getSpeedMultiplier()) - crop.getTicksLived(); @@ -47,10 +56,10 @@ public class GrowthHandler { switch(cropData.getState()) { case SEEDED: - if (material == Material.BEETROOT) - cropData.setState(CropState.VERY_SMALL); - else - cropData.setState(CropState.GERMINATED); + if (material == Material.BEETROOT) + cropData.setState(CropState.VERY_SMALL); + else + cropData.setState(CropState.GERMINATED); break; case GERMINATED: cropData.setState(CropState.VERY_SMALL); @@ -78,9 +87,17 @@ public class GrowthHandler { crop.setTicksLived(1); } + for (Crop crop : toRemove) + liveCrops.remove(crop); } - private void clear() { - liveCrops.clear(); + public void addLiveCrop(Location location, Crop crop) { + if (!liveCrops.containsKey(location)) + liveCrops.put(location, crop); } -} + + public void removeCropByLocation(Location location) { + liveCrops.remove(location); + } + +} \ No newline at end of file diff --git a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/tasks/HopperTask.java b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/tasks/HopperTask.java new file mode 100644 index 0000000..12c016a --- /dev/null +++ b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/tasks/HopperTask.java @@ -0,0 +1,88 @@ +package com.songoda.epicfarming.tasks; + +import com.songoda.epicfarming.EpicFarmingPlugin; +import com.songoda.epicfarming.api.farming.Farm; +import com.songoda.epicfarming.api.farming.FarmManager; +import com.songoda.epicfarming.farming.Crop; +import org.bukkit.CropState; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.BlockState; +import org.bukkit.block.Hopper; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.material.Crops; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.*; + +public class HopperTask extends BukkitRunnable { + + private static HopperTask instance; + private final FarmManager manager; + + private HopperTask(EpicFarmingPlugin plugin) { + this.manager = plugin.getFarmManager(); + } + + + public static HopperTask startTask(EpicFarmingPlugin plugin) { + if (instance == null) { + instance = new HopperTask(plugin); + instance.runTaskTimer(plugin, 0, 8); + } + + return instance; + } + + @Override + public void run() { + for (Farm farm : manager.getFarms().values()) { + if (farm.getLocation() == null || farm.getLocation().getBlock() == null) { + manager.removeFarm(farm.getLocation()); + continue; + } + Block block = farm.getLocation().getBlock(); + + if (block.getRelative(BlockFace.DOWN).getType() != Material.HOPPER) + return; + + Inventory inventory = farm.getInventory(); + Inventory hopperInventory = ((Hopper) block.getRelative(BlockFace.DOWN).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); + + ItemStack toMove = item.clone(); + toMove.setAmount(amtToMove); + + int newAmt = item.getAmount() - amtToMove; + + if (canHop(hopperInventory, toMove)) { + if (newAmt <= 0) + inventory.setItem(i, null); + else + item.setAmount(newAmt); + hopperInventory.addItem(toMove); + } + break; + } + } + } + + private boolean canHop(Inventory i, ItemStack item) { + if (i.firstEmpty() != -1) return true; + for (ItemStack it : i.getContents()) { + if (it == null || it.isSimilar(item) && (it.getAmount() + item.getAmount()) <= it.getMaxStackSize()) { + return true; + } + } + return false; + } +} \ No newline at end of file diff --git a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/utils/Debugger.java b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/utils/Debugger.java index 6611cd7..bfb187d 100644 --- a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/utils/Debugger.java +++ b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/utils/Debugger.java @@ -24,7 +24,7 @@ public class Debugger { } public static boolean isDebug() { - EpicFarmingPlugin plugin = EpicFarmingPlugin.pl(); + EpicFarmingPlugin plugin = EpicFarmingPlugin.getInstance(); return plugin.getConfig().getBoolean("System.Debugger Enabled"); } diff --git a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/utils/Methods.java b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/utils/Methods.java index 3cf8d7c..504fd62 100644 --- a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/utils/Methods.java +++ b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/utils/Methods.java @@ -2,17 +2,13 @@ package com.songoda.epicfarming.utils; import com.songoda.arconix.plugin.Arconix; import com.songoda.epicfarming.EpicFarmingPlugin; -import com.songoda.epicfarming.farming.ELevel; -import org.apache.commons.lang.math.NumberUtils; -import org.bukkit.Material; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; public class Methods { public static ItemStack getGlass() { try { - EpicFarmingPlugin plugin = EpicFarmingPlugin.pl(); + EpicFarmingPlugin plugin = EpicFarmingPlugin.getInstance(); return Arconix.pl().getApi().getGUI().getGlass(plugin.getConfig().getBoolean("settings.Rainbow-Glass"), plugin.getConfig().getInt("Interfaces.Glass Type 1")); } catch (Exception ex) { Debugger.runReport(ex); @@ -22,7 +18,7 @@ public class Methods { public static ItemStack getBackgroundGlass(boolean type) { try { - EpicFarmingPlugin plugin = EpicFarmingPlugin.pl(); + EpicFarmingPlugin plugin = EpicFarmingPlugin.getInstance(); if (type) return Arconix.pl().getApi().getGUI().getGlass(false, plugin.getConfig().getInt("Interfaces.Glass Type 2")); else diff --git a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/utils/SettingsManager.java b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/utils/SettingsManager.java index 4e87eb9..11022ca 100644 --- a/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/utils/SettingsManager.java +++ b/EpicFarming-Plugin/src/main/java/com/songoda/epicfarming/utils/SettingsManager.java @@ -195,17 +195,16 @@ public class SettingsManager implements Listener { o4("Main.Sounds Enabled", true), o5("Main.Farm Tick Speed", 70), o6("Main.Growth Tick Speed", 20), - o7("Main.Clear Tick Speed", 1800), - o8("Main.Farm Block Material", "END_ROD"), - o9("Main.Allow Non Command Issued Farm Items", false), + o7("Main.Farm Block Material", "END_ROD"), + o8("Main.Allow Non Command Issued Farm Items", false), - o10("Interfaces.Economy Icon", "SUNFLOWER"), - o11("Interfaces.XP Icon", "EXPERIENCE_BOTTLE"), - o12("Interfaces.Glass Type 1", 7), - o13("Interfaces.Glass Type 2", 11), - o14("Interfaces.Glass Type 3", 3), + o9("Interfaces.Economy Icon", "SUNFLOWER"), + o10("Interfaces.XP Icon", "EXPERIENCE_BOTTLE"), + o11("Interfaces.Glass Type 1", 7), + o12("Interfaces.Glass Type 2", 11), + o13("Interfaces.Glass Type 3", 3), - o15("System.Debugger Enabled", false); + o14("System.Debugger Enabled", false); private String setting; private Object option;