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