From 6dc864760d5d24af88bbd17b6314235412d4c394 Mon Sep 17 00:00:00 2001 From: jameslfc19 Date: Tue, 5 May 2020 10:32:00 +0100 Subject: [PATCH] Fixed Hopper-amount bug Virtual Hoppers were not respecting the hopper-amount variable spigot sets. --- pom.xml | 2 +- .../minecraft/chests/ChestsPlusPlus.java | 5 +++ .../chests/listeners/HopperListener.java | 9 +++- .../runnables/VirtualChestToHopper.java | 4 +- .../chests/serialize/SpigotConfig.java | 42 +++++++++++++++++++ .../chests/serialize/WorldSettings.java | 25 +++++++++++ 6 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/jamesdpeters/minecraft/chests/serialize/SpigotConfig.java create mode 100644 src/main/java/com/jamesdpeters/minecraft/chests/serialize/WorldSettings.java diff --git a/pom.xml b/pom.xml index caafa56..c378491 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.jamesdpeters.chests ChestsPlusPlus - 1.15 v1.4 + 1.15 v1.4.1-DEV 8 diff --git a/src/main/java/com/jamesdpeters/minecraft/chests/ChestsPlusPlus.java b/src/main/java/com/jamesdpeters/minecraft/chests/ChestsPlusPlus.java index 7d2b564..c8ebf55 100644 --- a/src/main/java/com/jamesdpeters/minecraft/chests/ChestsPlusPlus.java +++ b/src/main/java/com/jamesdpeters/minecraft/chests/ChestsPlusPlus.java @@ -1,6 +1,7 @@ package com.jamesdpeters.minecraft.chests; import com.jamesdpeters.minecraft.chests.commands.RemoteChestCommand; +import com.jamesdpeters.minecraft.chests.crafting.Crafting; import com.jamesdpeters.minecraft.chests.listeners.ChestLinkListener; import com.jamesdpeters.minecraft.chests.listeners.HopperListener; import com.jamesdpeters.minecraft.chests.listeners.InventoryListener; @@ -11,12 +12,14 @@ import com.jamesdpeters.minecraft.chests.misc.Settings; import com.jamesdpeters.minecraft.chests.misc.Stats; import com.jamesdpeters.minecraft.chests.serialize.InventoryStorage; import com.jamesdpeters.minecraft.chests.serialize.LinkedChest; +import com.jamesdpeters.minecraft.chests.serialize.SpigotConfig; import com.jamesdpeters.minecraft.chests.versionchecker.UpdateCheck; import com.jamesdpeters.minecraft.chests.maventemplates.BuildConstants; import fr.minuskube.inv.InventoryManager; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.serialization.ConfigurationSerialization; import org.bukkit.permissions.PermissionDefault; import org.bukkit.plugin.java.JavaPlugin; @@ -27,6 +30,7 @@ import org.bukkit.plugin.java.annotation.plugin.ApiVersion; import org.bukkit.plugin.java.annotation.plugin.Description; import org.bukkit.plugin.java.annotation.plugin.Plugin; import org.bukkit.plugin.java.annotation.plugin.author.Author; +import org.bukkit.scheduler.BukkitRunnable; @Plugin(name = "ChestsPlusPlus", version = BuildConstants.VERSION) @@ -68,6 +72,7 @@ public class ChestsPlusPlus extends JavaPlugin { getServer().getPluginManager().registerEvents(new HopperListener(),this); getServer().getPluginManager().registerEvents(new WorldListener(),this); + SpigotConfig.load(this); new Config(); INVENTORY_MANAGER = new InventoryManager(this); diff --git a/src/main/java/com/jamesdpeters/minecraft/chests/listeners/HopperListener.java b/src/main/java/com/jamesdpeters/minecraft/chests/listeners/HopperListener.java index 513b16c..f769329 100644 --- a/src/main/java/com/jamesdpeters/minecraft/chests/listeners/HopperListener.java +++ b/src/main/java/com/jamesdpeters/minecraft/chests/listeners/HopperListener.java @@ -5,7 +5,10 @@ import com.jamesdpeters.minecraft.chests.filters.HopperFilter; import com.jamesdpeters.minecraft.chests.serialize.Config; import com.jamesdpeters.minecraft.chests.misc.Utils; import com.jamesdpeters.minecraft.chests.serialize.InventoryStorage; +import com.jamesdpeters.minecraft.chests.serialize.SpigotConfig; import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.Rotation; import org.bukkit.block.Block; import org.bukkit.block.Hopper; @@ -36,14 +39,16 @@ public class HopperListener implements Listener { public void fromHopper(InventoryMoveItemEvent event){ //FROM HOPPER if (event.getInitiator().getHolder() instanceof Hopper) { - InventoryStorage storage = Config.getInventoryStorage(event.getDestination().getLocation()); + Location location = event.getDestination().getLocation(); + InventoryStorage storage = Config.getInventoryStorage(location); if (storage != null) { if(!event.isCancelled()) { event.setCancelled(true); new BukkitRunnable() { @Override public void run() { - Utils.moveToOtherInventory(event.getSource(), 1, storage.getInventory()); + int hopperAmount = SpigotConfig.getWorldSettings(location.getWorld().getName()).getHopperAmount(); + Utils.moveToOtherInventory(event.getSource(), hopperAmount, storage.getInventory()); event.getDestination().getHolder().getInventory().clear(); storage.sort(); } diff --git a/src/main/java/com/jamesdpeters/minecraft/chests/runnables/VirtualChestToHopper.java b/src/main/java/com/jamesdpeters/minecraft/chests/runnables/VirtualChestToHopper.java index c7a49bc..6896e1e 100644 --- a/src/main/java/com/jamesdpeters/minecraft/chests/runnables/VirtualChestToHopper.java +++ b/src/main/java/com/jamesdpeters/minecraft/chests/runnables/VirtualChestToHopper.java @@ -4,6 +4,7 @@ import com.jamesdpeters.minecraft.chests.ChestsPlusPlus; import com.jamesdpeters.minecraft.chests.filters.HopperFilter; import com.jamesdpeters.minecraft.chests.misc.Utils; import com.jamesdpeters.minecraft.chests.serialize.InventoryStorage; +import com.jamesdpeters.minecraft.chests.serialize.SpigotConfig; import org.bukkit.Location; import org.bukkit.block.Hopper; import org.bukkit.scheduler.BukkitRunnable; @@ -36,7 +37,8 @@ public class VirtualChestToHopper extends BukkitRunnable { if(below.getBlock().isBlockIndirectlyPowered()|| below.getBlock().isBlockPowered()){ continue; } - Utils.moveToOtherInventory(storage.getInventory(), 1, hopper.getInventory(), HopperFilter.getHopperFilters(below.getBlock())); + int hopperAmount = SpigotConfig.getWorldSettings(location.getWorld().getName()).getHopperAmount(); + Utils.moveToOtherInventory(storage.getInventory(), hopperAmount , hopper.getInventory(), HopperFilter.getHopperFilters(below.getBlock())); storage.sort(); } } diff --git a/src/main/java/com/jamesdpeters/minecraft/chests/serialize/SpigotConfig.java b/src/main/java/com/jamesdpeters/minecraft/chests/serialize/SpigotConfig.java new file mode 100644 index 0000000..d12fd19 --- /dev/null +++ b/src/main/java/com/jamesdpeters/minecraft/chests/serialize/SpigotConfig.java @@ -0,0 +1,42 @@ +package com.jamesdpeters.minecraft.chests.serialize; + +import org.bukkit.World; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.plugin.java.JavaPlugin; + +import java.util.HashMap; + +public class SpigotConfig { + + private static HashMap worlds; + private static WorldSettings default_; + + public static void load(JavaPlugin plugin){ + worlds = new HashMap<>(); + try { + //Check if we're using the Spigot API. + Class.forName("org.spigotmc.SpigotConfig"); + ConfigurationSection worldSettings = plugin.getServer().spigot().getConfig().getConfigurationSection("world-settings"); + if(worldSettings != null) { + worldSettings.getValues(false).forEach((worldName, o) -> { + ConfigurationSection worldSetting = worldSettings.getConfigurationSection(worldName); + if (!worldName.equals("default") && worldSetting != null) + worlds.put(worldName, new WorldSettings(worldSetting)); + }); + ConfigurationSection section = worldSettings.getConfigurationSection("default"); + if(section != null) default_ = new WorldSettings(section); + } + if(default_ == null) default_ = new WorldSettings(); + } catch (ClassNotFoundException e){ + //Not using the Spigot API so fallback to defaults + default_ = new WorldSettings(); + } + } + + public static WorldSettings getDefault(){ return default_; } + + public static WorldSettings getWorldSettings(String worldName){ + return worlds.getOrDefault(worldName,default_); + } + +} diff --git a/src/main/java/com/jamesdpeters/minecraft/chests/serialize/WorldSettings.java b/src/main/java/com/jamesdpeters/minecraft/chests/serialize/WorldSettings.java new file mode 100644 index 0000000..bfd6b9d --- /dev/null +++ b/src/main/java/com/jamesdpeters/minecraft/chests/serialize/WorldSettings.java @@ -0,0 +1,25 @@ +package com.jamesdpeters.minecraft.chests.serialize; + +import org.bukkit.configuration.ConfigurationSection; + +public class WorldSettings{ + + //Values + private int ticksPerHopperTransfer, hopperAmount; + + public WorldSettings(ConfigurationSection settings){ + ticksPerHopperTransfer = settings.getInt("ticks-per.hopper-transfer"); + hopperAmount = settings.getInt("hopper-amount"); + } + + //Default class used as a fallback if Spigot isn't being used etc. + public WorldSettings(){ + ticksPerHopperTransfer = 8; + hopperAmount = 1; + } + + public int getTicksPerHopperTransfer(){ + return ticksPerHopperTransfer; + } + public int getHopperAmount() { return hopperAmount; } +} \ No newline at end of file