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.
This commit is contained in:
Brianna O'Keefe 2018-09-17 17:06:27 -04:00
parent b320516696
commit 27ca9db717
19 changed files with 643 additions and 378 deletions

View File

@ -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<ProtectionPluginHook> 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<ProtectionPluginHook> 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;
}
}

View File

@ -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();
}

View File

@ -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<AbstractCommand> 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<AbstractCommand> getCommands() {
return Collections.unmodifiableList(commands);
}
}

View File

@ -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.";
}
}

View File

@ -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] <level>";
}
@Override
public String getDescription() {
return "Give a farm item to a player.";
}
}

View File

@ -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.";
}
}

View File

@ -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.";
}
}

View File

@ -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;
}
}

View File

@ -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<Block> getCrops(Farm farm, boolean add) {
List<Block> 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;
}
}

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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<Block> getCrops(Farm farm, boolean add) {
List<Block> 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;
}
}

View File

@ -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<Location, Crop> liveCrops = new HashMap<>();
private Map<Location, Crop> 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<Crop> 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);
}
}

View File

@ -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;
}
}

View File

@ -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");
}

View File

@ -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

View File

@ -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;