diff --git a/EpicHoppers-API/EpicHoppers-API.iml b/EpicHoppers-API/EpicHoppers-API.iml
new file mode 100644
index 0000000..d5d6bd7
--- /dev/null
+++ b/EpicHoppers-API/EpicHoppers-API.iml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ SPIGOT
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/EpicHoppers.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/EpicHoppers.java
new file mode 100644
index 0000000..97cb1bb
--- /dev/null
+++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/EpicHoppers.java
@@ -0,0 +1,31 @@
+package com.songoda.epichoppers.api;
+
+import com.songoda.epichoppers.api.hopper.HopperManager;
+import com.songoda.epichoppers.api.hopper.Level;
+import com.songoda.epichoppers.api.hopper.LevelManager;
+import org.bukkit.inventory.ItemStack;
+
+/**
+ * The main API class for the EpicHoppers plugin. This class will provide various
+ * methods to access important features of the plugin's API. For static method
+ * wrappers to all methods in this interface, see the {@link EpicHoppersAPI} class
+ */
+public interface EpicHoppers {
+
+ Level getLevelFromItem(ItemStack item);
+
+ /**
+ * Get an instance of the {@link LevelManager}
+ *
+ * @return the level manager
+ */
+ LevelManager getLevelManager();
+
+
+ /**
+ * Get an instance of the {@link HopperManager}
+ *
+ * @return the hopper manager
+ */
+ HopperManager getHopperManager();
+}
diff --git a/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/EpicHoppersAPI.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/EpicHoppersAPI.java
new file mode 100644
index 0000000..eefbdea
--- /dev/null
+++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/EpicHoppersAPI.java
@@ -0,0 +1,48 @@
+package com.songoda.epichoppers.api;
+
+
+import org.bukkit.ChatColor;
+
+/**
+ * The access point of the EpicHoppersAPI, a class acting as a bridge between API
+ * and plugin implementation. It is from here where developers should access the
+ * important and core methods in the API. All static methods in this class will
+ * call directly upon the implementation at hand (in most cases this will be the
+ * EpicHoppers plugin itself), therefore a call to {@link #getImplementation()} is
+ * not required and redundant in most situations. Method calls from this class are
+ * preferred the majority of time, though an instance of {@link EpicHoppers} may
+ * be passed if absolutely necessary.
+ *
+ * @see EpicHoppers
+ * @since 3.0.0
+ */
+public class EpicHoppersAPI {
+
+ private static EpicHoppers implementation;
+
+ /**
+ * Set the EpicHoppers implementation. Once called for the first time, this
+ * method will throw an exception on any subsequent invocations. The implementation
+ * may only be set a single time, presumably by the EpicHoppers plugin
+ *
+ * @param implementation the implementation to set
+ */
+ public static void setImplementation(EpicHoppers implementation) {
+ if (EpicHoppersAPI.implementation != null) {
+ throw new IllegalArgumentException("Cannot set API implementation twice");
+ }
+
+ EpicHoppersAPI.implementation = implementation;
+ }
+
+ /**
+ * Get the EpicHoppers implementation. This method may be redundant in most
+ * situations as all methods present in {@link EpicHoppers} will be mirrored
+ * with static modifiers in the {@link EpicHoppersAPI} class
+ *
+ * @return the EpicHoppers implementation
+ */
+ public static EpicHoppers getImplementation() {
+ return implementation;
+ }
+}
diff --git a/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/hopper/Filter.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/hopper/Filter.java
new file mode 100644
index 0000000..7b78c9b
--- /dev/null
+++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/hopper/Filter.java
@@ -0,0 +1,24 @@
+package com.songoda.epichoppers.api.hopper;
+
+import org.bukkit.block.Block;
+import org.bukkit.inventory.ItemStack;
+
+import java.util.List;
+
+public interface Filter {
+ List getWhiteList();
+
+ void setWhiteList(List whiteList);
+
+ List getBlackList();
+
+ void setBlackList(List blackList);
+
+ List getVoidList();
+
+ void setVoidList(List voidList);
+
+ Block getEndPoint();
+
+ void setEndPoint(Block endPoint);
+}
diff --git a/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/hopper/Hopper.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/hopper/Hopper.java
new file mode 100644
index 0000000..2f0187f
--- /dev/null
+++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/hopper/Hopper.java
@@ -0,0 +1,33 @@
+package com.songoda.epichoppers.api.hopper;
+
+import org.bukkit.Location;
+import org.bukkit.block.Block;
+import org.bukkit.entity.Player;
+
+import java.util.UUID;
+
+public interface Hopper {
+ void sync(Block toSync, boolean filtered, Player player);
+
+ Location getLocation();
+
+ int getX();
+
+ int getY();
+
+ int getZ();
+
+ Level getLevel();
+
+ UUID getLastPlayer();
+
+ boolean isWalkOnTeleport();
+
+ void setWalkOnTeleport(boolean walkOnTeleport);
+
+ Block getSyncedBlock();
+
+ void setSyncedBlock(Block syncedBlock);
+
+ Filter getFilter();
+}
diff --git a/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/hopper/HopperManager.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/hopper/HopperManager.java
new file mode 100644
index 0000000..74b12d8
--- /dev/null
+++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/hopper/HopperManager.java
@@ -0,0 +1,21 @@
+package com.songoda.epichoppers.api.hopper;
+
+import org.bukkit.Location;
+import org.bukkit.block.Block;
+
+import java.util.Map;
+
+public interface HopperManager {
+
+ void addHopper(Location location, Hopper hopper);
+
+ Hopper removeHopper(Location location);
+
+ Hopper getHopper(Location location);
+
+ Hopper getHopper(Block block);
+
+ boolean isHopper(Location location);
+
+ Map getHoppers();
+}
diff --git a/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/hopper/Level.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/hopper/Level.java
new file mode 100644
index 0000000..7d62708
--- /dev/null
+++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/hopper/Level.java
@@ -0,0 +1,21 @@
+package com.songoda.epichoppers.api.hopper;
+
+import java.util.List;
+
+public interface Level {
+ List getDescription();
+
+ int getLevel();
+
+ int getRange();
+
+ int getAmount();
+
+ int getBlockBreak();
+
+ int getSuction();
+
+ int getCostExperience();
+
+ int getCostEconomy();
+}
diff --git a/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/hopper/LevelManager.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/hopper/LevelManager.java
new file mode 100644
index 0000000..23080cc
--- /dev/null
+++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/hopper/LevelManager.java
@@ -0,0 +1,15 @@
+package com.songoda.epichoppers.api.hopper;
+
+import java.util.Map;
+
+public interface LevelManager {
+ void addLevel(int level, int costExperiance, int costEconomy, int range, int amount, int suction, int blockBreak);
+
+ Level getLevel(int level);
+
+ Level getLowestLevel();
+
+ Level getHighestLevel();
+
+ Map getLevels();
+}
diff --git a/EpicHoppers-Plugin/EpicHoppers-Plugin.iml b/EpicHoppers-Plugin/EpicHoppers-Plugin.iml
new file mode 100644
index 0000000..a13e3e0
--- /dev/null
+++ b/EpicHoppers-Plugin/EpicHoppers-Plugin.iml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+ SPIGOT
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/songoda/epichoppers/EpicHoppers.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/EpicHoppersPlugin.java
similarity index 83%
rename from src/main/java/com/songoda/epichoppers/EpicHoppers.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/EpicHoppersPlugin.java
index 1904de2..079a762 100644
--- a/src/main/java/com/songoda/epichoppers/EpicHoppers.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/EpicHoppersPlugin.java
@@ -1,282 +1,291 @@
-package com.songoda.epichoppers;
-
-import com.songoda.arconix.api.mcupdate.MCUpdate;
-import com.songoda.arconix.api.utils.ConfigWrapper;
-import com.songoda.arconix.plugin.Arconix;
-import com.songoda.epichoppers.API.EpicHoppersAPI;
-import com.songoda.epichoppers.Events.*;
-import com.songoda.epichoppers.Handlers.*;
-import com.songoda.epichoppers.Hopper.Filter;
-import com.songoda.epichoppers.Hopper.Hopper;
-import com.songoda.epichoppers.Hopper.HopperManager;
-import com.songoda.epichoppers.Hopper.LevelManager;
-import com.songoda.epichoppers.Utils.SettingsManager;
-import org.bukkit.Bukkit;
-import org.bukkit.Location;
-import org.bukkit.block.Block;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-import org.bukkit.event.Listener;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.plugin.java.JavaPlugin;
-
-import java.util.*;
-
-
-public final class EpicHoppers extends JavaPlugin implements Listener {
- public static CommandSender console = Bukkit.getConsoleSender();
-
- public Map inShow = new HashMap<>();
- public Map inFilter = new HashMap<>();
-
- public HookHandler hooks;
- public SettingsManager sm;
-
- public References references = null;
- public ConfigWrapper dataFile = new ConfigWrapper(this, "", "data.yml");
-
- public Map sync = new HashMap<>();
- public Map bsync = new HashMap<>();
-
- public Map lastTp = new HashMap<>();
-
- public Map lastBlock = new HashMap<>();
-
- public EnchantmentHandler enchant;
-
- private Locale locale;
-
- private HopperManager hopperManager;
- private LevelManager levelManager;
-
- private TeleportHandler teleportHandler;
-
- private EpicHoppersAPI api;
-
- public void onEnable() {
- Arconix.pl().hook(this);
-
- console.sendMessage(Arconix.pl().getApi().format().formatText("&a============================="));
- console.sendMessage(Arconix.pl().getApi().format().formatText("&7EpicHoppers " + this.getDescription().getVersion() + " by &5Brianna <3&7!"));
- console.sendMessage(Arconix.pl().getApi().format().formatText("&7Action: &aEnabling&7..."));
- Bukkit.getPluginManager().registerEvents(this, this);
-
- api = new EpicHoppersAPI();
-
- sm = new SettingsManager(this);
- setupConfig();
- loadDataFile();
- enchant = new EnchantmentHandler();
-
- // Locales
- Locale.init(this);
- Locale.saveDefaultLocale("en_US");
- this.locale = Locale.getLocale(this.getConfig().getString("Locale", "en_US"));
-
- loadLevelManager();
-
- hopperManager = new HopperManager();
-
- /*
- * Register hoppers into HopperManger from configuration
- */
- Bukkit.getScheduler().runTaskLater(this, () -> {
- if (dataFile.getConfig().contains("data.sync")) {
- for (String locationStr : dataFile.getConfig().getConfigurationSection("data.sync").getKeys(false)) {
- Location location = Arconix.pl().getApi().serialize().unserializeLocation(locationStr);
- if (location == null || location.getBlock() == null) return;
-
- int level = dataFile.getConfig().getInt("data.sync." + locationStr + ".level");
-
- String blockLoc = dataFile.getConfig().getString("data.sync." + locationStr + ".block");
- Block block = blockLoc == null ? null : Arconix.pl().getApi().serialize().unserializeLocation(dataFile.getConfig().getString("data.sync." + locationStr + ".block")).getBlock();
-
- boolean walkOnTeleport = dataFile.getConfig().getBoolean("data.sync." + locationStr + ".walkOnTeleport");
-
- String playerStr = dataFile.getConfig().getString("data.sync." + locationStr + ".player");
- UUID player = playerStr == null ? null : UUID.fromString(playerStr);
-
- List whiteList = (ArrayList)dataFile.getConfig().getList("data.sync." + locationStr + ".whitelist");
- List blackList = (ArrayList)dataFile.getConfig().getList("data.sync." + locationStr + ".blacklist");
- List voidList = (ArrayList)dataFile.getConfig().getList("data.sync." + locationStr + ".void");
-
- String blackLoc = dataFile.getConfig().getString("data.sync." + locationStr + ".black");
- Block black = blackLoc == null ? null : Arconix.pl().getApi().serialize().unserializeLocation(dataFile.getConfig().getString("data.sync." + locationStr + ".black")).getBlock();
-
- Filter filter = new Filter();
-
- filter.setWhiteList(whiteList);
- filter.setBlackList(blackList);
- filter.setVoidList(voidList);
- filter.setEndPoint(black);
-
- Hopper hopper = new Hopper(location, levelManager.getLevel(level), player, block, filter, walkOnTeleport);
-
- hopperManager.addHopper(location, hopper);
- }
- }
-
- }, 10);
-
- references = new References();
-
- hooks = new HookHandler();
- hooks.hook();
-
- new HopHandler(this);
- teleportHandler = new TeleportHandler(this);
-
- new MCUpdate(this, true);
- //new MassiveStats(this, 9000);
-
- Bukkit.getScheduler().scheduleSyncRepeatingTask(this, this::saveToFile, 6000, 6000);
-
- this.getCommand("EpicHoppers").setExecutor(new CommandHandler(this));
-
- getServer().getPluginManager().registerEvents(new HopperListeners(this), this);
- getServer().getPluginManager().registerEvents(new BlockListeners(this), this);
- getServer().getPluginManager().registerEvents(new InteractListeners(this), this);
- getServer().getPluginManager().registerEvents(new InventoryListeners(this), this);
- getServer().getPluginManager().registerEvents(new LoginListeners(this), this);
-
-
- console.sendMessage(Arconix.pl().getApi().format().formatText("&a============================="));
- }
-
- public void onDisable() {
- saveToFile();
- console.sendMessage(Arconix.pl().getApi().format().formatText("&a============================="));
- console.sendMessage(Arconix.pl().getApi().format().formatText("&7EpicHoppers " + this.getDescription().getVersion() + " by &5Brianna <3!"));
- console.sendMessage(Arconix.pl().getApi().format().formatText("&7Action: &cDisabling&7..."));
- console.sendMessage(Arconix.pl().getApi().format().formatText("&a============================="));
- dataFile.saveConfig();
- }
-
- /*
- * Saves registered hopper to file.
- */
- private void saveToFile() {
-
- // Wipe old hopper information
- dataFile.getConfig().set("data.sync", null);
-
- /*
- * Dump HopperManager to file.
- */
- for (Hopper hopper : hopperManager.getHoppers().values()) {
- if (hopper.getLevel() == null || hopper.getLocation() == null || hopper.getLocation().getChunk() == null) continue;
- String locationStr = Arconix.pl().getApi().serialize().serializeLocation(hopper.getLocation());
- dataFile.getConfig().set("data.sync." + locationStr + ".level", hopper.getLevel().getLevel());
- dataFile.getConfig().set("data.sync." + locationStr + ".block", hopper.getSyncedBlock() == null ? null : Arconix.pl().getApi().serialize().serializeLocation(hopper.getSyncedBlock().getLocation()));
- dataFile.getConfig().set("data.sync." + locationStr + ".player", hopper.getLastPlayer() == null ? null : hopper.getLastPlayer().toString());
- dataFile.getConfig().set("data.sync." + locationStr + ".walkOnTeleport", hopper.isWalkOnTeleport());
- dataFile.getConfig().set("data.sync." + locationStr + ".whitelist", hopper.getFilter().getWhiteList());
- dataFile.getConfig().set("data.sync." + locationStr + ".blacklist", hopper.getFilter().getBlackList());
- dataFile.getConfig().set("data.sync." + locationStr + ".void", hopper.getFilter().getVoidList());
- dataFile.getConfig().set("data.sync." + locationStr + ".black", hopper.getFilter().getEndPoint() == null ? null : Arconix.pl().getApi().serialize().serializeLocation(hopper.getFilter().getEndPoint().getLocation()));
- }
-
- //Save to file
- dataFile.saveConfig();
- }
-
- private void loadLevelManager() {
- // Load an instance of LevelManager
- levelManager = new LevelManager();
- /*
- * Register Levels into LevelManager from configuration.
- */
- levelManager.clear();
- for (String levelName : getConfig().getConfigurationSection("settings.levels").getKeys(false)) {
- int level = Integer.valueOf(levelName.split("-")[1]);
- int radius = getConfig().getInt("settings.levels." + levelName + ".Range");
- int amount = getConfig().getInt("settings.levels." + levelName + ".Amount");
- int suction = getConfig().getInt("settings.levels." + levelName + ".Suction");
- int blockBreak = getConfig().getInt("settings.levels." + levelName + ".BlockBreak");
- int costExperiance = getConfig().getInt("settings.levels." + levelName + ".Cost-xp");
- int costEconomy = getConfig().getInt("settings.levels." + levelName + ".Cost-eco");
- levelManager.addLevel(level, costExperiance, costEconomy, radius, amount, suction, blockBreak);
- }
- }
-
- private void setupConfig() {
- sm.updateSettings();
-
- if (!getConfig().contains("settings.levels.Level-1")) {
- getConfig().addDefault("settings.levels.Level-1.Range", 10);
- getConfig().addDefault("settings.levels.Level-1.Amount", 1);
- getConfig().addDefault("settings.levels.Level-1.Cost-xp", 20);
- getConfig().addDefault("settings.levels.Level-1.Cost-eco", 5000);
-
- getConfig().addDefault("settings.levels.Level-2.Range", 20);
- getConfig().addDefault("settings.levels.Level-2.Amount", 2);
- getConfig().addDefault("settings.levels.Level-2.Cost-xp", 25);
- getConfig().addDefault("settings.levels.Level-2.Cost-eco", 7500);
-
- getConfig().addDefault("settings.levels.Level-3.Range", 30);
- getConfig().addDefault("settings.levels.Level-3.Amount", 3);
- getConfig().addDefault("settings.levels.Level-3.Suction", 1);
- getConfig().addDefault("settings.levels.Level-3.Cost-xp", 30);
- getConfig().addDefault("settings.levels.Level-3.Cost-eco", 10000);
-
- getConfig().addDefault("settings.levels.Level-4.Range", 40);
- getConfig().addDefault("settings.levels.Level-4.Amount", 4);
- getConfig().addDefault("settings.levels.Level-4.Suction", 2);
-
- getConfig().addDefault("settings.levels.Level-4.BlockBreak", 4);
- getConfig().addDefault("settings.levels.Level-4.Cost-xp", 35);
- getConfig().addDefault("settings.levels.Level-4.Cost-eco", 12000);
-
- getConfig().addDefault("settings.levels.Level-5.Range", 50);
- getConfig().addDefault("settings.levels.Level-5.Amount", 5);
- getConfig().addDefault("settings.levels.Level-5.Suction", 3);
-
- getConfig().addDefault("settings.levels.Level-5.BlockBreak", 2);
- getConfig().addDefault("settings.levels.Level-5.Cost-xp", 40);
- getConfig().addDefault("settings.levels.Level-5.Cost-eco", 15000);
- }
-
- getConfig().options().copyDefaults(true);
- saveConfig();
- }
-
- private void loadDataFile() {
- dataFile.getConfig().options().copyDefaults(true);
- dataFile.saveConfig();
- }
-
- public void reload() {
- locale.reloadMessages();
- hooks.hooksFile.createNewFile("Loading hooks File", "EpicSpawners Spawners File");
- hooks = new HookHandler();
- hooks.hook();
- references = new References();
- reloadConfig();
- saveConfig();
- loadLevelManager();
- }
-
- public Locale getLocale() {
- return locale;
- }
-
- public TeleportHandler getTeleportHandler() {
- return teleportHandler;
- }
-
- public LevelManager getLevelManager() {
- return levelManager;
- }
-
- public HopperManager getHopperManager() {
- return hopperManager;
- }
-
- public static EpicHoppers getInstance() {
- return (EpicHoppers) Bukkit.getServer().getPluginManager().getPlugin("EpicHoppers");
- }
-
- public EpicHoppersAPI getApi() {
- return api;
- }
-}
+package com.songoda.epichoppers;
+
+import com.songoda.arconix.api.mcupdate.MCUpdate;
+import com.songoda.arconix.api.utils.ConfigWrapper;
+import com.songoda.arconix.plugin.Arconix;
+import com.songoda.epichoppers.api.EpicHoppers;
+import com.songoda.epichoppers.api.EpicHoppersAPI;
+import com.songoda.epichoppers.api.hopper.Hopper;
+import com.songoda.epichoppers.api.hopper.HopperManager;
+import com.songoda.epichoppers.api.hopper.Level;
+import com.songoda.epichoppers.api.hopper.LevelManager;
+import com.songoda.epichoppers.events.*;
+import com.songoda.epichoppers.handlers.*;
+import com.songoda.epichoppers.hopper.EFilter;
+import com.songoda.epichoppers.hopper.EHopper;
+import com.songoda.epichoppers.hopper.EHopperManager;
+import com.songoda.epichoppers.hopper.ELevelManager;
+import com.songoda.epichoppers.player.PlayerDataManager;
+import com.songoda.epichoppers.utils.SettingsManager;
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.block.Block;
+import org.bukkit.command.CommandSender;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.plugin.java.JavaPlugin;
+
+import java.util.*;
+
+
+public class EpicHoppersPlugin extends JavaPlugin implements EpicHoppers {
+ public static CommandSender console = Bukkit.getConsoleSender();
+
+ private static EpicHoppersPlugin INSTANCE;
+
+ public HookHandler hooks;
+ public SettingsManager settingsManager;
+
+ public References references = null;
+ public ConfigWrapper dataFile = new ConfigWrapper(this, "", "data.yml");
+
+ public EnchantmentHandler enchantmentHandler;
+
+ private Locale locale;
+
+ private HopperManager hopperManager;
+ private LevelManager levelManager;
+ private PlayerDataManager playerDataManager;
+
+ private TeleportHandler teleportHandler;
+
+ public void onEnable() {
+ INSTANCE = this;
+ EpicHoppersAPI.setImplementation(this);
+
+ Arconix.pl().hook(this);
+
+ console.sendMessage(Arconix.pl().getApi().format().formatText("&a============================="));
+ console.sendMessage(Arconix.pl().getApi().format().formatText("&7EpicHoppers " + this.getDescription().getVersion() + " by &5Brianna <3&7!"));
+ console.sendMessage(Arconix.pl().getApi().format().formatText("&7Action: &aEnabling&7..."));
+
+ settingsManager = new SettingsManager(this);
+ setupConfig();
+ loadDataFile();
+ enchantmentHandler = new EnchantmentHandler();
+ playerDataManager = new PlayerDataManager();
+
+ // Locales
+ Locale.init(this);
+ Locale.saveDefaultLocale("en_US");
+ this.locale = Locale.getLocale(this.getConfig().getString("Locale", "en_US"));
+
+ loadLevelManager();
+
+ hopperManager = new EHopperManager();
+
+ /*
+ * Register hoppers into HopperManger from configuration
+ */
+ Bukkit.getScheduler().runTaskLater(this, () -> {
+ if (dataFile.getConfig().contains("data.sync")) {
+ for (String locationStr : dataFile.getConfig().getConfigurationSection("data.sync").getKeys(false)) {
+ Location location = Arconix.pl().getApi().serialize().unserializeLocation(locationStr);
+ if (location == null || location.getBlock() == null) return;
+
+ int level = dataFile.getConfig().getInt("data.sync." + locationStr + ".level");
+
+ String blockLoc = dataFile.getConfig().getString("data.sync." + locationStr + ".block");
+ Block block = blockLoc == null ? null : Arconix.pl().getApi().serialize().unserializeLocation(dataFile.getConfig().getString("data.sync." + locationStr + ".block")).getBlock();
+
+ boolean walkOnTeleport = dataFile.getConfig().getBoolean("data.sync." + locationStr + ".walkOnTeleport");
+
+ String playerStr = dataFile.getConfig().getString("data.sync." + locationStr + ".player");
+ UUID player = playerStr == null ? null : UUID.fromString(playerStr);
+
+ List whiteList = (ArrayList)dataFile.getConfig().getList("data.sync." + locationStr + ".whitelist");
+ List blackList = (ArrayList)dataFile.getConfig().getList("data.sync." + locationStr + ".blacklist");
+ List voidList = (ArrayList)dataFile.getConfig().getList("data.sync." + locationStr + ".void");
+
+ String blackLoc = dataFile.getConfig().getString("data.sync." + locationStr + ".black");
+ Block black = blackLoc == null ? null : Arconix.pl().getApi().serialize().unserializeLocation(dataFile.getConfig().getString("data.sync." + locationStr + ".black")).getBlock();
+
+ EFilter filter = new EFilter();
+
+ filter.setWhiteList(whiteList);
+ filter.setBlackList(blackList);
+ filter.setVoidList(voidList);
+ filter.setEndPoint(black);
+
+ EHopper hopper = new EHopper(location, levelManager.getLevel(level), player, block, filter, walkOnTeleport);
+
+ hopperManager.addHopper(location, hopper);
+ }
+ }
+
+ }, 10);
+
+ references = new References();
+
+ hooks = new HookHandler();
+ hooks.hook();
+
+ new HopHandler(this);
+ teleportHandler = new TeleportHandler(this);
+
+ new MCUpdate(this, true);
+ //new MassiveStats(this, 9000);
+
+ Bukkit.getScheduler().scheduleSyncRepeatingTask(this, this::saveToFile, 6000, 6000);
+
+ this.getCommand("EpicHoppers").setExecutor(new CommandHandler(this));
+
+ getServer().getPluginManager().registerEvents(new HopperListeners(this), this);
+ getServer().getPluginManager().registerEvents(new BlockListeners(this), this);
+ getServer().getPluginManager().registerEvents(new InteractListeners(this), this);
+ getServer().getPluginManager().registerEvents(new InventoryListeners(this), this);
+ getServer().getPluginManager().registerEvents(new LoginListeners(this), this);
+
+
+ console.sendMessage(Arconix.pl().getApi().format().formatText("&a============================="));
+ }
+
+ public void onDisable() {
+ saveToFile();
+ console.sendMessage(Arconix.pl().getApi().format().formatText("&a============================="));
+ console.sendMessage(Arconix.pl().getApi().format().formatText("&7EpicHoppers " + this.getDescription().getVersion() + " by &5Brianna <3!"));
+ console.sendMessage(Arconix.pl().getApi().format().formatText("&7Action: &cDisabling&7..."));
+ console.sendMessage(Arconix.pl().getApi().format().formatText("&a============================="));
+ dataFile.saveConfig();
+ }
+
+ /*
+ * Saves registered hopper to file.
+ */
+ private void saveToFile() {
+
+ // Wipe old hopper information
+ dataFile.getConfig().set("data.sync", null);
+
+ /*
+ * Dump HopperManager to file.
+ */
+ for (Hopper hopper : hopperManager.getHoppers().values()) {
+ if (hopper.getLevel() == null || hopper.getLocation() == null || hopper.getLocation().getChunk() == null) continue;
+ String locationStr = Arconix.pl().getApi().serialize().serializeLocation(hopper.getLocation());
+ dataFile.getConfig().set("data.sync." + locationStr + ".level", hopper.getLevel().getLevel());
+ dataFile.getConfig().set("data.sync." + locationStr + ".block", hopper.getSyncedBlock() == null ? null : Arconix.pl().getApi().serialize().serializeLocation(hopper.getSyncedBlock().getLocation()));
+ dataFile.getConfig().set("data.sync." + locationStr + ".player", hopper.getLastPlayer() == null ? null : hopper.getLastPlayer().toString());
+ dataFile.getConfig().set("data.sync." + locationStr + ".walkOnTeleport", hopper.isWalkOnTeleport());
+ dataFile.getConfig().set("data.sync." + locationStr + ".whitelist", hopper.getFilter().getWhiteList());
+ dataFile.getConfig().set("data.sync." + locationStr + ".blacklist", hopper.getFilter().getBlackList());
+ dataFile.getConfig().set("data.sync." + locationStr + ".void", hopper.getFilter().getVoidList());
+ dataFile.getConfig().set("data.sync." + locationStr + ".black", hopper.getFilter().getEndPoint() == null ? null : Arconix.pl().getApi().serialize().serializeLocation(hopper.getFilter().getEndPoint().getLocation()));
+ }
+
+ //Save to file
+ dataFile.saveConfig();
+ }
+
+ private void loadLevelManager() {
+ // Load an instance of LevelManager
+ levelManager = new ELevelManager();
+ /*
+ * Register Levels into LevelManager from configuration.
+ */
+ ((ELevelManager)levelManager).clear();
+ for (String levelName : getConfig().getConfigurationSection("settings.levels").getKeys(false)) {
+ int level = Integer.valueOf(levelName.split("-")[1]);
+ int radius = getConfig().getInt("settings.levels." + levelName + ".Range");
+ int amount = getConfig().getInt("settings.levels." + levelName + ".Amount");
+ int suction = getConfig().getInt("settings.levels." + levelName + ".Suction");
+ int blockBreak = getConfig().getInt("settings.levels." + levelName + ".BlockBreak");
+ int costExperiance = getConfig().getInt("settings.levels." + levelName + ".Cost-xp");
+ int costEconomy = getConfig().getInt("settings.levels." + levelName + ".Cost-eco");
+ levelManager.addLevel(level, costExperiance, costEconomy, radius, amount, suction, blockBreak);
+ }
+ }
+
+ private void setupConfig() {
+ settingsManager.updateSettings();
+
+ if (!getConfig().contains("settings.levels.Level-1")) {
+ getConfig().addDefault("settings.levels.Level-1.Range", 10);
+ getConfig().addDefault("settings.levels.Level-1.Amount", 1);
+ getConfig().addDefault("settings.levels.Level-1.Cost-xp", 20);
+ getConfig().addDefault("settings.levels.Level-1.Cost-eco", 5000);
+
+ getConfig().addDefault("settings.levels.Level-2.Range", 20);
+ getConfig().addDefault("settings.levels.Level-2.Amount", 2);
+ getConfig().addDefault("settings.levels.Level-2.Cost-xp", 25);
+ getConfig().addDefault("settings.levels.Level-2.Cost-eco", 7500);
+
+ getConfig().addDefault("settings.levels.Level-3.Range", 30);
+ getConfig().addDefault("settings.levels.Level-3.Amount", 3);
+ getConfig().addDefault("settings.levels.Level-3.Suction", 1);
+ getConfig().addDefault("settings.levels.Level-3.Cost-xp", 30);
+ getConfig().addDefault("settings.levels.Level-3.Cost-eco", 10000);
+
+ getConfig().addDefault("settings.levels.Level-4.Range", 40);
+ getConfig().addDefault("settings.levels.Level-4.Amount", 4);
+ getConfig().addDefault("settings.levels.Level-4.Suction", 2);
+
+ getConfig().addDefault("settings.levels.Level-4.BlockBreak", 4);
+ getConfig().addDefault("settings.levels.Level-4.Cost-xp", 35);
+ getConfig().addDefault("settings.levels.Level-4.Cost-eco", 12000);
+
+ getConfig().addDefault("settings.levels.Level-5.Range", 50);
+ getConfig().addDefault("settings.levels.Level-5.Amount", 5);
+ getConfig().addDefault("settings.levels.Level-5.Suction", 3);
+
+ getConfig().addDefault("settings.levels.Level-5.BlockBreak", 2);
+ getConfig().addDefault("settings.levels.Level-5.Cost-xp", 40);
+ getConfig().addDefault("settings.levels.Level-5.Cost-eco", 15000);
+ }
+
+ getConfig().options().copyDefaults(true);
+ saveConfig();
+ }
+
+ private void loadDataFile() {
+ dataFile.getConfig().options().copyDefaults(true);
+ dataFile.saveConfig();
+ }
+
+ public void reload() {
+ locale.reloadMessages();
+ hooks.hooksFile.createNewFile("Loading hooks File", "EpicSpawners Spawners File");
+ hooks = new HookHandler();
+ hooks.hook();
+ references = new References();
+ reloadConfig();
+ saveConfig();
+ loadLevelManager();
+ }
+
+
+ @Override
+ public Level getLevelFromItem(ItemStack item) {
+ if (item.getItemMeta().getDisplayName().contains(":")) {
+ String arr[] = item.getItemMeta().getDisplayName().replace("§", "").split(":");
+ return getLevelManager().getLevel(Integer.parseInt(arr[0]));
+ } else {
+ return getLevelManager().getLowestLevel();
+ }
+ }
+
+ public Locale getLocale() {
+ return locale;
+ }
+
+ public TeleportHandler getTeleportHandler() {
+ return teleportHandler;
+ }
+
+ @Override
+ public LevelManager getLevelManager() {
+ return levelManager;
+ }
+
+ @Override
+ public HopperManager getHopperManager() {
+ return hopperManager;
+ }
+
+ public PlayerDataManager getPlayerDataManager() {
+ return playerDataManager;
+ }
+
+ public static EpicHoppersPlugin getInstance() {
+ return INSTANCE;
+ }
+}
diff --git a/src/main/java/com/songoda/epichoppers/Locale.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/Locale.java
similarity index 97%
rename from src/main/java/com/songoda/epichoppers/Locale.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/Locale.java
index 0741e2d..3ba5feb 100644
--- a/src/main/java/com/songoda/epichoppers/Locale.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/Locale.java
@@ -1,365 +1,365 @@
-package com.songoda.epichoppers;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
-import org.apache.commons.io.IOUtils;
-import org.bukkit.ChatColor;
-import org.bukkit.plugin.java.JavaPlugin;
-
-import java.io.*;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
-/**
- * Assists in the creation of multiple localizations and languages,
- * as well as the generation of default .lang files
- *
- * @author Parker Hawke - 2008Choco
- */
-public class Locale {
-
- private static JavaPlugin plugin;
- private static final List LOCALES = Lists.newArrayList();
-
- private static final Pattern NODE_PATTERN = Pattern.compile("(\\w+(?:\\.\\w+)*)\\s*=\\s*\"(.*)\"");
- private static final String FILE_EXTENSION = ".lang";
- private static File localeFolder;
-
- private static String defaultLocale;
-
- private final Map nodes = new HashMap<>();
-
- private final File file;
- private final String name, region;
-
- private Locale(String name, String region) {
- if (plugin == null)
- throw new IllegalStateException("Cannot generate locales without first initializing the class (Locale#init(JavaPlugin))");
-
- this.name = name.toLowerCase();
- this.region = region.toUpperCase();
-
- String fileName = name + "_" + region + FILE_EXTENSION;
- this.file = new File(localeFolder, fileName);
-
- if (this.reloadMessages()) return;
-
- plugin.getLogger().info("Loaded locale " + fileName);
- }
-
- /**
- * Get the name of the language that this locale is based on.
- * (i.e. "en" for English, or "fr" for French)
- *
- * @return the name of the language
- */
- public String getName() {
- return name;
- }
-
- /**
- * Get the name of the region that this locale is from.
- * (i.e. "US" for United States or "CA" for Canada)
- *
- * @return the name of the region
- */
- public String getRegion() {
- return region;
- }
-
- /**
- * Return the entire locale tag (i.e. "en_US")
- *
- * @return the language tag
- */
- public String getLanguageTag() {
- return name + "_" + region;
- }
-
- /**
- * Get the file that represents this locale
- *
- * @return the locale file (.lang)
- */
- public File getFile() {
- return file;
- }
-
- /**
- * Get a message set for a specific node
- *
- * @param node the node to get
- * @return the message for the specified node
- */
- public String getMessage(String node) {
- return ChatColor.translateAlternateColorCodes('&', this.getMessageOrDefault(node, node));
- }
-
- /**
- * Get a message set for a specific node and replace its params with a supplied arguments.
- *
- * @param node the node to get
- * @param args the replacement arguments
- * @return the message for the specified node
- */
- public String getMessage(String node, Object... args) {
- String message = getMessage(node);
- for (Object arg : args) {
- message = message.replaceFirst("%.*?%", arg.toString());
- }
- return message;
- }
-
- /**
- * Get a message set for a specific node
- *
- * @param node the node to get
- * @param defaultValue the default value given that a value for the node was not found
- *
- * @return the message for the specified node. Default if none found
- */
- public String getMessageOrDefault(String node, String defaultValue) {
- return this.nodes.getOrDefault(node, defaultValue);
- }
-
- /**
- * Get the key-value map of nodes to messages
- *
- * @return node-message map
- */
- public Map getMessageNodeMap() {
- return ImmutableMap.copyOf(nodes);
- }
-
- /**
- * Clear the previous message cache and load new messages directly from file
- *
- * @return reload messages from file
- */
- public boolean reloadMessages() {
- if (!this.file.exists()) {
- plugin.getLogger().warning("Could not find file for locale " + this.name);
- return false;
- }
-
- this.nodes.clear(); // Clear previous data (if any)
-
- try(BufferedReader reader = new BufferedReader(new FileReader(file))) {
- String line;
- for (int lineNumber = 0; (line = reader.readLine()) != null; lineNumber++) {
- if (line.isEmpty() || line.startsWith("#") /* Comment */) continue;
-
- Matcher matcher = NODE_PATTERN.matcher(line);
- if (!matcher.find()) {
- System.err.println("Invalid locale syntax at (line=" + lineNumber + ")");
- continue;
- }
-
- nodes.put(matcher.group(1), matcher.group(2));
- }
- } catch (IOException e) {
- e.printStackTrace();
- return false;
- }
- return true;
- }
-
- /**
- * Initialize the locale class to generate information and search for localizations.
- * This must be called before any other methods in the Locale class can be invoked.
- * Note that this will also call {@link #searchForLocales()}, so there is no need to
- * invoke it for yourself after the initialization
- *
- * @param plugin the plugin instance
- */
- public static void init(JavaPlugin plugin) {
- Locale.plugin = plugin;
-
- if (localeFolder == null) {
- localeFolder = new File(plugin.getDataFolder(), "locales/");
- }
-
- localeFolder.mkdirs();
- Locale.searchForLocales();
- }
-
- /**
- * Find all .lang file locales under the "locales" folder
- */
- public static void searchForLocales() {
- if (!localeFolder.exists()) localeFolder.mkdirs();
-
- for (File file : localeFolder.listFiles()) {
- String name = file.getName();
- if (!name.endsWith(".lang")) continue;
-
- String fileName = name.substring(0, name.lastIndexOf('.'));
- String[] localeValues = fileName.split("_");
-
- if (localeValues.length != 2) continue;
- if (localeExists(localeValues[0] + "_" + localeValues[1])) continue;
-
- LOCALES.add(new Locale(localeValues[0], localeValues[1]));
- plugin.getLogger().info("Found and loaded locale \"" + fileName + "\"");
- }
- }
-
- /**
- * Get a locale by its entire proper name (i.e. "en_US")
- *
- * @param name the full name of the locale
- * @return locale of the specified name
- */
- public static Locale getLocale(String name) {
- for (Locale locale : LOCALES)
- if (locale.getLanguageTag().equalsIgnoreCase(name)) return locale;
- return null;
- }
-
- /**
- * Get a locale from the cache by its name (i.e. "en" from "en_US")
- *
- * @param name the name of the language
- * @return locale of the specified language. Null if not cached
- */
- public static Locale getLocaleByName(String name) {
- for (Locale locale : LOCALES)
- if (locale.getName().equalsIgnoreCase(name)) return locale;
- return null;
- }
-
- /**
- * Get a locale from the cache by its region (i.e. "US" from "en_US")
- *
- * @param region the name of the region
- * @return locale of the specified region. Null if not cached
- */
- public static Locale getLocaleByRegion(String region) {
- for (Locale locale : LOCALES)
- if (locale.getRegion().equalsIgnoreCase(region)) return locale;
- return null;
- }
-
- /**
- * Check whether a locale exists and is registered or not
- *
- * @param name the whole language tag (i.e. "en_US")
- * @return true if it exists
- */
- public static boolean localeExists(String name) {
- for (Locale locale : LOCALES)
- if (locale.getLanguageTag().equals(name)) return true;
- return false;
- }
-
- /**
- * Get an immutable list of all currently loaded locales
- *
- * @return list of all locales
- */
- public static List getLocales() {
- return ImmutableList.copyOf(LOCALES);
- }
-
- /**
- * Save a default locale file from the project source directory, to the locale folder
- *
- * @param path the path to the file to save
- * @param fileName the name of the file to save
- *
- * @return true if the operation was successful, false otherwise
- */
- public static boolean saveDefaultLocale(String path, String fileName) {
- if (!localeFolder.exists()) localeFolder.mkdirs();
-
- if (!fileName.endsWith(FILE_EXTENSION))
- fileName = (fileName.lastIndexOf(".") == -1 ? fileName : fileName.substring(0, fileName.lastIndexOf('.'))) + FILE_EXTENSION;
-
- File destinationFile = new File(localeFolder, fileName);
- if (destinationFile.exists()) {
- return compareFiles(plugin.getResource(fileName), destinationFile);
- }
-
- try (OutputStream outputStream = new FileOutputStream(destinationFile)) {
- IOUtils.copy(plugin.getResource(fileName), outputStream);
-
- fileName = fileName.substring(0, fileName.lastIndexOf('.'));
- String[] localeValues = fileName.split("_");
-
- if (localeValues.length != 2) return false;
-
- LOCALES.add(new Locale(localeValues[0], localeValues[1]));
- if (defaultLocale == null) defaultLocale = fileName;
-
- return true;
- } catch (IOException e) {
- return false;
- }
- }
-
- /**
- * Save a default locale file from the project source directory, to the locale folder
- *
- * @param fileName the name of the file to save
- * @return true if the operation was successful, false otherwise
- */
- public static boolean saveDefaultLocale(String fileName) {
- return saveDefaultLocale("", fileName);
- }
-
- /**
- * Clear all current locale data
- */
- public static void clearLocaleData() {
- for (Locale locale : LOCALES)
- locale.nodes.clear();
- LOCALES.clear();
- }
-
- // Write new changes to existing files, if any at all
- private static boolean compareFiles(InputStream defaultFile, File existingFile) {
- // Look for default
- if (defaultFile == null) {
- defaultFile = plugin.getResource(defaultLocale != null ? defaultLocale : "en_US");
- if (defaultFile == null) return false; // No default at all
- }
-
- boolean changed = false;
-
- List defaultLines, existingLines;
- try (BufferedReader defaultReader = new BufferedReader(new InputStreamReader(defaultFile));
- BufferedReader existingReader = new BufferedReader(new FileReader(existingFile));
- BufferedWriter writer = new BufferedWriter(new FileWriter(existingFile, true))) {
- defaultLines = defaultReader.lines().collect(Collectors.toList());
- existingLines = existingReader.lines().map(s -> s.split("\\s*=")[0]).collect(Collectors.toList());
-
- for (String defaultValue : defaultLines) {
- if (defaultValue.isEmpty() || defaultValue.startsWith("#")) continue;
-
- String key = defaultValue.split("\\s*=")[0];
-
- if (!existingLines.contains(key)) {
- if (!changed) {
- writer.newLine(); writer.newLine();
- writer.write("# New messages for " + plugin.getName() + " v" + plugin.getDescription().getVersion());
- }
-
- writer.newLine();
- writer.write(defaultValue);
-
- changed = true;
- }
- }
- } catch (IOException e) {
- return false;
- }
-
- return changed;
- }
-
+package com.songoda.epichoppers;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import org.apache.commons.io.IOUtils;
+import org.bukkit.ChatColor;
+import org.bukkit.plugin.java.JavaPlugin;
+
+import java.io.*;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+/**
+ * Assists in the creation of multiple localizations and languages,
+ * as well as the generation of default .lang files
+ *
+ * @author Parker Hawke - 2008Choco
+ */
+public class Locale {
+
+ private static JavaPlugin plugin;
+ private static final List LOCALES = Lists.newArrayList();
+
+ private static final Pattern NODE_PATTERN = Pattern.compile("(\\w+(?:\\.\\w+)*)\\s*=\\s*\"(.*)\"");
+ private static final String FILE_EXTENSION = ".lang";
+ private static File localeFolder;
+
+ private static String defaultLocale;
+
+ private final Map nodes = new HashMap<>();
+
+ private final File file;
+ private final String name, region;
+
+ private Locale(String name, String region) {
+ if (plugin == null)
+ throw new IllegalStateException("Cannot generate locales without first initializing the class (Locale#init(JavaPlugin))");
+
+ this.name = name.toLowerCase();
+ this.region = region.toUpperCase();
+
+ String fileName = name + "_" + region + FILE_EXTENSION;
+ this.file = new File(localeFolder, fileName);
+
+ if (this.reloadMessages()) return;
+
+ plugin.getLogger().info("Loaded locale " + fileName);
+ }
+
+ /**
+ * Get the name of the language that this locale is based on.
+ * (i.e. "en" for English, or "fr" for French)
+ *
+ * @return the name of the language
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * Get the name of the region that this locale is from.
+ * (i.e. "US" for United States or "CA" for Canada)
+ *
+ * @return the name of the region
+ */
+ public String getRegion() {
+ return region;
+ }
+
+ /**
+ * Return the entire locale tag (i.e. "en_US")
+ *
+ * @return the language tag
+ */
+ public String getLanguageTag() {
+ return name + "_" + region;
+ }
+
+ /**
+ * Get the file that represents this locale
+ *
+ * @return the locale file (.lang)
+ */
+ public File getFile() {
+ return file;
+ }
+
+ /**
+ * Get a message set for a specific node
+ *
+ * @param node the node to get
+ * @return the message for the specified node
+ */
+ public String getMessage(String node) {
+ return ChatColor.translateAlternateColorCodes('&', this.getMessageOrDefault(node, node));
+ }
+
+ /**
+ * Get a message set for a specific node and replace its params with a supplied arguments.
+ *
+ * @param node the node to get
+ * @param args the replacement arguments
+ * @return the message for the specified node
+ */
+ public String getMessage(String node, Object... args) {
+ String message = getMessage(node);
+ for (Object arg : args) {
+ message = message.replaceFirst("%.*?%", arg.toString());
+ }
+ return message;
+ }
+
+ /**
+ * Get a message set for a specific node
+ *
+ * @param node the node to get
+ * @param defaultValue the default value given that a value for the node was not found
+ *
+ * @return the message for the specified node. Default if none found
+ */
+ public String getMessageOrDefault(String node, String defaultValue) {
+ return this.nodes.getOrDefault(node, defaultValue);
+ }
+
+ /**
+ * Get the key-value map of nodes to messages
+ *
+ * @return node-message map
+ */
+ public Map getMessageNodeMap() {
+ return ImmutableMap.copyOf(nodes);
+ }
+
+ /**
+ * Clear the previous message cache and load new messages directly from file
+ *
+ * @return reload messages from file
+ */
+ public boolean reloadMessages() {
+ if (!this.file.exists()) {
+ plugin.getLogger().warning("Could not find file for locale " + this.name);
+ return false;
+ }
+
+ this.nodes.clear(); // Clear previous data (if any)
+
+ try(BufferedReader reader = new BufferedReader(new FileReader(file))) {
+ String line;
+ for (int lineNumber = 0; (line = reader.readLine()) != null; lineNumber++) {
+ if (line.isEmpty() || line.startsWith("#") /* Comment */) continue;
+
+ Matcher matcher = NODE_PATTERN.matcher(line);
+ if (!matcher.find()) {
+ System.err.println("Invalid locale syntax at (line=" + lineNumber + ")");
+ continue;
+ }
+
+ nodes.put(matcher.group(1), matcher.group(2));
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Initialize the locale class to generate information and search for localizations.
+ * This must be called before any other methods in the Locale class can be invoked.
+ * Note that this will also call {@link #searchForLocales()}, so there is no need to
+ * invoke it for yourself after the initialization
+ *
+ * @param plugin the plugin instance
+ */
+ public static void init(JavaPlugin plugin) {
+ Locale.plugin = plugin;
+
+ if (localeFolder == null) {
+ localeFolder = new File(plugin.getDataFolder(), "locales/");
+ }
+
+ localeFolder.mkdirs();
+ Locale.searchForLocales();
+ }
+
+ /**
+ * Find all .lang file locales under the "locales" folder
+ */
+ public static void searchForLocales() {
+ if (!localeFolder.exists()) localeFolder.mkdirs();
+
+ for (File file : localeFolder.listFiles()) {
+ String name = file.getName();
+ if (!name.endsWith(".lang")) continue;
+
+ String fileName = name.substring(0, name.lastIndexOf('.'));
+ String[] localeValues = fileName.split("_");
+
+ if (localeValues.length != 2) continue;
+ if (localeExists(localeValues[0] + "_" + localeValues[1])) continue;
+
+ LOCALES.add(new Locale(localeValues[0], localeValues[1]));
+ plugin.getLogger().info("Found and loaded locale \"" + fileName + "\"");
+ }
+ }
+
+ /**
+ * Get a locale by its entire proper name (i.e. "en_US")
+ *
+ * @param name the full name of the locale
+ * @return locale of the specified name
+ */
+ public static Locale getLocale(String name) {
+ for (Locale locale : LOCALES)
+ if (locale.getLanguageTag().equalsIgnoreCase(name)) return locale;
+ return null;
+ }
+
+ /**
+ * Get a locale from the cache by its name (i.e. "en" from "en_US")
+ *
+ * @param name the name of the language
+ * @return locale of the specified language. Null if not cached
+ */
+ public static Locale getLocaleByName(String name) {
+ for (Locale locale : LOCALES)
+ if (locale.getName().equalsIgnoreCase(name)) return locale;
+ return null;
+ }
+
+ /**
+ * Get a locale from the cache by its region (i.e. "US" from "en_US")
+ *
+ * @param region the name of the region
+ * @return locale of the specified region. Null if not cached
+ */
+ public static Locale getLocaleByRegion(String region) {
+ for (Locale locale : LOCALES)
+ if (locale.getRegion().equalsIgnoreCase(region)) return locale;
+ return null;
+ }
+
+ /**
+ * Check whether a locale exists and is registered or not
+ *
+ * @param name the whole language tag (i.e. "en_US")
+ * @return true if it exists
+ */
+ public static boolean localeExists(String name) {
+ for (Locale locale : LOCALES)
+ if (locale.getLanguageTag().equals(name)) return true;
+ return false;
+ }
+
+ /**
+ * Get an immutable list of all currently loaded locales
+ *
+ * @return list of all locales
+ */
+ public static List getLocales() {
+ return ImmutableList.copyOf(LOCALES);
+ }
+
+ /**
+ * Save a default locale file from the project source directory, to the locale folder
+ *
+ * @param path the path to the file to save
+ * @param fileName the name of the file to save
+ *
+ * @return true if the operation was successful, false otherwise
+ */
+ public static boolean saveDefaultLocale(String path, String fileName) {
+ if (!localeFolder.exists()) localeFolder.mkdirs();
+
+ if (!fileName.endsWith(FILE_EXTENSION))
+ fileName = (fileName.lastIndexOf(".") == -1 ? fileName : fileName.substring(0, fileName.lastIndexOf('.'))) + FILE_EXTENSION;
+
+ File destinationFile = new File(localeFolder, fileName);
+ if (destinationFile.exists()) {
+ return compareFiles(plugin.getResource(fileName), destinationFile);
+ }
+
+ try (OutputStream outputStream = new FileOutputStream(destinationFile)) {
+ IOUtils.copy(plugin.getResource(fileName), outputStream);
+
+ fileName = fileName.substring(0, fileName.lastIndexOf('.'));
+ String[] localeValues = fileName.split("_");
+
+ if (localeValues.length != 2) return false;
+
+ LOCALES.add(new Locale(localeValues[0], localeValues[1]));
+ if (defaultLocale == null) defaultLocale = fileName;
+
+ return true;
+ } catch (IOException e) {
+ return false;
+ }
+ }
+
+ /**
+ * Save a default locale file from the project source directory, to the locale folder
+ *
+ * @param fileName the name of the file to save
+ * @return true if the operation was successful, false otherwise
+ */
+ public static boolean saveDefaultLocale(String fileName) {
+ return saveDefaultLocale("", fileName);
+ }
+
+ /**
+ * Clear all current locale data
+ */
+ public static void clearLocaleData() {
+ for (Locale locale : LOCALES)
+ locale.nodes.clear();
+ LOCALES.clear();
+ }
+
+ // Write new changes to existing files, if any at all
+ private static boolean compareFiles(InputStream defaultFile, File existingFile) {
+ // Look for default
+ if (defaultFile == null) {
+ defaultFile = plugin.getResource(defaultLocale != null ? defaultLocale : "en_US");
+ if (defaultFile == null) return false; // No default at all
+ }
+
+ boolean changed = false;
+
+ List defaultLines, existingLines;
+ try (BufferedReader defaultReader = new BufferedReader(new InputStreamReader(defaultFile));
+ BufferedReader existingReader = new BufferedReader(new FileReader(existingFile));
+ BufferedWriter writer = new BufferedWriter(new FileWriter(existingFile, true))) {
+ defaultLines = defaultReader.lines().collect(Collectors.toList());
+ existingLines = existingReader.lines().map(s -> s.split("\\s*=")[0]).collect(Collectors.toList());
+
+ for (String defaultValue : defaultLines) {
+ if (defaultValue.isEmpty() || defaultValue.startsWith("#")) continue;
+
+ String key = defaultValue.split("\\s*=")[0];
+
+ if (!existingLines.contains(key)) {
+ if (!changed) {
+ writer.newLine(); writer.newLine();
+ writer.write("# New messages for " + plugin.getName() + " v" + plugin.getDescription().getVersion());
+ }
+
+ writer.newLine();
+ writer.write(defaultValue);
+
+ changed = true;
+ }
+ }
+ } catch (IOException e) {
+ return false;
+ }
+
+ return changed;
+ }
+
}
\ No newline at end of file
diff --git a/src/main/java/com/songoda/epichoppers/References.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/References.java
similarity index 62%
rename from src/main/java/com/songoda/epichoppers/References.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/References.java
index c98accd..21d1b94 100644
--- a/src/main/java/com/songoda/epichoppers/References.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/References.java
@@ -1,14 +1,14 @@
-package com.songoda.epichoppers;
-
-public class References {
-
- private String prefix;
-
- public References() {
- prefix = EpicHoppers.getInstance().getLocale().getMessage("general.nametag.prefix") + " ";
- }
-
- public String getPrefix() {
- return this.prefix;
- }
-}
+package com.songoda.epichoppers;
+
+public class References {
+
+ private String prefix;
+
+ public References() {
+ prefix = EpicHoppersPlugin.getInstance().getLocale().getMessage("general.nametag.prefix") + " ";
+ }
+
+ public String getPrefix() {
+ return this.prefix;
+ }
+}
diff --git a/src/main/java/com/songoda/epichoppers/Events/BlockListeners.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/events/BlockListeners.java
similarity index 61%
rename from src/main/java/com/songoda/epichoppers/Events/BlockListeners.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/events/BlockListeners.java
index a2f75c1..ada1a0f 100644
--- a/src/main/java/com/songoda/epichoppers/Events/BlockListeners.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/events/BlockListeners.java
@@ -1,171 +1,165 @@
-package com.songoda.epichoppers.Events;
-
-import com.songoda.arconix.plugin.Arconix;
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Hopper.Filter;
-import com.songoda.epichoppers.Hopper.Hopper;
-import com.songoda.epichoppers.Utils.Debugger;
-import com.songoda.epichoppers.Utils.Methods;
-import org.bukkit.Bukkit;
-import org.bukkit.Chunk;
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-import org.bukkit.enchantments.Enchantment;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.EntityType;
-import org.bukkit.entity.ExperienceOrb;
-import org.bukkit.entity.Item;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import org.bukkit.event.block.BlockBreakEvent;
-import org.bukkit.event.block.BlockPlaceEvent;
-import org.bukkit.inventory.InventoryHolder;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.ItemMeta;
-
-import java.util.Collection;
-
-/**
- * Created by songoda on 3/14/2017.
- */
-public class BlockListeners implements Listener {
-
- private EpicHoppers instance;
-
- public BlockListeners(EpicHoppers instance) {
- this.instance = instance;
- }
-
- @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
- public void onBlockPlace(BlockPlaceEvent e) {
- try {
- if (e.getBlock().getType().equals(Material.ENDER_CHEST)) {
- instance.dataFile.getConfig().set("data.enderTracker." + Arconix.pl().getApi().serialize().serializeLocation(e.getBlock()), e.getPlayer().getUniqueId().toString());
- return;
- }
-
- if (e.getBlock().getType() != Material.HOPPER) return;
-
- int amt = count(e.getBlock().getChunk());
- if (amt >= instance.getConfig().getInt("Main.Max Hoppers Per Chunk") && instance.getConfig().getInt("Main.Max Hoppers Per Chunk") != -1) {
- e.getPlayer().sendMessage(instance.getLocale().getMessage("event.hopper.toomany"));
- e.setCancelled(true);
- return;
- }
-
- if (!e.getItemInHand().getItemMeta().hasDisplayName()) return;
-
- ItemStack item = e.getItemInHand().clone();
-
- e.getBlock().setType(Material.AIR);
- e.getBlock().getLocation().getBlock().setType(Material.HOPPER);
-
- instance.getHopperManager().addHopper(e.getBlock().getLocation(), new Hopper(e.getBlock(), instance.getLevelManager().getLevel(instance.getApi().getILevel(item)), e.getPlayer().getUniqueId(), null, new Filter(), false));
-
- } catch (Exception ee) {
- Debugger.runReport(ee);
- }
- }
-
- public int count(Chunk c) {
- try {
- int count = 0;
- for (int x = 0; x < 16; x++) {
- for (int z = 0; z < 16; z++) {
- for (int y = 0; y < c.getWorld().getMaxHeight(); y++) {
- if (c.getBlock(x, y, z).getType() == Material.HOPPER) count++;
- }
- }
- }
- return count;
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return 9999;
- }
-
- @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
- public void onBlockBreak(BlockBreakEvent event) {
- try {
- if (event.getBlock().getType().equals(Material.ENDER_CHEST)) {
- instance.dataFile.getConfig().set("data.enderTracker." + Arconix.pl().getApi().serialize().serializeLocation(event.getBlock()), null);
- }
-
- Block block = event.getBlock();
-
- if (event.getPlayer().getItemInHand() == null) return;
-
- handleSyncTouch(event);
-
- if (event.getBlock().getType() != Material.HOPPER) return;
-
- Hopper hopper = instance.getHopperManager().getHopper(block);
-
- int level = hopper.getLevel().getLevel();
-
- if (level != 0) {
- event.setCancelled(true);
- ItemStack item = new ItemStack(Material.HOPPER, 1);
- ItemMeta itemmeta = item.getItemMeta();
- itemmeta.setDisplayName(Arconix.pl().getApi().format().formatText(Methods.formatName(level, true)));
- item.setItemMeta(itemmeta);
-
- event.getBlock().setType(Material.AIR);
- event.getBlock().getLocation().getWorld().dropItemNaturally(event.getBlock().getLocation(), item);
- }
-
- for (ItemStack i : hopper.getFilter().getWhiteList()) {
- if (i != null)
- event.getBlock().getLocation().getWorld().dropItemNaturally(event.getBlock().getLocation(), i);
- }
-
- for (ItemStack i : hopper.getFilter().getBlackList()) {
- if (i != null)
- event.getBlock().getLocation().getWorld().dropItemNaturally(event.getBlock().getLocation(), i);
- }
- for (ItemStack i : hopper.getFilter().getVoidList()) {
- if (i != null)
- event.getBlock().getLocation().getWorld().dropItemNaturally(event.getBlock().getLocation(), i);
- }
- instance.getHopperManager().removeHopper(block.getLocation());
-
- instance.sync.remove(event.getPlayer());
-
-
- } catch (Exception ee) {
- Debugger.runReport(ee);
- }
- }
-
- private void handleSyncTouch(BlockBreakEvent e) {
- if (!Methods.isSync(e.getPlayer())) return;
-
- ItemStack tool = e.getPlayer().getItemInHand();
- ItemMeta meta = tool.getItemMeta();
- if (tool.getItemMeta().getLore().size() != 2) return;
-
- Location location = Arconix.pl().getApi().serialize().unserializeLocation(meta.getLore().get(1).replaceAll("§", ""));
-
- if (location.getBlock().getType() != Material.CHEST) return;
-
- if (e.getBlock().getType() == Material.SPAWNER || e.getBlock().getType() == Material.HOPPER || e.getBlock().getType() == Material.DISPENSER) return;
-
- try {
- if (e.getBlock().getType().name().contains("SHULKER") && e.getBlock().getType() != Material.SHULKER_SHELL) return;
- } catch (Exception ee) {
-
- }
-
- InventoryHolder ih = (InventoryHolder) location.getBlock().getState();
- if (e.getPlayer().getItemInHand().getItemMeta().hasEnchant(Enchantment.SILK_TOUCH)) {
- ih.getInventory().addItem(new ItemStack(e.getBlock().getType(),1, e.getBlock().getData()));
- } else {
- for (ItemStack is : e.getBlock().getDrops())
- ih.getInventory().addItem(is);
- }
- e.setDropItems(false);
- return;
- }
+package com.songoda.epichoppers.events;
+
+import com.songoda.arconix.plugin.Arconix;
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.api.hopper.Hopper;
+import com.songoda.epichoppers.hopper.EFilter;
+import com.songoda.epichoppers.hopper.EHopper;
+import com.songoda.epichoppers.utils.Debugger;
+import com.songoda.epichoppers.utils.Methods;
+import org.bukkit.Chunk;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.enchantments.Enchantment;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+import org.bukkit.event.block.BlockBreakEvent;
+import org.bukkit.event.block.BlockPlaceEvent;
+import org.bukkit.inventory.InventoryHolder;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+
+/**
+ * Created by songoda on 3/14/2017.
+ */
+public class BlockListeners implements Listener {
+
+ private EpicHoppersPlugin instance;
+
+ public BlockListeners(EpicHoppersPlugin instance) {
+ this.instance = instance;
+ }
+
+ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
+ public void onBlockPlace(BlockPlaceEvent e) {
+ try {
+ if (e.getBlock().getType().equals(Material.ENDER_CHEST)) {
+ instance.dataFile.getConfig().set("data.enderTracker." + Arconix.pl().getApi().serialize().serializeLocation(e.getBlock()), e.getPlayer().getUniqueId().toString());
+ return;
+ }
+
+ if (e.getBlock().getType() != Material.HOPPER) return;
+
+ int amt = count(e.getBlock().getChunk());
+ if (amt >= instance.getConfig().getInt("Main.Max Hoppers Per Chunk") && instance.getConfig().getInt("Main.Max Hoppers Per Chunk") != -1) {
+ e.getPlayer().sendMessage(instance.getLocale().getMessage("event.hopper.toomany"));
+ e.setCancelled(true);
+ return;
+ }
+
+ if (!e.getItemInHand().getItemMeta().hasDisplayName()) return;
+
+ ItemStack item = e.getItemInHand().clone();
+
+ e.getBlock().setType(Material.AIR);
+ e.getBlock().getLocation().getBlock().setType(Material.HOPPER);
+
+ instance.getHopperManager().addHopper(e.getBlock().getLocation(), new EHopper(e.getBlock(), instance.getLevelFromItem(item), e.getPlayer().getUniqueId(), null, new EFilter(), false));
+
+ } catch (Exception ee) {
+ Debugger.runReport(ee);
+ }
+ }
+
+ public int count(Chunk c) {
+ try {
+ int count = 0;
+ for (int x = 0; x < 16; x++) {
+ for (int z = 0; z < 16; z++) {
+ for (int y = 0; y < c.getWorld().getMaxHeight(); y++) {
+ if (c.getBlock(x, y, z).getType() == Material.HOPPER) count++;
+ }
+ }
+ }
+ return count;
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return 9999;
+ }
+
+ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
+ public void onBlockBreak(BlockBreakEvent event) {
+ try {
+ if (event.getBlock().getType().equals(Material.ENDER_CHEST)) {
+ instance.dataFile.getConfig().set("data.enderTracker." + Arconix.pl().getApi().serialize().serializeLocation(event.getBlock()), null);
+ }
+
+ Block block = event.getBlock();
+ Player player = event.getPlayer();
+
+ if (player.getInventory().getItemInMainHand() == null) return;
+
+ handleSyncTouch(event);
+
+ if (event.getBlock().getType() != Material.HOPPER) return;
+
+ Hopper hopper = instance.getHopperManager().getHopper(block);
+
+ int level = hopper.getLevel().getLevel();
+
+ if (level != 0) {
+ event.setCancelled(true);
+ ItemStack item = new ItemStack(Material.HOPPER, 1);
+ ItemMeta itemmeta = item.getItemMeta();
+ itemmeta.setDisplayName(Arconix.pl().getApi().format().formatText(Methods.formatName(level, true)));
+ item.setItemMeta(itemmeta);
+
+ event.getBlock().setType(Material.AIR);
+ event.getBlock().getLocation().getWorld().dropItemNaturally(event.getBlock().getLocation(), item);
+ }
+
+ for (ItemStack i : hopper.getFilter().getWhiteList()) {
+ if (i != null)
+ event.getBlock().getLocation().getWorld().dropItemNaturally(event.getBlock().getLocation(), i);
+ }
+
+ for (ItemStack i : hopper.getFilter().getBlackList()) {
+ if (i != null)
+ event.getBlock().getLocation().getWorld().dropItemNaturally(event.getBlock().getLocation(), i);
+ }
+ for (ItemStack i : hopper.getFilter().getVoidList()) {
+ if (i != null)
+ event.getBlock().getLocation().getWorld().dropItemNaturally(event.getBlock().getLocation(), i);
+ }
+ instance.getHopperManager().removeHopper(block.getLocation());
+
+ instance.getPlayerDataManager().getPlayerData(player).setSyncType(null);
+
+
+ } catch (Exception ee) {
+ Debugger.runReport(ee);
+ }
+ }
+
+ private void handleSyncTouch(BlockBreakEvent e) {
+ if (!Methods.isSync(e.getPlayer())) return;
+
+ ItemStack tool = e.getPlayer().getInventory().getItemInMainHand();
+ ItemMeta meta = tool.getItemMeta();
+ if (tool.getItemMeta().getLore().size() != 2) return;
+
+ Location location = Arconix.pl().getApi().serialize().unserializeLocation(meta.getLore().get(1).replaceAll("§", ""));
+
+ if (location.getBlock().getType() != Material.CHEST) return;
+
+ if (e.getBlock().getType() == Material.SHULKER_BOX
+ || e.getBlock().getType() == Material.SPAWNER
+ || e.getBlock().getType() == Material.HOPPER
+ || e.getBlock().getType() == Material.DISPENSER) {
+ return;
+ }
+
+ InventoryHolder ih = (InventoryHolder) location.getBlock().getState();
+ if (e.getPlayer().getInventory().getItemInMainHand().getItemMeta().hasEnchant(Enchantment.SILK_TOUCH)) {
+ ih.getInventory().addItem(new ItemStack(e.getBlock().getType(), 1, e.getBlock().getData()));
+ } else {
+ for (ItemStack is : e.getBlock().getDrops())
+ ih.getInventory().addItem(is);
+ }
+ e.setDropItems(false);
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/songoda/epichoppers/Events/HopperListeners.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/events/HopperListeners.java
similarity index 85%
rename from src/main/java/com/songoda/epichoppers/Events/HopperListeners.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/events/HopperListeners.java
index aff68d1..d469749 100644
--- a/src/main/java/com/songoda/epichoppers/Events/HopperListeners.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/events/HopperListeners.java
@@ -1,107 +1,108 @@
-package com.songoda.epichoppers.Events;
-
-import com.songoda.arconix.plugin.Arconix;
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Utils.Debugger;
-import com.songoda.epichoppers.Utils.Methods;
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.block.Hopper;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.entity.EntityDamageByEntityEvent;
-import org.bukkit.event.entity.EntityDeathEvent;
-import org.bukkit.event.inventory.InventoryMoveItemEvent;
-import org.bukkit.inventory.Inventory;
-import org.bukkit.inventory.InventoryHolder;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.ItemMeta;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
-/**
- * Created by songoda on 4/18/2017.
- */
-public class HopperListeners implements Listener {
-
- private EpicHoppers instance;
-
- public HopperListeners(EpicHoppers instance) {
- this.instance = instance;
- }
-
-
- @EventHandler(ignoreCancelled = true)
- public void onHop(InventoryMoveItemEvent e) {
- try {
- Inventory source = e.getSource();
-
-
- if (!instance.getHopperManager().isHopper(e.getSource().getLocation())) return;
-
- com.songoda.epichoppers.Hopper.Hopper hopper = instance.getHopperManager().getHopper(e.getSource().getLocation());
-
- if (source.getHolder() instanceof Hopper && hopper.getSyncedBlock() != null) {
- e.setCancelled(true);
- }
- } catch (Exception ee) {
- Debugger.runReport(ee);
- }
- }
-
- private Map ents = new HashMap<>();
-
- @EventHandler
- public void onDed(EntityDamageByEntityEvent e) {
- try {
- if (e.getDamager() instanceof Player) {
- Player p = (Player) e.getDamager();
- if (Methods.isSync(p)) {
- double d = ((LivingEntity) e.getEntity()).getHealth() - e.getDamage();
- if (d < 1) {
- ents.put(e.getEntity().getUniqueId(), p);
- }
- }
- }
- } catch (Exception ee) {
- Debugger.runReport(ee);
- }
- }
-
- @EventHandler
- public void onDrop(EntityDeathEvent e) {
- try {
- if (ents.containsKey(e.getEntity().getUniqueId())) {
- Player p = ents.get(e.getEntity().getUniqueId());
-
- ItemStack item = p.getItemInHand();
- ItemMeta meta = item.getItemMeta();
- Location location = Arconix.pl().getApi().serialize().unserializeLocation(meta.getLore().get(1).replaceAll("§", ""));
- if (location.getBlock().getType() == Material.CHEST) {
- InventoryHolder ih = (InventoryHolder) location.getBlock().getState();
- for (ItemStack is : e.getDrops()) {
- ih.getInventory().addItem(is);
- }
- e.getDrops().clear();
- }
- }
- } catch (Exception ee) {
- Debugger.runReport(ee);
- }
- }
-
- private int getItemCount(Inventory inventory, ItemStack item) {
- int amount = 0;
-
- for (ItemStack inventoryItem : inventory) {
- if (!item.isSimilar(inventoryItem)) continue;
- amount += inventoryItem.getAmount();
- }
-
- return amount;
- }
-}
+package com.songoda.epichoppers.events;
+
+import com.songoda.arconix.plugin.Arconix;
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.api.hopper.Hopper;
+import com.songoda.epichoppers.hopper.EHopper;
+import com.songoda.epichoppers.utils.Debugger;
+import com.songoda.epichoppers.utils.Methods;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import org.bukkit.event.entity.EntityDeathEvent;
+import org.bukkit.event.inventory.InventoryMoveItemEvent;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.InventoryHolder;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * Created by songoda on 4/18/2017.
+ */
+public class HopperListeners implements Listener {
+
+ private EpicHoppersPlugin instance;
+
+ public HopperListeners(EpicHoppersPlugin instance) {
+ this.instance = instance;
+ }
+
+
+ @EventHandler(ignoreCancelled = true)
+ public void onHop(InventoryMoveItemEvent e) {
+ try {
+ Inventory source = e.getSource();
+
+
+ if (!instance.getHopperManager().isHopper(e.getSource().getLocation())) return;
+
+ Hopper hopper = instance.getHopperManager().getHopper(e.getSource().getLocation());
+
+ if (source.getHolder() instanceof Hopper && hopper.getSyncedBlock() != null) {
+ e.setCancelled(true);
+ }
+ } catch (Exception ee) {
+ Debugger.runReport(ee);
+ }
+ }
+
+ private Map ents = new HashMap<>();
+
+ @EventHandler
+ public void onDed(EntityDamageByEntityEvent e) {
+ try {
+ if (e.getDamager() instanceof Player) {
+ Player p = (Player) e.getDamager();
+ if (Methods.isSync(p)) {
+ double d = ((LivingEntity) e.getEntity()).getHealth() - e.getDamage();
+ if (d < 1) {
+ ents.put(e.getEntity().getUniqueId(), p);
+ }
+ }
+ }
+ } catch (Exception ee) {
+ Debugger.runReport(ee);
+ }
+ }
+
+ @EventHandler
+ public void onDrop(EntityDeathEvent e) {
+ try {
+ if (ents.containsKey(e.getEntity().getUniqueId())) {
+ Player p = ents.get(e.getEntity().getUniqueId());
+
+ ItemStack item = p.getItemInHand();
+ ItemMeta meta = item.getItemMeta();
+ Location location = Arconix.pl().getApi().serialize().unserializeLocation(meta.getLore().get(1).replaceAll("§", ""));
+ if (location.getBlock().getType() == Material.CHEST) {
+ InventoryHolder ih = (InventoryHolder) location.getBlock().getState();
+ for (ItemStack is : e.getDrops()) {
+ ih.getInventory().addItem(is);
+ }
+ e.getDrops().clear();
+ }
+ }
+ } catch (Exception ee) {
+ Debugger.runReport(ee);
+ }
+ }
+
+ private int getItemCount(Inventory inventory, ItemStack item) {
+ int amount = 0;
+
+ for (ItemStack inventoryItem : inventory) {
+ if (!item.isSimilar(inventoryItem)) continue;
+ amount += inventoryItem.getAmount();
+ }
+
+ return amount;
+ }
+}
diff --git a/src/main/java/com/songoda/epichoppers/Events/InteractListeners.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/events/InteractListeners.java
similarity index 53%
rename from src/main/java/com/songoda/epichoppers/Events/InteractListeners.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/events/InteractListeners.java
index 86d0dc1..cf209d8 100644
--- a/src/main/java/com/songoda/epichoppers/Events/InteractListeners.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/events/InteractListeners.java
@@ -1,100 +1,96 @@
-package com.songoda.epichoppers.Events;
-
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Hopper.Hopper;
-import com.songoda.epichoppers.Utils.Debugger;
-import com.songoda.epichoppers.Utils.Methods;
-import org.bukkit.Material;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.block.Action;
-import org.bukkit.event.player.PlayerInteractEvent;
-import org.bukkit.inventory.InventoryHolder;
-import org.bukkit.inventory.ItemStack;
-
-/**
- * Created by songoda on 3/14/2017.
- */
-public class InteractListeners implements Listener {
-
- private EpicHoppers instance;
-
- public InteractListeners(EpicHoppers instance) {
- this.instance = instance;
- }
-
- @EventHandler
- public void onBlockInteract(PlayerInteractEvent e) {
- try {
- Player player = e.getPlayer();
- if (e.getAction() != Action.LEFT_CLICK_BLOCK
- || e.getClickedBlock() == null
- || player.isSneaking()
- || !player.hasPermission("EpicHoppers.overview")
- || !instance.hooks.canBuild(player, e.getClickedBlock().getLocation())
- || !(e.getClickedBlock().getState() instanceof InventoryHolder || e.getClickedBlock().getType().equals(Material.ENDER_CHEST))) {
- return;
- }
-
- if (e.getClickedBlock().getType() == Material.CHEST && Methods.isSync(player)) {
- ItemStack item = e.getPlayer().getInventory().getItemInMainHand();
- if (item.getItemMeta().getLore().size() == 2) {
- player.sendMessage(instance.getLocale().getMessage("event.hopper.desyncchest", item.getType().toString()));
- instance.enchant.createSyncTouch(item, null);
- } else {
- player.sendMessage(instance.getLocale().getMessage("event.hopper.syncchest", item.getType().toString()));
- instance.enchant.createSyncTouch(item, e.getClickedBlock());
- }
- e.setCancelled(true);
- return;
- }
-
-
- if (!instance.sync.containsKey(player) && !instance.bsync.containsKey(player)) {
- if (e.getClickedBlock().getType() == Material.HOPPER) {
- instance.lastBlock.put(player, e.getClickedBlock());
- Hopper hopper = instance.getHopperManager().getHopper(e.getClickedBlock());
- if (instance.getConfig().getBoolean("Main.Allow Hopper Upgrading")) {
- if (!player.getInventory().getItemInMainHand().getType().name().contains("PICKAXE")) {
- hopper.overview(player);
- e.setCancelled(true);
- }
- } else { //ToDO: What is this?
- if (player.hasPermission("EpicHoppers.Admin")) {
- instance.sync.put(player, instance.lastBlock.get(player));
- player.sendMessage(instance.getLocale().getMessage("event.hopper.syncnext"));
- hopper.timeout(player);
- player.closeInventory();
- }
- e.setCancelled(true);
- }
- }
- return;
- }
-
- if (e.getClickedBlock().getType() == Material.BREWING_STAND) return;
-
- if (e.getClickedBlock().getState() instanceof InventoryHolder || e.getClickedBlock().getType().equals(Material.ENDER_CHEST) && instance.getConfig().getBoolean("Main.Support Enderchests")) {
- if (instance.sync.containsKey(player) && instance.sync.get(player).equals(e.getClickedBlock()) || instance.bsync.containsKey(player) && instance.bsync.get(player).equals(e.getClickedBlock())) {
- player.sendMessage(instance.getLocale().getMessage("event.hopper.syncself"));
- } else {
- if (instance.sync.containsKey(player)) {
- Hopper hopper = instance.getHopperManager().getHopper(instance.sync.get(player));
- hopper.sync(e.getClickedBlock(), false, player);
- } else if (instance.bsync.containsKey(player)) {
- Hopper hopper = instance.getHopperManager().getHopper(instance.bsync.get(player));
- hopper.sync(e.getClickedBlock(), true, player);
- }
- }
- e.setCancelled(true);
- instance.sync.remove(player);
- instance.bsync.remove(player);
- }
-
-
- } catch (Exception ee) {
- Debugger.runReport(ee);
- }
- }
-}
+package com.songoda.epichoppers.events;
+
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.api.hopper.Hopper;
+import com.songoda.epichoppers.hopper.EHopper;
+import com.songoda.epichoppers.player.PlayerData;
+import com.songoda.epichoppers.player.SyncType;
+import com.songoda.epichoppers.utils.Debugger;
+import com.songoda.epichoppers.utils.Methods;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.block.Action;
+import org.bukkit.event.player.PlayerInteractEvent;
+import org.bukkit.inventory.InventoryHolder;
+import org.bukkit.inventory.ItemStack;
+
+/**
+ * Created by songoda on 3/14/2017.
+ */
+public class InteractListeners implements Listener {
+
+ private EpicHoppersPlugin instance;
+
+ public InteractListeners(EpicHoppersPlugin instance) {
+ this.instance = instance;
+ }
+
+ @EventHandler
+ public void onBlockInteract(PlayerInteractEvent e) {
+ try {
+ Player player = e.getPlayer();
+ if (e.getAction() != Action.LEFT_CLICK_BLOCK
+ || e.getClickedBlock() == null
+ || player.isSneaking()
+ || !player.hasPermission("EpicHoppers.overview")
+ || !instance.hooks.canBuild(player, e.getClickedBlock().getLocation())
+ || !(e.getClickedBlock().getState() instanceof InventoryHolder || e.getClickedBlock().getType().equals(Material.ENDER_CHEST))) {
+ return;
+ }
+
+ if (e.getClickedBlock().getType() == Material.CHEST && Methods.isSync(player)) {
+ ItemStack item = e.getPlayer().getInventory().getItemInMainHand();
+ if (item.getItemMeta().getLore().size() == 2) {
+ player.sendMessage(instance.getLocale().getMessage("event.hopper.desyncchest", item.getType().toString()));
+ instance.enchantmentHandler.createSyncTouch(item, null);
+ } else {
+ player.sendMessage(instance.getLocale().getMessage("event.hopper.syncchest", item.getType().toString()));
+ instance.enchantmentHandler.createSyncTouch(item, e.getClickedBlock());
+ }
+ e.setCancelled(true);
+ return;
+ }
+
+ PlayerData playerData = instance.getPlayerDataManager().getPlayerData(player);
+
+ if (playerData.getSyncType() == null) {
+ if (e.getClickedBlock().getType() == Material.HOPPER) {
+ Hopper hopper = instance.getHopperManager().getHopper(e.getClickedBlock());
+ playerData.setLastHopper(hopper);
+ if (instance.getConfig().getBoolean("Main.Allow hopper Upgrading")
+ && !player.getInventory().getItemInMainHand().getType().name().contains("PICKAXE")) {
+ ((EHopper)hopper).overview(player);
+ e.setCancelled(true);
+ return;
+ }
+
+ //ToDO: What is this?
+ if (player.hasPermission("EpicHoppers.Admin")) {
+ playerData.setLastHopper(hopper);
+ player.sendMessage(instance.getLocale().getMessage("event.hopper.syncnext"));
+ ((EHopper)hopper).timeout(player);
+ player.closeInventory();
+ }
+ e.setCancelled(true);
+ }
+ return;
+ }
+
+ if (e.getClickedBlock().getType() == Material.BREWING_STAND) return;
+
+ if (e.getClickedBlock().getState() instanceof InventoryHolder || e.getClickedBlock().getType().equals(Material.ENDER_CHEST) && instance.getConfig().getBoolean("Main.Support Enderchests")) {
+ if (playerData.getSyncType() != null && e.getClickedBlock().getLocation().equals(playerData.getLastHopper().getLocation())) {
+ player.sendMessage(instance.getLocale().getMessage("event.hopper.syncself"));
+ } else if (playerData.getSyncType() != null) {
+ playerData.getLastHopper().sync(e.getClickedBlock(), playerData.getSyncType() == SyncType.FILTERED, player);
+ }
+ e.setCancelled(true);
+ playerData.setSyncType(null);
+ }
+ } catch (Exception ee) {
+ Debugger.runReport(ee);
+ }
+ }
+}
diff --git a/src/main/java/com/songoda/epichoppers/Events/InventoryListeners.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/events/InventoryListeners.java
similarity index 59%
rename from src/main/java/com/songoda/epichoppers/Events/InventoryListeners.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/events/InventoryListeners.java
index c3d13f4..bcccafe 100644
--- a/src/main/java/com/songoda/epichoppers/Events/InventoryListeners.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/events/InventoryListeners.java
@@ -1,212 +1,220 @@
-package com.songoda.epichoppers.Events;
-
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Hopper.Hopper;
-import com.songoda.epichoppers.Utils.Debugger;
-import com.songoda.epichoppers.Utils.Methods;
-import org.bukkit.Bukkit;
-import org.bukkit.Material;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.inventory.*;
-import org.bukkit.event.player.PlayerDropItemEvent;
-import org.bukkit.inventory.Inventory;
-import org.bukkit.inventory.ItemStack;
-
-/**
- * Created by songoda on 3/14/2017.
- */
-public class InventoryListeners implements Listener {
-
- private EpicHoppers instance;
-
- public InventoryListeners(EpicHoppers instance) {
- this.instance = instance;
- }
-
- @EventHandler
- public void onInventoryClick(InventoryClickEvent e) {
- try {
-
- Inventory inv = e.getInventory();
- Player player = (Player) e.getWhoClicked();
- if (inv == null || e.getCurrentItem() == null) return;
-
- if (e.getCursor() != null && e.getCurrentItem() != null) {
- ItemStack c = e.getCursor();
- ItemStack item = e.getCurrentItem();
- if (c.hasItemMeta()
- && c.getItemMeta().hasLore()
- && c.getType() == Material.ENCHANTED_BOOK
- && (item.getType().name().toUpperCase().contains("AXE") || item.getType().name().toUpperCase().contains("SPADE") || item.getType().name().toUpperCase().contains("SWORD"))
- && c.getItemMeta().getLore().equals(instance.enchant.getbook().getItemMeta().getLore())) {
- instance.enchant.createSyncTouch(item, null);
- e.setCancelled(true);
- player.setItemOnCursor(new ItemStack(Material.AIR));
- player.updateInventory();
-
-
- }
- }
- if (!e.getCurrentItem().hasItemMeta()) return;
-
- if (doFilter(e)) return;
-
- if (e.getSlot() != 64537
- && e.getInventory().getType() == InventoryType.ANVIL
- && e.getAction() != InventoryAction.NOTHING
- && e.getCurrentItem().getType() != Material.AIR) {
- ItemStack item = e.getCurrentItem();
- if (item.getType() == Material.HOPPER) {
- e.setCancelled(true);
- }
- }
-
- if (!instance.inShow.containsKey(player.getUniqueId()) || instance.inFilter.containsKey(player.getUniqueId())) {
- return;
- }
- e.setCancelled(true);
- Hopper hopper = instance.getHopperManager().getHopper(instance.lastBlock.get(player));
- if (e.getCurrentItem().getItemMeta().hasDisplayName()
- && e.getCurrentItem().getItemMeta().getDisplayName().equals(instance.getLocale().getMessage("interface.hopper.perltitle"))
- && (instance.getConfig().getBoolean("Main.Allow Players To Teleport Through Hoppers") || player.hasPermission("EpicHoppers.Teleport"))) {
- if (e.isLeftClick()) {
- if (hopper.getSyncedBlock() != null) {
- instance.getTeleportHandler().tpPlayer(player, hopper);
- }
- } else {
- if (!hopper.isWalkOnTeleport()) {
- player.sendMessage(instance.references.getPrefix() + instance.getLocale().getMessage("event.hopper.walkteleenabled"));
- hopper.setWalkOnTeleport(true);
- } else {
- player.sendMessage(instance.references.getPrefix() + instance.getLocale().getMessage("event.hopper.walkteledisabled"));
- hopper.setWalkOnTeleport(false);
- }
- }
- player.closeInventory();
-
-
- } else if (e.getCurrentItem().getItemMeta().hasDisplayName() && e.getCurrentItem().getItemMeta().getDisplayName().equals(instance.getLocale().getMessage("interface.hopper.filtertitle")) && player.hasPermission("EpicHoppers.Filter")) {
- if (!e.getCurrentItem().getItemMeta().getDisplayName().equals("§l")) {
- hopper.filter(player);
- }
- } else if (e.getSlot() == 11 && player.hasPermission("EpicHoppers.Upgrade.XP")) {
- if (!e.getCurrentItem().getItemMeta().getDisplayName().equals("§l")) {
- hopper.upgrade("XP", player);
- player.closeInventory();
- }
- } else if (e.getSlot() == 15 && player.hasPermission("EpicHoppers.Upgrade.ECO")) {
- if (!e.getCurrentItem().getItemMeta().getDisplayName().equals("§l")) {
- hopper.upgrade("ECO", player);
- player.closeInventory();
- }
- } else if (e.getSlot() == 22) {
- if (e.isRightClick()) {
- player.sendMessage(instance.references.getPrefix() + instance.getLocale().getMessage("event.hopper.desync"));
- hopper.setSyncedBlock(null);
- } else {
- boolean can = true;
- if (hopper.getLastPlayer() != null) {
- if (!hopper.getLastPlayer().equals(player.getUniqueId())) {
- player.sendMessage(instance.references.getPrefix() + instance.getLocale().getMessage("event.hopper.syncdidnotplace"));
- can = false;
- }
- }
- if (can) {
- instance.sync.put(player, instance.lastBlock.get(player));
- player.sendMessage(instance.references.getPrefix() + instance.getLocale().getMessage("event.hopper.syncnext"));
- hopper.timeout(player);
- }
- }
- player.closeInventory();
- }
- } catch (Exception ee) {
- Debugger.runReport(ee);
- }
- }
-
- private boolean doFilter(InventoryClickEvent e) {
- Player player = (Player) e.getWhoClicked();
- if (!instance.inFilter.containsKey(player.getUniqueId())
- || e.getInventory() == null
- || !e.getInventory().equals(player.getOpenInventory().getTopInventory())) {
- return false;
- }
- if (e.getClick().equals(ClickType.SHIFT_LEFT)) {
- e.setCancelled(true);
- return true;
- }
-
- Hopper hopper = instance.getHopperManager().getHopper(instance.lastBlock.get(player));
- hopper.compile(player);
- if (e.getSlot() == 40) {
- instance.bsync.put(player, instance.lastBlock.get(player));
- player.sendMessage(instance.references.getPrefix() + instance.getLocale().getMessage("event.hopper.syncnext"));
- hopper.timeout(player);
- player.closeInventory();
- return true;
- }
-
- int[] a = {0, 1, 9, 10, 18, 19, 27, 28, 36, 37, 45, 46, 7, 8, 16, 17, 25, 26, 34, 35, 43, 44, 52, 53};
- e.setCancelled(true);
- for (int aa : a) {
- if (aa != e.getSlot()) continue;
- String name = "";
- if (e.getCurrentItem().hasItemMeta() && e.getCurrentItem().getItemMeta().hasDisplayName())
- name = e.getCurrentItem().getItemMeta().getDisplayName();
- if (!name.equals(instance.getLocale().getMessage("interface.filter.whitelist")) &&
- !name.equals(instance.getLocale().getMessage("interface.filter.blacklist")) &&
- !name.equals(instance.getLocale().getMessage("interface.filter.void"))) {
- e.setCancelled(false);
- return true;
- }
-
- if (e.getCursor().getType().equals(Material.AIR)) return true;
- if (e.getCursor().getAmount() != 1) {
- e.setCancelled(true);
- player.sendMessage(instance.references.getPrefix() + instance.getLocale().getMessage("event.hopper.onlyone"));
- return true;
- }
-
- e.setCancelled(false);
- Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> player.setItemOnCursor(new ItemStack(Material.AIR)), 1L);
- return true;
- }
- return true;
- }
-
- @EventHandler
- public void onDrop(PlayerDropItemEvent e) {
-
- ItemStack item = e.getItemDrop().getItemStack();
-
- if (!item.hasItemMeta() || !item.getItemMeta().hasDisplayName()) {
- return;
- }
-
- String name = item.getItemMeta().getDisplayName();
-
- if (!name.equals(instance.getLocale().getMessage("interface.filter.whitelist")) &&
- !name.equals(instance.getLocale().getMessage("interface.filter.blacklist")) &&
- !name.equals(instance.getLocale().getMessage("interface.filter.void"))) {
- return;
- }
- e.getItemDrop().remove();
- }
-
- @EventHandler
- public void onClose(InventoryCloseEvent event) {
- try {
- final Player player = (Player) event.getPlayer();
- instance.inShow.remove(player.getUniqueId());
- if (instance.inFilter.containsKey(player.getUniqueId())) {
-
- instance.getHopperManager().getHopper(instance.lastBlock.get(player)).compile(player);
- instance.inFilter.remove(player.getUniqueId());
- }
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- }
+package com.songoda.epichoppers.events;
+
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.api.hopper.Hopper;
+import com.songoda.epichoppers.hopper.EHopper;
+import com.songoda.epichoppers.player.MenuType;
+import com.songoda.epichoppers.player.PlayerData;
+import com.songoda.epichoppers.player.SyncType;
+import com.songoda.epichoppers.utils.Debugger;
+import org.bukkit.Bukkit;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.inventory.*;
+import org.bukkit.event.player.PlayerDropItemEvent;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+
+/**
+ * Created by songoda on 3/14/2017.
+ */
+public class InventoryListeners implements Listener {
+
+ private EpicHoppersPlugin instance;
+
+ public InventoryListeners(EpicHoppersPlugin instance) {
+ this.instance = instance;
+ }
+
+ @EventHandler
+ public void onInventoryClick(InventoryClickEvent event) {
+ try {
+
+ Inventory inv = event.getInventory();
+ Player player = (Player) event.getWhoClicked();
+ if (inv == null || event.getCurrentItem() == null) return;
+
+
+ if (event.getRawSlot() > event.getView().getTopInventory().getSize() - 1) return;
+
+ if (event.getCursor() != null && event.getCurrentItem() != null) {
+ ItemStack c = event.getCursor();
+ ItemStack item = event.getCurrentItem();
+ if (c.hasItemMeta()
+ && c.getItemMeta().hasLore()
+ && c.getType() == Material.ENCHANTED_BOOK
+ && (item.getType().name().toUpperCase().contains("AXE") || item.getType().name().toUpperCase().contains("SPADE") || item.getType().name().toUpperCase().contains("SWORD"))
+ && c.getItemMeta().getLore().equals(instance.enchantmentHandler.getbook().getItemMeta().getLore())) {
+ instance.enchantmentHandler.createSyncTouch(item, null);
+ event.setCancelled(true);
+ player.setItemOnCursor(new ItemStack(Material.AIR));
+ player.updateInventory();
+
+
+ }
+ }
+ if (!event.getCurrentItem().hasItemMeta()) return;
+
+ if (doFilter(event)) return;
+
+ if (event.getSlot() != 64537
+ && event.getInventory().getType() == InventoryType.ANVIL
+ && event.getAction() != InventoryAction.NOTHING
+ && event.getCurrentItem().getType() != Material.AIR) {
+ ItemStack item = event.getCurrentItem();
+ if (item.getType() == Material.HOPPER) {
+ event.setCancelled(true);
+ }
+ }
+
+ PlayerData playerData = instance.getPlayerDataManager().getPlayerData(player);
+
+ if (playerData.getInMenu() != MenuType.OVERVIEW) return;
+
+ event.setCancelled(true);
+ Hopper hopper = playerData.getLastHopper();
+ if (event.getCurrentItem().getItemMeta().hasDisplayName()
+ && event.getCurrentItem().getItemMeta().getDisplayName().equals(instance.getLocale().getMessage("interface.hopper.perltitle"))
+ && (instance.getConfig().getBoolean("Main.Allow Players To Teleport Through Hoppers") || player.hasPermission("EpicHoppers.Teleport"))) {
+ if (event.isLeftClick()) {
+ if (hopper.getSyncedBlock() != null) {
+ instance.getTeleportHandler().tpPlayer(player, hopper);
+ }
+ } else {
+ if (!hopper.isWalkOnTeleport()) {
+ player.sendMessage(instance.references.getPrefix() + instance.getLocale().getMessage("event.hopper.walkteleenabled"));
+ hopper.setWalkOnTeleport(true);
+ } else {
+ player.sendMessage(instance.references.getPrefix() + instance.getLocale().getMessage("event.hopper.walkteledisabled"));
+ hopper.setWalkOnTeleport(false);
+ }
+ }
+ player.closeInventory();
+
+
+ } else if (event.getCurrentItem().getItemMeta().hasDisplayName() && event.getCurrentItem().getItemMeta().getDisplayName().equals(instance.getLocale().getMessage("interface.hopper.filtertitle")) && player.hasPermission("EpicHoppers.Filter")) {
+ if (!event.getCurrentItem().getItemMeta().getDisplayName().equals("§l")) {
+ ((EHopper)hopper).filter(player);
+ }
+ } else if (event.getSlot() == 11 && player.hasPermission("EpicHoppers.Upgrade.XP")) {
+ if (!event.getCurrentItem().getItemMeta().getDisplayName().equals("§l")) {
+ ((EHopper)hopper).upgrade("XP", player);
+ player.closeInventory();
+ }
+ } else if (event.getSlot() == 15 && player.hasPermission("EpicHoppers.Upgrade.ECO")) {
+ if (!event.getCurrentItem().getItemMeta().getDisplayName().equals("§l")) {
+ ((EHopper)hopper).upgrade("ECO", player);
+ player.closeInventory();
+ }
+ } else if (event.getSlot() == 22) {
+ if (event.isRightClick()) {
+ player.sendMessage(instance.references.getPrefix() + instance.getLocale().getMessage("event.hopper.desync"));
+ hopper.setSyncedBlock(null);
+ } else {
+ boolean can = true;
+ if (hopper.getLastPlayer() != null) {
+ if (!hopper.getLastPlayer().equals(player.getUniqueId())) {
+ player.sendMessage(instance.references.getPrefix() + instance.getLocale().getMessage("event.hopper.syncdidnotplace"));
+ can = false;
+ }
+ }
+ if (can) {
+ playerData.setSyncType(SyncType.REGULAR);
+ player.sendMessage(instance.references.getPrefix() + instance.getLocale().getMessage("event.hopper.syncnext"));
+ ((EHopper)hopper).timeout(player);
+ }
+ }
+ player.closeInventory();
+ }
+ } catch (Exception ee) {
+ Debugger.runReport(ee);
+ }
+ }
+
+ private boolean doFilter(InventoryClickEvent e) {
+ Player player = (Player) e.getWhoClicked();
+ PlayerData playerData = instance.getPlayerDataManager().getPlayerData(player);
+ if (playerData.getInMenu() != MenuType.FILTER
+ || e.getInventory() == null
+ || !e.getInventory().equals(player.getOpenInventory().getTopInventory())) {
+ return false;
+ }
+ if (e.getClick().equals(ClickType.SHIFT_LEFT)) {
+ e.setCancelled(true);
+ return true;
+ }
+
+ Hopper hopper = playerData.getLastHopper();
+ Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> {
+ ((EHopper)hopper).compile(player);
+ }, 1);
+ if (e.getSlot() == 40) {
+ playerData.setSyncType(SyncType.FILTERED);
+ player.sendMessage(instance.references.getPrefix() + instance.getLocale().getMessage("event.hopper.syncnext"));
+ ((EHopper)hopper).timeout(player);
+ player.closeInventory();
+ return true;
+ }
+
+ int[] a = {0, 1, 9, 10, 18, 19, 27, 28, 36, 37, 45, 46, 7, 8, 16, 17, 25, 26, 34, 35, 43, 44, 52, 53};
+ e.setCancelled(true);
+ for (int aa : a) {
+ if (aa != e.getSlot()) continue;
+ String name = "";
+ if (e.getCurrentItem().hasItemMeta() && e.getCurrentItem().getItemMeta().hasDisplayName())
+ name = e.getCurrentItem().getItemMeta().getDisplayName();
+ if (!name.equals(instance.getLocale().getMessage("interface.filter.whitelist")) &&
+ !name.equals(instance.getLocale().getMessage("interface.filter.blacklist")) &&
+ !name.equals(instance.getLocale().getMessage("interface.filter.void"))) {
+ e.setCancelled(false);
+ return true;
+ }
+
+ if (e.getCursor().getType().equals(Material.AIR)) return true;
+ if (e.getCursor().getAmount() != 1) {
+ e.setCancelled(true);
+ player.sendMessage(instance.references.getPrefix() + instance.getLocale().getMessage("event.hopper.onlyone"));
+ return true;
+ }
+
+ e.setCancelled(false);
+ Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> player.setItemOnCursor(new ItemStack(Material.AIR)), 1L);
+ return true;
+ }
+ return true;
+ }
+
+ @EventHandler
+ public void onDrop(PlayerDropItemEvent e) {
+
+ ItemStack item = e.getItemDrop().getItemStack();
+
+ if (!item.hasItemMeta() || !item.getItemMeta().hasDisplayName()) {
+ return;
+ }
+
+ String name = item.getItemMeta().getDisplayName();
+
+ if (!name.equals(instance.getLocale().getMessage("interface.filter.whitelist")) &&
+ !name.equals(instance.getLocale().getMessage("interface.filter.blacklist")) &&
+ !name.equals(instance.getLocale().getMessage("interface.filter.void"))) {
+ return;
+ }
+ e.getItemDrop().remove();
+ }
+
+ @EventHandler
+ public void onClose(InventoryCloseEvent event) {
+ try {
+ PlayerData playerData = instance.getPlayerDataManager().getPlayerData((Player)event.getPlayer());
+ playerData.setInMenu(MenuType.NOT_IN);
+ if (playerData.getSyncType() == SyncType.FILTERED) {
+ ((EHopper)playerData.getLastHopper()).compile((Player)event.getPlayer());
+ }
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/songoda/epichoppers/Events/LoginListeners.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/events/LoginListeners.java
similarity index 88%
rename from src/main/java/com/songoda/epichoppers/Events/LoginListeners.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/events/LoginListeners.java
index 393c8fb..b09111b 100644
--- a/src/main/java/com/songoda/epichoppers/Events/LoginListeners.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/events/LoginListeners.java
@@ -1,45 +1,45 @@
-package com.songoda.epichoppers.Events;
-
-import com.songoda.arconix.plugin.Arconix;
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Utils.Debugger;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.player.PlayerJoinEvent;
-
-/**
- * Created by songoda on 3/14/2017.
- */
-public class LoginListeners implements Listener {
-
- private EpicHoppers instance;
-
- public LoginListeners(EpicHoppers instance) {
- this.instance = instance;
- }
-
-
- @EventHandler
- public void onPlayerJoin(PlayerJoinEvent e) {
- try {
- Player p = e.getPlayer();
- if (p.isOp() && instance.getConfig().getBoolean("Main.Display Helpful Tips For Operators")) {
- if (instance.getServer().getPluginManager().getPlugin("Factions") != null && instance.hooks.FactionsHook == null) {
- p.sendMessage("");
- p.sendMessage(Arconix.pl().getApi().format().formatText(instance.references.getPrefix() + "&7Here's the deal,"));
- p.sendMessage(Arconix.pl().getApi().format().formatText("&7Because you're not using the official versions of &6Factions"));
- p.sendMessage(Arconix.pl().getApi().format().formatText("&7I cannot give you full support out of the box."));
- p.sendMessage(Arconix.pl().getApi().format().formatText("&7Things will work without it but if you wan't a flawless"));
- p.sendMessage(Arconix.pl().getApi().format().formatText("&7experience you need to download"));
- p.sendMessage(Arconix.pl().getApi().format().formatText("&7&6https://www.spigotmc.org/resources/54337/&7."));
- p.sendMessage(Arconix.pl().getApi().format().formatText("&7If you don't care and don't want to see this message again"));
- p.sendMessage(Arconix.pl().getApi().format().formatText("&7turn &6Helpful-Tips &7off in the config."));
- p.sendMessage("");
- }
- }
- } catch (Exception ee) {
- Debugger.runReport(ee);
- }
- }
+package com.songoda.epichoppers.events;
+
+import com.songoda.arconix.plugin.Arconix;
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.utils.Debugger;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.PlayerJoinEvent;
+
+/**
+ * Created by songoda on 3/14/2017.
+ */
+public class LoginListeners implements Listener {
+
+ private EpicHoppersPlugin instance;
+
+ public LoginListeners(EpicHoppersPlugin instance) {
+ this.instance = instance;
+ }
+
+
+ @EventHandler
+ public void onPlayerJoin(PlayerJoinEvent e) {
+ try {
+ Player p = e.getPlayer();
+ if (p.isOp() && instance.getConfig().getBoolean("Main.Display Helpful Tips For Operators")) {
+ if (instance.getServer().getPluginManager().getPlugin("Factions") != null && instance.hooks.FactionsHook == null) {
+ p.sendMessage("");
+ p.sendMessage(Arconix.pl().getApi().format().formatText(instance.references.getPrefix() + "&7Here's the deal,"));
+ p.sendMessage(Arconix.pl().getApi().format().formatText("&7Because you're not using the official versions of &6Factions"));
+ p.sendMessage(Arconix.pl().getApi().format().formatText("&7I cannot give you full support out of the box."));
+ p.sendMessage(Arconix.pl().getApi().format().formatText("&7Things will work without it but if you wan't a flawless"));
+ p.sendMessage(Arconix.pl().getApi().format().formatText("&7experience you need to download"));
+ p.sendMessage(Arconix.pl().getApi().format().formatText("&7&6https://www.spigotmc.org/resources/54337/&7."));
+ p.sendMessage(Arconix.pl().getApi().format().formatText("&7If you don't care and don't want to see this message again"));
+ p.sendMessage(Arconix.pl().getApi().format().formatText("&7turn &6Helpful-Tips &7off in the config."));
+ p.sendMessage("");
+ }
+ }
+ } catch (Exception ee) {
+ Debugger.runReport(ee);
+ }
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/songoda/epichoppers/Handlers/CommandHandler.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/handlers/CommandHandler.java
similarity index 88%
rename from src/main/java/com/songoda/epichoppers/Handlers/CommandHandler.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/handlers/CommandHandler.java
index 19efb49..0d668ad 100644
--- a/src/main/java/com/songoda/epichoppers/Handlers/CommandHandler.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/handlers/CommandHandler.java
@@ -1,70 +1,70 @@
-package com.songoda.epichoppers.Handlers;
-
-import com.songoda.arconix.plugin.Arconix;
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Utils.Debugger;
-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 final EpicHoppers plugin;
-
- public CommandHandler(final EpicHoppers plugin) {
- this.plugin = plugin;
- }
-
- @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(plugin.references.getPrefix() + "&7" + plugin.getDescription().getVersion() + " Created by &5&l&oBrianna"));
- sender.sendMessage(Arconix.pl().getApi().format().formatText(" &8- &aEH help &7Displays this page."));
- sender.sendMessage(Arconix.pl().getApi().format().formatText(" &8- &aEH book [player] &7Gives Sync Touch book to you or a player."));
- sender.sendMessage(Arconix.pl().getApi().format().formatText(" &8- &aEH settings &7Edit the EpicHoppers Settings."));
- sender.sendMessage(Arconix.pl().getApi().format().formatText(" &8- &aEH reload &7Reloads Configuration and Language files."));
- sender.sendMessage("");
- } else if (args[0].equalsIgnoreCase("book")) {
- if (!sender.hasPermission("synccraft.admin") && !sender.hasPermission("epichoppers.admin")) {
- sender.sendMessage(plugin.references.getPrefix() + plugin.getLocale().getMessage("event.general.nopermission"));
- } else {
- if (args.length == 1) {
- if (sender instanceof Player)
- ((Player) sender).getInventory().addItem(plugin.enchant.getbook());
- } else if (Bukkit.getPlayerExact(args[1]) == null) {
- sender.sendMessage(plugin.references.getPrefix() + Arconix.pl().getApi().format().formatText("&cThat username does not exist, or the user is not online!"));
- } else {
- Bukkit.getPlayerExact(args[1]).getInventory().addItem(plugin.enchant.getbook());
- }
- }
- } else if (args[0].equalsIgnoreCase("reload")) {
- if (!sender.hasPermission("synccraft.admin") && !sender.hasPermission("epichoppers.admin")) {
- sender.sendMessage(plugin.references.getPrefix() + plugin.getLocale().getMessage("event.general.nopermission"));
- } else {
- plugin.reload();
- sender.sendMessage(Arconix.pl().getApi().format().formatText(plugin.references.getPrefix() + "&8Configuration and Language files reloaded."));
- }
- } else if (sender instanceof Player) {
- if (args[0].equalsIgnoreCase("settings")) {
- if (!sender.hasPermission("synccraft.admin") && !sender.hasPermission("epichoppers.admin")) {
- sender.sendMessage(plugin.references.getPrefix() + plugin.getLocale().getMessage("event.general.nopermission"));
- } else {
- Player p = (Player) sender;
- plugin.sm.openSettingsManager(p);
- }
- }
- }
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return true;
- }
+package com.songoda.epichoppers.handlers;
+
+import com.songoda.arconix.plugin.Arconix;
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.utils.Debugger;
+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 final EpicHoppersPlugin plugin;
+
+ public CommandHandler(final EpicHoppersPlugin plugin) {
+ this.plugin = plugin;
+ }
+
+ @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(plugin.references.getPrefix() + "&7" + plugin.getDescription().getVersion() + " Created by &5&l&oBrianna"));
+ sender.sendMessage(Arconix.pl().getApi().format().formatText(" &8- &aEH help &7Displays this page."));
+ sender.sendMessage(Arconix.pl().getApi().format().formatText(" &8- &aEH book [player] &7Gives Sync Touch book to you or a player."));
+ sender.sendMessage(Arconix.pl().getApi().format().formatText(" &8- &aEH settings &7Edit the EpicHoppers Settings."));
+ sender.sendMessage(Arconix.pl().getApi().format().formatText(" &8- &aEH reload &7Reloads Configuration and Language files."));
+ sender.sendMessage("");
+ } else if (args[0].equalsIgnoreCase("book")) {
+ if (!sender.hasPermission("synccraft.admin") && !sender.hasPermission("epichoppers.admin")) {
+ sender.sendMessage(plugin.references.getPrefix() + plugin.getLocale().getMessage("event.general.nopermission"));
+ } else {
+ if (args.length == 1) {
+ if (sender instanceof Player)
+ ((Player) sender).getInventory().addItem(plugin.enchantmentHandler.getbook());
+ } else if (Bukkit.getPlayerExact(args[1]) == null) {
+ sender.sendMessage(plugin.references.getPrefix() + Arconix.pl().getApi().format().formatText("&cThat username does not exist, or the user is not online!"));
+ } else {
+ Bukkit.getPlayerExact(args[1]).getInventory().addItem(plugin.enchantmentHandler.getbook());
+ }
+ }
+ } else if (args[0].equalsIgnoreCase("reload")) {
+ if (!sender.hasPermission("synccraft.admin") && !sender.hasPermission("epichoppers.admin")) {
+ sender.sendMessage(plugin.references.getPrefix() + plugin.getLocale().getMessage("event.general.nopermission"));
+ } else {
+ plugin.reload();
+ sender.sendMessage(Arconix.pl().getApi().format().formatText(plugin.references.getPrefix() + "&8Configuration and Language files reloaded."));
+ }
+ } else if (sender instanceof Player) {
+ if (args[0].equalsIgnoreCase("settings")) {
+ if (!sender.hasPermission("synccraft.admin") && !sender.hasPermission("epichoppers.admin")) {
+ sender.sendMessage(plugin.references.getPrefix() + plugin.getLocale().getMessage("event.general.nopermission"));
+ } else {
+ Player p = (Player) sender;
+ plugin.settingsManager.openSettingsManager(p);
+ }
+ }
+ }
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return true;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/songoda/epichoppers/Handlers/EnchantmentHandler.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/handlers/EnchantmentHandler.java
similarity index 88%
rename from src/main/java/com/songoda/epichoppers/Handlers/EnchantmentHandler.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/handlers/EnchantmentHandler.java
index 4449b1e..2109c61 100644
--- a/src/main/java/com/songoda/epichoppers/Handlers/EnchantmentHandler.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/handlers/EnchantmentHandler.java
@@ -1,83 +1,83 @@
-package com.songoda.epichoppers.Handlers;
-
-import com.songoda.arconix.plugin.Arconix;
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Utils.Debugger;
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.ItemMeta;
-
-import java.util.ArrayList;
-
-/**
- * Created by songoda on 3/22/2017.
- */
-public class EnchantmentHandler {
-
- private EpicHoppers instance;
-
- public EnchantmentHandler(EpicHoppers instance) {
- this.instance = instance;
- }
-
-
- public EnchantmentHandler() {
- }
-
- public ItemStack createSyncTouch(ItemStack item, Block b) {
- try {
- ItemMeta itemmeta = item.getItemMeta();
- ArrayList lore = new ArrayList();
- if (b != null) {
- lore.add(Arconix.pl().getApi().format().formatText("&aSync Touch"));
- lore.add(Arconix.pl().getApi().format().convertToInvisibleString(Arconix.pl().getApi().serialize().serializeLocation(b)));
- } else {
- lore.add(Arconix.pl().getApi().format().formatText("&7Sync Touch"));
- }
- itemmeta.setLore(lore);
- item.setItemMeta(itemmeta);
- return item;
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return null;
- }
-
- public void giveSyncTouchBook(Player p) {
- try {
- boolean isEmpty = false;
- for (ItemStack item : p.getInventory().getContents()) {
- if (item == null) {
- isEmpty = true;
- }
- }
- if (!isEmpty) {
- p.sendMessage(instance.references.getPrefix() + instance.getLocale().getMessage("event.inventory.noroom"));
- } else {
- ItemStack book = getbook();
- p.getInventory().addItem(book);
- }
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- }
-
- public ItemStack getbook() {
- try {
- ItemStack book = new ItemStack(Material.ENCHANTED_BOOK);
- ItemMeta meta = book.getItemMeta();
- meta.setDisplayName(Arconix.pl().getApi().format().formatText("&eEnchanted Book"));
-
- ArrayList lore = new ArrayList<>();
- lore.add(Arconix.pl().getApi().format().formatText("&7Sync Touch"));
- meta.setLore(lore);
- book.setItemMeta(meta);
- return book;
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return null;
- }
+package com.songoda.epichoppers.handlers;
+
+import com.songoda.arconix.plugin.Arconix;
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.utils.Debugger;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+
+import java.util.ArrayList;
+
+/**
+ * Created by songoda on 3/22/2017.
+ */
+public class EnchantmentHandler {
+
+ private EpicHoppersPlugin instance;
+
+ public EnchantmentHandler(EpicHoppersPlugin instance) {
+ this.instance = instance;
+ }
+
+
+ public EnchantmentHandler() {
+ }
+
+ public ItemStack createSyncTouch(ItemStack item, Block b) {
+ try {
+ ItemMeta itemmeta = item.getItemMeta();
+ ArrayList lore = new ArrayList();
+ if (b != null) {
+ lore.add(Arconix.pl().getApi().format().formatText("&aSync Touch"));
+ lore.add(Arconix.pl().getApi().format().convertToInvisibleString(Arconix.pl().getApi().serialize().serializeLocation(b)));
+ } else {
+ lore.add(Arconix.pl().getApi().format().formatText("&7Sync Touch"));
+ }
+ itemmeta.setLore(lore);
+ item.setItemMeta(itemmeta);
+ return item;
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return null;
+ }
+
+ public void giveSyncTouchBook(Player p) {
+ try {
+ boolean isEmpty = false;
+ for (ItemStack item : p.getInventory().getContents()) {
+ if (item == null) {
+ isEmpty = true;
+ }
+ }
+ if (!isEmpty) {
+ p.sendMessage(instance.references.getPrefix() + instance.getLocale().getMessage("event.inventory.noroom"));
+ } else {
+ ItemStack book = getbook();
+ p.getInventory().addItem(book);
+ }
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ }
+
+ public ItemStack getbook() {
+ try {
+ ItemStack book = new ItemStack(Material.ENCHANTED_BOOK);
+ ItemMeta meta = book.getItemMeta();
+ meta.setDisplayName(Arconix.pl().getApi().format().formatText("&eEnchanted Book"));
+
+ ArrayList lore = new ArrayList<>();
+ lore.add(Arconix.pl().getApi().format().formatText("&7Sync Touch"));
+ meta.setLore(lore);
+ book.setItemMeta(meta);
+ return book;
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return null;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/songoda/epichoppers/Handlers/HookHandler.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/handlers/HookHandler.java
similarity index 89%
rename from src/main/java/com/songoda/epichoppers/Handlers/HookHandler.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/handlers/HookHandler.java
index de313e1..8ff9aac 100644
--- a/src/main/java/com/songoda/epichoppers/Handlers/HookHandler.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/handlers/HookHandler.java
@@ -1,114 +1,114 @@
-package com.songoda.epichoppers.Handlers;
-
-import com.songoda.arconix.api.utils.ConfigWrapper;
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Hooks.*;
-import com.songoda.epichoppers.Utils.Debugger;
-import org.bukkit.Bukkit;
-import org.bukkit.Location;
-import org.bukkit.entity.Player;
-
-/**
- * Created by songoda on 3/17/2017.
- */
-public class HookHandler {
-
- public Hook FactionsHook = null, RedProtectHook = null, ASkyBlockHook = null, USkyBlockHook = null,
- WorldGuardHook = null, GriefPreventionHook = null, PlotSquaredHook = null, KingdomsHook = null,
- TownyHook = null;
-
- public ConfigWrapper hooksFile = new ConfigWrapper(EpicHoppers.getInstance(), "", "hooks.yml");
-
- public HookHandler() {
- }
-
- public void hook() {
- try {
- hooksFile.createNewFile("Loading hooks File", EpicHoppers.getInstance().getDescription().getName() + " hooks File");
-
- new FactionsHook();
- new RedProtectHook();
- new GriefPreventionHook();
- new ASkyBlockHook();
- new USkyBlockHook();
- new WorldGuardHook();
- new PlotSquaredHook();
- new KingdomsHook();
- new TownyHook();
-
- hooksFile.getConfig().options().copyDefaults(true);
- hooksFile.saveConfig();
- } catch (Exception e) {
- Debugger.runReport(e);
- }
-
- }
-
- public boolean isInFaction(String name, Location l) {
- if (FactionsHook != null) {
- return FactionsHook.isInClaim(name, l);
- }
- return false;
- }
-
- public String getFactionId(String name) {
- if (FactionsHook != null) {
- return FactionsHook.getClaimId(name);
- }
- return null;
- }
-
- public boolean isInTown(String name, Location l) {
- if (TownyHook != null) {
- return TownyHook.isInClaim(name, l);
- }
- return false;
- }
-
- public String getTownId(String name) {
- if (TownyHook != null) {
- return TownyHook.getClaimId(name);
- }
- return null;
- }
-
- public boolean isInIsland(String name, Location l) {
- if (USkyBlockHook != null)
- return USkyBlockHook.isInClaim(name, l);
- else if (ASkyBlockHook != null)
- return ASkyBlockHook.isInClaim(name, l);
- else
- return false;
- }
-
- public String getIslandId(String name) {
- try {
- return Bukkit.getOfflinePlayer(name).getUniqueId().toString();
- } catch (Exception ignore) {
- }
- return null;
- }
-
- public boolean canBuild(Player p, Location l) {
- boolean result = true;
- if (WorldGuardHook != null)
- result = WorldGuardHook.canBuild(p, l);
- if (RedProtectHook != null && result)
- result = RedProtectHook.canBuild(p, l);
- if (FactionsHook != null && result)
- result = FactionsHook.canBuild(p, l);
- if (ASkyBlockHook != null && result)
- result = ASkyBlockHook.canBuild(p, l);
- if (USkyBlockHook != null && result)
- result = USkyBlockHook.canBuild(p, l);
- if (GriefPreventionHook != null && result)
- result = GriefPreventionHook.canBuild(p, l);
- if (PlotSquaredHook != null && result)
- result = PlotSquaredHook.canBuild(p, l);
- if (KingdomsHook != null && result)
- result = KingdomsHook.canBuild(p, l);
- if (TownyHook != null && result)
- result = TownyHook.canBuild(p, l);
- return result;
- }
+package com.songoda.epichoppers.handlers;
+
+import com.songoda.arconix.api.utils.ConfigWrapper;
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.hooks.*;
+import com.songoda.epichoppers.utils.Debugger;
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+
+/**
+ * Created by songoda on 3/17/2017.
+ */
+public class HookHandler {
+
+ public Hook FactionsHook = null, RedProtectHook = null, ASkyBlockHook = null, USkyBlockHook = null,
+ WorldGuardHook = null, GriefPreventionHook = null, PlotSquaredHook = null, KingdomsHook = null,
+ TownyHook = null;
+
+ public ConfigWrapper hooksFile = new ConfigWrapper(EpicHoppersPlugin.getInstance(), "", "hooks.yml");
+
+ public HookHandler() {
+ }
+
+ public void hook() {
+ try {
+ hooksFile.createNewFile("Loading hooks File", EpicHoppersPlugin.getInstance().getDescription().getName() + " hooks File");
+
+ new FactionsHook();
+ new RedProtectHook();
+ new GriefPreventionHook();
+ new ASkyBlockHook();
+ new USkyBlockHook();
+ new WorldGuardHook();
+ new PlotSquaredHook();
+ new KingdomsHook();
+ new TownyHook();
+
+ hooksFile.getConfig().options().copyDefaults(true);
+ hooksFile.saveConfig();
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+
+ }
+
+ public boolean isInFaction(String name, Location l) {
+ if (FactionsHook != null) {
+ return FactionsHook.isInClaim(name, l);
+ }
+ return false;
+ }
+
+ public String getFactionId(String name) {
+ if (FactionsHook != null) {
+ return FactionsHook.getClaimId(name);
+ }
+ return null;
+ }
+
+ public boolean isInTown(String name, Location l) {
+ if (TownyHook != null) {
+ return TownyHook.isInClaim(name, l);
+ }
+ return false;
+ }
+
+ public String getTownId(String name) {
+ if (TownyHook != null) {
+ return TownyHook.getClaimId(name);
+ }
+ return null;
+ }
+
+ public boolean isInIsland(String name, Location l) {
+ if (USkyBlockHook != null)
+ return USkyBlockHook.isInClaim(name, l);
+ else if (ASkyBlockHook != null)
+ return ASkyBlockHook.isInClaim(name, l);
+ else
+ return false;
+ }
+
+ public String getIslandId(String name) {
+ try {
+ return Bukkit.getOfflinePlayer(name).getUniqueId().toString();
+ } catch (Exception ignore) {
+ }
+ return null;
+ }
+
+ public boolean canBuild(Player p, Location l) {
+ boolean result = true;
+ if (WorldGuardHook != null)
+ result = WorldGuardHook.canBuild(p, l);
+ if (RedProtectHook != null && result)
+ result = RedProtectHook.canBuild(p, l);
+ if (FactionsHook != null && result)
+ result = FactionsHook.canBuild(p, l);
+ if (ASkyBlockHook != null && result)
+ result = ASkyBlockHook.canBuild(p, l);
+ if (USkyBlockHook != null && result)
+ result = USkyBlockHook.canBuild(p, l);
+ if (GriefPreventionHook != null && result)
+ result = GriefPreventionHook.canBuild(p, l);
+ if (PlotSquaredHook != null && result)
+ result = PlotSquaredHook.canBuild(p, l);
+ if (KingdomsHook != null && result)
+ result = KingdomsHook.canBuild(p, l);
+ if (TownyHook != null && result)
+ result = TownyHook.canBuild(p, l);
+ return result;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/songoda/epichoppers/Handlers/HopHandler.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/handlers/HopHandler.java
similarity index 94%
rename from src/main/java/com/songoda/epichoppers/Handlers/HopHandler.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/handlers/HopHandler.java
index ff74475..deca130 100644
--- a/src/main/java/com/songoda/epichoppers/Handlers/HopHandler.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/handlers/HopHandler.java
@@ -1,344 +1,344 @@
-package com.songoda.epichoppers.Handlers;
-
-import com.songoda.arconix.plugin.Arconix;
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Utils.Debugger;
-import com.songoda.epichoppers.Utils.Methods;
-import org.apache.commons.lang.StringUtils;
-import org.bukkit.*;
-import org.bukkit.block.Block;
-import org.bukkit.block.Hopper;
-import org.bukkit.configuration.ConfigurationSection;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.Item;
-import org.bukkit.inventory.FurnaceInventory;
-import org.bukkit.inventory.Inventory;
-import org.bukkit.inventory.InventoryHolder;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.metadata.FixedMetadataValue;
-
-import java.util.*;
-
-/**
- * Created by songoda on 3/14/2017.
- */
-public class HopHandler {
-
- private EpicHoppers instance;
-
- public HopHandler(EpicHoppers instance) {
- try {
- this.instance = instance;
- Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> {
- hopperCleaner();
- Bukkit.getScheduler().scheduleSyncRepeatingTask(instance, this::hopperRunner, 0, instance.getConfig().getLong("Main.Amount of Ticks Between Hops"));
- }, 40L);
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- }
-
- private void hopperCleaner() {
- try {
- if (instance.dataFile.getConfig().contains("data.sync")) {
- ConfigurationSection cs = instance.dataFile.getConfig().getConfigurationSection("data.sync");
- for (String key : cs.getKeys(false)) {
- if (Arconix.pl().getApi().serialize().unserializeLocation(key).getWorld() != null) {
- Block b = Arconix.pl().getApi().serialize().unserializeLocation(key).getBlock();
- if (b == null || !(b.getState() instanceof Hopper)) {
- instance.dataFile.getConfig().getConfigurationSection("data.sync").set(key, null);
- instance.getLogger().info("EpicHoppers Removing non-hopper entry: " + key);
- }
- }
- }
- }
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- }
-
- public Map blockTick = new HashMap<>();
-
- private void hopperRunner() {
- try {
- Set metaItems = new HashSet<>();
-
- for (com.songoda.epichoppers.Hopper.Hopper hopper : instance.getHopperManager().getHoppers().values()) {
-
- Location location = hopper.getLocation();
-
- int x = location.getBlockX() >> 4;
- int z = location.getBlockZ() >> 4;
-
- try {
- if (!location.getWorld().isChunkLoaded(x, z)) {
- continue;
- }
- } catch (Exception e) {
- continue;
- }
- Block block = location.getBlock();
-
-
- if (block == null || !(block.getState() instanceof Hopper)) {
- instance.getHopperManager().removeHopper(location);
- instance.getLogger().info("EpicHoppers Removing non-hopper entry: " + location.toString());
- }
-
- org.bukkit.block.Hopper hopperBlock = (org.bukkit.block.Hopper) (block != null ? block.getState() : null);
-
- if (hopper.getLevel().getBlockBreak() != 0) {
- int amt = hopper.getLevel().getBlockBreak();
- if (!blockTick.containsKey(block)) {
- blockTick.put(block, 1);
- } else {
- int tick = blockTick.get(block);
- int put = tick + 1;
- blockTick.put(block, put);
- if (tick >= amt) {
- Block above = block.getRelative(0, 1, 0);
- if (above.getType() != Material.AIR && !instance.getConfig().getStringList("Main.BlockBreak Blacklisted Blocks").contains(above.getType().name())) {
- above.getWorld().playSound(above.getLocation(), Sound.BLOCK_STONE_BREAK, 1F, 1F);
- Location locationAbove = above.getLocation();
- locationAbove.add(.5, .5, .5);
-
- float ox = (float) (0 + (Math.random() * .5));
- float oy = (float) (0 + (Math.random() * .5));
- float oz = (float) (0 + (Math.random() * .5));
- Arconix.pl().getApi().packetLibrary.getParticleManager().broadcastParticle(locationAbove, ox, oy, oz, 0, instance.getConfig().getString("Main.BlockBreak Particle Type"), 15);
-
- above.breakNaturally();
- }
- blockTick.remove(block);
- }
- }
- }
- if (hopper.getLevel().getSuction() != 0) {
- int suck = hopper.getLevel().getSuction();
- double radius = suck + .5;
-
- Collection nearbyEntite = block.getLocation().getWorld().getNearbyEntities(block.getLocation().add(0.5, 0.5, 0.5), radius, radius, radius);
-
- for (Entity e : nearbyEntite) {
- if (!(e instanceof Item) || e.getTicksLived() < 10 || e.getLocation().getBlock().getType() == Material.HOPPER) {
- continue;
- }
- ItemStack hopItem = ((Item) e).getItemStack().clone();
- if (hopItem.getType().name().contains("SHULKER_BOX"))
- continue;
- if (hopItem.hasItemMeta() && hopItem.getItemMeta().hasDisplayName() &&
- StringUtils.substring(hopItem.getItemMeta().getDisplayName(), 0, 3).equals("***")) {
- continue; //Compatibility with Shop instance: https://www.spigotmc.org/resources/shop-a-simple-intuitive-shop-instance.9628/
- }
- if (e.hasMetadata("grabbed"))
- continue;
- ItemStack item = ((Item) e).getItemStack();
- if (!canHop(hopperBlock.getInventory(), item, 1)) {
- continue;
- }
- ((Item) e).setPickupDelay(999);
- e.setMetadata("grabbed", new FixedMetadataValue(instance, ""));
- metaItems.add(e);
- if (!e.isOnGround())
- continue;
- float xx = (float) (0 + (Math.random() * .3));
- float yy = (float) (0 + (Math.random() * .3));
- float zz = (float) (0 + (Math.random() * .3));
- Arconix.pl().getApi().packetLibrary.getParticleManager().broadcastParticle(e.getLocation(), xx, yy, zz, 0, "FLAME", 5);
- e.remove();
- hopperBlock.getInventory().addItem(hopItem);
- break;
- }
- }
- if (hopper.getSyncedBlock() == null) continue;
- Location dest = hopper.getSyncedBlock().getLocation();
- if (dest == null) {
- hopper.setSyncedBlock(null);
- continue;
- }
- int destx = location.getBlockX() >> 4;
- int destz = location.getBlockZ() >> 4;
- if (!dest.getWorld().isChunkLoaded(destx, destz)) {
- continue;
- }
- Block b2 = dest.getBlock();
- if (!b2.getType().equals(Material.HOPPER) && !b2.getType().equals(Material.CHEST) && !b2.getType().equals(Material.TRAPPED_CHEST) && !(b2.getType().equals(Material.ENDER_CHEST))) {
- hopper.setSyncedBlock(null);
- continue;
- }
-
- int amt = hopper.getLevel().getAmount();
-
- ItemStack[] is = hopperBlock.getInventory().getContents();
-
- List whiteList = hopper.getFilter().getWhiteList();
-
- List blackList = hopper.getFilter().getBlackList();
-
- int num = 0;
- while (num != 5) {
- ItemStack it = null;
- if (is[num] != null) {
- it = is[num].clone();
- it.setAmount(1);
- }
- if (is[num] != null
- && !whiteList.isEmpty()
- && !whiteList.contains(it)) {
- doBlacklist(hopperBlock, hopper, is[num].clone(), is, amt, num);
- } else if (is[num] != null && !blackList.contains(it)) {
- int numm = addItem(hopperBlock, hopper, b2, is[num], is, amt, num);
- if (numm != 10)
- num = numm;
- } else if (is[num] != null && blackList.contains(it)) {
- doBlacklist(hopperBlock, hopper, is[num].clone(), is, amt, num);
- }
- num++;
- }
-
-
- }
-
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- }
-
- private void doBlacklist(Hopper hopperBlock, com.songoda.epichoppers.Hopper.Hopper hopper, ItemStack item, ItemStack[] isS, int amt, int place) {
- try {
- Location loc = hopperBlock.getLocation();
- Block b = loc.getBlock();
- if (hopper.getFilter().getEndPoint() != null
- && b != null && b.getState() instanceof Hopper) {
- Location dest = hopper.getFilter().getEndPoint().getLocation();
- int destx = loc.getBlockX() >> 4;
- int destz = loc.getBlockZ() >> 4;
- if (!dest.getWorld().isChunkLoaded(destx, destz)) {
- return;
- }
- Block b2 = dest.getBlock();
-
- addItem(hopperBlock, hopper, b2, item, isS, amt, place);
- }
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- }
-
- private int addItem(Hopper hopperBlock, com.songoda.epichoppers.Hopper.Hopper hopper, Block b2, ItemStack is, ItemStack[] isS, int amt, int place) {
- try {
- ItemStack it = null;
- if (is != null) {
- it = is.clone();
- it.setAmount(1);
- }
-
- List ovoid = new ArrayList<>();
-
- for (ItemStack iss : hopper.getFilter().getVoidList()) {
- ovoid.add(iss.getType());
- }
-
- if (is.getType() == Material.AIR) {
- return 10;
- }
- ItemStack item = is;
- ItemStack newItem = is.clone();
-
- if ((item.getAmount() - amt) <= 0) {
- amt = item.getAmount();
- }
- if ((item.getAmount() - amt) >= 1) {
- newItem.setAmount(newItem.getAmount() - amt);
- is = newItem.clone();
- } else {
- is = null;
- }
-
- newItem.setAmount(amt);
- InventoryHolder ih = null;
- if (!b2.getType().equals(Material.ENDER_CHEST)) {
- ih = (InventoryHolder) b2.getState();
- }
-
- if (b2.getType().equals(Material.ENDER_CHEST)) {
- try {
- OfflinePlayer op = Bukkit.getOfflinePlayer(UUID.fromString(instance.dataFile.getConfig().getString("data.enderTracker." + Arconix.pl().getApi().serialize().serializeLocation(b2))));
- if (op.isOnline() && canHop(op.getPlayer().getEnderChest(), newItem, amt)) {
- if (!ovoid.contains(it.getType())) {
- op.getPlayer().getEnderChest().addItem(newItem);
- }
- isS[place] = is;
- hopperBlock.getInventory().setContents(isS);
- }
-
- } catch (Exception ignore) {
- }
- } else {
- if (!canHop(ih.getInventory(), newItem, amt) || b2.getType() == Material.BREWING_STAND) {
- return 4;
- }
- if (b2.getType() == Material.FURNACE) {
- FurnaceInventory fi = (FurnaceInventory) ih.getInventory();
- int amtt = 0;
- boolean dont = false;
- if (fi.getSmelting() != null) {
- amtt = fi.getSmelting().getAmount();
- if (fi.getSmelting().getType() != newItem.getType()) {
- dont = true;
- } else {
- if (fi.getSmelting().getAmount() == fi.getSmelting().getMaxStackSize()) {
- dont = true;
- }
- }
- }
- if (!dont) {
- if (amtt + newItem.getAmount() <= 64) {
- if (!ovoid.contains(it.getType())) {
- ih.getInventory().addItem(newItem);
- }
- isS[place] = is;
- hopperBlock.getInventory().setContents(isS);
- }
- }
- } else {
- if (!ovoid.contains(it.getType())) {
- ih.getInventory().addItem(newItem);
- }
- isS[place] = is;
- hopperBlock.getInventory().setContents(isS);
- }
- }
- return 4;
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return 0;
- }
-
- public boolean canHop(Inventory i, ItemStack item, int hop) {
- try {
- if (i.firstEmpty() != -1) {
- return true;
- }
- boolean can = false;
- for (ItemStack it : i.getContents()) {
- if (it == null) {
- can = true;
- break;
- } else {
- if (it.isSimilar(item)) {
- if ((it.getAmount() + hop) <= it.getMaxStackSize()) {
- can = true;
- break;
- }
- }
- }
- }
- return can;
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return false;
- }
+package com.songoda.epichoppers.handlers;
+
+import com.songoda.arconix.plugin.Arconix;
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.hopper.EHopper;
+import com.songoda.epichoppers.utils.Debugger;
+import org.apache.commons.lang.StringUtils;
+import org.bukkit.*;
+import org.bukkit.block.Block;
+import org.bukkit.block.Hopper;
+import org.bukkit.configuration.ConfigurationSection;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.Item;
+import org.bukkit.inventory.FurnaceInventory;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.InventoryHolder;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.metadata.FixedMetadataValue;
+
+import java.util.*;
+
+/**
+ * Created by songoda on 3/14/2017.
+ */
+public class HopHandler {
+
+ private EpicHoppersPlugin instance;
+
+ public HopHandler(EpicHoppersPlugin instance) {
+ try {
+ this.instance = instance;
+ Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> {
+ hopperCleaner();
+ Bukkit.getScheduler().scheduleSyncRepeatingTask(instance, this::hopperRunner, 0, instance.getConfig().getLong("Main.Amount of Ticks Between Hops"));
+ }, 40L);
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ }
+
+ private void hopperCleaner() {
+ try {
+ if (instance.dataFile.getConfig().contains("data.sync")) {
+ ConfigurationSection cs = instance.dataFile.getConfig().getConfigurationSection("data.sync");
+ for (String key : cs.getKeys(false)) {
+ if (Arconix.pl().getApi().serialize().unserializeLocation(key).getWorld() != null) {
+ Block b = Arconix.pl().getApi().serialize().unserializeLocation(key).getBlock();
+ if (b == null || !(b.getState() instanceof Hopper)) {
+ instance.dataFile.getConfig().getConfigurationSection("data.sync").set(key, null);
+ instance.getLogger().info("EpicHoppers Removing non-hopper entry: " + key);
+ }
+ }
+ }
+ }
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ }
+
+ public Map blockTick = new HashMap<>();
+
+ private void hopperRunner() {
+ try {
+ Set metaItems = new HashSet<>();
+
+ for (com.songoda.epichoppers.api.hopper.Hopper hopper : instance.getHopperManager().getHoppers().values()) {
+
+ Location location = hopper.getLocation();
+
+ int x = location.getBlockX() >> 4;
+ int z = location.getBlockZ() >> 4;
+
+ try {
+ if (!location.getWorld().isChunkLoaded(x, z)) {
+ continue;
+ }
+ } catch (Exception e) {
+ continue;
+ }
+ Block block = location.getBlock();
+
+
+ if (block == null || !(block.getState() instanceof Hopper)) {
+ instance.getHopperManager().removeHopper(location);
+ instance.getLogger().info("EpicHoppers Removing non-hopper entry: " + location.toString());
+ }
+
+ org.bukkit.block.Hopper hopperBlock = (org.bukkit.block.Hopper) (block != null ? block.getState() : null);
+
+ if (hopper.getLevel().getBlockBreak() != 0) {
+ int amt = hopper.getLevel().getBlockBreak();
+ if (!blockTick.containsKey(block)) {
+ blockTick.put(block, 1);
+ } else {
+ int tick = blockTick.get(block);
+ int put = tick + 1;
+ blockTick.put(block, put);
+ if (tick >= amt) {
+ Block above = block.getRelative(0, 1, 0);
+ if (above.getType() != Material.AIR && !instance.getConfig().getStringList("Main.BlockBreak Blacklisted Blocks").contains(above.getType().name())) {
+ above.getWorld().playSound(above.getLocation(), Sound.BLOCK_STONE_BREAK, 1F, 1F);
+ Location locationAbove = above.getLocation();
+ locationAbove.add(.5, .5, .5);
+
+ float ox = (float) (0 + (Math.random() * .5));
+ float oy = (float) (0 + (Math.random() * .5));
+ float oz = (float) (0 + (Math.random() * .5));
+ Arconix.pl().getApi().packetLibrary.getParticleManager().broadcastParticle(locationAbove, ox, oy, oz, 0, instance.getConfig().getString("Main.BlockBreak Particle Type"), 15);
+
+ above.breakNaturally();
+ }
+ blockTick.remove(block);
+ }
+ }
+ }
+ if (hopper.getLevel().getSuction() != 0) {
+ int suck = hopper.getLevel().getSuction();
+ double radius = suck + .5;
+
+ Collection nearbyEntite = block.getLocation().getWorld().getNearbyEntities(block.getLocation().add(0.5, 0.5, 0.5), radius, radius, radius);
+
+ for (Entity e : nearbyEntite) {
+ if (!(e instanceof Item) || e.getTicksLived() < 10 || e.getLocation().getBlock().getType() == Material.HOPPER) {
+ continue;
+ }
+ ItemStack hopItem = ((Item) e).getItemStack().clone();
+ if (hopItem.getType().name().contains("SHULKER_BOX"))
+ continue;
+ if (hopItem.hasItemMeta() && hopItem.getItemMeta().hasDisplayName() &&
+ StringUtils.substring(hopItem.getItemMeta().getDisplayName(), 0, 3).equals("***")) {
+ continue; //Compatibility with Shop instance: https://www.spigotmc.org/resources/shop-a-simple-intuitive-shop-instance.9628/
+ }
+ if (e.hasMetadata("grabbed"))
+ continue;
+ ItemStack item = ((Item) e).getItemStack();
+ if (!canHop(hopperBlock.getInventory(), item, 1)) {
+ continue;
+ }
+ ((Item) e).setPickupDelay(999);
+ e.setMetadata("grabbed", new FixedMetadataValue(instance, ""));
+ metaItems.add(e);
+ if (!e.isOnGround())
+ continue;
+ float xx = (float) (0 + (Math.random() * .3));
+ float yy = (float) (0 + (Math.random() * .3));
+ float zz = (float) (0 + (Math.random() * .3));
+ Arconix.pl().getApi().packetLibrary.getParticleManager().broadcastParticle(e.getLocation(), xx, yy, zz, 0, "FLAME", 5);
+ e.remove();
+ hopperBlock.getInventory().addItem(hopItem);
+ break;
+ }
+ }
+ if (hopper.getSyncedBlock() == null) continue;
+ Location dest = hopper.getSyncedBlock().getLocation();
+ if (dest == null) {
+ hopper.setSyncedBlock(null);
+ continue;
+ }
+ int destx = location.getBlockX() >> 4;
+ int destz = location.getBlockZ() >> 4;
+ if (!dest.getWorld().isChunkLoaded(destx, destz)) {
+ continue;
+ }
+ Block b2 = dest.getBlock();
+ if (!b2.getType().equals(Material.HOPPER) && !b2.getType().equals(Material.CHEST) && !b2.getType().equals(Material.TRAPPED_CHEST) && !(b2.getType().equals(Material.ENDER_CHEST))) {
+ hopper.setSyncedBlock(null);
+ continue;
+ }
+
+ int amt = hopper.getLevel().getAmount();
+
+ ItemStack[] is = hopperBlock.getInventory().getContents();
+
+ List whiteList = hopper.getFilter().getWhiteList();
+
+ List blackList = hopper.getFilter().getBlackList();
+
+ int num = 0;
+ while (num != 5) {
+ ItemStack it = null;
+ if (is[num] != null) {
+ it = is[num].clone();
+ it.setAmount(1);
+ }
+ if (is[num] != null
+ && !whiteList.isEmpty()
+ && !whiteList.contains(it)) {
+ doBlacklist(hopperBlock, hopper, is[num].clone(), is, amt, num);
+ } else if (is[num] != null && !blackList.contains(it)) {
+ int numm = addItem(hopperBlock, hopper, b2, is[num], is, amt, num);
+ if (numm != 10)
+ num = numm;
+ } else if (is[num] != null && blackList.contains(it)) {
+ doBlacklist(hopperBlock, hopper, is[num].clone(), is, amt, num);
+ }
+ num++;
+ }
+
+
+ }
+
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ }
+
+ private void doBlacklist(Hopper hopperBlock, com.songoda.epichoppers.api.hopper.Hopper hopper, ItemStack item, ItemStack[] isS, int amt, int place) {
+ try {
+ Location loc = hopperBlock.getLocation();
+ Block b = loc.getBlock();
+ if (hopper.getFilter().getEndPoint() != null
+ && b != null && b.getState() instanceof Hopper) {
+ Location dest = hopper.getFilter().getEndPoint().getLocation();
+ int destx = loc.getBlockX() >> 4;
+ int destz = loc.getBlockZ() >> 4;
+ if (!dest.getWorld().isChunkLoaded(destx, destz)) {
+ return;
+ }
+ Block b2 = dest.getBlock();
+
+ addItem(hopperBlock, hopper, b2, item, isS, amt, place);
+ }
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ }
+
+ private int addItem(Hopper hopperBlock, com.songoda.epichoppers.api.hopper.Hopper hopper, Block b2, ItemStack is, ItemStack[] isS, int amt, int place) {
+ try {
+ ItemStack it = null;
+ if (is != null) {
+ it = is.clone();
+ it.setAmount(1);
+ }
+
+ List ovoid = new ArrayList<>();
+
+ for (ItemStack iss : hopper.getFilter().getVoidList()) {
+ ovoid.add(iss.getType());
+ }
+
+ if (is.getType() == Material.AIR) {
+ return 10;
+ }
+ ItemStack item = is;
+ ItemStack newItem = is.clone();
+
+ if ((item.getAmount() - amt) <= 0) {
+ amt = item.getAmount();
+ }
+ if ((item.getAmount() - amt) >= 1) {
+ newItem.setAmount(newItem.getAmount() - amt);
+ is = newItem.clone();
+ } else {
+ is = null;
+ }
+
+ newItem.setAmount(amt);
+ InventoryHolder ih = null;
+ if (!b2.getType().equals(Material.ENDER_CHEST)) {
+ ih = (InventoryHolder) b2.getState();
+ }
+
+ if (b2.getType().equals(Material.ENDER_CHEST)) {
+ try {
+ OfflinePlayer op = Bukkit.getOfflinePlayer(UUID.fromString(instance.dataFile.getConfig().getString("data.enderTracker." + Arconix.pl().getApi().serialize().serializeLocation(b2))));
+ if (op.isOnline() && canHop(op.getPlayer().getEnderChest(), newItem, amt)) {
+ if (!ovoid.contains(it.getType())) {
+ op.getPlayer().getEnderChest().addItem(newItem);
+ }
+ isS[place] = is;
+ hopperBlock.getInventory().setContents(isS);
+ }
+
+ } catch (Exception ignore) {
+ }
+ } else {
+ if (!canHop(ih.getInventory(), newItem, amt) || b2.getType() == Material.BREWING_STAND) {
+ return 4;
+ }
+ if (b2.getType() == Material.FURNACE) {
+ FurnaceInventory fi = (FurnaceInventory) ih.getInventory();
+ int amtt = 0;
+ boolean dont = false;
+ if (fi.getSmelting() != null) {
+ amtt = fi.getSmelting().getAmount();
+ if (fi.getSmelting().getType() != newItem.getType()) {
+ dont = true;
+ } else {
+ if (fi.getSmelting().getAmount() == fi.getSmelting().getMaxStackSize()) {
+ dont = true;
+ }
+ }
+ }
+ if (!dont) {
+ if (amtt + newItem.getAmount() <= 64) {
+ if (!ovoid.contains(it.getType())) {
+ ih.getInventory().addItem(newItem);
+ }
+ isS[place] = is;
+ hopperBlock.getInventory().setContents(isS);
+ }
+ }
+ } else {
+ if (!ovoid.contains(it.getType())) {
+ ih.getInventory().addItem(newItem);
+ }
+ isS[place] = is;
+ hopperBlock.getInventory().setContents(isS);
+ }
+ }
+ return 4;
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return 0;
+ }
+
+ public boolean canHop(Inventory i, ItemStack item, int hop) {
+ try {
+ if (i.firstEmpty() != -1) {
+ return true;
+ }
+ boolean can = false;
+ for (ItemStack it : i.getContents()) {
+ if (it == null) {
+ can = true;
+ break;
+ } else {
+ if (it.isSimilar(item)) {
+ if ((it.getAmount() + hop) <= it.getMaxStackSize()) {
+ can = true;
+ break;
+ }
+ }
+ }
+ }
+ return can;
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return false;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/songoda/epichoppers/Handlers/TeleportHandler.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/handlers/TeleportHandler.java
similarity index 82%
rename from src/main/java/com/songoda/epichoppers/Handlers/TeleportHandler.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/handlers/TeleportHandler.java
index f139251..3cfa31b 100644
--- a/src/main/java/com/songoda/epichoppers/Handlers/TeleportHandler.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/handlers/TeleportHandler.java
@@ -1,109 +1,113 @@
-package com.songoda.epichoppers.Handlers;
-
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Hopper.Hopper;
-import com.songoda.epichoppers.Utils.Debugger;
-import com.songoda.epichoppers.Utils.Methods;
-import org.bukkit.Bukkit;
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-import org.bukkit.block.BlockFace;
-import org.bukkit.entity.Player;
-
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-public class TeleportHandler {
-
- //Teleport from - teleport 2
- private final Map teleportFrom = new HashMap<>();
-
- private EpicHoppers instance;
-
- public TeleportHandler(EpicHoppers instance) {
- try {
- this.instance = instance;
- Bukkit.getScheduler().scheduleSyncRepeatingTask(instance, this::teleportRunner, 0, instance.getConfig().getLong("Main.Amount of Ticks Between Teleport"));
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- }
-
- private void teleportRunner() {
- for (Player player : Bukkit.getOnlinePlayers()) {
- if (!instance.getConfig().getBoolean("Main.Allow Players To Teleport Through Hoppers") || !player.hasPermission("EpicHoppers.Teleport")) {
- continue;
- }
-
- Location location = player.getLocation().getBlock().getRelative(BlockFace.DOWN).getLocation();
-
- if (!instance.getHopperManager().isHopper(location)) {
- continue;
- }
-
- Hopper hopper = instance.getHopperManager().getHopper(location);
-
- if (!hopper.isWalkOnTeleport()) continue;
-
- if (instance.lastTp.containsKey(player)) {
- long duration = (new Date()).getTime() - instance.lastTp.get(player).getTime();
- if (duration <= 5 * 1000) {
- continue;
- }
- }
-
- tpPlayer(player, hopper);
- instance.lastTp.put(player, new Date());
- }
- }
-
- public void tpPlayer(Player player, Hopper hopper) {
- try {
- EpicHoppers instance = EpicHoppers.getInstance();
- Block next = hopper.getLocation().getBlock();
- int num = 1;
- while (instance.getHopperManager().isHopper(next.getLocation()) && instance.getHopperManager().getHopper(next.getLocation()).getSyncedBlock() != null && num != 15) {
- Hopper nextHopper = instance.getHopperManager().getHopper(next);
- if (nextHopper.getSyncedBlock() != null) {
- next = nextHopper.getSyncedBlock();
- }
- if (!next.getType().equals(Material.HOPPER)) {
- instance.getHopperManager().removeHopper(nextHopper.getLocation());
- break;
- }
-
- Location location = next.getLocation();
- location.setX(location.getX() + 0.5);
- location.setZ(location.getZ() + 0.5);
- location.setY(location.getY() + 1);
- location.setPitch(player.getLocation().getPitch());
- location.setDirection(player.getLocation().getDirection());
- player.teleport(location);
- next = player.getLocation().subtract(0, 0.5, 0).getBlock();
-
- num++;
- }
- if (num == 1 && teleportFrom.containsKey(hopper.getLocation())) {
- Location location = teleportFrom.get(hopper.getLocation());
- location.setX(location.getX() + 0.5);
- location.setZ(location.getZ() + 0.5);
- location.setY(location.getY() + 1);
- location.setPitch(player.getLocation().getPitch());
- location.setDirection(player.getLocation().getDirection());
- player.teleport(location);
- next = player.getLocation().subtract(0, 0.5, 0).getBlock();
- num ++;
-
- }
- if (num != 1) {
- teleportFrom.put(next.getLocation(), hopper.getLocation());
- Methods.doParticles(player, hopper.getLocation());
- Methods.doParticles(player, next.getLocation());
- }
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- }
-}
+package com.songoda.epichoppers.handlers;
+
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.api.hopper.Hopper;
+import com.songoda.epichoppers.hopper.EHopper;
+import com.songoda.epichoppers.player.PlayerData;
+import com.songoda.epichoppers.utils.Debugger;
+import com.songoda.epichoppers.utils.Methods;
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.block.BlockFace;
+import org.bukkit.entity.Player;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+public class TeleportHandler {
+
+ //Teleport from - teleport 2
+ private final Map teleportFrom = new HashMap<>();
+
+ private EpicHoppersPlugin instance;
+
+ public TeleportHandler(EpicHoppersPlugin instance) {
+ try {
+ this.instance = instance;
+ Bukkit.getScheduler().scheduleSyncRepeatingTask(instance, this::teleportRunner, 0, instance.getConfig().getLong("Main.Amount of Ticks Between Teleport"));
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ }
+
+ private void teleportRunner() {
+ for (Player player : Bukkit.getOnlinePlayers()) {
+ if (!instance.getConfig().getBoolean("Main.Allow Players To Teleport Through Hoppers") || !player.hasPermission("EpicHoppers.Teleport")) {
+ continue;
+ }
+
+ Location location = player.getLocation().getBlock().getRelative(BlockFace.DOWN).getLocation();
+
+ if (!instance.getHopperManager().isHopper(location)) {
+ continue;
+ }
+
+ Hopper hopper = instance.getHopperManager().getHopper(location);
+
+ if (!hopper.isWalkOnTeleport()) continue;
+
+ PlayerData playerData = instance.getPlayerDataManager().getPlayerData(player);
+
+ if (playerData.getLastTeleport() != null) {
+ long duration = (new Date()).getTime() - playerData.getLastTeleport().getTime();
+ if (duration <= 5 * 1000) {
+ continue;
+ }
+ }
+
+ tpPlayer(player, hopper);
+ playerData.setLastTeleport(new Date());
+ }
+ }
+
+ public void tpPlayer(Player player, Hopper hopper) {
+ try {
+ EpicHoppersPlugin instance = EpicHoppersPlugin.getInstance();
+ Block next = hopper.getLocation().getBlock();
+ int num = 1;
+ while (instance.getHopperManager().isHopper(next.getLocation()) && instance.getHopperManager().getHopper(next.getLocation()).getSyncedBlock() != null && num != 15) {
+ Hopper nextHopper = instance.getHopperManager().getHopper(next);
+ if (nextHopper.getSyncedBlock() != null) {
+ next = nextHopper.getSyncedBlock();
+ }
+ if (!next.getType().equals(Material.HOPPER)) {
+ instance.getHopperManager().removeHopper(nextHopper.getLocation());
+ break;
+ }
+
+ Location location = next.getLocation();
+ location.setX(location.getX() + 0.5);
+ location.setZ(location.getZ() + 0.5);
+ location.setY(location.getY() + 1);
+ location.setPitch(player.getLocation().getPitch());
+ location.setDirection(player.getLocation().getDirection());
+ player.teleport(location);
+ next = player.getLocation().subtract(0, 0.5, 0).getBlock();
+
+ num++;
+ }
+ if (num == 1 && teleportFrom.containsKey(hopper.getLocation())) {
+ Location location = teleportFrom.get(hopper.getLocation());
+ location.setX(location.getX() + 0.5);
+ location.setZ(location.getZ() + 0.5);
+ location.setY(location.getY() + 1);
+ location.setPitch(player.getLocation().getPitch());
+ location.setDirection(player.getLocation().getDirection());
+ player.teleport(location);
+ next = player.getLocation().subtract(0, 0.5, 0).getBlock();
+ num ++;
+
+ }
+ if (num != 1) {
+ teleportFrom.put(next.getLocation(), hopper.getLocation());
+ Methods.doParticles(player, hopper.getLocation());
+ Methods.doParticles(player, next.getLocation());
+ }
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ }
+}
diff --git a/src/main/java/com/songoda/epichoppers/Hooks/ASkyBlockHook.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/ASkyBlockHook.java
similarity index 85%
rename from src/main/java/com/songoda/epichoppers/Hooks/ASkyBlockHook.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/ASkyBlockHook.java
index 8c47823..c6e1b8f 100644
--- a/src/main/java/com/songoda/epichoppers/Hooks/ASkyBlockHook.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/ASkyBlockHook.java
@@ -1,64 +1,64 @@
-package com.songoda.epichoppers.Hooks;
-
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Utils.Debugger;
-import com.wasteofplastic.askyblock.ASkyBlockAPI;
-import org.bukkit.Location;
-import org.bukkit.entity.Player;
-
-import java.util.List;
-import java.util.Set;
-import java.util.UUID;
-
-/**
- * Created by songoda on 3/17/2017.
- */
-public class ASkyBlockHook extends Hook {
-
- private ASkyBlockAPI as;
-
- public ASkyBlockHook() {
- super("ASkyblock");
- if (isEnabled()) {
- as = ASkyBlockAPI.getInstance();
- EpicHoppers plugin = EpicHoppers.getInstance();
- plugin.hooks.ASkyBlockHook = this;
- }
- }
-
- @Override
- public boolean canBuild(Player p, Location location) {
- try {
- if (hasBypass(p) || as.getIslandAt(location) == null) return true;
-
- UUID owner = as.getOwner(location);
- List list = as.getTeamMembers(owner);
- Set list2 = as.getCoopIslands(p);
-
- if (owner == null) return true;
-
- for (UUID uuid : list) {
- if (uuid.equals(p.getUniqueId())) {
- return true;
- }
- }
-
- for (Location loc : list2) {
- if (as.getIslandAt(location).getOwner().equals(as.getIslandAt(loc).getOwner())) {
- return true;
- }
- }
-
- return owner.equals(p.getUniqueId());
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return true;
- }
-
- @Override
- public boolean isInClaim(String uuid, Location location) {
- return as.getOwner(location).toString().equals(uuid);
- }
-
-}
+package com.songoda.epichoppers.hooks;
+
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.utils.Debugger;
+import com.wasteofplastic.askyblock.ASkyBlockAPI;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+
+/**
+ * Created by songoda on 3/17/2017.
+ */
+public class ASkyBlockHook extends Hook {
+
+ private ASkyBlockAPI as;
+
+ public ASkyBlockHook() {
+ super("ASkyblock");
+ if (isEnabled()) {
+ as = ASkyBlockAPI.getInstance();
+ EpicHoppersPlugin plugin = EpicHoppersPlugin.getInstance();
+ plugin.hooks.ASkyBlockHook = this;
+ }
+ }
+
+ @Override
+ public boolean canBuild(Player p, Location location) {
+ try {
+ if (hasBypass(p) || as.getIslandAt(location) == null) return true;
+
+ UUID owner = as.getOwner(location);
+ List list = as.getTeamMembers(owner);
+ Set list2 = as.getCoopIslands(p);
+
+ if (owner == null) return true;
+
+ for (UUID uuid : list) {
+ if (uuid.equals(p.getUniqueId())) {
+ return true;
+ }
+ }
+
+ for (Location loc : list2) {
+ if (as.getIslandAt(location).getOwner().equals(as.getIslandAt(loc).getOwner())) {
+ return true;
+ }
+ }
+
+ return owner.equals(p.getUniqueId());
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return true;
+ }
+
+ @Override
+ public boolean isInClaim(String uuid, Location location) {
+ return as.getOwner(location).toString().equals(uuid);
+ }
+
+}
diff --git a/src/main/java/com/songoda/epichoppers/Hooks/FactionsHook.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/FactionsHook.java
similarity index 84%
rename from src/main/java/com/songoda/epichoppers/Hooks/FactionsHook.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/FactionsHook.java
index 95ec71e..7dd921d 100644
--- a/src/main/java/com/songoda/epichoppers/Hooks/FactionsHook.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/FactionsHook.java
@@ -1,56 +1,56 @@
-package com.songoda.epichoppers.Hooks;
-
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Utils.Debugger;
-import me.markeh.factionsframework.entities.FPlayer;
-import me.markeh.factionsframework.entities.FPlayers;
-import me.markeh.factionsframework.entities.Faction;
-import me.markeh.factionsframework.entities.Factions;
-import org.bukkit.Location;
-import org.bukkit.entity.Player;
-
-/**
- * Created by songoda on 3/17/2017.
- */
-public class FactionsHook extends Hook {
-
- public FactionsHook() {
- super("Factions");
- EpicHoppers plugin = EpicHoppers.getInstance();
- if (isEnabled())
- plugin.hooks.GriefPreventionHook = this;
- }
-
- @Override
- public boolean canBuild(Player p, Location location) {
- try {
- FPlayer fp = FPlayers.getBySender(p);
-
- Faction faction = Factions.getFactionAt(location);
-
- return (fp.getFaction().equals(faction) || faction.isNone());
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return false;
- }
-
- @Override
- public boolean isInClaim(String id, Location location) {
- Faction faction = Factions.getFactionAt(location);
-
- return faction.getId().equals(id);
- }
-
- @Override
- public String getClaimId(String name) {
- try {
- Faction faction = Factions.getByName(name, "");
-
- return faction.getId();
- } catch (Exception ignore) {
- }
- return null;
- }
-
-}
+package com.songoda.epichoppers.hooks;
+
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.utils.Debugger;
+import me.markeh.factionsframework.entities.FPlayer;
+import me.markeh.factionsframework.entities.FPlayers;
+import me.markeh.factionsframework.entities.Faction;
+import me.markeh.factionsframework.entities.Factions;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+
+/**
+ * Created by songoda on 3/17/2017.
+ */
+public class FactionsHook extends Hook {
+
+ public FactionsHook() {
+ super("Factions");
+ EpicHoppersPlugin plugin = EpicHoppersPlugin.getInstance();
+ if (isEnabled())
+ plugin.hooks.GriefPreventionHook = this;
+ }
+
+ @Override
+ public boolean canBuild(Player p, Location location) {
+ try {
+ FPlayer fp = FPlayers.getBySender(p);
+
+ Faction faction = Factions.getFactionAt(location);
+
+ return (fp.getFaction().equals(faction) || faction.isNone());
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return false;
+ }
+
+ @Override
+ public boolean isInClaim(String id, Location location) {
+ Faction faction = Factions.getFactionAt(location);
+
+ return faction.getId().equals(id);
+ }
+
+ @Override
+ public String getClaimId(String name) {
+ try {
+ Faction faction = Factions.getByName(name, "");
+
+ return faction.getId();
+ } catch (Exception ignore) {
+ }
+ return null;
+ }
+
+}
diff --git a/src/main/java/com/songoda/epichoppers/Hooks/GriefPreventionHook.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/GriefPreventionHook.java
similarity index 79%
rename from src/main/java/com/songoda/epichoppers/Hooks/GriefPreventionHook.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/GriefPreventionHook.java
index feb9d6b..608ec02 100644
--- a/src/main/java/com/songoda/epichoppers/Hooks/GriefPreventionHook.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/GriefPreventionHook.java
@@ -1,37 +1,37 @@
-package com.songoda.epichoppers.Hooks;
-
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Utils.Debugger;
-import me.ryanhamshire.GriefPrevention.Claim;
-import me.ryanhamshire.GriefPrevention.GriefPrevention;
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.entity.Player;
-
-/**
- * Created by songoda on 3/17/2017.
- */
-public class GriefPreventionHook extends Hook {
-
- public GriefPreventionHook() {
- super("GriefPrevention");
- EpicHoppers plugin = EpicHoppers.getInstance();
- if (isEnabled())
- plugin.hooks.GriefPreventionHook = this;
- }
-
- @Override
- public boolean canBuild(Player p, Location location) {
- try {
- if (hasBypass(p))
- return true;
-
- Claim claim = GriefPrevention.instance.dataStore.getClaimAt(location, false, null);
- return claim != null && claim.allowBuild(p, Material.STONE) == null;
-
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return false;
- }
+package com.songoda.epichoppers.hooks;
+
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.utils.Debugger;
+import me.ryanhamshire.GriefPrevention.Claim;
+import me.ryanhamshire.GriefPrevention.GriefPrevention;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+
+/**
+ * Created by songoda on 3/17/2017.
+ */
+public class GriefPreventionHook extends Hook {
+
+ public GriefPreventionHook() {
+ super("GriefPrevention");
+ EpicHoppersPlugin plugin = EpicHoppersPlugin.getInstance();
+ if (isEnabled())
+ plugin.hooks.GriefPreventionHook = this;
+ }
+
+ @Override
+ public boolean canBuild(Player p, Location location) {
+ try {
+ if (hasBypass(p))
+ return true;
+
+ Claim claim = GriefPrevention.instance.dataStore.getClaimAt(location, false, null);
+ return claim != null && claim.allowBuild(p, Material.STONE) == null;
+
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return false;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/songoda/epichoppers/Hooks/Hook.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/Hook.java
similarity index 59%
rename from src/main/java/com/songoda/epichoppers/Hooks/Hook.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/Hook.java
index 979f424..5c8ec58 100644
--- a/src/main/java/com/songoda/epichoppers/Hooks/Hook.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/Hook.java
@@ -1,38 +1,38 @@
-package com.songoda.epichoppers.Hooks;
-
-import com.songoda.epichoppers.EpicHoppers;
-import org.bukkit.Bukkit;
-import org.bukkit.Location;
-import org.bukkit.entity.Player;
-
-public abstract class Hook {
-
- final String pluginName;
-
- protected Hook(String pluginName) {
- this.pluginName = pluginName;
- if (isEnabled())
- EpicHoppers.getInstance().hooks.hooksFile.getConfig().addDefault("hooks." + pluginName, true);
- }
-
- protected boolean isEnabled() {
- return (Bukkit.getPluginManager().isPluginEnabled(pluginName)
- && EpicHoppers.getInstance().hooks.hooksFile.getConfig().getBoolean("hooks." + pluginName, true));
- }
-
- boolean hasBypass(Player p) {
- return p.hasPermission(EpicHoppers.getInstance().getDescription().getName() + ".bypass");
- }
-
- public abstract boolean canBuild(Player p, Location location);
-
- public boolean isInClaim(String id, Location location) {
- return false;
- }
-
- public String getClaimId(String name) {
- return null;
- }
-
-
-}
+package com.songoda.epichoppers.hooks;
+
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+
+public abstract class Hook {
+
+ final String pluginName;
+
+ protected Hook(String pluginName) {
+ this.pluginName = pluginName;
+ if (isEnabled())
+ EpicHoppersPlugin.getInstance().hooks.hooksFile.getConfig().addDefault("hooks." + pluginName, true);
+ }
+
+ protected boolean isEnabled() {
+ return (Bukkit.getPluginManager().isPluginEnabled(pluginName)
+ && EpicHoppersPlugin.getInstance().hooks.hooksFile.getConfig().getBoolean("hooks." + pluginName, true));
+ }
+
+ boolean hasBypass(Player p) {
+ return p.hasPermission(EpicHoppersPlugin.getInstance().getDescription().getName() + ".bypass");
+ }
+
+ public abstract boolean canBuild(Player p, Location location);
+
+ public boolean isInClaim(String id, Location location) {
+ return false;
+ }
+
+ public String getClaimId(String name) {
+ return null;
+ }
+
+
+}
diff --git a/src/main/java/com/songoda/epichoppers/Hooks/KingdomsHook.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/KingdomsHook.java
similarity index 84%
rename from src/main/java/com/songoda/epichoppers/Hooks/KingdomsHook.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/KingdomsHook.java
index 8187961..bba25b0 100644
--- a/src/main/java/com/songoda/epichoppers/Hooks/KingdomsHook.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/KingdomsHook.java
@@ -1,43 +1,43 @@
-package com.songoda.epichoppers.Hooks;
-
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Utils.Debugger;
-import org.bukkit.Location;
-import org.bukkit.entity.Player;
-import org.kingdoms.constants.land.Land;
-import org.kingdoms.constants.land.SimpleChunkLocation;
-import org.kingdoms.constants.player.OfflineKingdomPlayer;
-import org.kingdoms.manager.game.GameManagement;
-
-/**
- * Created by songoda on 3/17/2017.
- */
-public class KingdomsHook extends Hook {
-
- public KingdomsHook() {
- super("Kingdoms");
- EpicHoppers plugin = EpicHoppers.getInstance();
- if (isEnabled())
- plugin.hooks.KingdomsHook = this;
- }
-
- @Override
- public boolean canBuild(Player p, Location location) {
- try {
- if (hasBypass(p)) return true;
-
- OfflineKingdomPlayer pl = GameManagement.getPlayerManager().getOfflineKingdomPlayer(p);
- if (pl.getKingdomPlayer().getKingdom() == null) return true;
-
- SimpleChunkLocation chunkLocation = new SimpleChunkLocation(location.getWorld().getName(), location.getChunk().getX(), location.getChunk().getZ());
- Land land = GameManagement.getLandManager().getOrLoadLand(chunkLocation);
- String owner = land.getOwner();
-
- return pl.getKingdomPlayer().getKingdom().getKingdomName().equals(owner) || owner == null;
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return true;
- }
-
-}
+package com.songoda.epichoppers.hooks;
+
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.utils.Debugger;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+import org.kingdoms.constants.land.Land;
+import org.kingdoms.constants.land.SimpleChunkLocation;
+import org.kingdoms.constants.player.OfflineKingdomPlayer;
+import org.kingdoms.manager.game.GameManagement;
+
+/**
+ * Created by songoda on 3/17/2017.
+ */
+public class KingdomsHook extends Hook {
+
+ public KingdomsHook() {
+ super("Kingdoms");
+ EpicHoppersPlugin plugin = EpicHoppersPlugin.getInstance();
+ if (isEnabled())
+ plugin.hooks.KingdomsHook = this;
+ }
+
+ @Override
+ public boolean canBuild(Player p, Location location) {
+ try {
+ if (hasBypass(p)) return true;
+
+ OfflineKingdomPlayer pl = GameManagement.getPlayerManager().getOfflineKingdomPlayer(p);
+ if (pl.getKingdomPlayer().getKingdom() == null) return true;
+
+ SimpleChunkLocation chunkLocation = new SimpleChunkLocation(location.getWorld().getName(), location.getChunk().getX(), location.getChunk().getZ());
+ Land land = GameManagement.getLandManager().getOrLoadLand(chunkLocation);
+ String owner = land.getOwner();
+
+ return pl.getKingdomPlayer().getKingdom().getKingdomName().equals(owner) || owner == null;
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return true;
+ }
+
+}
diff --git a/src/main/java/com/songoda/epichoppers/Hooks/PlotSquaredHook.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/PlotSquaredHook.java
similarity index 78%
rename from src/main/java/com/songoda/epichoppers/Hooks/PlotSquaredHook.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/PlotSquaredHook.java
index 939af17..2473d69 100644
--- a/src/main/java/com/songoda/epichoppers/Hooks/PlotSquaredHook.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/PlotSquaredHook.java
@@ -1,37 +1,37 @@
-package com.songoda.epichoppers.Hooks;
-
-import com.intellectualcrafters.plot.api.PlotAPI;
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Utils.Debugger;
-import org.bukkit.Location;
-import org.bukkit.entity.Player;
-
-/**
- * Created by songoda on 3/17/2017.
- */
-public class PlotSquaredHook extends Hook {
-
- private PlotAPI plotAPI;
-
- public PlotSquaredHook() {
- super("PlotSquared");
- if (isEnabled()) {
- EpicHoppers plugin = EpicHoppers.getInstance();
- plugin.hooks.PlotSquaredHook = this;
- this.plotAPI = new PlotAPI();
- }
- }
-
- @Override
- public boolean canBuild(Player p, Location location) {
- try {
- return hasBypass(p)
- || (plotAPI.getPlot(location) != null
- && plotAPI.isInPlot(p)
- && plotAPI.getPlot(p) == plotAPI.getPlot(location));
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return true;
- }
+package com.songoda.epichoppers.hooks;
+
+import com.intellectualcrafters.plot.api.PlotAPI;
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.utils.Debugger;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+
+/**
+ * Created by songoda on 3/17/2017.
+ */
+public class PlotSquaredHook extends Hook {
+
+ private PlotAPI plotAPI;
+
+ public PlotSquaredHook() {
+ super("PlotSquared");
+ if (isEnabled()) {
+ EpicHoppersPlugin plugin = EpicHoppersPlugin.getInstance();
+ plugin.hooks.PlotSquaredHook = this;
+ this.plotAPI = new PlotAPI();
+ }
+ }
+
+ @Override
+ public boolean canBuild(Player p, Location location) {
+ try {
+ return hasBypass(p)
+ || (plotAPI.getPlot(location) != null
+ && plotAPI.isInPlot(p)
+ && plotAPI.getPlot(p) == plotAPI.getPlot(location));
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return true;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/songoda/epichoppers/Hooks/RedProtectHook.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/RedProtectHook.java
similarity index 78%
rename from src/main/java/com/songoda/epichoppers/Hooks/RedProtectHook.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/RedProtectHook.java
index d8ba856..bf67480 100644
--- a/src/main/java/com/songoda/epichoppers/Hooks/RedProtectHook.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/RedProtectHook.java
@@ -1,33 +1,33 @@
-package com.songoda.epichoppers.Hooks;
-
-import br.net.fabiozumbi12.RedProtect.Bukkit.API.RedProtectAPI;
-import br.net.fabiozumbi12.RedProtect.Bukkit.RedProtect;
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Utils.Debugger;
-import org.bukkit.Location;
-import org.bukkit.entity.Player;
-
-/**
- * Created by songoda on 3/17/2017.
- */
-public class RedProtectHook extends Hook {
-
- public RedProtectHook() {
- super("RedProtect");
- EpicHoppers plugin = EpicHoppers.getInstance();
- if (isEnabled())
- plugin.hooks.RedProtectHook = this;
- }
-
- @Override
- public boolean canBuild(Player p, Location location) {
- try {
- RedProtectAPI rpAPI = RedProtect.get().getAPI();
- return hasBypass(p) || (rpAPI.getRegion(location) != null && rpAPI.getRegion(location).canBuild(p));
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return true;
- }
-
-}
+package com.songoda.epichoppers.hooks;
+
+import br.net.fabiozumbi12.RedProtect.Bukkit.API.RedProtectAPI;
+import br.net.fabiozumbi12.RedProtect.Bukkit.RedProtect;
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.utils.Debugger;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+
+/**
+ * Created by songoda on 3/17/2017.
+ */
+public class RedProtectHook extends Hook {
+
+ public RedProtectHook() {
+ super("RedProtect");
+ EpicHoppersPlugin plugin = EpicHoppersPlugin.getInstance();
+ if (isEnabled())
+ plugin.hooks.RedProtectHook = this;
+ }
+
+ @Override
+ public boolean canBuild(Player p, Location location) {
+ try {
+ RedProtectAPI rpAPI = RedProtect.get().getAPI();
+ return hasBypass(p) || (rpAPI.getRegion(location) != null && rpAPI.getRegion(location).canBuild(p));
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return true;
+ }
+
+}
diff --git a/src/main/java/com/songoda/epichoppers/Hooks/TownyHook.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/TownyHook.java
similarity index 86%
rename from src/main/java/com/songoda/epichoppers/Hooks/TownyHook.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/TownyHook.java
index f246086..7995084 100644
--- a/src/main/java/com/songoda/epichoppers/Hooks/TownyHook.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/TownyHook.java
@@ -1,56 +1,56 @@
-package com.songoda.epichoppers.Hooks;
-
-import com.palmergames.bukkit.towny.object.Resident;
-import com.palmergames.bukkit.towny.object.TownyUniverse;
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Utils.Debugger;
-import org.bukkit.Location;
-import org.bukkit.entity.Player;
-
-/**
- * Created by songoda on 3/17/2017.
- */
-public class TownyHook extends Hook {
-
- public TownyHook() {
- super("Towny");
- EpicHoppers plugin = EpicHoppers.getInstance();
- if (isEnabled())
- plugin.hooks.TownyHook = this;
- }
-
- @Override
- public boolean canBuild(Player p, Location location) {
- try {
- if (hasBypass(p) || TownyUniverse.isWilderness(location.getBlock())) return true;
- if (!TownyUniverse.getTownBlock(location).hasTown()) return true;
-
- Resident r = TownyUniverse.getDataSource().getResident(p.getName());
- return r.hasTown() && TownyUniverse.getTownName(location).equals(r.getTown().getName());
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return true;
- }
-
- @Override
- public boolean isInClaim(String id, Location location) {
- try {
- return !TownyUniverse.isWilderness(location.getBlock())
- && TownyUniverse.getTownBlock(location).getTown().getUID() == Integer.parseInt(id);
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return false;
- }
-
- @Override
- public String getClaimId(String name) {
- try {
- return TownyUniverse.getDataSource().getTown(name).getUID().toString();
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return null;
- }
-}
+package com.songoda.epichoppers.hooks;
+
+import com.palmergames.bukkit.towny.object.Resident;
+import com.palmergames.bukkit.towny.object.TownyUniverse;
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.utils.Debugger;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+
+/**
+ * Created by songoda on 3/17/2017.
+ */
+public class TownyHook extends Hook {
+
+ public TownyHook() {
+ super("Towny");
+ EpicHoppersPlugin plugin = EpicHoppersPlugin.getInstance();
+ if (isEnabled())
+ plugin.hooks.TownyHook = this;
+ }
+
+ @Override
+ public boolean canBuild(Player p, Location location) {
+ try {
+ if (hasBypass(p) || TownyUniverse.isWilderness(location.getBlock())) return true;
+ if (!TownyUniverse.getTownBlock(location).hasTown()) return true;
+
+ Resident r = TownyUniverse.getDataSource().getResident(p.getName());
+ return r.hasTown() && TownyUniverse.getTownName(location).equals(r.getTown().getName());
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return true;
+ }
+
+ @Override
+ public boolean isInClaim(String id, Location location) {
+ try {
+ return !TownyUniverse.isWilderness(location.getBlock())
+ && TownyUniverse.getTownBlock(location).getTown().getUID() == Integer.parseInt(id);
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return false;
+ }
+
+ @Override
+ public String getClaimId(String name) {
+ try {
+ return TownyUniverse.getDataSource().getTown(name).getUID().toString();
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/songoda/epichoppers/Hooks/USkyBlockHook.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/USkyBlockHook.java
similarity index 82%
rename from src/main/java/com/songoda/epichoppers/Hooks/USkyBlockHook.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/USkyBlockHook.java
index 56d7d34..b762260 100644
--- a/src/main/java/com/songoda/epichoppers/Hooks/USkyBlockHook.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/USkyBlockHook.java
@@ -1,49 +1,49 @@
-package com.songoda.epichoppers.Hooks;
-
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Utils.Debugger;
-import org.bukkit.Bukkit;
-import org.bukkit.Location;
-import org.bukkit.entity.Player;
-import us.talabrek.ultimateskyblock.api.uSkyBlockAPI;
-
-/**
- * Created by songoda on 3/17/2017.
- */
-public class USkyBlockHook extends Hook {
-
- private uSkyBlockAPI usb;
-
- public USkyBlockHook() {
- super("USkyBlock");
- if (isEnabled()) {
- EpicHoppers plugin = EpicHoppers.getInstance();
- plugin.hooks.USkyBlockHook = this;
- this.usb = (uSkyBlockAPI) Bukkit.getPluginManager().getPlugin(pluginName);
- }
- }
-
- @Override
- public boolean canBuild(Player p, Location location) {
- try {
- if (hasBypass(p)) return true;
-
- for (Player pl : usb.getIslandInfo(location).getOnlineMembers()) {
- if (pl.equals(p)) {
- return true;
- }
- }
-
- return usb.getIslandInfo(location).isLeader(p);
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return false;
- }
-
- @Override
- public boolean isInClaim(String uuid, Location location) {
- return usb.getIslandInfo(location).getLeader().equals(uuid);
- }
-
-}
+package com.songoda.epichoppers.hooks;
+
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.utils.Debugger;
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+import us.talabrek.ultimateskyblock.api.uSkyBlockAPI;
+
+/**
+ * Created by songoda on 3/17/2017.
+ */
+public class USkyBlockHook extends Hook {
+
+ private uSkyBlockAPI usb;
+
+ public USkyBlockHook() {
+ super("USkyBlock");
+ if (isEnabled()) {
+ EpicHoppersPlugin plugin = EpicHoppersPlugin.getInstance();
+ plugin.hooks.USkyBlockHook = this;
+ this.usb = (uSkyBlockAPI) Bukkit.getPluginManager().getPlugin(pluginName);
+ }
+ }
+
+ @Override
+ public boolean canBuild(Player p, Location location) {
+ try {
+ if (hasBypass(p)) return true;
+
+ for (Player pl : usb.getIslandInfo(location).getOnlineMembers()) {
+ if (pl.equals(p)) {
+ return true;
+ }
+ }
+
+ return usb.getIslandInfo(location).isLeader(p);
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return false;
+ }
+
+ @Override
+ public boolean isInClaim(String uuid, Location location) {
+ return usb.getIslandInfo(location).getLeader().equals(uuid);
+ }
+
+}
diff --git a/src/main/java/com/songoda/epichoppers/Hooks/WorldGuardHook.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/WorldGuardHook.java
similarity index 75%
rename from src/main/java/com/songoda/epichoppers/Hooks/WorldGuardHook.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/WorldGuardHook.java
index dbd0a76..338d9b3 100644
--- a/src/main/java/com/songoda/epichoppers/Hooks/WorldGuardHook.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hooks/WorldGuardHook.java
@@ -1,31 +1,31 @@
-package com.songoda.epichoppers.Hooks;
-
-import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Utils.Debugger;
-import org.bukkit.Location;
-import org.bukkit.entity.Player;
-
-/**
- * Created by songoda on 3/17/2017.
- */
-public class WorldGuardHook extends Hook {
-
- private EpicHoppers plugin = EpicHoppers.getInstance();
-
- public WorldGuardHook() {
- super("WorldGuard");
- if (isEnabled())
- plugin.hooks.WorldGuardHook = this;
- }
-
- @Override
- public boolean canBuild(Player p, Location location) {
- try {
- return p.hasPermission(plugin.getDescription().getName() + ".bypass") || WorldGuardPlugin.inst().canBuild(p, location);
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return false;
- }
-}
+package com.songoda.epichoppers.hooks;
+
+import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.utils.Debugger;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+
+/**
+ * Created by songoda on 3/17/2017.
+ */
+public class WorldGuardHook extends Hook {
+
+ private EpicHoppersPlugin plugin = EpicHoppersPlugin.getInstance();
+
+ public WorldGuardHook() {
+ super("WorldGuard");
+ if (isEnabled())
+ plugin.hooks.WorldGuardHook = this;
+ }
+
+ @Override
+ public boolean canBuild(Player p, Location location) {
+ try {
+ return p.hasPermission(plugin.getDescription().getName() + ".bypass") || WorldGuardPlugin.inst().canBuild(p, location);
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return false;
+ }
+}
diff --git a/src/main/java/com/songoda/epichoppers/Hopper/Filter.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/EFilter.java
similarity index 82%
rename from src/main/java/com/songoda/epichoppers/Hopper/Filter.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/EFilter.java
index 6d7ee77..60eceb0 100644
--- a/src/main/java/com/songoda/epichoppers/Hopper/Filter.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/EFilter.java
@@ -1,51 +1,60 @@
-package com.songoda.epichoppers.Hopper;
-
-import org.bukkit.block.Block;
-import org.bukkit.inventory.ItemStack;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class Filter {
-
- private List whiteList = new ArrayList<>();
- private List blackList = new ArrayList<>();
- private List voidList = new ArrayList<>();
-
- private Block endPoint;
-
- public List getWhiteList() {
- if (whiteList == null) return new ArrayList<>();
- return whiteList;
- }
-
- public void setWhiteList(List whiteList) {
- this.whiteList = whiteList;
- }
-
- public List getBlackList() {
- if (blackList == null) return new ArrayList<>();
- return blackList;
- }
-
- public void setBlackList(List blackList) {
- this.blackList = blackList;
- }
-
- public List getVoidList() {
- if (voidList == null) return new ArrayList<>();
- return voidList;
- }
-
- public void setVoidList(List voidList) {
- this.voidList = voidList;
- }
-
- public Block getEndPoint() {
- return endPoint;
- }
-
- public void setEndPoint(Block endPoint) {
- this.endPoint = endPoint;
- }
-}
+package com.songoda.epichoppers.hopper;
+
+import com.songoda.epichoppers.api.hopper.Filter;
+import org.bukkit.block.Block;
+import org.bukkit.inventory.ItemStack;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class EFilter implements Filter {
+
+ private List whiteList = new ArrayList<>();
+ private List blackList = new ArrayList<>();
+ private List voidList = new ArrayList<>();
+
+ private Block endPoint;
+
+ @Override
+ public List getWhiteList() {
+ if (whiteList == null) return new ArrayList<>();
+ return whiteList;
+ }
+
+ @Override
+ public void setWhiteList(List whiteList) {
+ this.whiteList = whiteList;
+ }
+
+ @Override
+ public List getBlackList() {
+ if (blackList == null) return new ArrayList<>();
+ return blackList;
+ }
+
+ @Override
+ public void setBlackList(List blackList) {
+ this.blackList = blackList;
+ }
+
+ @Override
+ public List getVoidList() {
+ if (voidList == null) return new ArrayList<>();
+ return voidList;
+ }
+
+ @Override
+ public void setVoidList(List voidList) {
+ this.voidList = voidList;
+ }
+
+ @Override
+ public Block getEndPoint() {
+ return endPoint;
+ }
+
+ @Override
+ public void setEndPoint(Block endPoint) {
+ this.endPoint = endPoint;
+ }
+}
diff --git a/src/main/java/com/songoda/epichoppers/Hopper/Hopper.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/EHopper.java
similarity index 85%
rename from src/main/java/com/songoda/epichoppers/Hopper/Hopper.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/EHopper.java
index ce88191..109c525 100644
--- a/src/main/java/com/songoda/epichoppers/Hopper/Hopper.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/EHopper.java
@@ -1,486 +1,517 @@
-package com.songoda.epichoppers.Hopper;
-
-import com.songoda.arconix.plugin.Arconix;
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Utils.Debugger;
-import com.songoda.epichoppers.Utils.Methods;
-import net.milkbowl.vault.economy.Economy;
-import org.bukkit.*;
-import org.bukkit.block.Block;
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.Inventory;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.ItemMeta;
-import org.bukkit.plugin.RegisteredServiceProvider;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-/**
- * Created by songoda on 3/14/2017.
- */
-public class Hopper {
-
- private Location location;
- private Level level;
- private UUID lastPlayer;
- private Block syncedBlock;
- private Filter filter;
- private boolean walkOnTeleport;
-
-
- public Hopper(Location location, Level level, UUID lastPlayer, Block syncedBlock, Filter filter, boolean walkOnTeleport) {
- this.location = location;
- this.level = level;
- this.syncedBlock = syncedBlock;
- this.filter = filter;
- this.lastPlayer = lastPlayer;
- this.walkOnTeleport = walkOnTeleport;
- }
-
- public Hopper(Block block, Level level, UUID lastPlayer, Block syncedBlock, Filter filter, boolean walkOnTeleport) {
- this(block.getLocation(), level, lastPlayer, syncedBlock, filter, walkOnTeleport);
- }
-
- public void overview(Player player) {
- try {
- EpicHoppers instance = EpicHoppers.getInstance();
- if (!player.hasPermission("epichoppers.overview")) return;
-
- instance.lastBlock.put(player, location.getBlock());
-
- Level nextLevel = instance.getLevelManager().getHighestLevel().getLevel() > level.getLevel() ? instance.getLevelManager().getLevel(level.getLevel() + 1) : null;
-
- Inventory i = Bukkit.createInventory(null, 27, Methods.formatName(level.getLevel(), false));
-
- ItemStack perl = new ItemStack(Material.ENDER_PEARL, 1);
- ItemMeta perlmeta = perl.getItemMeta();
- perlmeta.setDisplayName(instance.getLocale().getMessage("interface.hopper.perltitle"));
- ArrayList loreperl = new ArrayList<>();
- String[] parts = instance.getLocale().getMessage("interface.hopper.perllore").split("\\|");
- for (String line : parts) {
- loreperl.add(Arconix.pl().getApi().format().formatText(line));
- }
- perlmeta.setLore(loreperl);
- perl.setItemMeta(perlmeta);
-
- ItemStack filter = new ItemStack(Material.COMPARATOR, 1);
- ItemMeta filtermeta = filter.getItemMeta();
- filtermeta.setDisplayName(instance.getLocale().getMessage("interface.hopper.filtertitle"));
- ArrayList lorefilter = new ArrayList<>();
- parts = instance.getLocale().getMessage("interface.hopper.filterlore").split("\\|");
- for (String line : parts) {
- lorefilter.add(Arconix.pl().getApi().format().formatText(line));
- }
- filtermeta.setLore(lorefilter);
- filter.setItemMeta(filtermeta);
-
-
- ItemStack item = new ItemStack(Material.HOPPER, 1);
- ItemMeta itemmeta = item.getItemMeta();
- itemmeta.setDisplayName(instance.getLocale().getMessage("interface.hopper.currentlevel", level.getLevel()));
- List lore = this.level.getDescription();
- lore.add("");
- if (nextLevel == null) lore.add(instance.getLocale().getMessage("interface.hopper.alreadymaxed"));
- else {
- lore.add(instance.getLocale().getMessage("interface.hopper.nextlevel", nextLevel.getLevel()));
- lore.addAll(nextLevel.getDescription());
- }
-
- itemmeta.setLore(lore);
- item.setItemMeta(itemmeta);
-
- ItemStack hook = new ItemStack(Material.TRIPWIRE_HOOK, 1);
- ItemMeta hookmeta = hook.getItemMeta();
- hookmeta.setDisplayName(instance.getLocale().getMessage("interface.hopper.synchopper"));
- ArrayList lorehook = new ArrayList<>();
- parts = instance.getLocale().getMessage("interface.hopper.synclore").split("\\|");
- for (String line : parts) {
- lorehook.add(Arconix.pl().getApi().format().formatText(line));
- }
- hookmeta.setLore(lorehook);
- hook.setItemMeta(hookmeta);
-
- ItemStack itemXP = new ItemStack(Material.valueOf(instance.getConfig().getString("Interfaces.XP Icon")), 1);
- ItemMeta itemmetaXP = itemXP.getItemMeta();
- itemmetaXP.setDisplayName(instance.getLocale().getMessage("interface.hopper.upgradewithxp"));
- ArrayList loreXP = new ArrayList<>();
- if (nextLevel != null)
- loreXP.add(instance.getLocale().getMessage("interface.hopper.upgradewithxplore", nextLevel.getCostExperience()));
- else
- loreXP.add(instance.getLocale().getMessage("interface.hopper.alreadymaxed"));
- itemmetaXP.setLore(loreXP);
- itemXP.setItemMeta(itemmetaXP);
-
- ItemStack itemECO = new ItemStack(Material.valueOf(instance.getConfig().getString("Interfaces.Economy Icon")), 1);
- ItemMeta itemmetaECO = itemECO.getItemMeta();
- itemmetaECO.setDisplayName(instance.getLocale().getMessage("interface.hopper.upgradewitheconomy"));
- ArrayList loreECO = new ArrayList<>();
- if (nextLevel != null)
- loreECO.add(instance.getLocale().getMessage("interface.hopper.upgradewitheconomylore", Arconix.pl().getApi().format().formatEconomy(nextLevel.getCostEconomy())));
- else
- loreECO.add(instance.getLocale().getMessage("interface.hopper.alreadymaxed"));
- itemmetaECO.setLore(loreECO);
- itemECO.setItemMeta(itemmetaECO);
-
- int nu = 0;
- while (nu != 27) {
- i.setItem(nu, Methods.getGlass());
- nu++;
- }
-
- boolean canFilter = instance.getConfig().getBoolean("Main.Allow Players To use The Hopper Filter") && player.hasPermission("EpicHoppers.Filter");
- boolean canTeleport = instance.getConfig().getBoolean("Main.Allow Players To Teleport Through Hoppers") && player.hasPermission("EpicHoppers.Teleport");
- if (!canFilter && canTeleport)
- i.setItem(4, perl);
- else if (!canTeleport && canFilter)
- i.setItem(4, filter);
- else if (canFilter) {
- i.setItem(3, perl);
- i.setItem(5, filter);
- }
-
- if (instance.getConfig().getBoolean("Main.Upgrade With XP") && player.hasPermission("EpicHoppers.Upgrade.XP")) {
- i.setItem(11, itemXP);
- }
-
- i.setItem(13, item);
- i.setItem(22, hook);
-
- if (instance.getConfig().getBoolean("Main.Upgrade With Economy") && player.hasPermission("EpicHoppers.Upgrade.ECO")) {
- i.setItem(15, itemECO);
- }
-
- i.setItem(0, Methods.getBackgroundGlass(true));
- i.setItem(1, Methods.getBackgroundGlass(true));
- i.setItem(2, Methods.getBackgroundGlass(false));
- i.setItem(6, Methods.getBackgroundGlass(false));
- i.setItem(7, Methods.getBackgroundGlass(true));
- i.setItem(8, Methods.getBackgroundGlass(true));
- i.setItem(9, Methods.getBackgroundGlass(true));
- i.setItem(10, Methods.getBackgroundGlass(false));
- i.setItem(16, Methods.getBackgroundGlass(false));
- i.setItem(17, Methods.getBackgroundGlass(true));
- i.setItem(18, Methods.getBackgroundGlass(true));
- i.setItem(19, Methods.getBackgroundGlass(true));
- i.setItem(20, Methods.getBackgroundGlass(false));
- i.setItem(24, Methods.getBackgroundGlass(false));
- i.setItem(25, Methods.getBackgroundGlass(true));
- i.setItem(26, Methods.getBackgroundGlass(true));
-
- player.openInventory(i);
- instance.inShow.put(player.getUniqueId(), this);
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- }
-
- public void filter(Player player) {
- try {
- EpicHoppers instance = EpicHoppers.getInstance();
-
- Inventory i = Bukkit.createInventory(null, 54, Arconix.pl().getApi().format().formatText(Methods.formatName(level.getLevel(), false) + " &8-&f Filter"));
-
- i.setItem(2, Methods.getBackgroundGlass(true));
- i.setItem(3, Methods.getBackgroundGlass(true));
- i.setItem(4, Methods.getBackgroundGlass(true));
- i.setItem(5, Methods.getBackgroundGlass(false));
- i.setItem(6, Methods.getBackgroundGlass(false));
-
- i.setItem(11, Methods.getBackgroundGlass(true));
- i.setItem(15, Methods.getBackgroundGlass(false));
-
- i.setItem(20, Methods.getBackgroundGlass(true));
- i.setItem(24, Methods.getBackgroundGlass(true));
-
- i.setItem(29, Methods.getBackgroundGlass(true));
- i.setItem(33, Methods.getBackgroundGlass(true));
-
- i.setItem(38, Methods.getBackgroundGlass(false));
- i.setItem(42, Methods.getBackgroundGlass(true));
-
- i.setItem(47, Methods.getBackgroundGlass(false));
- i.setItem(48, Methods.getBackgroundGlass(false));
- i.setItem(49, Methods.getBackgroundGlass(true));
- i.setItem(50, Methods.getBackgroundGlass(true));
- i.setItem(51, Methods.getBackgroundGlass(true));
-
- i.setItem(12, Methods.getGlass());
- i.setItem(14, Methods.getGlass());
- i.setItem(21, Methods.getGlass());
- i.setItem(22, Methods.getGlass());
- i.setItem(23, Methods.getGlass());
- i.setItem(30, Methods.getGlass());
- i.setItem(31, Methods.getGlass());
- i.setItem(32, Methods.getGlass());
- i.setItem(39, Methods.getGlass());
- i.setItem(41, Methods.getGlass());
-
- ItemStack it = new ItemStack(Material.WHITE_STAINED_GLASS_PANE, 1);
- ItemMeta itm = it.getItemMeta();
- itm.setDisplayName(instance.getLocale().getMessage("interface.filter.whitelist"));
- it.setItemMeta(itm);
- int[] whiteSlots = {0, 1, 9, 10, 18, 19};
- for (int nu : whiteSlots) {
- i.setItem(nu, it);
- }
-
- int num = 0;
- for (ItemStack o : filter.getWhiteList()) {
- if (o != null) {
- i.setItem(whiteSlots[num], o);
- num++;
- }
- }
-
- it = new ItemStack(Material.BLACK_STAINED_GLASS_PANE, 1);
- itm = it.getItemMeta();
- itm.setDisplayName(instance.getLocale().getMessage("interface.filter.blacklist"));
- it.setItemMeta(itm);
- int[] blackSlots = {27, 28, 36, 37, 45, 46};
- for (int nu : blackSlots) {
- i.setItem(nu, it);
- }
-
- num = 0;
- for (ItemStack o : filter.getBlackList()) {
- if (o != null) {
- i.setItem(blackSlots[num], o);
- num++;
- }
- }
-
- it = new ItemStack(Material.BARRIER);
- itm = it.getItemMeta();
- itm.setDisplayName(instance.getLocale().getMessage("interface.filter.void"));
- it.setItemMeta(itm);
- int[] avoid = {7, 8, 16, 17, 25, 26, 34, 35, 43, 44, 52, 53};
- for (int nu : avoid) {
- i.setItem(nu, it);
- }
-
- num = 0;
- for (ItemStack o : filter.getVoidList()) {
- if (o != null) {
- i.setItem(avoid[num], o);
- num++;
- }
-
- }
-
- ItemStack itemInfo = new ItemStack(Material.PAPER, 1);
- ItemMeta itemmetaInfo = itemInfo.getItemMeta();
- itemmetaInfo.setDisplayName(instance.getLocale().getMessage("interface.filter.infotitle"));
- ArrayList loreInfo = new ArrayList<>();
- String[] parts = instance.getLocale().getMessage("interface.filter.infolore").split("\\|");
- for (String line : parts) {
- loreInfo.add(Arconix.pl().getApi().format().formatText(line));
- }
- itemmetaInfo.setLore(loreInfo);
- itemInfo.setItemMeta(itemmetaInfo);
-
- i.setItem(13, itemInfo);
-
-
- ItemStack hook = new ItemStack(Material.TRIPWIRE_HOOK, 1);
- ItemMeta hookmeta = hook.getItemMeta();
- hookmeta.setDisplayName(instance.getLocale().getMessage("interface.hopper.rejectsync"));
- ArrayList lorehook = new ArrayList<>();
- parts = instance.getLocale().getMessage("interface.hopper.synclore").split("\\|");
- for (String line : parts) {
- lorehook.add(Arconix.pl().getApi().format().formatText(line));
- }
- hookmeta.setLore(lorehook);
- hook.setItemMeta(hookmeta);
- i.setItem(40, hook);
-
- player.openInventory(i);
- instance.inFilter.put(player.getUniqueId(), this);
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- }
-
- public void compile(Player p) {
- try {
- ItemStack[] items2 = p.getOpenInventory().getTopInventory().getContents();
-
- List owhite = new ArrayList<>();
- List oblack = new ArrayList<>();
- List ovoid = new ArrayList<>();
-
- int[] awhite = {0, 1, 9, 10, 18, 19};
- int[] ablack = {27, 28, 36, 37, 45, 46};
- int[] avoid = {7, 8, 16, 17, 25, 26, 34, 35, 43, 44, 52, 53};
-
- int num = 0;
- for (ItemStack item : items2) {
- for (int aa : awhite) {
- if (aa == num) {
- if (items2[num] != null && !items2[num].getType().name().contains("STAINED_GLASS"))
- owhite.add(items2[num]);
- }
- }
- for (int aa : ablack) {
- if (aa == num) {
- if (items2[num] != null && !items2[num].getType().name().contains("STAINED_GLASS"))
- oblack.add(items2[num]);
- }
- }
- for (int aa : avoid) {
- if (aa == num) {
- if (items2[num] != null && !items2[num].getType().equals(Material.BARRIER))
- ovoid.add(items2[num]);
- }
- }
- num++;
- }
- filter.setWhiteList(owhite);
- filter.setBlackList(oblack);
- filter.setVoidList(ovoid);
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- }
-
- public void upgrade(String type, Player player) {
- try {
- EpicHoppers instance = EpicHoppers.getInstance();
- if (instance.getLevelManager().getLevels().containsKey(this.level.getLevel() + 1)) {
-
- Level level = instance.getLevelManager().getLevel(this.level.getLevel() + 1);
- int cost;
- if (type.equals("XP")) {
- cost = level.getCostExperience();
- } else {
- cost = level.getCostEconomy();
- }
-
- if (type.equals("ECO")) {
- if (instance.getServer().getPluginManager().getPlugin("Vault") != null) {
- RegisteredServiceProvider rsp = instance.getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class);
- net.milkbowl.vault.economy.Economy econ = rsp.getProvider();
- if (econ.has(player, cost)) {
- econ.withdrawPlayer(player, cost);
- upgradeFinal(level, player);
- } else {
- player.sendMessage(instance.getLocale().getMessage("event.upgrade.cannotafford"));
- }
- } else {
- player.sendMessage("Vault is not installed.");
- }
- } else if (type.equals("XP")) {
- if (player.getLevel() >= cost || player.getGameMode() == GameMode.CREATIVE) {
- if (player.getGameMode() != GameMode.CREATIVE) {
- player.setLevel(player.getLevel() - cost);
- }
- upgradeFinal(level, player);
- } else {
- player.sendMessage(instance.getLocale().getMessage("event.upgrade.cannotafford"));
- }
- }
- }
- } catch (Exception ex) {
- Debugger.runReport(ex);
- }
- }
-
- public void upgradeFinal(Level level, Player player) {
- try {
- EpicHoppers instance = EpicHoppers.getInstance();
- this.level = level;
- if (instance.getLevelManager().getHighestLevel() != level) {
- player.sendMessage(instance.getLocale().getMessage("event.upgrade.success", level.getLevel()));
- } else {
- player.sendMessage(instance.getLocale().getMessage("event.upgrade.maxed", level.getLevel()));
- }
- Location loc = location.clone().add(.5, .5, .5);
- player.getWorld().spawnParticle(org.bukkit.Particle.valueOf(instance.getConfig().getString("Main.Upgrade Particle Type")), loc, 200, .5, .5, .5);
-
- if (instance.getConfig().getBoolean("Main.Sounds Enabled")) {
- if (instance.getLevelManager().getHighestLevel() != level) {
- player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.6F, 15.0F);
- } else {
- player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 2F, 25.0F);
-
- player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_CHIME, 2F, 25.0F);
- Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_CHIME, 1.2F, 35.0F), 5L);
- Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_CHIME, 1.8F, 35.0F), 10L);
- }
- }
- } catch (Exception ex) {
- Debugger.runReport(ex);
- }
- }
-
-
- public void timeout(Player player) {
- try {
- EpicHoppers instance = EpicHoppers.getInstance();
- Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> {
- if (instance.sync.containsKey(player)) {
- player.sendMessage(instance.getLocale().getMessage("event.hopper.synctimeout"));
- instance.sync.remove(player);
- instance.bsync.remove(player);
- }
- }, instance.getConfig().getLong("Main.Timeout When Syncing Hoppers"));
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- }
-
- public void sync(Block block2, boolean black, Player player) {
- try {
- EpicHoppers instance = EpicHoppers.getInstance();
-
- if (location.getWorld().equals(block2.getLocation().getWorld()) && !player.hasPermission("EpicHoppers.Override") && !player.hasPermission("EpicHoppers.Admin")) {
- if (location.distance(block2.getLocation()) > level.getRange() && !player.hasPermission("EpicHoppers.Override") && !player.hasPermission("EpicHoppers.Admin")) {
- player.sendMessage(instance.getLocale().getMessage("event.hopper.syncoutofrange"));
- return;
- }
- }
- player.sendMessage(instance.getLocale().getMessage("event.hopper.syncsuccess"));
-
- if (!black)
- this.syncedBlock = block2;
- else
- this.filter.setEndPoint(block2);
- this.lastPlayer = player.getUniqueId();
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- }
-
- public Location getLocation() {
- return location.clone();
- }
-
- public Level getLevel() {
- return level;
- }
-
- public UUID getLastPlayer() {
- return lastPlayer;
- }
-
- public boolean isWalkOnTeleport() {
- return walkOnTeleport;
- }
-
- public void setWalkOnTeleport(boolean walkOnTeleport) {
- this.walkOnTeleport = walkOnTeleport;
- }
-
- public Block getSyncedBlock() {
- return syncedBlock;
- }
-
- public void setSyncedBlock(Block syncedBlock) {
- this.syncedBlock = syncedBlock;
- }
-
- public Filter getFilter() {
- return filter;
- }
-}
+package com.songoda.epichoppers.hopper;
+
+import com.songoda.arconix.plugin.Arconix;
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.api.hopper.Filter;
+import com.songoda.epichoppers.api.hopper.Hopper;
+import com.songoda.epichoppers.api.hopper.Level;
+import com.songoda.epichoppers.player.MenuType;
+import com.songoda.epichoppers.player.PlayerData;
+import com.songoda.epichoppers.utils.Debugger;
+import com.songoda.epichoppers.utils.Methods;
+import net.milkbowl.vault.economy.Economy;
+import org.bukkit.*;
+import org.bukkit.block.Block;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.plugin.RegisteredServiceProvider;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * Created by songoda on 3/14/2017.
+ */
+public class EHopper implements Hopper {
+
+ private Location location;
+ private com.songoda.epichoppers.api.hopper.Level level;
+ private UUID lastPlayer;
+ private Block syncedBlock;
+ private Filter filter;
+ private boolean walkOnTeleport;
+
+
+ public EHopper(Location location, com.songoda.epichoppers.api.hopper.Level level, UUID lastPlayer, Block syncedBlock, Filter filter, boolean walkOnTeleport) {
+ this.location = location;
+ this.level = level;
+ this.syncedBlock = syncedBlock;
+ this.filter = filter;
+ this.lastPlayer = lastPlayer;
+ this.walkOnTeleport = walkOnTeleport;
+ }
+
+ public EHopper(Block block, com.songoda.epichoppers.api.hopper.Level level, UUID lastPlayer, Block syncedBlock, Filter filter, boolean walkOnTeleport) {
+ this(block.getLocation(), level, lastPlayer, syncedBlock, filter, walkOnTeleport);
+ }
+
+ public void overview(Player player) {
+ try {
+ EpicHoppersPlugin instance = EpicHoppersPlugin.getInstance();
+ if (!player.hasPermission("epichoppers.overview")) return;
+
+ instance.getPlayerDataManager().getPlayerData(player).setLastHopper(this);
+
+ com.songoda.epichoppers.api.hopper.Level nextLevel = instance.getLevelManager().getHighestLevel().getLevel() > level.getLevel() ? instance.getLevelManager().getLevel(level.getLevel() + 1) : null;
+
+ Inventory i = Bukkit.createInventory(null, 27, Methods.formatName(level.getLevel(), false));
+
+ ItemStack perl = new ItemStack(Material.ENDER_PEARL, 1);
+ ItemMeta perlmeta = perl.getItemMeta();
+ perlmeta.setDisplayName(instance.getLocale().getMessage("interface.hopper.perltitle"));
+ ArrayList loreperl = new ArrayList<>();
+ String[] parts = instance.getLocale().getMessage("interface.hopper.perllore").split("\\|");
+ for (String line : parts) {
+ loreperl.add(Arconix.pl().getApi().format().formatText(line));
+ }
+ perlmeta.setLore(loreperl);
+ perl.setItemMeta(perlmeta);
+
+ ItemStack filter = new ItemStack(Material.COMPARATOR, 1);
+ ItemMeta filtermeta = filter.getItemMeta();
+ filtermeta.setDisplayName(instance.getLocale().getMessage("interface.hopper.filtertitle"));
+ ArrayList lorefilter = new ArrayList<>();
+ parts = instance.getLocale().getMessage("interface.hopper.filterlore").split("\\|");
+ for (String line : parts) {
+ lorefilter.add(Arconix.pl().getApi().format().formatText(line));
+ }
+ filtermeta.setLore(lorefilter);
+ filter.setItemMeta(filtermeta);
+
+
+ ItemStack item = new ItemStack(Material.HOPPER, 1);
+ ItemMeta itemmeta = item.getItemMeta();
+ itemmeta.setDisplayName(instance.getLocale().getMessage("interface.hopper.currentlevel", level.getLevel()));
+ List lore = this.level.getDescription();
+ lore.add("");
+ if (nextLevel == null) lore.add(instance.getLocale().getMessage("interface.hopper.alreadymaxed"));
+ else {
+ lore.add(instance.getLocale().getMessage("interface.hopper.nextlevel", nextLevel.getLevel()));
+ lore.addAll(nextLevel.getDescription());
+ }
+
+ itemmeta.setLore(lore);
+ item.setItemMeta(itemmeta);
+
+ ItemStack hook = new ItemStack(Material.TRIPWIRE_HOOK, 1);
+ ItemMeta hookmeta = hook.getItemMeta();
+ hookmeta.setDisplayName(instance.getLocale().getMessage("interface.hopper.synchopper"));
+ ArrayList lorehook = new ArrayList<>();
+ parts = instance.getLocale().getMessage("interface.hopper.synclore").split("\\|");
+ for (String line : parts) {
+ lorehook.add(Arconix.pl().getApi().format().formatText(line));
+ }
+ hookmeta.setLore(lorehook);
+ hook.setItemMeta(hookmeta);
+
+ ItemStack itemXP = new ItemStack(Material.valueOf(instance.getConfig().getString("Interfaces.XP Icon")), 1);
+ ItemMeta itemmetaXP = itemXP.getItemMeta();
+ itemmetaXP.setDisplayName(instance.getLocale().getMessage("interface.hopper.upgradewithxp"));
+ ArrayList loreXP = new ArrayList<>();
+ if (nextLevel != null)
+ loreXP.add(instance.getLocale().getMessage("interface.hopper.upgradewithxplore", nextLevel.getCostExperience()));
+ else
+ loreXP.add(instance.getLocale().getMessage("interface.hopper.alreadymaxed"));
+ itemmetaXP.setLore(loreXP);
+ itemXP.setItemMeta(itemmetaXP);
+
+ ItemStack itemECO = new ItemStack(Material.valueOf(instance.getConfig().getString("Interfaces.Economy Icon")), 1);
+ ItemMeta itemmetaECO = itemECO.getItemMeta();
+ itemmetaECO.setDisplayName(instance.getLocale().getMessage("interface.hopper.upgradewitheconomy"));
+ ArrayList loreECO = new ArrayList<>();
+ if (nextLevel != null)
+ loreECO.add(instance.getLocale().getMessage("interface.hopper.upgradewitheconomylore", Arconix.pl().getApi().format().formatEconomy(nextLevel.getCostEconomy())));
+ else
+ loreECO.add(instance.getLocale().getMessage("interface.hopper.alreadymaxed"));
+ itemmetaECO.setLore(loreECO);
+ itemECO.setItemMeta(itemmetaECO);
+
+ int nu = 0;
+ while (nu != 27) {
+ i.setItem(nu, Methods.getGlass());
+ nu++;
+ }
+
+ boolean canFilter = instance.getConfig().getBoolean("Main.Allow Players To use The hopper Filter") && player.hasPermission("EpicHoppers.Filter");
+ boolean canTeleport = instance.getConfig().getBoolean("Main.Allow Players To Teleport Through Hoppers") && player.hasPermission("EpicHoppers.Teleport");
+ if (!canFilter && canTeleport)
+ i.setItem(4, perl);
+ else if (!canTeleport && canFilter)
+ i.setItem(4, filter);
+ else if (canFilter) {
+ i.setItem(3, perl);
+ i.setItem(5, filter);
+ }
+
+ if (instance.getConfig().getBoolean("Main.Upgrade With XP") && player.hasPermission("EpicHoppers.Upgrade.XP")) {
+ i.setItem(11, itemXP);
+ }
+
+ i.setItem(13, item);
+ i.setItem(22, hook);
+
+ if (instance.getConfig().getBoolean("Main.Upgrade With Economy") && player.hasPermission("EpicHoppers.Upgrade.ECO")) {
+ i.setItem(15, itemECO);
+ }
+
+ i.setItem(0, Methods.getBackgroundGlass(true));
+ i.setItem(1, Methods.getBackgroundGlass(true));
+ i.setItem(2, Methods.getBackgroundGlass(false));
+ i.setItem(6, Methods.getBackgroundGlass(false));
+ i.setItem(7, Methods.getBackgroundGlass(true));
+ i.setItem(8, Methods.getBackgroundGlass(true));
+ i.setItem(9, Methods.getBackgroundGlass(true));
+ i.setItem(10, Methods.getBackgroundGlass(false));
+ i.setItem(16, Methods.getBackgroundGlass(false));
+ i.setItem(17, Methods.getBackgroundGlass(true));
+ i.setItem(18, Methods.getBackgroundGlass(true));
+ i.setItem(19, Methods.getBackgroundGlass(true));
+ i.setItem(20, Methods.getBackgroundGlass(false));
+ i.setItem(24, Methods.getBackgroundGlass(false));
+ i.setItem(25, Methods.getBackgroundGlass(true));
+ i.setItem(26, Methods.getBackgroundGlass(true));
+
+ player.openInventory(i);
+ instance.getPlayerDataManager().getPlayerData(player).setInMenu(MenuType.OVERVIEW);
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ }
+
+ public void filter(Player player) {
+ try {
+ EpicHoppersPlugin instance = EpicHoppersPlugin.getInstance();
+
+ Inventory i = Bukkit.createInventory(null, 54, Arconix.pl().getApi().format().formatText(Methods.formatName(level.getLevel(), false) + " &8-&f Filter"));
+
+ i.setItem(2, Methods.getBackgroundGlass(true));
+ i.setItem(3, Methods.getBackgroundGlass(true));
+ i.setItem(4, Methods.getBackgroundGlass(true));
+ i.setItem(5, Methods.getBackgroundGlass(false));
+ i.setItem(6, Methods.getBackgroundGlass(false));
+
+ i.setItem(11, Methods.getBackgroundGlass(true));
+ i.setItem(15, Methods.getBackgroundGlass(false));
+
+ i.setItem(20, Methods.getBackgroundGlass(true));
+ i.setItem(24, Methods.getBackgroundGlass(true));
+
+ i.setItem(29, Methods.getBackgroundGlass(true));
+ i.setItem(33, Methods.getBackgroundGlass(true));
+
+ i.setItem(38, Methods.getBackgroundGlass(false));
+ i.setItem(42, Methods.getBackgroundGlass(true));
+
+ i.setItem(47, Methods.getBackgroundGlass(false));
+ i.setItem(48, Methods.getBackgroundGlass(false));
+ i.setItem(49, Methods.getBackgroundGlass(true));
+ i.setItem(50, Methods.getBackgroundGlass(true));
+ i.setItem(51, Methods.getBackgroundGlass(true));
+
+ i.setItem(12, Methods.getGlass());
+ i.setItem(14, Methods.getGlass());
+ i.setItem(21, Methods.getGlass());
+ i.setItem(22, Methods.getGlass());
+ i.setItem(23, Methods.getGlass());
+ i.setItem(30, Methods.getGlass());
+ i.setItem(31, Methods.getGlass());
+ i.setItem(32, Methods.getGlass());
+ i.setItem(39, Methods.getGlass());
+ i.setItem(41, Methods.getGlass());
+
+ ItemStack it = new ItemStack(Material.WHITE_STAINED_GLASS_PANE, 1);
+ ItemMeta itm = it.getItemMeta();
+ itm.setDisplayName(instance.getLocale().getMessage("interface.filter.whitelist"));
+ it.setItemMeta(itm);
+ int[] whiteSlots = {0, 1, 9, 10, 18, 19};
+ for (int nu : whiteSlots) {
+ i.setItem(nu, it);
+ }
+
+ int num = 0;
+ for (ItemStack o : filter.getWhiteList()) {
+ if (o != null) {
+ i.setItem(whiteSlots[num], o);
+ num++;
+ }
+ }
+
+ it = new ItemStack(Material.BLACK_STAINED_GLASS_PANE, 1);
+ itm = it.getItemMeta();
+ itm.setDisplayName(instance.getLocale().getMessage("interface.filter.blacklist"));
+ it.setItemMeta(itm);
+ int[] blackSlots = {27, 28, 36, 37, 45, 46};
+ for (int nu : blackSlots) {
+ i.setItem(nu, it);
+ }
+
+ num = 0;
+ for (ItemStack o : filter.getBlackList()) {
+ if (o != null) {
+ i.setItem(blackSlots[num], o);
+ num++;
+ }
+ }
+
+ it = new ItemStack(Material.BARRIER);
+ itm = it.getItemMeta();
+ itm.setDisplayName(instance.getLocale().getMessage("interface.filter.void"));
+ it.setItemMeta(itm);
+ int[] avoid = {7, 8, 16, 17, 25, 26, 34, 35, 43, 44, 52, 53};
+ for (int nu : avoid) {
+ i.setItem(nu, it);
+ }
+
+ num = 0;
+ for (ItemStack o : filter.getVoidList()) {
+ if (o != null) {
+ i.setItem(avoid[num], o);
+ num++;
+ }
+
+ }
+
+ ItemStack itemInfo = new ItemStack(Material.PAPER, 1);
+ ItemMeta itemmetaInfo = itemInfo.getItemMeta();
+ itemmetaInfo.setDisplayName(instance.getLocale().getMessage("interface.filter.infotitle"));
+ ArrayList loreInfo = new ArrayList<>();
+ String[] parts = instance.getLocale().getMessage("interface.filter.infolore").split("\\|");
+ for (String line : parts) {
+ loreInfo.add(Arconix.pl().getApi().format().formatText(line));
+ }
+ itemmetaInfo.setLore(loreInfo);
+ itemInfo.setItemMeta(itemmetaInfo);
+
+ i.setItem(13, itemInfo);
+
+
+ ItemStack hook = new ItemStack(Material.TRIPWIRE_HOOK, 1);
+ ItemMeta hookmeta = hook.getItemMeta();
+ hookmeta.setDisplayName(instance.getLocale().getMessage("interface.hopper.rejectsync"));
+ ArrayList lorehook = new ArrayList<>();
+ parts = instance.getLocale().getMessage("interface.hopper.synclore").split("\\|");
+ for (String line : parts) {
+ lorehook.add(Arconix.pl().getApi().format().formatText(line));
+ }
+ hookmeta.setLore(lorehook);
+ hook.setItemMeta(hookmeta);
+ i.setItem(40, hook);
+
+ player.openInventory(i);
+ instance.getPlayerDataManager().getPlayerData(player).setInMenu(MenuType.FILTER);
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ }
+
+ public void compile(Player p) {
+ try {
+ ItemStack[] items2 = p.getOpenInventory().getTopInventory().getContents();
+
+ List owhite = new ArrayList<>();
+ List oblack = new ArrayList<>();
+ List ovoid = new ArrayList<>();
+
+ int[] awhite = {0, 1, 9, 10, 18, 19};
+ int[] ablack = {27, 28, 36, 37, 45, 46};
+ int[] avoid = {7, 8, 16, 17, 25, 26, 34, 35, 43, 44, 52, 53};
+
+ int num = 0;
+ for (ItemStack item : items2) {
+ for (int aa : awhite) {
+ if (aa == num) {
+ if (items2[num] != null && !items2[num].getType().name().contains("STAINED_GLASS"))
+ owhite.add(items2[num]);
+ }
+ }
+ for (int aa : ablack) {
+ if (aa == num) {
+ if (items2[num] != null && !items2[num].getType().name().contains("STAINED_GLASS"))
+ oblack.add(items2[num]);
+ }
+ }
+ for (int aa : avoid) {
+ if (aa == num) {
+ if (items2[num] != null && !items2[num].getType().equals(Material.BARRIER))
+ ovoid.add(items2[num]);
+ }
+ }
+ num++;
+ }
+ filter.setWhiteList(owhite);
+ filter.setBlackList(oblack);
+ filter.setVoidList(ovoid);
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ }
+
+ public void upgrade(String type, Player player) {
+ try {
+ EpicHoppersPlugin instance = EpicHoppersPlugin.getInstance();
+ if (instance.getLevelManager().getLevels().containsKey(this.level.getLevel() + 1)) {
+
+ com.songoda.epichoppers.api.hopper.Level level = instance.getLevelManager().getLevel(this.level.getLevel() + 1);
+ int cost;
+ if (type.equals("XP")) {
+ cost = level.getCostExperience();
+ } else {
+ cost = level.getCostEconomy();
+ }
+
+ if (type.equals("ECO")) {
+ if (instance.getServer().getPluginManager().getPlugin("Vault") != null) {
+ RegisteredServiceProvider rsp = instance.getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class);
+ net.milkbowl.vault.economy.Economy econ = rsp.getProvider();
+ if (econ.has(player, cost)) {
+ econ.withdrawPlayer(player, cost);
+ upgradeFinal(level, player);
+ } else {
+ player.sendMessage(instance.getLocale().getMessage("event.upgrade.cannotafford"));
+ }
+ } else {
+ player.sendMessage("Vault is not installed.");
+ }
+ } else if (type.equals("XP")) {
+ if (player.getLevel() >= cost || player.getGameMode() == GameMode.CREATIVE) {
+ if (player.getGameMode() != GameMode.CREATIVE) {
+ player.setLevel(player.getLevel() - cost);
+ }
+ upgradeFinal(level, player);
+ } else {
+ player.sendMessage(instance.getLocale().getMessage("event.upgrade.cannotafford"));
+ }
+ }
+ }
+ } catch (Exception ex) {
+ Debugger.runReport(ex);
+ }
+ }
+
+ public void upgradeFinal(com.songoda.epichoppers.api.hopper.Level level, Player player) {
+ try {
+ EpicHoppersPlugin instance = EpicHoppersPlugin.getInstance();
+ this.level = level;
+ if (instance.getLevelManager().getHighestLevel() != level) {
+ player.sendMessage(instance.getLocale().getMessage("event.upgrade.success", level.getLevel()));
+ } else {
+ player.sendMessage(instance.getLocale().getMessage("event.upgrade.maxed", level.getLevel()));
+ }
+ Location loc = location.clone().add(.5, .5, .5);
+ player.getWorld().spawnParticle(org.bukkit.Particle.valueOf(instance.getConfig().getString("Main.Upgrade Particle Type")), loc, 200, .5, .5, .5);
+
+ if (instance.getConfig().getBoolean("Main.Sounds Enabled")) {
+ if (instance.getLevelManager().getHighestLevel() != level) {
+ player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.6F, 15.0F);
+ } else {
+ player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 2F, 25.0F);
+
+ player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_CHIME, 2F, 25.0F);
+ Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_CHIME, 1.2F, 35.0F), 5L);
+ Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_CHIME, 1.8F, 35.0F), 10L);
+ }
+ }
+ } catch (Exception ex) {
+ Debugger.runReport(ex);
+ }
+ }
+
+
+ public void timeout(Player player) {
+ try {
+ EpicHoppersPlugin instance = EpicHoppersPlugin.getInstance();
+ Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> {
+ PlayerData playerData = instance.getPlayerDataManager().getPlayerData(player);
+ if (playerData.getSyncType() != null) {
+ player.sendMessage(instance.getLocale().getMessage("event.hopper.synctimeout"));
+ playerData.setSyncType(null);
+ }
+ }, instance.getConfig().getLong("Main.Timeout When Syncing Hoppers"));
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ }
+
+ @Override
+ public void sync(Block toSync, boolean filtered, Player player) {
+ try {
+ EpicHoppersPlugin instance = EpicHoppersPlugin.getInstance();
+
+
+ if (location.getWorld().equals(toSync.getLocation().getWorld())
+ && !player.hasPermission("EpicHoppers.Override")
+ && !player.hasPermission("EpicHoppers.Admin")
+ && location.distance(toSync.getLocation()) > level.getRange()) {
+ player.sendMessage(instance.getLocale().getMessage("event.hopper.syncoutofrange"));
+ return;
+ }
+ player.sendMessage(instance.getLocale().getMessage("event.hopper.syncsuccess"));
+
+ if (!filtered)
+ this.syncedBlock = toSync;
+ else
+ this.filter.setEndPoint(toSync);
+ this.lastPlayer = player.getUniqueId();
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ }
+
+ @Override
+ public Location getLocation() {
+ return location.clone();
+ }
+
+ @Override
+ public int getX() {
+ return location.getBlockX();
+ }
+
+ @Override
+ public int getY() {
+ return location.getBlockY();
+ }
+
+ @Override
+ public int getZ() {
+ return location.getBlockZ();
+ }
+
+ @Override
+ public Level getLevel() {
+ return level;
+ }
+
+ @Override
+ public UUID getLastPlayer() {
+ return lastPlayer;
+ }
+
+ @Override
+ public boolean isWalkOnTeleport() {
+ return walkOnTeleport;
+ }
+
+ @Override
+ public void setWalkOnTeleport(boolean walkOnTeleport) {
+ this.walkOnTeleport = walkOnTeleport;
+ }
+
+ @Override
+ public Block getSyncedBlock() {
+ return syncedBlock;
+ }
+
+ @Override
+ public void setSyncedBlock(Block syncedBlock) {
+ this.syncedBlock = syncedBlock;
+ }
+
+ @Override
+ public Filter getFilter() {
+ return filter;
+ }
+}
diff --git a/src/main/java/com/songoda/epichoppers/Hopper/HopperManager.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/EHopperManager.java
similarity index 69%
rename from src/main/java/com/songoda/epichoppers/Hopper/HopperManager.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/EHopperManager.java
index f638bec..0b63a05 100644
--- a/src/main/java/com/songoda/epichoppers/Hopper/HopperManager.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/EHopperManager.java
@@ -1,49 +1,58 @@
-package com.songoda.epichoppers.Hopper;
-
-import com.songoda.epichoppers.EpicHoppers;
-import org.bukkit.Location;
-import org.bukkit.block.Block;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-public class HopperManager {
-
- private final Map registeredHoppers = new HashMap<>();
-
- public void addHopper(Location location, Hopper hopper) {
- registeredHoppers.put(roundLocation(location), hopper);
- }
-
- public Hopper removeHopper(Location location) {
- return registeredHoppers.remove(location);
- }
-
- public Hopper getHopper(Location location) {
- if (!registeredHoppers.containsKey(roundLocation(location))) {
- addHopper(location, new Hopper(location, EpicHoppers.getInstance().getLevelManager().getLowestLevel(), null, null, new Filter(), false));
- }
- return registeredHoppers.get(roundLocation(location));
- }
-
- public Hopper getHopper(Block block) {
- return getHopper(block.getLocation());
- }
-
- public boolean isHopper(Location location) {
- return registeredHoppers.containsKey(roundLocation(location));
- }
-
- public Map getHoppers() {
- return Collections.unmodifiableMap(registeredHoppers);
- }
-
- private Location roundLocation(Location location) {
- location = location.clone();
- location.setX(location.getBlockX());
- location.setY(location.getBlockY());
- location.setZ(location.getBlockZ());
- return location;
- }
-}
+package com.songoda.epichoppers.hopper;
+
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.api.hopper.Filter;
+import com.songoda.epichoppers.api.hopper.Hopper;
+import com.songoda.epichoppers.api.hopper.HopperManager;
+import org.bukkit.Location;
+import org.bukkit.block.Block;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+public class EHopperManager implements HopperManager {
+
+ private final Map registeredHoppers = new HashMap<>();
+
+ @Override
+ public void addHopper(Location location, Hopper hopper) {
+ registeredHoppers.put(roundLocation(location), hopper);
+ }
+
+ @Override
+ public Hopper removeHopper(Location location) {
+ return registeredHoppers.remove(location);
+ }
+
+ @Override
+ public Hopper getHopper(Location location) {
+ if (!registeredHoppers.containsKey(roundLocation(location))) {
+ addHopper(location, new EHopper(location, EpicHoppersPlugin.getInstance().getLevelManager().getLowestLevel(), null, null, new EFilter(), false));
+ }
+ return registeredHoppers.get(roundLocation(location));
+ }
+
+ @Override
+ public Hopper getHopper(Block block) {
+ return getHopper(block.getLocation());
+ }
+
+ @Override
+ public boolean isHopper(Location location) {
+ return registeredHoppers.containsKey(roundLocation(location));
+ }
+
+ @Override
+ public Map getHoppers() {
+ return Collections.unmodifiableMap(registeredHoppers);
+ }
+
+ private Location roundLocation(Location location) {
+ location = location.clone();
+ location.setX(location.getBlockX());
+ location.setY(location.getBlockY());
+ location.setZ(location.getBlockZ());
+ return location;
+ }
+}
diff --git a/src/main/java/com/songoda/epichoppers/Hopper/Level.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/ELevel.java
similarity index 74%
rename from src/main/java/com/songoda/epichoppers/Hopper/Level.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/ELevel.java
index f474f3f..1a48e16 100644
--- a/src/main/java/com/songoda/epichoppers/Hopper/Level.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/ELevel.java
@@ -1,63 +1,72 @@
-package com.songoda.epichoppers.Hopper;
-
-import com.songoda.epichoppers.EpicHoppers;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class Level {
-
- private int level, costExperience, costEconomy, range, amount, blockBreak, suction;
-
- private List description = new ArrayList<>();
-
- public Level(int level, int costExperience, int costEconomy, int range, int amount, int suction, int blockBreak) {
- this.level = level;
- this.costExperience = costExperience;
- this.costEconomy = costEconomy;
- this.range = range;
- this.amount = amount;
- this.blockBreak = blockBreak;
- this.suction = suction;
-
- EpicHoppers instance = EpicHoppers.getInstance();
-
- description.add(instance.getLocale().getMessage("interface.hopper.range", range));
- description.add(instance.getLocale().getMessage("interface.hopper.amount", amount));
- if (suction != 0) description.add(instance.getLocale().getMessage("interface.hopper.suction", suction));
- if (blockBreak != 0) description.add(instance.getLocale().getMessage("interface.hopper.blockbreak", blockBreak));
- }
-
- public List getDescription() {
- return new ArrayList<>(description);
- }
-
- public int getLevel() {
- return level;
- }
-
- public int getRange() {
- return range;
- }
-
- public int getAmount() {
- return amount;
- }
-
- public int getBlockBreak() {
- return blockBreak;
- }
-
- public int getSuction() {
- return suction;
- }
-
- public int getCostExperience() {
- return costExperience;
- }
-
- public int getCostEconomy() {
- return costEconomy;
- }
-}
-
+package com.songoda.epichoppers.hopper;
+
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import com.songoda.epichoppers.api.hopper.Level;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ELevel implements Level {
+
+ private int level, costExperience, costEconomy, range, amount, blockBreak, suction;
+
+ private List description = new ArrayList<>();
+
+ public ELevel(int level, int costExperience, int costEconomy, int range, int amount, int suction, int blockBreak) {
+ this.level = level;
+ this.costExperience = costExperience;
+ this.costEconomy = costEconomy;
+ this.range = range;
+ this.amount = amount;
+ this.blockBreak = blockBreak;
+ this.suction = suction;
+
+ EpicHoppersPlugin instance = EpicHoppersPlugin.getInstance();
+
+ description.add(instance.getLocale().getMessage("interface.hopper.range", range));
+ description.add(instance.getLocale().getMessage("interface.hopper.amount", amount));
+ if (suction != 0) description.add(instance.getLocale().getMessage("interface.hopper.suction", suction));
+ if (blockBreak != 0) description.add(instance.getLocale().getMessage("interface.hopper.blockbreak", blockBreak));
+ }
+
+ @Override
+ public List getDescription() {
+ return new ArrayList<>(description);
+ }
+
+ @Override
+ public int getLevel() {
+ return level;
+ }
+
+ @Override
+ public int getRange() {
+ return range;
+ }
+
+ @Override
+ public int getAmount() {
+ return amount;
+ }
+
+ @Override
+ public int getBlockBreak() {
+ return blockBreak;
+ }
+
+ @Override
+ public int getSuction() {
+ return suction;
+ }
+
+ @Override
+ public int getCostExperience() {
+ return costExperience;
+ }
+
+ @Override
+ public int getCostEconomy() {
+ return costEconomy;
+ }
+}
+
diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/ELevelManager.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/ELevelManager.java
new file mode 100644
index 0000000..d653588
--- /dev/null
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/ELevelManager.java
@@ -0,0 +1,42 @@
+package com.songoda.epichoppers.hopper;
+
+import com.songoda.epichoppers.api.hopper.LevelManager;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.NavigableMap;
+import java.util.TreeMap;
+
+public class ELevelManager implements LevelManager {
+
+ private final NavigableMap registeredLevels = new TreeMap<>();
+
+ @Override
+ public void addLevel(int level, int costExperiance, int costEconomy, int range, int amount, int suction, int blockBreak) {
+ registeredLevels.put(level, new ELevel(level, costExperiance, costEconomy, range, amount, suction, blockBreak));
+ }
+
+ @Override
+ public com.songoda.epichoppers.api.hopper.Level getLevel(int level) {
+ return registeredLevels.get(level);
+ }
+
+ @Override
+ public com.songoda.epichoppers.api.hopper.Level getLowestLevel() {
+ return registeredLevels.firstEntry().getValue();
+ }
+
+ @Override
+ public com.songoda.epichoppers.api.hopper.Level getHighestLevel() {
+ return registeredLevels.lastEntry().getValue();
+ }
+
+ @Override
+ public Map getLevels() {
+ return Collections.unmodifiableMap(registeredLevels);
+ }
+
+ public void clear() {
+ registeredLevels.clear();
+ }
+}
diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/MenuType.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/MenuType.java
new file mode 100644
index 0000000..4f76ae1
--- /dev/null
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/MenuType.java
@@ -0,0 +1,9 @@
+package com.songoda.epichoppers.player;
+
+public enum MenuType {
+
+ NOT_IN,
+ OVERVIEW,
+ FILTER
+
+}
diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/PlayerData.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/PlayerData.java
new file mode 100644
index 0000000..9d285c1
--- /dev/null
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/PlayerData.java
@@ -0,0 +1,60 @@
+package com.songoda.epichoppers.player;
+
+import com.songoda.epichoppers.api.hopper.Hopper;
+import com.songoda.epichoppers.hopper.EHopper;
+
+import java.util.Date;
+import java.util.UUID;
+
+public class PlayerData {
+
+ private final UUID playerUUID;
+
+ private Hopper lastHopper = null;
+
+ private MenuType inMenu = MenuType.NOT_IN;
+
+ private SyncType syncType = null; // Null means off.
+
+ private Date lastTeleport = null; // Null means off.
+
+ public PlayerData(UUID playerUUID) {
+ this.playerUUID = playerUUID;
+ }
+
+ public UUID getPlayerUUID() {
+ return playerUUID;
+ }
+
+ public Hopper getLastHopper() {
+ return lastHopper;
+ }
+
+ public void setLastHopper(Hopper lastHopper) {
+ this.lastHopper = lastHopper;
+ }
+
+ public MenuType getInMenu() {
+ return inMenu;
+ }
+
+ public void setInMenu(MenuType inMenu) {
+ this.inMenu = inMenu;
+ }
+
+ public SyncType getSyncType() {
+ return syncType;
+ }
+
+ public void setSyncType(SyncType syncType) {
+ this.syncType = syncType;
+ }
+
+ public Date getLastTeleport() {
+ return lastTeleport;
+ }
+
+ public void setLastTeleport(Date lastTeleport) {
+ this.lastTeleport = lastTeleport;
+ }
+}
diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/PlayerDataManager.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/PlayerDataManager.java
new file mode 100644
index 0000000..e37569d
--- /dev/null
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/PlayerDataManager.java
@@ -0,0 +1,22 @@
+package com.songoda.epichoppers.player;
+
+import org.bukkit.entity.Player;
+
+import java.util.*;
+
+public class PlayerDataManager {
+
+ private final Map registeredPlayers = new HashMap<>();
+
+ public PlayerData getPlayerData(UUID uuid) {
+ return (uuid != null) ? registeredPlayers.computeIfAbsent(uuid, PlayerData::new) : null;
+ }
+
+ public PlayerData getPlayerData(Player player) {
+ return getPlayerData(player.getUniqueId());
+ }
+
+ public Collection getRegisteredPlayers() {
+ return Collections.unmodifiableCollection(registeredPlayers.values());
+ }
+}
diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/SyncType.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/SyncType.java
new file mode 100644
index 0000000..227ed8c
--- /dev/null
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/SyncType.java
@@ -0,0 +1,8 @@
+package com.songoda.epichoppers.player;
+
+public enum SyncType {
+
+ REGULAR,
+ FILTERED
+
+}
diff --git a/src/main/java/com/songoda/epichoppers/Utils/Debugger.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/utils/Debugger.java
similarity index 81%
rename from src/main/java/com/songoda/epichoppers/Utils/Debugger.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/utils/Debugger.java
index 2e628c0..a5a11ca 100644
--- a/src/main/java/com/songoda/epichoppers/Utils/Debugger.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/utils/Debugger.java
@@ -1,31 +1,31 @@
-package com.songoda.epichoppers.Utils;
-
-import com.songoda.epichoppers.EpicHoppers;
-
-/**
- * Created by songoda on 3/21/2017.
- */
-public class Debugger {
-
-
- public static void runReport(Exception e) {
- if (isDebug()) {
- System.out.println("==============================================================");
- System.out.println("The following is an error encountered in EpicHoppers.");
- System.out.println("--------------------------------------------------------------");
- e.printStackTrace();
- System.out.println("==============================================================");
- }
- sendReport(e);
- }
-
- public static void sendReport(Exception e) {
-
- }
-
- public static boolean isDebug() {
- EpicHoppers instance = EpicHoppers.getInstance();
- return instance.getConfig().getBoolean("System.Debugger Enabled");
- }
-
-}
+package com.songoda.epichoppers.utils;
+
+import com.songoda.epichoppers.EpicHoppersPlugin;
+
+/**
+ * Created by songoda on 3/21/2017.
+ */
+public class Debugger {
+
+
+ public static void runReport(Exception e) {
+ if (isDebug()) {
+ System.out.println("==============================================================");
+ System.out.println("The following is an error encountered in EpicHoppers.");
+ System.out.println("--------------------------------------------------------------");
+ e.printStackTrace();
+ System.out.println("==============================================================");
+ }
+ sendReport(e);
+ }
+
+ public static void sendReport(Exception e) {
+
+ }
+
+ public static boolean isDebug() {
+ EpicHoppersPlugin instance = EpicHoppersPlugin.getInstance();
+ return instance.getConfig().getBoolean("System.Debugger Enabled");
+ }
+
+}
diff --git a/src/main/java/com/songoda/epichoppers/Utils/Methods.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/utils/Methods.java
similarity index 80%
rename from src/main/java/com/songoda/epichoppers/Utils/Methods.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/utils/Methods.java
index 4cc406e..c00bc9a 100644
--- a/src/main/java/com/songoda/epichoppers/Utils/Methods.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/utils/Methods.java
@@ -1,92 +1,83 @@
-package com.songoda.epichoppers.Utils;
-
-import com.songoda.arconix.plugin.Arconix;
-import com.songoda.epichoppers.EpicHoppers;
-import com.songoda.epichoppers.Hopper.Hopper;
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.World;
-import org.bukkit.block.Block;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.ItemStack;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Created by songoda on 2/24/2017.
- */
-public class Methods {
-
- public static boolean isSync(Player p) {
- try {
- if (p.getItemInHand().hasItemMeta()
- && p.getItemInHand().getType() != Material.AIR
- && p.getItemInHand().getItemMeta().hasLore()) {
- for (String str : p.getItemInHand().getItemMeta().getLore()) {
- if (str.equals(Arconix.pl().getApi().format().formatText("&7Sync Touch")) || str.equals(Arconix.pl().getApi().format().formatText("&aSync Touch"))) {
- return true;
- }
- }
- }
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return false;
- }
-
- public static ItemStack getGlass() {
- try {
- EpicHoppers instance = EpicHoppers.getInstance();
- return Arconix.pl().getApi().getGUI().getGlass(instance.getConfig().getBoolean("Interfaces.Replace Glass Type 1 With Rainbow Glass"), instance.getConfig().getInt("Interfaces.Glass Type 1"));
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return null;
- }
-
- public static ItemStack getBackgroundGlass(boolean type) {
- try {
- EpicHoppers instance = EpicHoppers.getInstance();
- if (type)
- return Arconix.pl().getApi().getGUI().getGlass(false, instance.getConfig().getInt("Interfaces.Glass Type 2"));
- else
- return Arconix.pl().getApi().getGUI().getGlass(false, instance.getConfig().getInt("Interfaces.Glass Type 3"));
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return null;
- }
-
- public static String formatName(int level, boolean full) {
- try {
- EpicHoppers instance = EpicHoppers.getInstance();
- String name = instance.getLocale().getMessage("general.nametag.nameformat", level);
-
- String info = "";
- if (full) {
- info += Arconix.pl().getApi().format().convertToInvisibleString(level + ":");
- }
-
- return info + Arconix.pl().getApi().format().formatText(name);
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- return null;
- }
-
- public static void doParticles(Player p, Location location) {
- try {
- EpicHoppers instance = EpicHoppers.getInstance();
- location.setX(location.getX() + .5);
- location.setY(location.getY() + .5);
- location.setZ(location.getZ() + .5);
- p.getWorld().spawnParticle(org.bukkit.Particle.valueOf(instance.getConfig().getString("Main.Upgrade Particle Type")), location, 200, .5, .5, .5);
- } catch (Exception e) {
- Debugger.runReport(e);
- }
- }
-}
+package com.songoda.epichoppers.utils;
+
+import com.songoda.arconix.plugin.Arconix;
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+
+/**
+ * Created by songoda on 2/24/2017.
+ */
+public class Methods {
+
+ public static boolean isSync(Player p) {
+ try {
+ if (p.getItemInHand().hasItemMeta()
+ && p.getItemInHand().getType() != Material.AIR
+ && p.getItemInHand().getItemMeta().hasLore()) {
+ for (String str : p.getItemInHand().getItemMeta().getLore()) {
+ if (str.equals(Arconix.pl().getApi().format().formatText("&7Sync Touch")) || str.equals(Arconix.pl().getApi().format().formatText("&aSync Touch"))) {
+ return true;
+ }
+ }
+ }
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return false;
+ }
+
+ public static ItemStack getGlass() {
+ try {
+ EpicHoppersPlugin instance = EpicHoppersPlugin.getInstance();
+ return Arconix.pl().getApi().getGUI().getGlass(instance.getConfig().getBoolean("Interfaces.Replace Glass Type 1 With Rainbow Glass"), instance.getConfig().getInt("Interfaces.Glass Type 1"));
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return null;
+ }
+
+ public static ItemStack getBackgroundGlass(boolean type) {
+ try {
+ EpicHoppersPlugin instance = EpicHoppersPlugin.getInstance();
+ if (type)
+ return Arconix.pl().getApi().getGUI().getGlass(false, instance.getConfig().getInt("Interfaces.Glass Type 2"));
+ else
+ return Arconix.pl().getApi().getGUI().getGlass(false, instance.getConfig().getInt("Interfaces.Glass Type 3"));
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return null;
+ }
+
+ public static String formatName(int level, boolean full) {
+ try {
+ EpicHoppersPlugin instance = EpicHoppersPlugin.getInstance();
+ String name = instance.getLocale().getMessage("general.nametag.nameformat", level);
+
+ String info = "";
+ if (full) {
+ info += Arconix.pl().getApi().format().convertToInvisibleString(level + ":");
+ }
+
+ return info + Arconix.pl().getApi().format().formatText(name);
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ return null;
+ }
+
+ public static void doParticles(Player p, Location location) {
+ try {
+ EpicHoppersPlugin instance = EpicHoppersPlugin.getInstance();
+ location.setX(location.getX() + .5);
+ location.setY(location.getY() + .5);
+ location.setZ(location.getZ() + .5);
+ p.getWorld().spawnParticle(org.bukkit.Particle.valueOf(instance.getConfig().getString("Main.Upgrade Particle Type")), location, 200, .5, .5, .5);
+ } catch (Exception e) {
+ Debugger.runReport(e);
+ }
+ }
+}
diff --git a/src/main/java/com/songoda/epichoppers/Utils/SettingsManager.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/utils/SettingsManager.java
similarity index 94%
rename from src/main/java/com/songoda/epichoppers/Utils/SettingsManager.java
rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/utils/SettingsManager.java
index 1416afc..34dc865 100644
--- a/src/main/java/com/songoda/epichoppers/Utils/SettingsManager.java
+++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/utils/SettingsManager.java
@@ -1,239 +1,238 @@
-package com.songoda.epichoppers.Utils;
-
-import com.songoda.arconix.api.methods.formatting.TextComponent;
-import com.songoda.arconix.api.utils.ConfigWrapper;
-import com.songoda.arconix.plugin.Arconix;
-import com.songoda.epichoppers.EpicHoppers;
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.Material;
-import org.bukkit.configuration.file.FileConfiguration;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.inventory.InventoryClickEvent;
-import org.bukkit.event.player.AsyncPlayerChatEvent;
-import org.bukkit.inventory.Inventory;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.ItemMeta;
-
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Created by songo on 6/4/2017.
- */
-public class SettingsManager implements Listener {
-
- private String pluginName = "EpicHoppers";
-
- private static final Pattern SETTINGS_PATTERN = Pattern.compile("(.{1,28}(?:\\s|$))|(.{0,28})", Pattern.DOTALL);
-
- private static ConfigWrapper defs;
-
- private Map cat = new HashMap<>();
-
- private final EpicHoppers instance;
-
- public SettingsManager(EpicHoppers plugin) {
- this.instance = plugin;
-
- plugin.saveResource("SettingDefinitions.yml", true);
- defs = new ConfigWrapper(plugin, "", "SettingDefinitions.yml");
- defs.createNewFile("Loading data file", pluginName + " SettingDefinitions file");
- Bukkit.getPluginManager().registerEvents(this, plugin);
- }
-
- private Map current = new HashMap<>();
-
- @EventHandler
- public void onInventoryClick(InventoryClickEvent event) {
- ItemStack clickedItem = event.getCurrentItem();
-
- if (event.getInventory() != event.getWhoClicked().getOpenInventory().getTopInventory()
- || clickedItem == null || !clickedItem.hasItemMeta()
- || !clickedItem.getItemMeta().hasDisplayName()) {
- return;
- }
-
- if (event.getInventory().getTitle().equals(pluginName + " Settings Manager")) {
- event.setCancelled(true);
- if (clickedItem.getType().name().contains("STAINED_GLASS")) return;
-
- String type = ChatColor.stripColor(clickedItem.getItemMeta().getDisplayName());
- this.cat.put((Player) event.getWhoClicked(), type);
- this.openEditor((Player) event.getWhoClicked());
- } else if (event.getInventory().getTitle().equals(pluginName + " Settings Editor")) {
- event.setCancelled(true);
- if (clickedItem.getType().name().contains("STAINED_GLASS")) return;
-
- Player player = (Player) event.getWhoClicked();
-
- String key = cat.get(player) + "." + ChatColor.stripColor(clickedItem.getItemMeta().getDisplayName());
-
- if (instance.getConfig().get(key).getClass().getName().equals("java.lang.Boolean")) {
- this.instance.getConfig().set(key, !instance.getConfig().getBoolean(key));
- this.finishEditing(player);
- } else {
- this.editObject(player, key);
- }
- }
- }
-
- @EventHandler
- public void onChat(AsyncPlayerChatEvent event) {
- Player player = event.getPlayer();
- if (!current.containsKey(player)) return;
-
- String value = current.get(player);
- FileConfiguration config = instance.getConfig();
- if (config.isInt(value)) {
- config.set(value, Integer.parseInt(event.getMessage()));
- } else if (config.isDouble(value)) {
- config.set(value, Double.parseDouble(event.getMessage()));
- } else if (config.isString(value)) {
- config.set(value, event.getMessage());
- }
-
- this.finishEditing(player);
- event.setCancelled(true);
- }
-
- public void finishEditing(Player player) {
- this.current.remove(player);
- this.instance.saveConfig();
- this.openEditor(player);
- }
-
-
- public void editObject(Player player, String current) {
- this.current.put(player, ChatColor.stripColor(current));
-
- player.closeInventory();
- player.sendMessage("");
- player.sendMessage(TextComponent.formatText("&7Please enter a value for &6" + current + "&7."));
- if (instance.getConfig().isInt(current) || instance.getConfig().isDouble(current)) {
- player.sendMessage(TextComponent.formatText("&cUse only numbers."));
- }
- player.sendMessage("");
- }
-
- public void openSettingsManager(Player player) {
- Inventory inventory = Bukkit.createInventory(null, 27, pluginName + " Settings Manager");
- ItemStack glass = Methods.getGlass();
- for (int i = 0; i < inventory.getSize(); i++) {
- inventory.setItem(i, glass);
- }
-
- int slot = 10;
- for (String key : instance.getConfig().getDefaultSection().getKeys(false)) {
- ItemStack item = new ItemStack(Material.WHITE_WOOL, 1, (byte) (slot - 9)); //ToDo: Make this function as it was meant to.
- ItemMeta meta = item.getItemMeta();
- meta.setLore(Collections.singletonList(TextComponent.formatText("&6Click To Edit This Category.")));
- meta.setDisplayName(TextComponent.formatText("&f&l" + key));
- item.setItemMeta(meta);
- inventory.setItem(slot, item);
- slot++;
- }
-
- player.openInventory(inventory);
- }
-
- public void openEditor(Player player) {
- Inventory inventory = Bukkit.createInventory(null, 54, pluginName + " Settings Editor");
- FileConfiguration config = instance.getConfig();
-
- int slot = 0;
- for (String key : config.getConfigurationSection(cat.get(player)).getKeys(true)) {
- String fKey = cat.get(player) + "." + key;
- ItemStack item = new ItemStack(Material.DIAMOND_HELMET);
- ItemMeta meta = item.getItemMeta();
- meta.setDisplayName(TextComponent.formatText("&6" + key));
-
- List lore = new ArrayList<>();
- if (config.isBoolean(fKey)) {
- item.setType(Material.LEVER);
- lore.add(TextComponent.formatText(config.getBoolean(fKey) ? "&atrue" : "&cfalse"));
- } else if (config.isString(fKey)) {
- item.setType(Material.PAPER);
- lore.add(TextComponent.formatText("&9" + config.getString(fKey)));
- } else if (config.isInt(fKey)) {
- item.setType(Material.CLOCK);
- lore.add(TextComponent.formatText("&5" + config.getInt(fKey)));
- }
-
- if (defs.getConfig().contains(fKey)) {
- String text = defs.getConfig().getString(key);
-
- Matcher m = SETTINGS_PATTERN.matcher(text);
- while (m.find()) {
- if (m.end() != text.length() || m.group().length() != 0)
- lore.add(TextComponent.formatText("&7" + m.group()));
- }
- }
-
- meta.setLore(lore);
- item.setItemMeta(meta);
-
- inventory.setItem(slot, item);
- slot++;
- }
-
- player.openInventory(inventory);
- }
-
- public void updateSettings() {
- FileConfiguration config = instance.getConfig();
-
- for (Setting setting : Setting.values()) {
- if (config.contains("settings." + setting.oldSetting)) {
- config.addDefault(setting.setting, instance.getConfig().get("settings." + setting.oldSetting));
- config.set("settings." + setting.oldSetting, null);
- } else if (setting.setting.equals("Main.Upgrade Particle Type")) {
- config.addDefault(setting.setting, setting.option);
- } else {
- config.addDefault(setting.setting, setting.option);
- }
- }
-
- config.set("settings", null);
- }
- public enum Setting {
- o1("Upgrading-enabled", "Main.Allow Hopper Upgrading", true),
- o2("Upgrade-with-eco", "Main.Upgrade With Economy", true),
- o3("Upgrade-with-xp", "Main.Upgrade With XP", true),
- o4("Teleport-hoppers", "Main.Allow Players To Teleport Through Hoppers", true),
- o5("Filter-hoppers", "Main.Allow Players To use The Hopper Filter", true),
- o6("EnderChest-support", "Main.Support Enderchests", true),
- o7("Upgrade-particle-type", "Main.Upgrade Particle Type", "SPELL_WITCH"),
- o8("Hop-Tick", "Main.Amount of Ticks Between Hops", 8L),
- o9("Tele-Tick", "Main.Amount of Ticks Between Teleport", 10L),
- o10("Sync-Timeout", "Main.Timeout When Syncing Hoppers", 300L),
- o11("hopper-Limit", "Main.Max Hoppers Per Chunk", -1),
- o12("Helpful-Tips", "Main.Display Helpful Tips For Operators", true),
- o13("Sounds", "Main.Sounds Enabled", true),
- o14("BlockBreak-Particle-Type", "Main.BlockBreak Particle Type", "LAVA"),
- o15("BlockBreak-Blacklist", "Main.BlockBreak Blacklisted Blocks", Arrays.asList("BEDROCK")),
-
- o16("Rainbow-Glass", "Interfaces.Replace Glass Type 1 With Rainbow Glass", false),
- o17("ECO-Icon", "Interfaces.Economy Icon", "SUNFLOWER"),
- o18("XP-Icon", "Interfaces.XP Icon", "EXPERIENCE_BOTTLE"),
- o19("Glass-Type-1", "Interfaces.Glass Type 1", 7),
- o20("Glass-Type-2", "Interfaces.Glass Type 2", 11),
- o21("Glass-Type-3", "Interfaces.Glass Type 3", 3),
-
- o22("Debug-Mode", "System.Debugger Enabled", false);
-
- private String setting;
- private String oldSetting;
- private Object option;
-
- Setting(String oldSetting, String setting, Object option) {
- this.oldSetting = oldSetting;
- this.setting = setting;
- this.option = option;
- }
-
- }
+package com.songoda.epichoppers.utils;
+
+import com.songoda.arconix.api.methods.formatting.TextComponent;
+import com.songoda.arconix.api.utils.ConfigWrapper;
+import com.songoda.epichoppers.EpicHoppersPlugin;
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.Material;
+import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.inventory.InventoryClickEvent;
+import org.bukkit.event.player.AsyncPlayerChatEvent;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Created by songo on 6/4/2017.
+ */
+public class SettingsManager implements Listener {
+
+ private String pluginName = "EpicHoppers";
+
+ private static final Pattern SETTINGS_PATTERN = Pattern.compile("(.{1,28}(?:\\s|$))|(.{0,28})", Pattern.DOTALL);
+
+ private static ConfigWrapper defs;
+
+ private Map cat = new HashMap<>();
+
+ private final EpicHoppersPlugin instance;
+
+ public SettingsManager(EpicHoppersPlugin plugin) {
+ this.instance = plugin;
+
+ plugin.saveResource("SettingDefinitions.yml", true);
+ defs = new ConfigWrapper(plugin, "", "SettingDefinitions.yml");
+ defs.createNewFile("Loading data file", pluginName + " SettingDefinitions file");
+ Bukkit.getPluginManager().registerEvents(this, plugin);
+ }
+
+ private Map current = new HashMap<>();
+
+ @EventHandler
+ public void onInventoryClick(InventoryClickEvent event) {
+ ItemStack clickedItem = event.getCurrentItem();
+
+ if (event.getInventory() != event.getWhoClicked().getOpenInventory().getTopInventory()
+ || clickedItem == null || !clickedItem.hasItemMeta()
+ || !clickedItem.getItemMeta().hasDisplayName()) {
+ return;
+ }
+
+ if (event.getInventory().getTitle().equals(pluginName + " Settings Manager")) {
+ event.setCancelled(true);
+ if (clickedItem.getType().name().contains("STAINED_GLASS")) return;
+
+ String type = ChatColor.stripColor(clickedItem.getItemMeta().getDisplayName());
+ this.cat.put((Player) event.getWhoClicked(), type);
+ this.openEditor((Player) event.getWhoClicked());
+ } else if (event.getInventory().getTitle().equals(pluginName + " Settings Editor")) {
+ event.setCancelled(true);
+ if (clickedItem.getType().name().contains("STAINED_GLASS")) return;
+
+ Player player = (Player) event.getWhoClicked();
+
+ String key = cat.get(player) + "." + ChatColor.stripColor(clickedItem.getItemMeta().getDisplayName());
+
+ if (instance.getConfig().get(key).getClass().getName().equals("java.lang.Boolean")) {
+ this.instance.getConfig().set(key, !instance.getConfig().getBoolean(key));
+ this.finishEditing(player);
+ } else {
+ this.editObject(player, key);
+ }
+ }
+ }
+
+ @EventHandler
+ public void onChat(AsyncPlayerChatEvent event) {
+ Player player = event.getPlayer();
+ if (!current.containsKey(player)) return;
+
+ String value = current.get(player);
+ FileConfiguration config = instance.getConfig();
+ if (config.isInt(value)) {
+ config.set(value, Integer.parseInt(event.getMessage()));
+ } else if (config.isDouble(value)) {
+ config.set(value, Double.parseDouble(event.getMessage()));
+ } else if (config.isString(value)) {
+ config.set(value, event.getMessage());
+ }
+
+ this.finishEditing(player);
+ event.setCancelled(true);
+ }
+
+ public void finishEditing(Player player) {
+ this.current.remove(player);
+ this.instance.saveConfig();
+ this.openEditor(player);
+ }
+
+
+ public void editObject(Player player, String current) {
+ this.current.put(player, ChatColor.stripColor(current));
+
+ player.closeInventory();
+ player.sendMessage("");
+ player.sendMessage(TextComponent.formatText("&7Please enter a value for &6" + current + "&7."));
+ if (instance.getConfig().isInt(current) || instance.getConfig().isDouble(current)) {
+ player.sendMessage(TextComponent.formatText("&cUse only numbers."));
+ }
+ player.sendMessage("");
+ }
+
+ public void openSettingsManager(Player player) {
+ Inventory inventory = Bukkit.createInventory(null, 27, pluginName + " Settings Manager");
+ ItemStack glass = Methods.getGlass();
+ for (int i = 0; i < inventory.getSize(); i++) {
+ inventory.setItem(i, glass);
+ }
+
+ int slot = 10;
+ for (String key : instance.getConfig().getDefaultSection().getKeys(false)) {
+ ItemStack item = new ItemStack(Material.WHITE_WOOL, 1, (byte) (slot - 9)); //ToDo: Make this function as it was meant to.
+ ItemMeta meta = item.getItemMeta();
+ meta.setLore(Collections.singletonList(TextComponent.formatText("&6Click To Edit This Category.")));
+ meta.setDisplayName(TextComponent.formatText("&f&l" + key));
+ item.setItemMeta(meta);
+ inventory.setItem(slot, item);
+ slot++;
+ }
+
+ player.openInventory(inventory);
+ }
+
+ public void openEditor(Player player) {
+ Inventory inventory = Bukkit.createInventory(null, 54, pluginName + " Settings Editor");
+ FileConfiguration config = instance.getConfig();
+
+ int slot = 0;
+ for (String key : config.getConfigurationSection(cat.get(player)).getKeys(true)) {
+ String fKey = cat.get(player) + "." + key;
+ ItemStack item = new ItemStack(Material.DIAMOND_HELMET);
+ ItemMeta meta = item.getItemMeta();
+ meta.setDisplayName(TextComponent.formatText("&6" + key));
+
+ List lore = new ArrayList<>();
+ if (config.isBoolean(fKey)) {
+ item.setType(Material.LEVER);
+ lore.add(TextComponent.formatText(config.getBoolean(fKey) ? "&atrue" : "&cfalse"));
+ } else if (config.isString(fKey)) {
+ item.setType(Material.PAPER);
+ lore.add(TextComponent.formatText("&9" + config.getString(fKey)));
+ } else if (config.isInt(fKey)) {
+ item.setType(Material.CLOCK);
+ lore.add(TextComponent.formatText("&5" + config.getInt(fKey)));
+ }
+
+ if (defs.getConfig().contains(fKey)) {
+ String text = defs.getConfig().getString(key);
+
+ Matcher m = SETTINGS_PATTERN.matcher(text);
+ while (m.find()) {
+ if (m.end() != text.length() || m.group().length() != 0)
+ lore.add(TextComponent.formatText("&7" + m.group()));
+ }
+ }
+
+ meta.setLore(lore);
+ item.setItemMeta(meta);
+
+ inventory.setItem(slot, item);
+ slot++;
+ }
+
+ player.openInventory(inventory);
+ }
+
+ public void updateSettings() {
+ FileConfiguration config = instance.getConfig();
+
+ for (Setting setting : Setting.values()) {
+ if (config.contains("settings." + setting.oldSetting)) {
+ config.addDefault(setting.setting, instance.getConfig().get("settings." + setting.oldSetting));
+ config.set("settings." + setting.oldSetting, null);
+ } else if (setting.setting.equals("Main.Upgrade Particle Type")) {
+ config.addDefault(setting.setting, setting.option);
+ } else {
+ config.addDefault(setting.setting, setting.option);
+ }
+ }
+
+ config.set("settings", null);
+ }
+ public enum Setting {
+ o1("Upgrading-enabled", "Main.Allow hopper Upgrading", true),
+ o2("Upgrade-with-eco", "Main.Upgrade With Economy", true),
+ o3("Upgrade-with-xp", "Main.Upgrade With XP", true),
+ o4("Teleport-hoppers", "Main.Allow Players To Teleport Through Hoppers", true),
+ o5("Filter-hoppers", "Main.Allow Players To use The hopper Filter", true),
+ o6("EnderChest-support", "Main.Support Enderchests", true),
+ o7("Upgrade-particle-type", "Main.Upgrade Particle Type", "SPELL_WITCH"),
+ o8("Hop-Tick", "Main.Amount of Ticks Between Hops", 8L),
+ o9("Tele-Tick", "Main.Amount of Ticks Between Teleport", 10L),
+ o10("Sync-Timeout", "Main.Timeout When Syncing Hoppers", 300L),
+ o11("hopper-Limit", "Main.Max Hoppers Per Chunk", -1),
+ o12("Helpful-Tips", "Main.Display Helpful Tips For Operators", true),
+ o13("Sounds", "Main.Sounds Enabled", true),
+ o14("BlockBreak-Particle-Type", "Main.BlockBreak Particle Type", "LAVA"),
+ o15("BlockBreak-Blacklist", "Main.BlockBreak Blacklisted Blocks", Arrays.asList("BEDROCK")),
+
+ o16("Rainbow-Glass", "Interfaces.Replace Glass Type 1 With Rainbow Glass", false),
+ o17("ECO-Icon", "Interfaces.Economy Icon", "SUNFLOWER"),
+ o18("XP-Icon", "Interfaces.XP Icon", "EXPERIENCE_BOTTLE"),
+ o19("Glass-Type-1", "Interfaces.Glass Type 1", 7),
+ o20("Glass-Type-2", "Interfaces.Glass Type 2", 11),
+ o21("Glass-Type-3", "Interfaces.Glass Type 3", 3),
+
+ o22("Debug-Mode", "System.Debugger Enabled", false);
+
+ private String setting;
+ private String oldSetting;
+ private Object option;
+
+ Setting(String oldSetting, String setting, Object option) {
+ this.oldSetting = oldSetting;
+ this.setting = setting;
+ this.option = option;
+ }
+
+ }
}
\ No newline at end of file
diff --git a/src/main/resources/SettingDefinitions.yml b/EpicHoppers-Plugin/src/main/resources/SettingDefinitions.yml
similarity index 98%
rename from src/main/resources/SettingDefinitions.yml
rename to EpicHoppers-Plugin/src/main/resources/SettingDefinitions.yml
index 6d5bfb5..69dcf58 100644
--- a/src/main/resources/SettingDefinitions.yml
+++ b/EpicHoppers-Plugin/src/main/resources/SettingDefinitions.yml
@@ -1,14 +1,14 @@
-ECO-Icon: 'This is the default icon that will be used for the Economy upgrade button.'
-XP-Icon: 'This is the default icon that will be used for the Experience upgrade button.'
-Upgrading-enabled: 'Setting this to true will allow users to access the upgrade window.'
-Upgrade-with-eco: 'Setting this to true will allow users to use Economy to upgrade their hoppers.'
-Upgrade-with-xp: 'Setting this to true will allow users to use Experience to upgrade their hoppers.'
-On-upgrade-particles: 'Setting this to true will cause particles to emit when a hopper is upgraded.'
-Teleport-hoppers: 'These are the default levels, the amount of levels can be expanded if you want, just add another level to the bottom of the list while keeping numeric order. Allows you to enable or disable teleporting with hoppers'
-Hop-Tick: 'This is the tick speed for synced hoppers.'
-Sync-Timeout: 'This is the timeout that if reached will cancel a sync.'
-Glass-Type: 'This is the id of the glass used for the background in the guis.'
-Rainbow-Glass: 'If this is enabled the glass background will be randomized colors. '
-Limit-Hoppers-Per-Chunk: 'If enabled this will limit the amount hoppers per chunk'
-Hopper-Limit: 'This is the amount of allowed hoppers per chunk.'
-Upgrade-particle-type: 'This is the type of particle an upgrade will emit.'
+ECO-Icon: 'This is the default icon that will be used for the Economy upgrade button.'
+XP-Icon: 'This is the default icon that will be used for the Experience upgrade button.'
+Upgrading-enabled: 'Setting this to true will allow users to access the upgrade window.'
+Upgrade-with-eco: 'Setting this to true will allow users to use Economy to upgrade their hoppers.'
+Upgrade-with-xp: 'Setting this to true will allow users to use Experience to upgrade their hoppers.'
+On-upgrade-particles: 'Setting this to true will cause particles to emit when a hopper is upgraded.'
+Teleport-hoppers: 'These are the default levels, the amount of levels can be expanded if you want, just add another level to the bottom of the list while keeping numeric order. Allows you to enable or disable teleporting with hoppers'
+Hop-Tick: 'This is the tick speed for synced hoppers.'
+Sync-Timeout: 'This is the timeout that if reached will cancel a sync.'
+Glass-Type: 'This is the id of the glass used for the background in the guis.'
+Rainbow-Glass: 'If this is enabled the glass background will be randomized colors. '
+Limit-Hoppers-Per-Chunk: 'If enabled this will limit the amount hoppers per chunk'
+Hopper-Limit: 'This is the amount of allowed hoppers per chunk.'
+Upgrade-particle-type: 'This is the type of particle an upgrade will emit.'
diff --git a/src/main/resources/en_US.lang b/EpicHoppers-Plugin/src/main/resources/en_US.lang
similarity index 98%
rename from src/main/resources/en_US.lang
rename to EpicHoppers-Plugin/src/main/resources/en_US.lang
index 2f00f1e..054bb30 100644
--- a/src/main/resources/en_US.lang
+++ b/EpicHoppers-Plugin/src/main/resources/en_US.lang
@@ -1,53 +1,53 @@
-#General Messages
-
-general.nametag.prefix = "&7[&6EpicHoppers&7]"
-general.nametag.next = "&9Next"
-general.nametag.back = "&9Back"
-general.nametag.nameformat = "&eLevel %level% &fHopper"
-
-#Interface Messages
-
-interface.hopper.upgradewithxp = "&aUpgrade with XP"
-interface.hopper.upgradewithxplore = "&7Cost: &a%cost% Levels"
-interface.hopper.upgradewitheconomy = "&aUpgrade with ECO"
-interface.hopper.upgradewitheconomylore = "&7Cost: &a$%cost%"
-interface.hopper.currentlevel = "&6Hopper Level &7%level%"
-interface.hopper.nextlevel = "&6Next Level &7%level%"
-interface.hopper.range = "&7Range: &6%range%"
-interface.hopper.amount = "&7Amount: &6%amount%"
-interface.hopper.suction = "&7Suction: &6%suction%"
-interface.hopper.blockbreak = "&7Block Break: &6Every %ticks% ticks"
-interface.hopper.alreadymaxed = "&7This hopper is already maxed out!"
-interface.hopper.synclore = "|&7Left-Click then click a another|&7hopper or chest to sync!||&7Right-Click to desync."
-interface.hopper.perltitle = "&6Click to Teleport"
-interface.hopper.perllore = "|&7Left-Click to teleport to|&7the end of the chain.||&7Right-Click to toggle walk|&7on teleport."
-interface.hopper.filtertitle = "&cClick to Filter"
-interface.hopper.filterlore = "|&7This allows you to choose|&7which items go where."
-interface.hopper.synchopper = "&6Click to Sync This hopper"
-interface.hopper.rejectsync = "&6Click to Sync Rejected Items"
-interface.filter.infotitle = "&aFilter Guide"
-interface.filter.infolore = "&7Items placed in the top left|&7space will be whitelisted.||&7Items placed in the right|&7will be void.||&7Items placed in the bottom left|&7will be blacklisted.||&cUsing the whitelist will disable|&cboth the blacklist and the void."
-interface.filter.whitelist = "&f&lWhite List"
-interface.filter.blacklist = "&8&lBlack List"
-interface.filter.void = "&c&lVoid"
-
-#Event Messages
-
-event.general.nopermission = "&cYou do not have permission to do that."
-event.upgrade.cannotafford = "&cYou cannot afford this upgrade."
-event.upgrade.success = "&7You successfully upgraded this hopper to &6level %level%&7!"
-event.upgrade.maxed = "&7You maxed out this hopper at &6level %level%&7."
-event.inventory.noroom = "&7You do not have space in your inventory for this."
-event.hopper.syncsuccess = "&aSynchronization Successful."
-event.hopper.desync = "&7You have desynchronized this hopper."
-event.hopper.syncnext = "&7Click another hopper or container to sync."
-event.hopper.syncself = "&cYou can't sync a hopper to itself."
-event.hopper.synctimeout = "&cSyncing timed out."
-event.hopper.syncoutofrange = "&cThis block is out of your hoppers range."
-event.hopper.syncdidnotplace = "&cSorry! You need to have placed this hopper to sync things to it."
-event.hopper.toomany = "&cYou can only place %amount% hoppers per chunk..."
-event.hopper.walkteleenabled = "Walk on teleporting has been enabled for this hopper."
-event.hopper.walkteledisabled = "Walk on teleporting has been disabled for this hopper."
-event.hopper.onlyone = "&cYou may only place a single item at a time."
-event.hopper.syncchest = "&7You have synchronized your &9%name% &7with this chest."
+#General Messages
+
+general.nametag.prefix = "&7[&6EpicHoppers&7]"
+general.nametag.next = "&9Next"
+general.nametag.back = "&9Back"
+general.nametag.nameformat = "&eLevel %level% &fHopper"
+
+#Interface Messages
+
+interface.hopper.upgradewithxp = "&aUpgrade with XP"
+interface.hopper.upgradewithxplore = "&7Cost: &a%cost% Levels"
+interface.hopper.upgradewitheconomy = "&aUpgrade with ECO"
+interface.hopper.upgradewitheconomylore = "&7Cost: &a$%cost%"
+interface.hopper.currentlevel = "&6Hopper Level &7%level%"
+interface.hopper.nextlevel = "&6Next Level &7%level%"
+interface.hopper.range = "&7Range: &6%range%"
+interface.hopper.amount = "&7Amount: &6%amount%"
+interface.hopper.suction = "&7Suction: &6%suction%"
+interface.hopper.blockbreak = "&7Block Break: &6Every %ticks% ticks"
+interface.hopper.alreadymaxed = "&7This hopper is already maxed out!"
+interface.hopper.synclore = "|&7Left-Click then click a another|&7hopper or chest to sync!||&7Right-Click to desync."
+interface.hopper.perltitle = "&6Click to Teleport"
+interface.hopper.perllore = "|&7Left-Click to teleport to|&7the end of the chain.||&7Right-Click to toggle walk|&7on teleport."
+interface.hopper.filtertitle = "&cClick to Filter"
+interface.hopper.filterlore = "|&7This allows you to choose|&7which items go where."
+interface.hopper.synchopper = "&6Click to Sync This hopper"
+interface.hopper.rejectsync = "&6Click to Sync Rejected Items"
+interface.filter.infotitle = "&aFilter Guide"
+interface.filter.infolore = "&7Items placed in the top left|&7space will be whitelisted.||&7Items placed in the right|&7will be void.||&7Items placed in the bottom left|&7will be blacklisted.||&cUsing the whitelist will disable|&cboth the blacklist and the void."
+interface.filter.whitelist = "&f&lWhite List"
+interface.filter.blacklist = "&8&lBlack List"
+interface.filter.void = "&c&lVoid"
+
+#Event Messages
+
+event.general.nopermission = "&cYou do not have permission to do that."
+event.upgrade.cannotafford = "&cYou cannot afford this upgrade."
+event.upgrade.success = "&7You successfully upgraded this hopper to &6level %level%&7!"
+event.upgrade.maxed = "&7You maxed out this hopper at &6level %level%&7."
+event.inventory.noroom = "&7You do not have space in your inventory for this."
+event.hopper.syncsuccess = "&aSynchronization Successful."
+event.hopper.desync = "&7You have desynchronized this hopper."
+event.hopper.syncnext = "&7Click another hopper or container to sync."
+event.hopper.syncself = "&cYou can't sync a hopper to itself."
+event.hopper.synctimeout = "&cSyncing timed out."
+event.hopper.syncoutofrange = "&cThis block is out of your hoppers range."
+event.hopper.syncdidnotplace = "&cSorry! You need to have placed this hopper to sync things to it."
+event.hopper.toomany = "&cYou can only place %amount% hoppers per chunk..."
+event.hopper.walkteleenabled = "Walk on teleporting has been enabled for this hopper."
+event.hopper.walkteledisabled = "Walk on teleporting has been disabled for this hopper."
+event.hopper.onlyone = "&cYou may only place a single item at a time."
+event.hopper.syncchest = "&7You have synchronized your &9%name% &7with this chest."
event.hopper.desyncchest = "&7You have desynchronized your &9%name% &7with this chest."
\ No newline at end of file
diff --git a/src/main/resources/plugin.yml b/EpicHoppers-Plugin/src/main/resources/plugin.yml
similarity index 76%
rename from src/main/resources/plugin.yml
rename to EpicHoppers-Plugin/src/main/resources/plugin.yml
index 11f631f..5b8c5d2 100644
--- a/src/main/resources/plugin.yml
+++ b/EpicHoppers-Plugin/src/main/resources/plugin.yml
@@ -1,14 +1,14 @@
-name: EpicHoppers
-description: EpicHoppers
-main: com.songoda.epichoppers.EpicHoppers
-depend: [Arconix]
-softdepend: [Towny, RedProtect, Kingdoms, PlotsSquared, GriefPrevention, USkyBlock, ASkyBlock, WorldGuard, Factions, Vault]
-version: 2.4
-author: Songoda
-api-version: 1.13
-commands:
- epichoppers:
- description: View information on this plugin.
- default: true
- aliases: [sc, eh, synccraft]
+name: EpicHoppers
+description: EpicHoppers
+main: com.songoda.epichoppers.EpicHoppersPlugin
+depend: [Arconix]
+softdepend: [Towny, RedProtect, Kingdoms, PlotsSquared, GriefPrevention, USkyBlock, ASkyBlock, WorldGuard, Factions, Vault]
+version: 3
+author: Songoda
+api-version: 1.13
+commands:
+ epichoppers:
+ description: View information on this plugin.
+ default: true
+ aliases: [eh, synccraft]
usage: /eh
\ No newline at end of file
diff --git a/src/main/java/com/songoda/epichoppers/API/EpicHoppersAPI.java b/src/main/java/com/songoda/epichoppers/API/EpicHoppersAPI.java
deleted file mode 100644
index 5d219eb..0000000
--- a/src/main/java/com/songoda/epichoppers/API/EpicHoppersAPI.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.songoda.epichoppers.API;
-
-import com.songoda.epichoppers.EpicHoppers;
-import org.bukkit.inventory.ItemStack;
-
-/**
- * Created by songo on 6/11/2017.
- */
-public class EpicHoppersAPI {
-
- public int getILevel(ItemStack item) {
- if (item.getItemMeta().getDisplayName().contains(":")) {
- String arr[] = (item.getItemMeta().getDisplayName().replace("§", "")).split(":");
- return Integer.parseInt(arr[0]);
- } else {
- return EpicHoppers.getInstance().getLevelManager().getLowestLevel().getLevel();
- }
- }
-}
\ No newline at end of file
diff --git a/src/main/java/com/songoda/epichoppers/Hopper/LevelManager.java b/src/main/java/com/songoda/epichoppers/Hopper/LevelManager.java
deleted file mode 100644
index 1081560..0000000
--- a/src/main/java/com/songoda/epichoppers/Hopper/LevelManager.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.songoda.epichoppers.Hopper;
-
-import java.util.Collections;
-import java.util.Map;
-import java.util.NavigableMap;
-import java.util.TreeMap;
-
-public class LevelManager {
-
- private final NavigableMap registeredLevels = new TreeMap<>();
-
- public void addLevel(int level, int costExperiance, int costEconomy, int range, int amount, int suction, int blockBreak) {
- registeredLevels.put(level, new Level(level, costExperiance, costEconomy, range, amount, suction, blockBreak));
- }
-
- public Level getLevel(int level) {
- return registeredLevels.get(level);
- }
-
- public Level getLowestLevel() {
- return registeredLevels.firstEntry().getValue();
- }
-
- public Level getHighestLevel() {
- return registeredLevels.lastEntry().getValue();
- }
-
- public Map getLevels() {
- return Collections.unmodifiableMap(registeredLevels);
- }
-
- public void clear() {
- registeredLevels.clear();
- }
-}