Fixed Hopper-amount bug

Virtual Hoppers were not respecting the hopper-amount variable spigot sets.
This commit is contained in:
jameslfc19 2020-05-05 10:32:00 +01:00
parent 007fb3817f
commit 6dc864760d
6 changed files with 83 additions and 4 deletions

View File

@ -6,7 +6,7 @@
<groupId>com.jamesdpeters.chests</groupId>
<artifactId>ChestsPlusPlus</artifactId>
<version>1.15 v1.4</version>
<version>1.15 v1.4.1-DEV</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>

View File

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

View File

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

View File

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

View File

@ -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<String,WorldSettings> 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_);
}
}

View File

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