diff --git a/EpicHoppers-API/pom.xml b/EpicHoppers-API/pom.xml index 2821045..a76934a 100644 --- a/EpicHoppers-API/pom.xml +++ b/EpicHoppers-API/pom.xml @@ -58,10 +58,11 @@ provided + org.spigotmc spigot-api - 1.8-R0.1-SNAPSHOT + 1.18-R0.1-SNAPSHOT provided diff --git a/EpicHoppers-API/src/main/java/com/songoda/epichoppers/EpicHoppersApi.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/EpicHoppersApi.java new file mode 100644 index 0000000..2891c82 --- /dev/null +++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/EpicHoppersApi.java @@ -0,0 +1,73 @@ +package com.songoda.epichoppers; + +import com.songoda.epichoppers.boost.BoostManager; +import com.songoda.epichoppers.containers.ContainerManager; +import com.songoda.epichoppers.database.DataManager; +import com.songoda.epichoppers.hopper.levels.LevelManager; +import com.songoda.epichoppers.hopper.teleport.TeleportHandler; +import com.songoda.epichoppers.player.PlayerDataManager; +import org.jetbrains.annotations.ApiStatus; + +public class EpicHoppersApi { + private static EpicHoppersApi instance; + + private final LevelManager levelManager; + private final BoostManager boostManager; + private final ContainerManager containerManager; + private final TeleportHandler teleportHandler; + private final PlayerDataManager playerDataManager; + private final DataManager dataManager; + + private EpicHoppersApi(LevelManager levelManager, + BoostManager boostManager, + ContainerManager containerManager, + TeleportHandler teleportHandler, + PlayerDataManager playerDataManager, + DataManager dataManager) { + this.levelManager = levelManager; + this.boostManager = boostManager; + this.containerManager = containerManager; + this.teleportHandler = teleportHandler; + this.playerDataManager = playerDataManager; + this.dataManager = dataManager; + } + + public LevelManager getLevelManager() { + return this.levelManager; + } + + public BoostManager getBoostManager() { + return this.boostManager; + } + + public ContainerManager getContainerManager() { + return this.containerManager; + } + + public TeleportHandler getTeleportHandler() { + return this.teleportHandler; + } + + public PlayerDataManager getPlayerDataManager() { + return this.playerDataManager; + } + + /** + * TODO: The DataManager probably shouldn't be exposed to the API. + */ + @ApiStatus.Internal + public DataManager getDataManager() { + return this.dataManager; + } + + public static EpicHoppersApi getApi() { + return instance; + } + + static void initApi(LevelManager levelManager, BoostManager boostManager, ContainerManager containerManager, TeleportHandler teleportHandler, PlayerDataManager playerDataManager, DataManager dataManager) { + if (instance != null) { + throw new IllegalStateException(EpicHoppersApi.class.getSimpleName() + " already initialized"); + } + instance = new EpicHoppersApi(levelManager, boostManager, containerManager, teleportHandler, playerDataManager, dataManager); + } +} diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/api/events/HopperAccessEvent.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/events/HopperAccessEvent.java similarity index 100% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/api/events/HopperAccessEvent.java rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/events/HopperAccessEvent.java diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/api/events/HopperBreakEvent.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/events/HopperBreakEvent.java similarity index 100% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/api/events/HopperBreakEvent.java rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/events/HopperBreakEvent.java diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/api/events/HopperEvent.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/events/HopperEvent.java similarity index 99% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/api/events/HopperEvent.java rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/events/HopperEvent.java index 71ae5f9..f89f77d 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/api/events/HopperEvent.java +++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/events/HopperEvent.java @@ -24,5 +24,4 @@ public abstract class HopperEvent extends PlayerEvent { public Hopper getHopper() { return this.hopper; } - } diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/api/events/HopperPlaceEvent.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/events/HopperPlaceEvent.java similarity index 100% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/api/events/HopperPlaceEvent.java rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/events/HopperPlaceEvent.java diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/boost/BoostData.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/boost/BoostData.java similarity index 100% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/boost/BoostData.java rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/boost/BoostData.java diff --git a/EpicHoppers-API/src/main/java/com/songoda/epichoppers/boost/BoostManager.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/boost/BoostManager.java new file mode 100644 index 0000000..ca03950 --- /dev/null +++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/boost/BoostManager.java @@ -0,0 +1,17 @@ +package com.songoda.epichoppers.boost; + +import java.util.List; +import java.util.Set; +import java.util.UUID; + +public interface BoostManager { + void addBoostToPlayer(BoostData data); + + void removeBoostFromPlayer(BoostData data); + + void addBoosts(List boosts); + + Set getBoosts(); + + BoostData getBoost(UUID player); +} diff --git a/EpicHoppers-API/src/main/java/com/songoda/epichoppers/containers/ContainerManager.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/containers/ContainerManager.java new file mode 100644 index 0000000..f6401bd --- /dev/null +++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/containers/ContainerManager.java @@ -0,0 +1,15 @@ +package com.songoda.epichoppers.containers; + +import org.bukkit.block.Block; + +import java.util.Set; + +public interface ContainerManager { + Set getCustomContainerImplementations(); + + void registerCustomContainerImplementation(String requiredPlugin, IContainer container); + + void registerCustomContainerImplementation(IContainer container); + + CustomContainer getCustomContainer(Block block); +} diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/CustomContainer.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/containers/CustomContainer.java similarity index 72% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/CustomContainer.java rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/containers/CustomContainer.java index 0c3aa34..bd37241 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/CustomContainer.java +++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/containers/CustomContainer.java @@ -1,15 +1,8 @@ package com.songoda.epichoppers.containers; -import org.bukkit.block.Block; import org.bukkit.inventory.ItemStack; public abstract class CustomContainer { - private final Block block; - - public CustomContainer(Block block) { - this.block = block; - } - public abstract boolean addToContainer(ItemStack itemToMove); public abstract ItemStack[] getItems(); diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/IContainer.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/containers/IContainer.java similarity index 100% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/IContainer.java rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/containers/IContainer.java diff --git a/EpicHoppers-API/src/main/java/com/songoda/epichoppers/database/DataManager.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/database/DataManager.java new file mode 100644 index 0000000..a9f5038 --- /dev/null +++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/database/DataManager.java @@ -0,0 +1,38 @@ +package com.songoda.epichoppers.database; + +import com.songoda.epichoppers.boost.BoostData; +import com.songoda.epichoppers.hopper.Hopper; +import com.songoda.epichoppers.hopper.ItemType; +import com.songoda.epichoppers.hopper.LinkType; +import org.bukkit.Location; +import org.bukkit.inventory.ItemStack; + +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; + +public interface DataManager { + void createBoost(BoostData boostData); + + void getBoosts(Consumer> callback); + + void deleteBoost(BoostData boostData); + + void createLink(Hopper hopper, Location location, LinkType type); + + void updateItems(Hopper hopper, ItemType type, List items); + + void deleteLink(Hopper hopper, Location location); + + void deleteLinks(Hopper hopper); + + void createHoppers(List hoppers); + + void createHopper(Hopper hopper); + + void updateHopper(Hopper hopper); + + void deleteHopper(Hopper hopper); + + void getHoppers(Consumer> callback); +} diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/Filter.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/Filter.java similarity index 99% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/Filter.java rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/Filter.java index e0eeb0f..4c50359 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/Filter.java +++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/Filter.java @@ -15,65 +15,52 @@ public class Filter { private List autoSellWhiteList = new ArrayList<>(); private List autoSellBlackList = new ArrayList<>(); - private Location endPoint; - public List getWhiteList() { return this.whiteList != null ? this.whiteList : Collections.emptyList(); } - public void setWhiteList(List whiteList) { this.whiteList = whiteList; } - public List getBlackList() { return this.blackList != null ? this.blackList : Collections.emptyList(); } - public void setBlackList(List blackList) { this.blackList = blackList; } - public List getVoidList() { return this.voidList != null ? this.voidList : Collections.emptyList(); } - public void setVoidList(List voidList) { this.voidList = voidList; } - public List getAutoSellWhiteList() { return this.autoSellWhiteList != null ? this.autoSellWhiteList : Collections.emptyList(); } - public void setAutoSellWhiteList(List autoSellWhiteList) { this.autoSellWhiteList = autoSellWhiteList; } - public List getAutoSellBlackList() { return this.autoSellBlackList != null ? this.autoSellBlackList : Collections.emptyList(); } - public void setAutoSellBlackList(List autoSellBlackList) { this.autoSellBlackList = autoSellBlackList; } - public Location getEndPoint() { return this.endPoint; } - public void setEndPoint(Location endPoint) { this.endPoint = endPoint; } diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/Hopper.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/Hopper.java similarity index 69% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/Hopper.java rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/Hopper.java index da4d0a5..43355a2 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/Hopper.java +++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/Hopper.java @@ -1,17 +1,18 @@ package com.songoda.epichoppers.hopper; +import com.craftaro.core.SongodaPlugin; import com.craftaro.core.compatibility.CompatibleParticleHandler; import com.craftaro.core.compatibility.CompatibleSound; import com.craftaro.core.compatibility.ServerVersion; -import com.craftaro.core.gui.GuiManager; import com.craftaro.core.hooks.EconomyManager; -import com.songoda.epichoppers.EpicHoppers; +import com.songoda.epichoppers.EpicHoppersApi; import com.songoda.epichoppers.api.events.HopperAccessEvent; -import com.songoda.epichoppers.gui.GUIOverview; +import com.songoda.epichoppers.database.DataManager; import com.songoda.epichoppers.hopper.levels.Level; +import com.songoda.epichoppers.hopper.levels.LevelManager; import com.songoda.epichoppers.hopper.teleport.TeleportTrigger; import com.songoda.epichoppers.player.PlayerData; -import com.songoda.epichoppers.settings.Settings; +import com.songoda.epichoppers.player.PlayerDataManager; import com.songoda.epichoppers.utils.CostType; import com.songoda.epichoppers.utils.Methods; import org.bukkit.Bukkit; @@ -24,6 +25,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.ApiStatus; import java.util.ArrayList; import java.util.HashMap; @@ -31,12 +33,15 @@ import java.util.List; import java.util.Map; import java.util.UUID; +/** + * FIXME: Needs heavy refactoring to only have one responsibility. + */ public class Hopper { // Id for database use. private int id; private final Location location; - private Level level = EpicHoppers.getPlugin(EpicHoppers.class).getLevelManager().getLowestLevel(); + private Level level = getLevelManager().getLowestLevel(); private UUID lastPlayerOpened = null; private UUID placedBy = null; private final List linkedBlocks = new ArrayList<>(); @@ -54,7 +59,8 @@ public class Hopper { this.location = location; } - public void overview(GuiManager guiManager, Player player) { + @ApiStatus.Internal + public boolean prepareForOpeningOverviewGui(Player player) { if (this.lastPlayerOpened != null && this.lastPlayerOpened != player.getUniqueId() && Bukkit.getPlayer(this.lastPlayerOpened) != null) { @@ -64,22 +70,22 @@ public class Hopper { HopperAccessEvent accessEvent = new HopperAccessEvent(player, this); Bukkit.getPluginManager().callEvent(accessEvent); if (accessEvent.isCancelled()) { - return; + return false; } if (this.placedBy == null) { this.placedBy = player.getUniqueId(); } - EpicHoppers instance = EpicHoppers.getPlugin(EpicHoppers.class); if (!player.hasPermission("epichoppers.overview")) { - return; + return false; } setActivePlayer(player); - guiManager.showGUI(player, new GUIOverview(instance, this, player)); + return true; } + @ApiStatus.Internal public void forceClose() { if (this.activePlayer != null) { this.activePlayer.closeInventory(); @@ -100,12 +106,11 @@ public class Hopper { } public void upgrade(Player player, CostType type) { - EpicHoppers plugin = EpicHoppers.getPlugin(EpicHoppers.class); - if (!plugin.getLevelManager().getLevels().containsKey(this.level.getLevel() + 1)) { + if (!getLevelManager().getLevels().containsKey(this.level.getLevel() + 1)) { return; } - Level level = plugin.getLevelManager().getLevel(this.level.getLevel() + 1); + Level level = getLevelManager().getLevel(this.level.getLevel() + 1); int cost = type == CostType.ECONOMY ? level.getCostEconomy() : level.getCostExperience(); if (type == CostType.ECONOMY) { @@ -114,7 +119,7 @@ public class Hopper { return; } if (!EconomyManager.hasBalance(player, cost)) { - plugin.getLocale().getMessage("event.upgrade.cannotafford").sendPrefixedMessage(player); + getPlugin().getLocale().getMessage("event.upgrade.cannotafford").sendPrefixedMessage(player); return; } EconomyManager.withdrawBalance(player, cost); @@ -126,38 +131,37 @@ public class Hopper { } upgradeFinal(level, player); } else { - plugin.getLocale().getMessage("event.upgrade.cannotafford").sendPrefixedMessage(player); + getPlugin().getLocale().getMessage("event.upgrade.cannotafford").sendPrefixedMessage(player); } } } private void upgradeFinal(Level level, Player player) { - EpicHoppers plugin = EpicHoppers.getPlugin(EpicHoppers.class); this.level = level; - plugin.getDataManager().updateHopper(this); + getDataManager().updateHopper(this); syncName(); - if (plugin.getLevelManager().getHighestLevel() != level) { - plugin.getLocale().getMessage("event.upgrade.success") + if (getLevelManager().getHighestLevel() != level) { + getPlugin().getLocale().getMessage("event.upgrade.success") .processPlaceholder("level", level.getLevel()).sendPrefixedMessage(player); } else { - plugin.getLocale().getMessage("event.upgrade.maxed") + getPlugin().getLocale().getMessage("event.upgrade.maxed") .processPlaceholder("level", level.getLevel()).sendPrefixedMessage(player); } Location loc = this.location.clone().add(.5, .5, .5); - if (!Settings.UPGRADE_PARTICLE_TYPE.getString().trim().isEmpty()) { + if (!getUpgradeParticleType().trim().isEmpty()) { CompatibleParticleHandler.spawnParticles( - CompatibleParticleHandler.ParticleType.getParticle(Settings.UPGRADE_PARTICLE_TYPE.getString()), + CompatibleParticleHandler.ParticleType.getParticle(getUpgradeParticleType()), loc, 100, .5, .5, .5); } - if (plugin.getLevelManager().getHighestLevel() != level) { + if (getLevelManager().getHighestLevel() != level) { player.playSound(player.getLocation(), CompatibleSound.ENTITY_PLAYER_LEVELUP.getSound(), 0.6F, 15.0F); } else { player.playSound(player.getLocation(), CompatibleSound.ENTITY_PLAYER_LEVELUP.getSound(), 2F, 25.0F); player.playSound(player.getLocation(), CompatibleSound.BLOCK_NOTE_BLOCK_CHIME.getSound(), 2F, 25.0F); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> player.playSound(player.getLocation(), CompatibleSound.BLOCK_NOTE_BLOCK_CHIME.getSound(), 1.2F, 35.0F), 5L); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> player.playSound(player.getLocation(), CompatibleSound.BLOCK_NOTE_BLOCK_CHIME.getSound(), 1.8F, 35.0F), 10L); + Bukkit.getScheduler().scheduleSyncDelayedTask(getPlugin(), () -> player.playSound(player.getLocation(), CompatibleSound.BLOCK_NOTE_BLOCK_CHIME.getSound(), 1.2F, 35.0F), 5L); + Bukkit.getScheduler().scheduleSyncDelayedTask(getPlugin(), () -> player.playSound(player.getLocation(), CompatibleSound.BLOCK_NOTE_BLOCK_CHIME.getSound(), 1.8F, 35.0F), 10L); } } @@ -170,56 +174,53 @@ public class Hopper { } public void timeout(Player player) { - EpicHoppers instance = EpicHoppers.getPlugin(EpicHoppers.class); - this.syncId = Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> { - PlayerData playerData = instance.getPlayerDataManager().getPlayerData(player); + this.syncId = Bukkit.getScheduler().scheduleSyncDelayedTask(getPlugin(), () -> { + PlayerData playerData = getPlayerDataManager().getPlayerData(player); if (playerData.getSyncType() != null && playerData.getLastHopper() == this) { - instance.getLocale().getMessage("event.hopper.synctimeout").sendPrefixedMessage(player); + getPlugin().getLocale().getMessage("event.hopper.synctimeout").sendPrefixedMessage(player); playerData.setSyncType(null); } - }, Settings.LINK_TIMEOUT.getLong() * this.level.getLinkAmount()); + }, getLinkTimeoutFromPluginConfig() * this.level.getLinkAmount()); } public void link(Block toLink, boolean filtered, Player player) { - EpicHoppers instance = EpicHoppers.getPlugin(EpicHoppers.class); - if (this.location.getWorld().equals(toLink.getLocation().getWorld()) && !player.hasPermission("EpicHoppers.Override") && !player.hasPermission("EpicHoppers.Admin") && this.location.distance(toLink.getLocation()) > this.level.getRange()) { - instance.getLocale().getMessage("event.hopper.syncoutofrange").sendPrefixedMessage(player); + getPlugin().getLocale().getMessage("event.hopper.syncoutofrange").sendPrefixedMessage(player); return; } if (this.linkedBlocks.contains(toLink.getLocation())) { - instance.getLocale().getMessage("event.hopper.already").sendPrefixedMessage(player); + getPlugin().getLocale().getMessage("event.hopper.already").sendPrefixedMessage(player); return; } if (!filtered) { this.linkedBlocks.add(toLink.getLocation()); - instance.getDataManager().createLink(this, toLink.getLocation(), LinkType.REGULAR); + getDataManager().createLink(this, toLink.getLocation(), LinkType.REGULAR); } else { this.filter.setEndPoint(toLink.getLocation()); - instance.getDataManager().createLink(this, toLink.getLocation(), LinkType.REJECT); - instance.getLocale().getMessage("event.hopper.syncsuccess").sendPrefixedMessage(player); - instance.getPlayerDataManager().getPlayerData(player).setSyncType(null); + getDataManager().createLink(this, toLink.getLocation(), LinkType.REJECT); + getPlugin().getLocale().getMessage("event.hopper.syncsuccess").sendPrefixedMessage(player); + getPlayerDataManager().getPlayerData(player).setSyncType(null); return; } this.lastPlayerOpened = player.getUniqueId(); if (this.level.getLinkAmount() > 1) { if (this.linkedBlocks.size() >= this.level.getLinkAmount()) { - instance.getLocale().getMessage("event.hopper.syncdone").sendPrefixedMessage(player); + getPlugin().getLocale().getMessage("event.hopper.syncdone").sendPrefixedMessage(player); cancelSync(player); return; } - instance.getLocale().getMessage("event.hopper.syncsuccessmore") + getPlugin().getLocale().getMessage("event.hopper.syncsuccessmore") .processPlaceholder("amount", this.level.getLinkAmount() - this.linkedBlocks.size()) .sendPrefixedMessage(player); return; } - instance.getLocale().getMessage("event.hopper.syncsuccess").sendPrefixedMessage(player); + getPlugin().getLocale().getMessage("event.hopper.syncsuccess").sendPrefixedMessage(player); cancelSync(player); } @@ -349,7 +350,7 @@ public class Hopper { public void cancelSync(Player player) { Bukkit.getScheduler().cancelTask(this.syncId); - EpicHoppers.getPlugin(EpicHoppers.class).getPlayerDataManager().getPlayerData(player).setSyncType(null); + getPlayerDataManager().getPlayerData(player).setSyncType(null); } public int getId() { @@ -367,4 +368,43 @@ public class Hopper { public void setActivePlayer(Player activePlayer) { this.activePlayer = activePlayer; } + + private LevelManager getLevelManager() { + return EpicHoppersApi.getApi().getLevelManager(); + } + + private PlayerDataManager getPlayerDataManager() { + return EpicHoppersApi.getApi().getPlayerDataManager(); + } + + private DataManager getDataManager() { + return EpicHoppersApi.getApi().getDataManager(); + } + + /** + * @deprecated The class needs refactoring to not even need the plugin. + * This is just a temporary workaround to get a Minecraft 1.20-beta build ready + */ + @Deprecated + private long getLinkTimeoutFromPluginConfig() { + return getPlugin().getConfig().getLong("Main.Timeout When Syncing Hoppers"); + } + + /** + * @deprecated The class needs refactoring to not even need the plugin. + * This is just a temporary workaround to get a Minecraft 1.20-beta build ready + */ + @Deprecated + private String getUpgradeParticleType() { + return getPlugin().getConfig().getString("Main.Upgrade Particle Type"); + } + + /** + * @deprecated The class needs refactoring to not even need the plugin. + * This is just a temporary workaround to get a Minecraft 1.20-beta build ready + */ + @Deprecated + private SongodaPlugin getPlugin() { + return (SongodaPlugin) Bukkit.getPluginManager().getPlugin("EpicHoppers"); + } } diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/ItemType.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/ItemType.java similarity index 100% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/ItemType.java rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/ItemType.java diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/LinkType.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/LinkType.java similarity index 100% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/LinkType.java rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/LinkType.java diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/Level.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/levels/Level.java similarity index 77% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/Level.java rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/levels/Level.java index 96c3986..5ff9c81 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/Level.java +++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/levels/Level.java @@ -1,7 +1,8 @@ package com.songoda.epichoppers.hopper.levels; -import com.songoda.epichoppers.EpicHoppers; +import com.craftaro.core.SongodaPlugin; import com.songoda.epichoppers.hopper.levels.modules.Module; +import org.bukkit.Bukkit; import java.util.ArrayList; import java.util.List; @@ -24,34 +25,31 @@ public class Level { this.registeredModules = registeredModules; buildDescription(); - } public void buildDescription() { - EpicHoppers instance = EpicHoppers.getPlugin(EpicHoppers.class); - this.description.clear(); - this.description.add(instance.getLocale().getMessage("interface.hopper.range") + this.description.add(getPlugin().getLocale().getMessage("interface.hopper.range") .processPlaceholder("range", this.range).getMessage()); - this.description.add(instance.getLocale().getMessage("interface.hopper.amount") + this.description.add(getPlugin().getLocale().getMessage("interface.hopper.amount") .processPlaceholder("amount", this.amount).getMessage()); if (this.linkAmount != 1) { - this.description.add(instance.getLocale().getMessage("interface.hopper.linkamount") + this.description.add(getPlugin().getLocale().getMessage("interface.hopper.linkamount") .processPlaceholder("amount", this.linkAmount).getMessage()); } if (this.filter) { - this.description.add(instance.getLocale().getMessage("interface.hopper.filter") - .processPlaceholder("enabled", instance.getLocale() + this.description.add(getPlugin().getLocale().getMessage("interface.hopper.filter") + .processPlaceholder("enabled", getPlugin().getLocale() .getMessage("general.word.enabled").getMessage()).getMessage()); } if (this.teleport) { - this.description.add(instance + this.description.add(getPlugin() .getLocale() .getMessage("interface.hopper.teleport") .processPlaceholder( "enabled", - instance + getPlugin() .getLocale() .getMessage("general.word.enabled") .getMessage()) @@ -132,4 +130,13 @@ public class Level { } return null; } + + /** + * @deprecated The class needs refactoring to not even need the plugin. + * This is just a temporary workaround to get a Minecraft 1.20-beta build ready + */ + @Deprecated + private SongodaPlugin getPlugin() { + return (SongodaPlugin) Bukkit.getPluginManager().getPlugin("EpicHoppers"); + } } diff --git a/EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/levels/LevelManager.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/levels/LevelManager.java new file mode 100644 index 0000000..91a9c87 --- /dev/null +++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/levels/LevelManager.java @@ -0,0 +1,27 @@ +package com.songoda.epichoppers.hopper.levels; + +import com.songoda.epichoppers.hopper.levels.modules.Module; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.Map; + +public interface LevelManager { + void addLevel(int level, int costExperience, int costEconomy, int range, int amount, boolean filter, boolean teleport, int linkAmount, ArrayList modules); + + Level getLevel(int level); + + Level getLevel(ItemStack item); + + boolean isEpicHopper(ItemStack item); + + Level getLowestLevel(); + + Level getHighestLevel(); + + boolean isLevel(int level); + + Map getLevels(); + + void clear(); +} diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/Module.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/levels/modules/Module.java similarity index 67% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/Module.java rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/levels/modules/Module.java index fd5fc60..58c90c6 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/Module.java +++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/levels/modules/Module.java @@ -1,10 +1,11 @@ package com.songoda.epichoppers.hopper.levels.modules; +import com.craftaro.core.SongodaPlugin; import com.craftaro.core.configuration.Config; -import com.songoda.epichoppers.EpicHoppers; +import com.craftaro.core.gui.GuiManager; import com.songoda.epichoppers.hopper.Hopper; -import com.songoda.epichoppers.utils.Methods; import com.songoda.epichoppers.utils.StorageContainerCache; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; @@ -18,11 +19,14 @@ import java.util.Map; public abstract class Module { private static final Map CONFIGS = new HashMap<>(); - protected final EpicHoppers plugin; + protected final SongodaPlugin plugin; + protected final GuiManager guiManager; private final Config config; - public Module(EpicHoppers plugin) { + public Module(SongodaPlugin plugin, GuiManager guiManager) { this.plugin = plugin; + this.guiManager = guiManager; + if (!CONFIGS.containsKey(getName())) { Config config = new Config(plugin, File.separator + "modules", getName() + ".yml"); CONFIGS.put(getName(), config); @@ -49,7 +53,7 @@ public abstract class Module { } public void saveData(Hopper hopper, String setting, Object value, Object toCache) { - this.config.set("data." + Methods.serializeLocation(hopper.getLocation()) + "." + setting, value); + this.config.set("data." + serializeLocation(hopper.getLocation()) + "." + setting, value); modifyDataCache(hopper, setting, toCache); } @@ -63,17 +67,30 @@ public abstract class Module { return hopper.getDataFromModuleCache(cacheStr); } - Object data = this.config.get("data." + Methods.serializeLocation(hopper.getLocation()) + "." + setting); + Object data = this.config.get("data." + serializeLocation(hopper.getLocation()) + "." + setting); modifyDataCache(hopper, setting, data); return data; } public void clearData(Hopper hopper) { - this.config.set("data." + Methods.serializeLocation(hopper.getLocation()), null); + this.config.set("data." + serializeLocation(hopper.getLocation()), null); hopper.clearModuleCache(); } public void saveDataToFile() { this.config.save(); } + + private static String serializeLocation(Location location) { + if (location == null || location.getWorld() == null) { + return ""; + } + String w = location.getWorld().getName(); + double x = location.getX(); + double y = location.getY(); + double z = location.getZ(); + String str = w + ":" + x + ":" + y + ":" + z; + str = str.replace(".0", "").replace(".", "/"); + return str; + } } diff --git a/EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/teleport/TeleportHandler.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/teleport/TeleportHandler.java new file mode 100644 index 0000000..ec8d20d --- /dev/null +++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/teleport/TeleportHandler.java @@ -0,0 +1,8 @@ +package com.songoda.epichoppers.hopper.teleport; + +import com.songoda.epichoppers.hopper.Hopper; +import org.bukkit.entity.Entity; + +public interface TeleportHandler { + void tpEntity(Entity entity, Hopper hopper); +} diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/teleport/TeleportTrigger.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/teleport/TeleportTrigger.java similarity index 100% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/teleport/TeleportTrigger.java rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/hopper/teleport/TeleportTrigger.java diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/PlayerData.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/player/PlayerData.java similarity index 100% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/PlayerData.java rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/player/PlayerData.java diff --git a/EpicHoppers-API/src/main/java/com/songoda/epichoppers/player/PlayerDataManager.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/player/PlayerDataManager.java new file mode 100644 index 0000000..a250228 --- /dev/null +++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/player/PlayerDataManager.java @@ -0,0 +1,11 @@ +package com.songoda.epichoppers.player; + +import org.bukkit.entity.Player; + +import java.util.Collection; + +public interface PlayerDataManager { + PlayerData getPlayerData(Player player); + + Collection getRegisteredPlayers(); +} diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/SyncType.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/player/SyncType.java similarity index 71% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/SyncType.java rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/player/SyncType.java index 7caba64..cb96e39 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/SyncType.java +++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/player/SyncType.java @@ -1,6 +1,5 @@ package com.songoda.epichoppers.player; public enum SyncType { - REGULAR, - FILTERED + REGULAR, FILTERED } diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/utils/CostType.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/utils/CostType.java similarity index 100% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/utils/CostType.java rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/utils/CostType.java diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/utils/Methods.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/utils/Methods.java similarity index 80% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/utils/Methods.java rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/utils/Methods.java index 06fe40c..e21d02e 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/utils/Methods.java +++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/utils/Methods.java @@ -1,15 +1,17 @@ package com.songoda.epichoppers.utils; +import com.craftaro.core.SongodaPlugin; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.core.utils.TextUtils; -import com.songoda.epichoppers.EpicHoppers; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Entity; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.ApiStatus; +@ApiStatus.Internal public class Methods { public static boolean isSimilarMaterial(ItemStack is1, ItemStack is2) { if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13) || @@ -75,8 +77,7 @@ public class Methods { } public static String formatName(int level) { - EpicHoppers instance = EpicHoppers.getPlugin(EpicHoppers.class); - String name = instance.getLocale() + String name = getPlugin().getLocale() .getMessage("general.nametag.nameformat") .processPlaceholder("level", level) .getMessage(); @@ -86,29 +87,18 @@ public class Methods { } public static void doParticles(Entity entity, Location location) { - EpicHoppers instance = EpicHoppers.getPlugin(EpicHoppers.class); location.setX(location.getX() + .5); location.setY(location.getY() + .5); location.setZ(location.getZ() + .5); - entity.getWorld().spawnParticle(org.bukkit.Particle.valueOf(instance.getConfig().getString("Main.Upgrade Particle Type")), location, 200, .5, .5, .5); + entity.getWorld().spawnParticle(org.bukkit.Particle.valueOf(getPlugin().getConfig().getString("Main.Upgrade Particle Type")), location, 200, .5, .5, .5); } /** - * Serializes the location specified. - * - * @param location The location that is to be saved. - * @return The serialized data. + * @deprecated The class needs refactoring to not even need the plugin. + * This is just a temporary workaround to get a Minecraft 1.20-beta build ready */ - public static String serializeLocation(Location location) { - if (location == null || location.getWorld() == null) { - return ""; - } - String w = location.getWorld().getName(); - double x = location.getX(); - double y = location.getY(); - double z = location.getZ(); - String str = w + ":" + x + ":" + y + ":" + z; - str = str.replace(".0", "").replace(".", "/"); - return str; + @Deprecated + private static SongodaPlugin getPlugin() { + return (SongodaPlugin) Bukkit.getPluginManager().getPlugin("EpicHoppers"); } } diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/utils/StorageContainerCache.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/utils/StorageContainerCache.java similarity index 99% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/utils/StorageContainerCache.java rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/utils/StorageContainerCache.java index ed735e7..796153f 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/utils/StorageContainerCache.java +++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/utils/StorageContainerCache.java @@ -13,6 +13,7 @@ import org.bukkit.block.data.type.Chest; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.ApiStatus; import java.util.HashMap; import java.util.Map; @@ -21,6 +22,7 @@ import java.util.Map; * Persistent storage intended for streamlining read/write for storage * containers in large batches */ +@ApiStatus.Internal public class StorageContainerCache { private static final Map INVENTORY_CACHE = new HashMap<>(); diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/EpicHoppers.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/EpicHoppers.java index 227690c..129e9a4 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/EpicHoppers.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/EpicHoppers.java @@ -4,6 +4,7 @@ import com.craftaro.core.SongodaCore; import com.craftaro.core.SongodaPlugin; import com.craftaro.core.commands.CommandManager; import com.craftaro.core.configuration.Config; +import com.craftaro.core.database.DataManagerAbstract; import com.craftaro.core.database.DataMigrationManager; import com.craftaro.core.database.DatabaseConnector; import com.craftaro.core.database.MySQLConnector; @@ -15,16 +16,20 @@ import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.core.third_party.de.tr7zw.nbtapi.NBTItem; import com.craftaro.core.utils.TextUtils; import com.songoda.epichoppers.boost.BoostManager; +import com.songoda.epichoppers.boost.BoostManagerImpl; import com.songoda.epichoppers.commands.CommandBoost; import com.songoda.epichoppers.commands.CommandGive; import com.songoda.epichoppers.commands.CommandReload; import com.songoda.epichoppers.commands.CommandSettings; import com.songoda.epichoppers.containers.ContainerManager; +import com.songoda.epichoppers.containers.ContainerManagerImpl; import com.songoda.epichoppers.database.DataManager; +import com.songoda.epichoppers.database.DataManagerImpl; import com.songoda.epichoppers.database.migrations._1_InitialMigration; import com.songoda.epichoppers.hopper.HopperManager; import com.songoda.epichoppers.hopper.levels.Level; import com.songoda.epichoppers.hopper.levels.LevelManager; +import com.songoda.epichoppers.hopper.levels.LevelManagerImpl; import com.songoda.epichoppers.hopper.levels.modules.Module; import com.songoda.epichoppers.hopper.levels.modules.ModuleAutoCrafting; import com.songoda.epichoppers.hopper.levels.modules.ModuleAutoSell; @@ -33,12 +38,14 @@ import com.songoda.epichoppers.hopper.levels.modules.ModuleBlockBreak; import com.songoda.epichoppers.hopper.levels.modules.ModuleMobHopper; import com.songoda.epichoppers.hopper.levels.modules.ModuleSuction; import com.songoda.epichoppers.hopper.teleport.TeleportHandler; +import com.songoda.epichoppers.hopper.teleport.TeleportHandlerImpl; import com.songoda.epichoppers.listeners.BlockListeners; import com.songoda.epichoppers.listeners.EntityListeners; import com.songoda.epichoppers.listeners.HopperListeners; import com.songoda.epichoppers.listeners.InteractListeners; import com.songoda.epichoppers.listeners.InventoryListeners; import com.songoda.epichoppers.player.PlayerDataManager; +import com.songoda.epichoppers.player.PlayerDataManagerImpl; import com.songoda.epichoppers.settings.Settings; import com.songoda.epichoppers.tasks.HopTask; import com.songoda.epichoppers.utils.Methods; @@ -62,7 +69,7 @@ public class EpicHoppers extends SongodaPlugin { private HopperManager hopperManager; private CommandManager commandManager; private LevelManager levelManager; - private BoostManager boostManager; + private BoostManagerImpl boostManager; private PlayerDataManager playerDataManager; private ContainerManager containerManager; @@ -110,9 +117,9 @@ public class EpicHoppers extends SongodaPlugin { ); this.hopperManager = new HopperManager(this); - this.playerDataManager = new PlayerDataManager(); - this.containerManager = new ContainerManager(); - this.boostManager = new BoostManager(); + this.playerDataManager = new PlayerDataManagerImpl(); + this.containerManager = new ContainerManagerImpl(); + this.boostManager = new BoostManagerImpl(); // Database stuff, go! try { @@ -136,14 +143,16 @@ public class EpicHoppers extends SongodaPlugin { this.emergencyStop(); } - this.dataManager = new DataManager(this.databaseConnector, this); - DataMigrationManager dataMigrationManager = new DataMigrationManager(this.databaseConnector, this.dataManager, new _1_InitialMigration(this)); + this.dataManager = new DataManagerImpl(this.databaseConnector, this); + DataMigrationManager dataMigrationManager = new DataMigrationManager(this.databaseConnector, (DataManagerAbstract) this.dataManager, new _1_InitialMigration(this)); dataMigrationManager.runMigrations(); + EpicHoppersApi.initApi(this.levelManager, this.boostManager, this.containerManager, this.teleportHandler, this.playerDataManager, this.dataManager); + this.loadLevelManager(); new HopTask(this); - this.teleportHandler = new TeleportHandler(this); + this.teleportHandler = new TeleportHandlerImpl(this); // Register Listeners this.guiManager.init(); @@ -201,7 +210,7 @@ public class EpicHoppers extends SongodaPlugin { this.levelsConfig.load(); // Load an instance of LevelManager - this.levelManager = new LevelManager(); + this.levelManager = new LevelManagerImpl(); /* * Register Levels into LevelManager from configuration. */ @@ -224,17 +233,17 @@ public class EpicHoppers extends SongodaPlugin { for (String key : levels.getKeys(false)) { if (key.equals("Suction") && levels.getInt("Suction") != 0) { - modules.add(new ModuleSuction(this, levels.getInt("Suction"))); + modules.add(new ModuleSuction(this, getGuiManager(), levels.getInt("Suction"))); } else if (key.equals("BlockBreak") && levels.getInt("BlockBreak") != 0) { - modules.add(new ModuleBlockBreak(this, levels.getInt("BlockBreak"))); + modules.add(new ModuleBlockBreak(this, getGuiManager(), levels.getInt("BlockBreak"))); } else if (key.equals("AutoCrafting")) { - modules.add(new ModuleAutoCrafting(this)); + modules.add(new ModuleAutoCrafting(this, getGuiManager())); } else if (key.equals("AutoSell")) { - modules.add(new ModuleAutoSell(this, autoSell)); + modules.add(new ModuleAutoSell(this, getGuiManager(), autoSell)); } else if (key.equals("MobHopper")) { - modules.add(new ModuleMobHopper(this, levels.getInt("MobHopper"))); + modules.add(new ModuleMobHopper(this, getGuiManager(), levels.getInt("MobHopper"))); } else if (key.equals("AutoSmelting")) { - modules.add(new ModuleAutoSmelter(this, levels.getInt("AutoSmelting"))); + modules.add(new ModuleAutoSmelter(this, getGuiManager(), levels.getInt("AutoSmelting"))); } } this.levelManager.addLevel(level, costExperience, costEconomy, radius, amount, filter, teleport, linkAmount, modules); diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/boost/BoostManager.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/boost/BoostManagerImpl.java similarity index 90% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/boost/BoostManager.java rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/boost/BoostManagerImpl.java index 85ee8cf..8b2398b 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/boost/BoostManager.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/boost/BoostManagerImpl.java @@ -6,25 +6,30 @@ import java.util.List; import java.util.Set; import java.util.UUID; -public class BoostManager { +public class BoostManagerImpl implements BoostManager { private final Set registeredBoosts = new HashSet<>(); + @Override public void addBoostToPlayer(BoostData data) { this.registeredBoosts.add(data); } + @Override public void removeBoostFromPlayer(BoostData data) { this.registeredBoosts.remove(data); } + @Override public void addBoosts(List boosts) { this.registeredBoosts.addAll(boosts); } + @Override public Set getBoosts() { return Collections.unmodifiableSet(this.registeredBoosts); } + @Override public BoostData getBoost(UUID player) { if (player == null) { return null; diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/ContainerManager.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/ContainerManagerImpl.java similarity index 84% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/ContainerManager.java rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/ContainerManagerImpl.java index 7438b16..4012c2a 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/ContainerManager.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/ContainerManagerImpl.java @@ -1,8 +1,8 @@ package com.songoda.epichoppers.containers; -import com.songoda.epichoppers.containers.impl.AdvancedChestImplementation; -import com.songoda.epichoppers.containers.impl.EpicFarmingImplementation; -import com.songoda.epichoppers.containers.impl.FabledSkyBlockImplementation; +import com.songoda.epichoppers.containers.impl.AdvancedChestImpl; +import com.songoda.epichoppers.containers.impl.EpicFarmingImpl; +import com.songoda.epichoppers.containers.impl.FabledSkyBlockImpl; import org.bukkit.Bukkit; import org.bukkit.block.Block; import org.bukkit.plugin.PluginManager; @@ -11,21 +11,23 @@ import java.util.Collections; import java.util.HashSet; import java.util.Set; -public class ContainerManager { +public class ContainerManagerImpl implements ContainerManager { private final Set customContainers; - public ContainerManager() { + public ContainerManagerImpl() { this.customContainers = new HashSet<>(); - registerCustomContainerImplementation("AdvancedChests", new AdvancedChestImplementation()); - registerCustomContainerImplementation("EpicFarming", new EpicFarmingImplementation()); - registerCustomContainerImplementation("FabledSkyBlock", new FabledSkyBlockImplementation()); + registerCustomContainerImplementation("AdvancedChests", new AdvancedChestImpl()); + registerCustomContainerImplementation("EpicFarming", new EpicFarmingImpl()); + registerCustomContainerImplementation("FabledSkyBlock", new FabledSkyBlockImpl()); } + @Override public Set getCustomContainerImplementations() { return Collections.unmodifiableSet(this.customContainers); } + @Override public void registerCustomContainerImplementation(String requiredPlugin, IContainer container) { PluginManager pluginManager = Bukkit.getPluginManager(); if (requiredPlugin != null && pluginManager.isPluginEnabled(requiredPlugin)) { @@ -33,10 +35,12 @@ public class ContainerManager { } } + @Override public void registerCustomContainerImplementation(IContainer container) { registerCustomContainerImplementation(null, container); } + @Override public CustomContainer getCustomContainer(Block block) { for (IContainer container : this.customContainers) { CustomContainer customContainer = container.getCustomContainer(block); diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/impl/AdvancedChestImplementation.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/impl/AdvancedChestImpl.java similarity index 92% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/impl/AdvancedChestImplementation.java rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/impl/AdvancedChestImpl.java index e2577a3..43847fd 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/impl/AdvancedChestImplementation.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/impl/AdvancedChestImpl.java @@ -7,7 +7,7 @@ import org.bukkit.inventory.ItemStack; import us.lynuxcraft.deadsilenceiv.advancedchests.AdvancedChestsAPI; import us.lynuxcraft.deadsilenceiv.advancedchests.chest.AdvancedChest; -public class AdvancedChestImplementation implements IContainer { +public class AdvancedChestImpl implements IContainer { @Override public CustomContainer getCustomContainer(Block block) { return new Container(block); @@ -17,7 +17,6 @@ public class AdvancedChestImplementation implements IContainer { private final AdvancedChest advancedChest; public Container(Block block) { - super(block); this.advancedChest = AdvancedChestsAPI.getChestManager().getAdvancedChest(block.getLocation()); } @@ -41,8 +40,9 @@ public class AdvancedChestImplementation implements IContainer { if (itemToMove.getType() == item.getType()) { item.setAmount(item.getAmount() - amountToMove); - if (item.getAmount() <= 0) + if (item.getAmount() <= 0) { this.advancedChest.getAllItems().remove(item); + } return; } } diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/impl/EpicFarmingImplementation.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/impl/EpicFarmingImpl.java similarity index 94% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/impl/EpicFarmingImplementation.java rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/impl/EpicFarmingImpl.java index 6e0c62f..7e8f92c 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/impl/EpicFarmingImplementation.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/impl/EpicFarmingImpl.java @@ -8,7 +8,7 @@ import com.songoda.epichoppers.containers.IContainer; import org.bukkit.block.Block; import org.bukkit.inventory.ItemStack; -public class EpicFarmingImplementation implements IContainer { +public class EpicFarmingImpl implements IContainer { @Override public CustomContainer getCustomContainer(Block block) { return new Container(block); @@ -18,7 +18,6 @@ public class EpicFarmingImplementation implements IContainer { private final Farm farm; public Container(Block block) { - super(block); this.farm = EpicFarming.getInstance().getFarmManager().getFarm(block); } diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/impl/FabledSkyBlockImplementation.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/impl/FabledSkyBlockImpl.java similarity index 95% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/impl/FabledSkyBlockImplementation.java rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/impl/FabledSkyBlockImpl.java index 773b0ea..f943781 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/impl/FabledSkyBlockImplementation.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/impl/FabledSkyBlockImpl.java @@ -9,7 +9,7 @@ import com.songoda.skyblock.stackable.StackableManager; import org.bukkit.block.Block; import org.bukkit.inventory.ItemStack; -public class FabledSkyBlockImplementation implements IContainer { +public class FabledSkyBlockImpl implements IContainer { @Override public CustomContainer getCustomContainer(Block block) { return new Container(block); @@ -19,7 +19,7 @@ public class FabledSkyBlockImplementation implements IContainer { private final Stackable stackable; public Container(Block block) { - super(block); + super(); StackableManager stackableManager = SkyBlock.getInstance().getStackableManager(); CompatibleMaterial compatibleMaterial = CompatibleMaterial.getMaterial(block); diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/database/DataManager.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/database/DataManagerImpl.java similarity index 98% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/database/DataManager.java rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/database/DataManagerImpl.java index f1ad6b0..ba88d24 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/database/DataManager.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/database/DataManagerImpl.java @@ -33,11 +33,12 @@ import java.util.Map; import java.util.UUID; import java.util.function.Consumer; -public class DataManager extends DataManagerAbstract { - public DataManager(DatabaseConnector databaseConnector, Plugin plugin) { +public class DataManagerImpl extends DataManagerAbstract implements DataManager { + public DataManagerImpl(DatabaseConnector databaseConnector, Plugin plugin) { super(databaseConnector, plugin); } + @Override public void createBoost(BoostData boostData) { this.runAsync(() -> { try (Connection connection = this.databaseConnector.getConnection()) { @@ -53,6 +54,7 @@ public class DataManager extends DataManagerAbstract { }); } + @Override public void getBoosts(Consumer> callback) { List boosts = new ArrayList<>(); this.runAsync(() -> { @@ -74,6 +76,7 @@ public class DataManager extends DataManagerAbstract { }); } + @Override public void deleteBoost(BoostData boostData) { this.runAsync(() -> { try (Connection connection = this.databaseConnector.getConnection()) { @@ -87,6 +90,7 @@ public class DataManager extends DataManagerAbstract { }); } + @Override public void createLink(Hopper hopper, Location location, LinkType type) { this.runAsync(() -> { try (Connection connection = this.databaseConnector.getConnection()) { @@ -107,6 +111,7 @@ public class DataManager extends DataManagerAbstract { }); } + @Override public void updateItems(Hopper hopper, ItemType type, List items) { this.runAsync(() -> { try (Connection connection = this.databaseConnector.getConnection()) { @@ -140,6 +145,7 @@ public class DataManager extends DataManagerAbstract { }); } + @Override public void deleteLink(Hopper hopper, Location location) { this.runAsync(() -> { try (Connection connection = this.databaseConnector.getConnection()) { @@ -157,6 +163,7 @@ public class DataManager extends DataManagerAbstract { }); } + @Override public void deleteLinks(Hopper hopper) { this.runAsync(() -> { try (Connection connection = this.databaseConnector.getConnection()) { @@ -170,12 +177,14 @@ public class DataManager extends DataManagerAbstract { }); } + @Override public void createHoppers(List hoppers) { for (Hopper hopper : hoppers) { createHopper(hopper); } } + @Override public void createHopper(Hopper hopper) { this.runAsync(() -> { try (Connection connection = this.databaseConnector.getConnection()) { @@ -274,6 +283,7 @@ public class DataManager extends DataManagerAbstract { }); } + @Override public void updateHopper(Hopper hopper) { this.runAsync(() -> { try (Connection connection = this.databaseConnector.getConnection()) { @@ -291,6 +301,7 @@ public class DataManager extends DataManagerAbstract { }); } + @Override public void deleteHopper(Hopper hopper) { this.runAsync(() -> { try (Connection connection = this.databaseConnector.getConnection()) { @@ -317,6 +328,7 @@ public class DataManager extends DataManagerAbstract { }); } + @Override public void getHoppers(Consumer> callback) { this.runAsync(() -> { try (Connection connection = this.databaseConnector.getConnection()) { diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/gui/GUIAutoSellFilter.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/gui/GUIAutoSellFilter.java index b4522fa..c3babec 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/gui/GUIAutoSellFilter.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/gui/GUIAutoSellFilter.java @@ -1,10 +1,11 @@ package com.songoda.epichoppers.gui; +import com.craftaro.core.SongodaPlugin; import com.craftaro.core.gui.CustomizableGui; import com.craftaro.core.gui.GuiUtils; import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.core.utils.TextUtils; -import com.songoda.epichoppers.EpicHoppers; +import com.songoda.epichoppers.EpicHoppersApi; import com.songoda.epichoppers.hopper.Filter; import com.songoda.epichoppers.hopper.Hopper; import com.songoda.epichoppers.hopper.ItemType; @@ -20,13 +21,13 @@ import java.util.List; public class GUIAutoSellFilter extends CustomizableGui { private static final List OPEN_INVENTORIES = new ArrayList<>(); - private final EpicHoppers plugin; + private final SongodaPlugin plugin; private final Hopper hopper; private final int[] whiteListSlots = {9, 10, 11, 18, 19, 20, 27, 28, 29, 36, 37, 38}; private final int[] blackListSlots = {12, 13, 14, 21, 22, 23, 30, 31, 32, 39, 40, 41}; - public GUIAutoSellFilter(EpicHoppers plugin, Hopper hopper) { + public GUIAutoSellFilter(SongodaPlugin plugin, Hopper hopper) { super(plugin, "autosell"); this.plugin = plugin; this.hopper = hopper; @@ -63,7 +64,9 @@ public class GUIAutoSellFilter extends CustomizableGui { setButton("back", 8, GuiUtils.createButtonItem(XMaterial.ARROW.parseItem(), plugin.getLocale().getMessage("general.nametag.back").getMessage()), (event) -> { - hopper.overview(this.guiManager, event.player); + if (hopper.prepareForOpeningOverviewGui(event.player)) { + this.guiManager.showGUI(event.player, new GUIOverview(plugin, hopper, event.player)); + } compile(); }); @@ -179,8 +182,8 @@ public class GUIAutoSellFilter extends CustomizableGui { filter.setAutoSellWhiteList(whiteListItems); filter.setAutoSellBlackList(blackListItems); - this.plugin.getDataManager().updateItems(this.hopper, ItemType.AUTO_SELL_WHITELIST, whiteListItems); - this.plugin.getDataManager().updateItems(this.hopper, ItemType.AUTO_SELL_BLACKLIST, blackListItems); + EpicHoppersApi.getApi().getDataManager().updateItems(this.hopper, ItemType.AUTO_SELL_WHITELIST, whiteListItems); + EpicHoppersApi.getApi().getDataManager().updateItems(this.hopper, ItemType.AUTO_SELL_BLACKLIST, blackListItems); } public static void compileOpenAutoSellFilter(Hopper hopper) { diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/gui/GUICrafting.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/gui/GUICrafting.java index f4098f6..960c920 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/gui/GUICrafting.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/gui/GUICrafting.java @@ -1,10 +1,10 @@ package com.songoda.epichoppers.gui; +import com.craftaro.core.SongodaPlugin; import com.craftaro.core.gui.CustomizableGui; import com.craftaro.core.gui.GuiUtils; import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.core.utils.TextUtils; -import com.songoda.epichoppers.EpicHoppers; import com.songoda.epichoppers.hopper.Hopper; import com.songoda.epichoppers.hopper.levels.modules.ModuleAutoCrafting; import com.songoda.epichoppers.settings.Settings; @@ -13,7 +13,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; public class GUICrafting extends CustomizableGui { - public GUICrafting(ModuleAutoCrafting module, EpicHoppers plugin, Hopper hopper, Player player) { + public GUICrafting(ModuleAutoCrafting module, SongodaPlugin plugin, Hopper hopper, Player player) { super(plugin, "crafting"); setRows(3); setTitle(Methods.formatName(hopper.getLevel().getLevel()) + TextUtils.formatText(" &8-&f Crafting")); @@ -38,7 +38,9 @@ public class GUICrafting extends CustomizableGui { setButton("back", 8, GuiUtils.createButtonItem(XMaterial.ARROW.parseItem(), plugin.getLocale().getMessage("general.nametag.back").getMessage()), (event) -> { - hopper.overview(this.guiManager, event.player); + if (hopper.prepareForOpeningOverviewGui(event.player)) { + this.guiManager.showGUI(event.player, new GUIOverview(plugin, hopper, event.player)); + } setItem(module, hopper, player); } ); diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/gui/GUIFilter.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/gui/GUIFilter.java index a6cf827..665babb 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/gui/GUIFilter.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/gui/GUIFilter.java @@ -1,10 +1,11 @@ package com.songoda.epichoppers.gui; +import com.craftaro.core.SongodaPlugin; import com.craftaro.core.gui.CustomizableGui; import com.craftaro.core.gui.GuiUtils; import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.core.utils.TextUtils; -import com.songoda.epichoppers.EpicHoppers; +import com.songoda.epichoppers.EpicHoppersApi; import com.songoda.epichoppers.hopper.Filter; import com.songoda.epichoppers.hopper.Hopper; import com.songoda.epichoppers.hopper.ItemType; @@ -24,10 +25,10 @@ import java.util.List; public class GUIFilter extends CustomizableGui { private static final List OPEN_INVENTORIES = new ArrayList<>(); - private final EpicHoppers plugin; + private final SongodaPlugin plugin; private final Hopper hopper; - public GUIFilter(EpicHoppers plugin, Hopper hopper, Player player) { + public GUIFilter(SongodaPlugin plugin, Hopper hopper, Player player) { super(plugin, "filter"); this.plugin = plugin; this.hopper = hopper; @@ -67,7 +68,9 @@ public class GUIFilter extends CustomizableGui { setButton("back", 8, GuiUtils.createButtonItem(XMaterial.ARROW.parseItem(), plugin.getLocale().getMessage("general.nametag.back").getMessage()), (event) -> { - hopper.overview(this.guiManager, event.player); + if (hopper.prepareForOpeningOverviewGui(event.player)) { + this.guiManager.showGUI(event.player, new GUIOverview(plugin, hopper, event.player)); + } compile(); }); @@ -159,7 +162,7 @@ public class GUIFilter extends CustomizableGui { plugin.getLocale().getMessage("event.hopper.desync").sendPrefixedMessage(player); hopper.getFilter().setEndPoint(null); } else { - plugin.getPlayerDataManager().getPlayerData(player).setSyncType(SyncType.FILTERED); + EpicHoppersApi.getApi().getPlayerDataManager().getPlayerData(player).setSyncType(SyncType.FILTERED); plugin.getLocale().getMessage("event.hopper.syncnext").sendPrefixedMessage(player); hopper.timeout(player); } @@ -232,9 +235,9 @@ public class GUIFilter extends CustomizableGui { filter.setWhiteList(owhite); filter.setBlackList(oblack); filter.setVoidList(ovoid); - this.plugin.getDataManager().updateItems(this.hopper, ItemType.WHITELIST, owhite); - this.plugin.getDataManager().updateItems(this.hopper, ItemType.BLACKLIST, oblack); - this.plugin.getDataManager().updateItems(this.hopper, ItemType.VOID, ovoid); + EpicHoppersApi.getApi().getDataManager().updateItems(this.hopper, ItemType.WHITELIST, owhite); + EpicHoppersApi.getApi().getDataManager().updateItems(this.hopper, ItemType.BLACKLIST, oblack); + EpicHoppersApi.getApi().getDataManager().updateItems(this.hopper, ItemType.VOID, ovoid); } public static void compileOpenGuiFilter(Hopper hopper) { diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/gui/GUIOverview.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/gui/GUIOverview.java index 3c8c02b..8639885 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/gui/GUIOverview.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/gui/GUIOverview.java @@ -1,5 +1,6 @@ package com.songoda.epichoppers.gui; +import com.craftaro.core.SongodaPlugin; import com.craftaro.core.compatibility.ServerVersion; import com.craftaro.core.gui.CustomizableGui; import com.craftaro.core.gui.GuiUtils; @@ -7,7 +8,7 @@ import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.core.utils.NumberUtils; import com.craftaro.core.utils.TextUtils; import com.craftaro.core.utils.TimeUtils; -import com.songoda.epichoppers.EpicHoppers; +import com.songoda.epichoppers.EpicHoppersApi; import com.songoda.epichoppers.boost.BoostData; import com.songoda.epichoppers.hopper.Hopper; import com.songoda.epichoppers.hopper.levels.Level; @@ -31,13 +32,13 @@ import java.util.Map; import java.util.stream.Collectors; public class GUIOverview extends CustomizableGui { - private final EpicHoppers plugin; + private final SongodaPlugin plugin; private final Hopper hopper; private final Player player; private int task; - public GUIOverview(EpicHoppers plugin, Hopper hopper, Player player) { + public GUIOverview(SongodaPlugin plugin, Hopper hopper, Player player) { super(plugin, "overview"); this.plugin = plugin; this.hopper = hopper; @@ -66,11 +67,11 @@ public class GUIOverview extends CustomizableGui { mirrorFill("mirrorfill_4", 1, 0, false, true, glass2); mirrorFill("mirrorfill_5", 1, 1, false, true, glass3); - this.plugin.getPlayerDataManager().getPlayerData(this.player).setLastHopper(this.hopper); + EpicHoppersApi.getApi().getPlayerDataManager().getPlayerData(this.player).setLastHopper(this.hopper); Level level = this.hopper.getLevel(); - Level nextLevel = this.plugin.getLevelManager().getHighestLevel().getLevel() > level.getLevel() ? this.plugin.getLevelManager().getLevel(level.getLevel() + 1) : null; + Level nextLevel = EpicHoppersApi.getApi().getLevelManager().getHighestLevel().getLevel() > level.getLevel() ? EpicHoppersApi.getApi().getLevelManager().getLevel(level.getLevel() + 1) : null; ItemStack pearl = new ItemStack(Material.ENDER_PEARL, 1); ItemMeta pearlMeta = pearl.getItemMeta(); @@ -117,7 +118,7 @@ public class GUIOverview extends CustomizableGui { } } - BoostData boostData = this.plugin.getBoostManager().getBoost(this.hopper.getPlacedBy()); + BoostData boostData = EpicHoppersApi.getApi().getBoostManager().getBoost(this.hopper.getPlacedBy()); if (boostData != null) { parts = this.plugin.getLocale().getMessage("interface.hopper.boostedstats") .processPlaceholder("amount", Integer.toString(boostData.getMultiplier())) @@ -188,13 +189,13 @@ public class GUIOverview extends CustomizableGui { return; } this.hopper.clearLinkedBlocks(); - this.plugin.getDataManager().deleteLinks(this.hopper); + EpicHoppersApi.getApi().getDataManager().deleteLinks(this.hopper); if (event.clickType == ClickType.RIGHT) { this.plugin.getLocale().getMessage("event.hopper.desync").sendPrefixedMessage(this.player); constructGUI(); return; } else { - this.plugin.getPlayerDataManager().getPlayerData(this.player).setSyncType(SyncType.REGULAR); + EpicHoppersApi.getApi().getPlayerDataManager().getPlayerData(this.player).setSyncType(SyncType.REGULAR); this.plugin.getLocale().getMessage("event.hopper.syncnext").sendPrefixedMessage(this.player); if (level.getLinkAmount() > 1) { @@ -212,7 +213,7 @@ public class GUIOverview extends CustomizableGui { (event) -> { if (event.clickType == ClickType.LEFT) { if (this.hopper.getLinkedBlocks() != null) { - this.plugin.getTeleportHandler().tpEntity(this.player, this.hopper); + EpicHoppersApi.getApi().getTeleportHandler().tpEntity(this.player, this.hopper); this.player.closeInventory(); } } else { @@ -223,7 +224,7 @@ public class GUIOverview extends CustomizableGui { } else if (this.hopper.getTeleportTrigger() == TeleportTrigger.WALK_ON) { this.hopper.setTeleportTrigger(TeleportTrigger.DISABLED); } - this.plugin.getDataManager().updateHopper(this.hopper); + EpicHoppersApi.getApi().getDataManager().updateHopper(this.hopper); constructGUI(); } }); @@ -258,7 +259,9 @@ public class GUIOverview extends CustomizableGui { : this.plugin.getLocale().getMessage("interface.hopper.alreadymaxed").getMessage()), (event) -> { this.hopper.upgrade(this.player, CostType.EXPERIENCE); - this.hopper.overview(this.guiManager, this.player); + if (this.hopper.prepareForOpeningOverviewGui(this.player)) { + this.guiManager.showGUI(event.player, new GUIOverview(this.plugin, this.hopper, event.player)); + } }); } if (Settings.UPGRADE_WITH_ECONOMY.getBoolean() @@ -273,7 +276,9 @@ public class GUIOverview extends CustomizableGui { : this.plugin.getLocale().getMessage("interface.hopper.alreadymaxed").getMessage()), (event) -> { this.hopper.upgrade(this.player, CostType.ECONOMY); - this.hopper.overview(this.guiManager, this.player); + if (this.hopper.prepareForOpeningOverviewGui(this.player)) { + this.guiManager.showGUI(this.player, new GUIOverview(this.plugin, this.hopper, this.player)); + } }); } } diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/gui/GUISmeltable.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/gui/GUISmeltable.java index eb649f4..8a56c2a 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/gui/GUISmeltable.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/gui/GUISmeltable.java @@ -1,11 +1,11 @@ package com.songoda.epichoppers.gui; +import com.craftaro.core.SongodaPlugin; import com.craftaro.core.compatibility.CompatibleMaterial; import com.craftaro.core.gui.CustomizableGui; import com.craftaro.core.gui.GuiUtils; import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.core.utils.TextUtils; -import com.songoda.epichoppers.EpicHoppers; import com.songoda.epichoppers.hopper.Hopper; import com.songoda.epichoppers.hopper.levels.modules.ModuleAutoSmelter; import com.songoda.epichoppers.settings.Settings; @@ -18,7 +18,7 @@ import java.util.List; import java.util.stream.Collectors; public class GUISmeltable extends CustomizableGui { - private final EpicHoppers plugin; + private final SongodaPlugin plugin; private final Hopper hopper; private final int maxPages; private final ModuleAutoSmelter moduleAutoSmelter; @@ -28,7 +28,7 @@ public class GUISmeltable extends CustomizableGui { .filter(material -> CompatibleMaterial.getFurnaceResult(material) != null) .collect(Collectors.toList()); - public GUISmeltable(ModuleAutoSmelter moduleAutoSmelter, EpicHoppers plugin, Hopper hopper) { + public GUISmeltable(ModuleAutoSmelter moduleAutoSmelter, SongodaPlugin plugin, Hopper hopper) { super(plugin, "smeltable"); this.plugin = plugin; this.hopper = hopper; @@ -102,7 +102,11 @@ public class GUISmeltable extends CustomizableGui { setButton("exit", 49, GuiUtils.createButtonItem(XMaterial.OAK_DOOR, this.plugin.getLocale().getMessage("general.nametag.exit").getMessage()), - (event) -> this.hopper.overview(this.plugin.getGuiManager(), event.player)); + (event) -> { + if (this.hopper.prepareForOpeningOverviewGui(event.player)) { + this.guiManager.showGUI(event.player, new GUIOverview(this.plugin, this.hopper, event.player)); + } + }); } public ItemStack getItemStack(XMaterial material, boolean enabled) { diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/LevelManager.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/LevelManagerImpl.java similarity index 92% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/LevelManager.java rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/LevelManagerImpl.java index 6ad1dfe..9578233 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/LevelManager.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/LevelManagerImpl.java @@ -13,17 +13,20 @@ import java.util.Map; import java.util.NavigableMap; import java.util.TreeMap; -public class LevelManager { +public class LevelManagerImpl implements LevelManager { private final NavigableMap registeredLevels = new TreeMap<>(); + @Override public void addLevel(int level, int costExperience, int costEconomy, int range, int amount, boolean filter, boolean teleport, int linkAmount, ArrayList modules) { this.registeredLevels.put(level, new Level(level, costExperience, costEconomy, range, amount, filter, teleport, linkAmount, modules)); } + @Override public Level getLevel(int level) { return this.registeredLevels.get(level); } + @Override public Level getLevel(ItemStack item) { NBTItem nbtItem = new NBTItem(item); @@ -40,6 +43,7 @@ public class LevelManager { return getLowestLevel(); } + @Override public boolean isEpicHopper(ItemStack item) { NBTCore nbt = NmsManager.getNbt(); @@ -53,25 +57,30 @@ public class LevelManager { } + @Override public Level getLowestLevel() { return this.registeredLevels.firstEntry().getValue(); } + @Override public Level getHighestLevel() { return this.registeredLevels.lastEntry().getValue(); } + @Override public boolean isLevel(int level) { return this.registeredLevels.containsKey(level); } + @Override public Map getLevels() { return Collections.unmodifiableMap(this.registeredLevels); } + @Override public void clear() { this.registeredLevels.clear(); } diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleAutoCrafting.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleAutoCrafting.java index bbfe39e..e833e7f 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleAutoCrafting.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleAutoCrafting.java @@ -1,8 +1,9 @@ package com.songoda.epichoppers.hopper.levels.modules; +import com.craftaro.core.SongodaPlugin; +import com.craftaro.core.gui.GuiManager; import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.core.utils.TextUtils; -import com.songoda.epichoppers.EpicHoppers; import com.songoda.epichoppers.gui.GUICrafting; import com.songoda.epichoppers.hopper.Hopper; import com.songoda.epichoppers.settings.Settings; @@ -37,8 +38,8 @@ public class ModuleAutoCrafting extends Module { private final boolean crafterEjection; - public ModuleAutoCrafting(EpicHoppers plugin) { - super(plugin); + public ModuleAutoCrafting(SongodaPlugin plugin, GuiManager guiManager) { + super(plugin, guiManager); this.crafterEjection = Settings.AUTOCRAFT_JAM_EJECT.getBoolean(); } @@ -205,7 +206,7 @@ public class ModuleAutoCrafting extends Module { @Override public void runButtonPress(Player player, Hopper hopper, ClickType type) { hopper.setActivePlayer(player); - this.plugin.getGuiManager().showGUI(player, new GUICrafting(this,this.plugin, hopper, player)); + this.guiManager.showGUI(player, new GUICrafting(this, this.plugin, hopper, player)); } @Override diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleAutoSell.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleAutoSell.java index 770c815..3a1b10b 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleAutoSell.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleAutoSell.java @@ -1,10 +1,11 @@ package com.songoda.epichoppers.hopper.levels.modules; +import com.craftaro.core.SongodaPlugin; +import com.craftaro.core.gui.GuiManager; import com.craftaro.core.hooks.EconomyManager; import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.core.utils.NumberUtils; import com.craftaro.core.utils.TextUtils; -import com.songoda.epichoppers.EpicHoppers; import com.songoda.epichoppers.gui.GUIAutoSellFilter; import com.songoda.epichoppers.hopper.Filter; import com.songoda.epichoppers.hopper.Hopper; @@ -31,8 +32,8 @@ public class ModuleAutoSell extends Module { private final int timeOut; private final int hopperTickRate; - public ModuleAutoSell(EpicHoppers plugin, int timeOut) { - super(plugin); + public ModuleAutoSell(SongodaPlugin plugin, GuiManager guiManager, int timeOut) { + super(plugin, guiManager); this.timeOut = timeOut * 20; this.hopperTickRate = Settings.HOP_TICKS.getInt(); @@ -176,7 +177,7 @@ public class ModuleAutoSell extends Module { } else if (type == ClickType.SHIFT_LEFT || type == ClickType.SHIFT_RIGHT) { // Any shift click opens AutoSell filter configuration GUI hopper.setActivePlayer(player); - this.plugin.getGuiManager().showGUI(player, new GUIAutoSellFilter(this.plugin, hopper)); + this.guiManager.showGUI(player, new GUIAutoSellFilter(this.plugin, hopper)); } } diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleAutoSmelter.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleAutoSmelter.java index 1e95875..bc41c2c 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleAutoSmelter.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleAutoSmelter.java @@ -1,9 +1,10 @@ package com.songoda.epichoppers.hopper.levels.modules; +import com.craftaro.core.SongodaPlugin; import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.gui.GuiManager; import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.core.utils.TextUtils; -import com.songoda.epichoppers.EpicHoppers; import com.songoda.epichoppers.gui.GUISmeltable; import com.songoda.epichoppers.hopper.Hopper; import com.songoda.epichoppers.settings.Settings; @@ -22,8 +23,8 @@ public class ModuleAutoSmelter extends Module { private final int timeOut; private final int hopperTickRate; - public ModuleAutoSmelter(EpicHoppers plugin, int timeOut) { - super(plugin); + public ModuleAutoSmelter(SongodaPlugin plugin, GuiManager guiManager, int timeOut) { + super(plugin, guiManager); this.timeOut = timeOut * 20; this.hopperTickRate = Settings.HOP_TICKS.getInt(); } @@ -103,7 +104,7 @@ public class ModuleAutoSmelter extends Module { public void runButtonPress(Player player, Hopper hopper, ClickType type) { if (type == ClickType.LEFT) { hopper.setActivePlayer(player); - this.plugin.getGuiManager().showGUI(player, new GUISmeltable(this, this.plugin, hopper)); + this.guiManager.showGUI(player, new GUISmeltable(this, this.plugin, hopper)); } else if (type == ClickType.RIGHT) { toggleEnabled(hopper); } diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleBlockBreak.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleBlockBreak.java index 7b02459..5d85e2f 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleBlockBreak.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleBlockBreak.java @@ -1,8 +1,10 @@ package com.songoda.epichoppers.hopper.levels.modules; +import com.craftaro.core.SongodaPlugin; import com.craftaro.core.compatibility.ServerVersion; +import com.craftaro.core.gui.GuiManager; import com.craftaro.core.utils.TextUtils; -import com.songoda.epichoppers.EpicHoppers; +import com.songoda.epichoppers.EpicHoppersApi; import com.songoda.epichoppers.hopper.Hopper; import com.songoda.epichoppers.settings.Settings; import com.songoda.epichoppers.utils.StorageContainerCache; @@ -30,8 +32,8 @@ public class ModuleBlockBreak extends Module { private final int ticksPerBreak; private final Map blockTick = new HashMap<>(); - public ModuleBlockBreak(EpicHoppers plugin, int amount) { - super(plugin); + public ModuleBlockBreak(SongodaPlugin plugin, GuiManager guiManager, int amount) { + super(plugin, guiManager); this.ticksPerBreak = amount; } @@ -66,7 +68,7 @@ public class ModuleBlockBreak extends Module { Block above = hopper.getLocation().getBlock().getRelative(0, 1, 0); // Don't break farm items from custom containers - if (this.plugin.getContainerManager().getCustomContainer(above) != null) { + if (EpicHoppersApi.getApi().getContainerManager().getCustomContainer(above) != null) { return; } diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleMobHopper.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleMobHopper.java index 7692fbd..73b7e22 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleMobHopper.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleMobHopper.java @@ -1,7 +1,8 @@ package com.songoda.epichoppers.hopper.levels.modules; +import com.craftaro.core.SongodaPlugin; +import com.craftaro.core.gui.GuiManager; import com.craftaro.core.utils.TextUtils; -import com.songoda.epichoppers.EpicHoppers; import com.songoda.epichoppers.hopper.Hopper; import com.songoda.epichoppers.utils.StorageContainerCache; import org.bukkit.Location; @@ -23,9 +24,8 @@ public class ModuleMobHopper extends Module { private final int amount; private final Map blockTick = new HashMap<>(); - - public ModuleMobHopper(EpicHoppers plugin, int amount) { - super(plugin); + public ModuleMobHopper(SongodaPlugin plugin, GuiManager guiManager, int amount) { + super(plugin, guiManager); this.amount = amount; } diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleSuction.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleSuction.java index 205e4f7..ad78a28 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleSuction.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/levels/modules/ModuleSuction.java @@ -1,11 +1,12 @@ package com.songoda.epichoppers.hopper.levels.modules; import com.bgsoftware.wildstacker.api.WildStackerAPI; +import com.craftaro.core.SongodaPlugin; import com.craftaro.core.compatibility.CompatibleParticleHandler; +import com.craftaro.core.gui.GuiManager; import com.craftaro.core.locale.Locale; import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.core.utils.TextUtils; -import com.songoda.epichoppers.EpicHoppers; import com.songoda.epichoppers.hopper.Hopper; import com.songoda.epichoppers.settings.Settings; import com.songoda.epichoppers.utils.Methods; @@ -38,8 +39,8 @@ public class ModuleSuction extends Module { private final int maxSearchRadius; - public ModuleSuction(EpicHoppers plugin, int amount) { - super(plugin); + public ModuleSuction(SongodaPlugin plugin, GuiManager guiManager, int amount) { + super(plugin, guiManager); this.maxSearchRadius = amount; } diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/teleport/TeleportHandler.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/teleport/TeleportHandlerImpl.java similarity index 97% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/teleport/TeleportHandler.java rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/teleport/TeleportHandlerImpl.java index cefe592..91d270a 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/teleport/TeleportHandler.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/hopper/teleport/TeleportHandlerImpl.java @@ -20,16 +20,17 @@ import java.util.HashMap; import java.util.Map; import java.util.UUID; -public class TeleportHandler { +public class TeleportHandlerImpl implements TeleportHandler { private final Map lastTeleports = new HashMap<>(); private final EpicHoppers plugin; - public TeleportHandler(EpicHoppers plugin) { + public TeleportHandlerImpl(EpicHoppers plugin) { this.plugin = plugin; Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, this::teleportRunner, 0, Settings.TELEPORT_TICKS.getLong()); } + @Override public void tpEntity(Entity entity, Hopper hopper) { if (hopper == null || !this.plugin.getHopperManager().isHopper(hopper.getLocation())) { return; diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/listeners/InteractListeners.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/listeners/InteractListeners.java index fba3387..e9e8d70 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/listeners/InteractListeners.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/listeners/InteractListeners.java @@ -3,6 +3,7 @@ package com.songoda.epichoppers.listeners; import com.craftaro.core.hooks.ProtectionManager; import com.craftaro.core.hooks.WorldGuardHook; import com.songoda.epichoppers.EpicHoppers; +import com.songoda.epichoppers.gui.GUIOverview; import com.songoda.epichoppers.hopper.Hopper; import com.songoda.epichoppers.hopper.teleport.TeleportTrigger; import com.songoda.epichoppers.player.PlayerData; @@ -90,7 +91,9 @@ public class InteractListeners implements Listener { Hopper hopper = this.plugin.getHopperManager().getHopper(event.getClickedBlock()); if (!player.getInventory().getItemInHand().getType().name().contains("PICKAXE")) { - hopper.overview(this.plugin.getGuiManager(), player); + if (hopper.prepareForOpeningOverviewGui(player)) { + this.plugin.getGuiManager().showGUI(player, new GUIOverview(this.plugin, hopper, player)); + } event.setCancelled(true); return; } diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/PlayerDataManager.java b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/PlayerDataManagerImpl.java similarity index 87% rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/PlayerDataManager.java rename to EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/PlayerDataManagerImpl.java index 124c3ee..73ea42d 100644 --- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/PlayerDataManager.java +++ b/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/player/PlayerDataManagerImpl.java @@ -8,17 +8,19 @@ import java.util.HashMap; import java.util.Map; import java.util.UUID; -public class PlayerDataManager { +public class PlayerDataManagerImpl implements PlayerDataManager { private final Map registeredPlayers = new HashMap<>(); private PlayerData getPlayerData(UUID uuid) { return this.registeredPlayers.computeIfAbsent(uuid, u -> new PlayerData()); } + @Override public PlayerData getPlayerData(Player player) { return getPlayerData(player.getUniqueId()); } + @Override public Collection getRegisteredPlayers() { return Collections.unmodifiableCollection(this.registeredPlayers.values()); }