From f0c902513eee482bf13f9d8c83e762981c79fe43 Mon Sep 17 00:00:00 2001 From: ceze88 <70201650+ceze88@users.noreply.github.com> Date: Mon, 13 Jun 2022 16:48:30 +0200 Subject: [PATCH] Ability to disable/enable AutoCrafters, ChestLinks and HopperFilters (#82) --- .../minecraft/chests/PluginConfig.java | 4 +- ChestsPlusPlus_1_16/pom.xml | 48 ------- .../chests/v1_16_R1/ChestOpener_1_16.java | 89 ------------ .../minecraft/chests/v1_16_R1/Crafting.java | 123 ---------------- .../v1_16_R1/EntityEventListener_1_16.java | 14 -- .../chests/v1_16_R1/NMSProviderImpl.java | 58 -------- .../tileentities/CustomTileEntityBarrel.java | 75 ---------- .../tileentities/CustomTileEntityChest.java | 84 ----------- ChestsPlusPlus_1_16_R2/pom.xml | 54 ------- .../minecraft/chests/v1_16_R2/Crafting.java | 123 ---------------- .../chests/v1_16_R2/NMSProviderImpl.java | 59 -------- ChestsPlusPlus_1_16_R3/pom.xml | 54 ------- .../minecraft/chests/v1_16_R3/Crafting.java | 132 ------------------ .../chests/v1_16_R3/NMSProviderImpl.java | 59 -------- ChestsPlusPlus_1_17_R1/pom.xml | 6 - ChestsPlusPlus_Main/pom.xml | 28 +--- .../minecraft/chests/ChestsPlusPlus.java | 62 +++++--- .../chests/api/NMSProviderDefault.java | 7 +- .../chests/filters/ChestsPlusPlusTag.java | 39 ++++++ .../chests/filters/ItemTypeUtil.java | 4 +- .../interfaces/CraftingInventoryImpl.java | 5 + .../chests/listeners/AutoCrafterListener.java | 89 ++++++++++++ ...istener.java => HopperFilterListener.java} | 7 +- .../chests/listeners/InventoryListener.java | 66 --------- .../listeners/LinkedChestHopperListener.java | 49 +++++++ .../minecraft/chests/misc/Utils.java | 6 +- .../runnables/VirtualChestToHopper.java | 3 +- .../minecraft/chests/serialize/Config.java | 9 +- .../src/main/resources/lang/en_GB.properties | 2 +- pom.xml | 3 - 30 files changed, 255 insertions(+), 1106 deletions(-) delete mode 100644 ChestsPlusPlus_1_16/pom.xml delete mode 100644 ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/ChestOpener_1_16.java delete mode 100644 ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/Crafting.java delete mode 100644 ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/EntityEventListener_1_16.java delete mode 100644 ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/NMSProviderImpl.java delete mode 100644 ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/tileentities/CustomTileEntityBarrel.java delete mode 100644 ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/tileentities/CustomTileEntityChest.java delete mode 100644 ChestsPlusPlus_1_16_R2/pom.xml delete mode 100644 ChestsPlusPlus_1_16_R2/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R2/Crafting.java delete mode 100644 ChestsPlusPlus_1_16_R2/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R2/NMSProviderImpl.java delete mode 100644 ChestsPlusPlus_1_16_R3/pom.xml delete mode 100644 ChestsPlusPlus_1_16_R3/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R3/Crafting.java delete mode 100644 ChestsPlusPlus_1_16_R3/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R3/NMSProviderImpl.java create mode 100644 ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/filters/ChestsPlusPlusTag.java create mode 100644 ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/listeners/AutoCrafterListener.java rename ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/listeners/{HopperListener.java => HopperFilterListener.java} (95%) create mode 100644 ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/listeners/LinkedChestHopperListener.java diff --git a/ChestsPlusPlusAPI/src/main/java/com/jamesdpeters/minecraft/chests/PluginConfig.java b/ChestsPlusPlusAPI/src/main/java/com/jamesdpeters/minecraft/chests/PluginConfig.java index ea2e116..25c0271 100644 --- a/ChestsPlusPlusAPI/src/main/java/com/jamesdpeters/minecraft/chests/PluginConfig.java +++ b/ChestsPlusPlusAPI/src/main/java/com/jamesdpeters/minecraft/chests/PluginConfig.java @@ -29,10 +29,12 @@ public class PluginConfig { * ***************/ public final static Value IS_UPDATE_CHECKER_ENABLED = new Value<>("update-checker", Boolean.class, true); public final static Value UPDATE_CHECKER_PERIOD = new Value<>("update-checker-period", Integer.class, 60 * 60); + public final static Value CHESTLINKS_ENABLED = new Value<>("chestlinks-enabled", Boolean.class, true); + public final static Value AUTOCRAFTERS_ENABLED = new Value<>("autocrafters-enabled", Boolean.class, true); + public final static Value HOPPER_FILTERS_ENABLED = new Value<>("hopper-filters-enabled", Boolean.class, true); public final static Value SHOULD_LIMIT_CHESTS = new Value<>("limit-chests", Boolean.class, false); public final static Value LIMIT_CHESTS_AMOUNT = new Value<>("limit-chestlinks-amount", Integer.class, 0); public final static Value SHOULD_ANIMATE_ALL_CHESTS = new Value<>("should-animate-all-chests", Boolean.class, true); - public final static Value SHOULD_RUN_HOPPERS_UNLOADED_CHUNKS = new Value<>("run-hoppers-unloaded-chunks", Boolean.class, false); public final static Value DISPLAY_CHESTLINK_ARMOUR_STAND = new Value<>("display_chestlink_armour_stand", Boolean.class, true); public final static Value DISPLAY_AUTOCRAFT_ARMOUR_STAND = new Value<>("display_autocraft_armour_stands", Boolean.class, true); public final static Value INVISIBLE_FILTER_ITEM_FRAMES = new Value<>("set-filter-itemframe-invisible", Boolean.class, false); diff --git a/ChestsPlusPlus_1_16/pom.xml b/ChestsPlusPlus_1_16/pom.xml deleted file mode 100644 index ad36ec4..0000000 --- a/ChestsPlusPlus_1_16/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - ChestsPlusPlus-Parent - com.jamesdpeters.minecraft.chests - 1.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - jar - ChestsPlusPlus_1_16 - 1.0-SNAPSHOT - - - - spigotmc-repo - https://hub.spigotmc.org/nexus/content/repositories/snapshots/ - - - - - - com.jamesdpeters.minecraft.chests - ChestsPlusPlus-API - 1.0-SNAPSHOT - - - - org.spigotmc - spigot-api - 1.16.1-R0.1-SNAPSHOT - provided - - - - org.bukkit - craftbukkit - 1.16.1-R0.1-SNAPSHOT - provided - - - - - \ No newline at end of file diff --git a/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/ChestOpener_1_16.java b/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/ChestOpener_1_16.java deleted file mode 100644 index 3270e34..0000000 --- a/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/ChestOpener_1_16.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.jamesdpeters.minecraft.chests.v1_16_R1; - -import com.jamesdpeters.minecraft.chests.Api; -import com.jamesdpeters.minecraft.chests.ChestOpener; -import com.jamesdpeters.minecraft.chests.TileEntityOpener; -import com.jamesdpeters.minecraft.chests.v1_16_R1.tileentities.CustomTileEntityBarrel; -import com.jamesdpeters.minecraft.chests.v1_16_R1.tileentities.CustomTileEntityChest; -import net.minecraft.server.v1_16_R1.BlockPosition; -import net.minecraft.server.v1_16_R1.TileEntity; -import net.minecraft.server.v1_16_R1.TileEntityBarrel; -import net.minecraft.server.v1_16_R1.TileEntityChest; -import net.minecraft.server.v1_16_R1.TileEntityChestTrapped; -import net.minecraft.server.v1_16_R1.TileEntityTypes; -import net.minecraft.server.v1_16_R1.World; -import org.bukkit.Bukkit; -import org.bukkit.block.Container; -import org.bukkit.block.Lidded; -import org.bukkit.craftbukkit.v1_16_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_16_R1.block.CraftContainer; -import org.bukkit.entity.HumanEntity; -import org.bukkit.inventory.Inventory; - -import java.util.List; - - -public class ChestOpener_1_16 implements ChestOpener { - - @Override - public TileEntityOpener updateState(Inventory inventory, Container container, TileEntityOpener tileEntityOpener) { - if(hasLiddedAPI()){ - if(container instanceof Lidded){ - if(inventory.getViewers().size() > 0){ - ((Lidded) container).open(); - } else { - ((Lidded) container).close(); - } - return null; - } - return null; - } - - if(tileEntityOpener != null) { - TileEntityOpener opener = tileEntityOpener; - Bukkit.getScheduler().scheduleSyncDelayedTask(Api.getPlugin(), ()-> opener.setViewers(inventory.getViewers()),1); - return tileEntityOpener; - } else { - CraftContainer craftContainer = (CraftContainer) container; - CraftWorld craftWorld = (CraftWorld) craftContainer.getWorld(); - World world = craftWorld.getHandle(); - BlockPosition position = craftContainer.getPosition(); - TileEntity tileEntity = world.getTileEntity(position); - - //Checks if Tile Entity has already got custom Opener. - if (tileEntity instanceof TileEntityOpener) { - tileEntityOpener = (TileEntityOpener) tileEntity; - TileEntityOpener opener = tileEntityOpener; - Bukkit.getScheduler().scheduleSyncDelayedTask(Api.getPlugin(), ()-> opener.setViewers(inventory.getViewers()),1); - return tileEntityOpener; - } else { - //If not set the new tile entity and set the viewers. - if (tileEntity instanceof TileEntityChest) { - CustomTileEntityChest tileEntityChest = new CustomTileEntityChest(tileEntity instanceof TileEntityChestTrapped ? TileEntityTypes.TRAPPED_CHEST : TileEntityTypes.CHEST); - setTileEnt(world, position, tileEntityChest, inventory.getViewers()); - return tileEntityChest; - } else if (tileEntity instanceof TileEntityBarrel) { - CustomTileEntityBarrel barrel = new CustomTileEntityBarrel(); - setTileEnt(world, position, barrel, inventory.getViewers()); - return barrel; - } - } - return null; - } - } - - private void setTileEnt(World world, BlockPosition position, T tileEntOpener, List viewers){ - world.removeTileEntity(position); - world.setTileEntity(position, tileEntOpener); - Bukkit.getScheduler().scheduleSyncDelayedTask(Api.getPlugin(), ()-> tileEntOpener.setViewers(viewers),1); - } - - private boolean hasLiddedAPI(){ - try { - Class.forName("org.bukkit.block.Lidded"); - return true; - } catch (ClassNotFoundException e){ - return false; - } - } -} diff --git a/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/Crafting.java b/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/Crafting.java deleted file mode 100644 index 5918734..0000000 --- a/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/Crafting.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.jamesdpeters.minecraft.chests.v1_16_R1; - -import com.jamesdpeters.minecraft.chests.CraftingProvider; -import com.jamesdpeters.minecraft.chests.CraftingResult; -import net.minecraft.server.v1_16_R1.Container; -import net.minecraft.server.v1_16_R1.EntityHuman; -import net.minecraft.server.v1_16_R1.IRecipe; -import net.minecraft.server.v1_16_R1.InventoryCrafting; -import net.minecraft.server.v1_16_R1.NonNullList; -import net.minecraft.server.v1_16_R1.RecipeCrafting; -import net.minecraft.server.v1_16_R1.Recipes; -import net.minecraft.server.v1_16_R1.WorldServer; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_16_R1.CraftServer; -import org.bukkit.craftbukkit.v1_16_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftItemStack; -import org.bukkit.entity.Player; -import org.bukkit.inventory.InventoryView; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Recipe; - -import java.util.ArrayList; -import java.util.Optional; - -public class Crafting implements CraftingProvider { - - @Override - public CraftingResult craft(World world, ItemStack[] items) { - CraftWorld craftWorld = (CraftWorld) world; - - // Setup crafting inventories. - InventoryCrafting inventoryCrafting = new InventoryCrafting(new Container(null, -1) { - @Override - public InventoryView getBukkitView() { - return null; - } - - @Override - public boolean canUse(EntityHuman entityHuman) { - return false; - } - }, 3, 3); - - for (int i = 0; i < items.length; i++) { - inventoryCrafting.setItem(i, CraftItemStack.asNMSCopy(items[i])); - } - - Optional recipe = ((CraftServer) Bukkit.getServer()).getServer().getCraftingManager().craft(Recipes.CRAFTING, inventoryCrafting, craftWorld.getHandle()); - - // Generate the resulting ItemStack from the Crafting Matrix - net.minecraft.server.v1_16_R1.ItemStack itemStack = net.minecraft.server.v1_16_R1.ItemStack.b; - - if (recipe.isPresent()) { - itemStack = recipe.get().a(inventoryCrafting); - } - - return createItemCraftResult(CraftItemStack.asBukkitCopy(itemStack), inventoryCrafting, craftWorld.getHandle()); - } - - @Override - public Recipe getRecipe(Player player, World world, ItemStack[] items) { - Container container = new Container(null, -1) { - @Override - public InventoryView getBukkitView() { - return null; - } - - @Override - public boolean canUse(EntityHuman entityHuman) { - return false; - } - }; - - InventoryCrafting crafting = new InventoryCrafting(container, 3, 3); - - for (int i = 0; i < items.length; i++) { - if(i >= 9) break; // ItemList cant contain more than 9 items. - crafting.setItem(i, CraftItemStack.asNMSCopy(items[i])); - } - - CraftServer server = (CraftServer) Bukkit.getServer(); - CraftWorld craftWorld = (CraftWorld) world; - Optional optional = server.getServer().getCraftingManager().craft(Recipes.CRAFTING, crafting, craftWorld.getHandle()); - - return optional.map(IRecipe::toBukkitRecipe).orElse(null); - } - - private CraftingResult createItemCraftResult(ItemStack itemStack, InventoryCrafting inventoryCrafting, WorldServer worldServer) { - CraftServer server = (CraftServer) Bukkit.getServer(); - NonNullList remainingItems = server.getServer().getCraftingManager().c(Recipes.CRAFTING, inventoryCrafting, worldServer); - - CraftingResult craftItemResult = new CraftingResult(itemStack, new ItemStack[9], new ArrayList<>()); - - // Create resulting matrix and overflow items - for (int i = 0; i < remainingItems.size(); ++i) { - net.minecraft.server.v1_16_R1.ItemStack itemstack1 = inventoryCrafting.getItem(i); - net.minecraft.server.v1_16_R1.ItemStack itemstack2 = remainingItems.get(i); - - if (!itemstack1.isEmpty()) { - inventoryCrafting.splitStack(i, 1); - itemstack1 = inventoryCrafting.getItem(i); - } - - if (!itemstack2.isEmpty()) { - if (itemstack1.isEmpty()) { - inventoryCrafting.setItem(i, itemstack2); - } else if (net.minecraft.server.v1_16_R1.ItemStack.equals(itemstack1, itemstack2) && net.minecraft.server.v1_16_R1.ItemStack.matches(itemstack1, itemstack2)) { - itemstack2.add(itemstack1.getCount()); - inventoryCrafting.setItem(i, itemstack2); - } else { - craftItemResult.overflowItems().add(CraftItemStack.asBukkitCopy(itemstack2)); - } - } - } - - for (int i = 0; i < inventoryCrafting.getContents().size(); i++) { - craftItemResult.setResultMatrix(i, CraftItemStack.asBukkitCopy(inventoryCrafting.getItem(i))); - } - - return craftItemResult; - } -} diff --git a/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/EntityEventListener_1_16.java b/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/EntityEventListener_1_16.java deleted file mode 100644 index cf7f530..0000000 --- a/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/EntityEventListener_1_16.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.jamesdpeters.minecraft.chests.v1_16_R1; - -import com.jamesdpeters.minecraft.chests.EntityEventListener; -import org.bukkit.event.EventHandler; -import org.bukkit.event.world.ChunkLoadEvent; - -public class EntityEventListener_1_16 extends EntityEventListener { - - @EventHandler - public void onChunkLoad(ChunkLoadEvent event) { - fixEntities(event.getChunk()); - } - -} diff --git a/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/NMSProviderImpl.java b/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/NMSProviderImpl.java deleted file mode 100644 index 6e23714..0000000 --- a/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/NMSProviderImpl.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.jamesdpeters.minecraft.chests.v1_16_R1; - -import com.jamesdpeters.minecraft.chests.BaseMaterialChecker; -import com.jamesdpeters.minecraft.chests.ChestOpener; -import com.jamesdpeters.minecraft.chests.CraftingProvider; -import com.jamesdpeters.minecraft.chests.EntityEventListener; -import com.jamesdpeters.minecraft.chests.MaterialChecker; -import com.jamesdpeters.minecraft.chests.NMSProvider; -import org.bukkit.block.Lidded; -import org.bukkit.entity.ItemFrame; - -public class NMSProviderImpl implements NMSProvider { - - @Override - public ChestOpener getChestOpener() { - return (inventory, container, tileEntityOpener) -> { - if(hasLiddedAPI()){ - if(container instanceof Lidded){ - if(inventory.getViewers().size() > 0){ - ((Lidded) container).open(); - } else { - ((Lidded) container).close(); - } - } - } - return null; - }; - } - - @Override - public MaterialChecker getMaterialChecker() { - return new BaseMaterialChecker(); - } - - @Override - public CraftingProvider getCraftingProvider() { - return new Crafting(); - } - - @Override - public EntityEventListener getEntityEventListener() { - return new EntityEventListener_1_16(); - } - - @Override - public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) { - itemFrame.setVisible(visible); - } - - private boolean hasLiddedAPI(){ - try { - Class.forName("org.bukkit.block.Lidded"); - return true; - } catch (ClassNotFoundException e){ - return false; - } - } -} diff --git a/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/tileentities/CustomTileEntityBarrel.java b/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/tileentities/CustomTileEntityBarrel.java deleted file mode 100644 index cc04ec2..0000000 --- a/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/tileentities/CustomTileEntityBarrel.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.jamesdpeters.minecraft.chests.v1_16_R1.tileentities; - -import com.jamesdpeters.minecraft.chests.TileEntityOpener; -import net.minecraft.server.v1_16_R1.BaseBlockPosition; -import net.minecraft.server.v1_16_R1.BlockBarrel; -import net.minecraft.server.v1_16_R1.EntityHuman; -import net.minecraft.server.v1_16_R1.EnumDirection; -import net.minecraft.server.v1_16_R1.IBlockData; -import net.minecraft.server.v1_16_R1.SoundCategory; -import net.minecraft.server.v1_16_R1.SoundEffect; -import net.minecraft.server.v1_16_R1.SoundEffects; -import net.minecraft.server.v1_16_R1.TileEntityBarrel; -import org.bukkit.entity.HumanEntity; - -import java.util.List; - -public class CustomTileEntityBarrel extends TileEntityBarrel implements TileEntityOpener { - - private int phantomViewers = 0; - private List viewers; - - @Override - public List getViewers() { - return viewers; - } - - @Override - public void h() { - //super.h(); - } - - @Override - public void startOpen(EntityHuman entityhuman) { - //Do nothing - } - - @Override - public void closeContainer(EntityHuman entityhuman) { - //do nothing. - } - - @Override - public void setViewers(List viewers){ - int previousViewers = phantomViewers; - phantomViewers = viewers.size(); - this.viewers = viewers; - - if(phantomViewers > 1 && previousViewers == 0) open(); - if(phantomViewers == 0) close(); - } - - public void open(){ - IBlockData iblockdata = this.getBlock(); - a(iblockdata, SoundEffects.BLOCK_BARREL_OPEN); - a(iblockdata, true); - } - - public void close(){ - IBlockData iblockdata = this.getBlock(); - a(iblockdata, SoundEffects.BLOCK_BARREL_CLOSE); - a(iblockdata, false); - } - - public void a(IBlockData iblockdata, boolean flag) { - this.world.setTypeAndData(this.getPosition(), (IBlockData)iblockdata.set(BlockBarrel.b, flag), 3); - } - - public void a(IBlockData iblockdata, SoundEffect soundeffect) { - BaseBlockPosition baseblockposition = ((EnumDirection)iblockdata.get(BlockBarrel.a)).p(); - double d0 = (double)this.position.getX() + 0.5D + (double)baseblockposition.getX() / 2.0D; - double d1 = (double)this.position.getY() + 0.5D + (double)baseblockposition.getY() / 2.0D; - double d2 = (double)this.position.getZ() + 0.5D + (double)baseblockposition.getZ() / 2.0D; - this.world.playSound((EntityHuman)null, d0, d1, d2, soundeffect, SoundCategory.BLOCKS, 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F); - } -} diff --git a/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/tileentities/CustomTileEntityChest.java b/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/tileentities/CustomTileEntityChest.java deleted file mode 100644 index eb342bb..0000000 --- a/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/tileentities/CustomTileEntityChest.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.jamesdpeters.minecraft.chests.v1_16_R1.tileentities; - -import com.jamesdpeters.minecraft.chests.TileEntityOpener; -import net.minecraft.server.v1_16_R1.Block; -import net.minecraft.server.v1_16_R1.BlockChest; -import net.minecraft.server.v1_16_R1.BlockPropertyChestType; -import net.minecraft.server.v1_16_R1.EntityHuman; -import net.minecraft.server.v1_16_R1.EnumDirection; -import net.minecraft.server.v1_16_R1.SoundCategory; -import net.minecraft.server.v1_16_R1.SoundEffect; -import net.minecraft.server.v1_16_R1.SoundEffects; -import net.minecraft.server.v1_16_R1.TileEntityChest; -import net.minecraft.server.v1_16_R1.TileEntityTypes; -import org.bukkit.entity.HumanEntity; - -import java.util.List; - -public class CustomTileEntityChest extends TileEntityChest implements TileEntityOpener { - - private int phantomViewers = 0; - private List viewers; - - public CustomTileEntityChest(TileEntityTypes tileEntityTypes){ - super(tileEntityTypes); - } - - @Override - public List getViewers() { - return viewers; - } - - @Override - public void tick() { - //Do nothing. - } - - @Override - protected void onOpen() { - Block block = this.getBlock().getBlock(); - if (block instanceof BlockChest) { - this.world.playBlockAction(this.position, block, 1, viewers.size()); - this.world.applyPhysics(this.position, block); - } - } - - @Override - public void setViewers(List viewers){ - int previousViewers = phantomViewers; - phantomViewers = viewers.size(); - this.viewers = viewers; - - if(phantomViewers > 1 && previousViewers == 0) this.a(SoundEffects.BLOCK_CHEST_OPEN); - if(phantomViewers == 0 && previousViewers != 0) this.a(SoundEffects.BLOCK_CHEST_CLOSE); - if(phantomViewers == 0 && previousViewers == 0) return; - - onOpen(); - } - - public void a(SoundEffect soundeffect) { - BlockPropertyChestType blockpropertychesttype = (BlockPropertyChestType)this.getBlock().get(BlockChest.c); - if (blockpropertychesttype != BlockPropertyChestType.LEFT) { - double d0 = (double)this.position.getX() + 0.5D; - double d1 = (double)this.position.getY() + 0.5D; - double d2 = (double)this.position.getZ() + 0.5D; - if (blockpropertychesttype == BlockPropertyChestType.RIGHT) { - EnumDirection enumdirection = BlockChest.h(this.getBlock()); - d0 += (double)enumdirection.getAdjacentX() * 0.5D; - d2 += (double)enumdirection.getAdjacentZ() * 0.5D; - } - - this.world.playSound((EntityHuman)null, d0, d1, d2, soundeffect, SoundCategory.BLOCKS, 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F); - } - - } - - public void startOpen(EntityHuman entityhuman) { - - } - - public void closeContainer(EntityHuman entityhuman) { - - } - -} diff --git a/ChestsPlusPlus_1_16_R2/pom.xml b/ChestsPlusPlus_1_16_R2/pom.xml deleted file mode 100644 index 3376376..0000000 --- a/ChestsPlusPlus_1_16_R2/pom.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - ChestsPlusPlus-Parent - com.jamesdpeters.minecraft.chests - 1.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - jar - ChestsPlusPlus_1_16_R2 - 1.0-SNAPSHOT - - - - spigotmc-repo - https://hub.spigotmc.org/nexus/content/repositories/snapshots/ - - - - - - com.jamesdpeters.minecraft.chests - ChestsPlusPlus-API - 1.0-SNAPSHOT - - - - org.spigotmc - spigot-api - 1.16.3-R0.1-SNAPSHOT - provided - - - com.jamesdpeters.minecraft.chests - ChestsPlusPlus_1_16 - 1.0-SNAPSHOT - compile - - - - org.bukkit - craftbukkit - 1.16.3-R0.1-SNAPSHOT - provided - - - - - \ No newline at end of file diff --git a/ChestsPlusPlus_1_16_R2/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R2/Crafting.java b/ChestsPlusPlus_1_16_R2/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R2/Crafting.java deleted file mode 100644 index 86bdc54..0000000 --- a/ChestsPlusPlus_1_16_R2/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R2/Crafting.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.jamesdpeters.minecraft.chests.v1_16_R2; - -import com.jamesdpeters.minecraft.chests.CraftingProvider; -import com.jamesdpeters.minecraft.chests.CraftingResult; -import net.minecraft.server.v1_16_R2.Container; -import net.minecraft.server.v1_16_R2.EntityHuman; -import net.minecraft.server.v1_16_R2.IRecipe; -import net.minecraft.server.v1_16_R2.InventoryCrafting; -import net.minecraft.server.v1_16_R2.NonNullList; -import net.minecraft.server.v1_16_R2.RecipeCrafting; -import net.minecraft.server.v1_16_R2.Recipes; -import net.minecraft.server.v1_16_R2.WorldServer; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_16_R2.CraftServer; -import org.bukkit.craftbukkit.v1_16_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftItemStack; -import org.bukkit.entity.Player; -import org.bukkit.inventory.InventoryView; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Recipe; - -import java.util.ArrayList; -import java.util.Optional; - -public class Crafting implements CraftingProvider { - - @Override - public CraftingResult craft(World world, ItemStack[] items) { - CraftWorld craftWorld = (CraftWorld) world; - - // Setup crafting inventories. - InventoryCrafting inventoryCrafting = new InventoryCrafting(new Container(null, -1) { - @Override - public InventoryView getBukkitView() { - return null; - } - - @Override - public boolean canUse(EntityHuman entityHuman) { - return false; - } - }, 3, 3); - - for (int i = 0; i < items.length; i++) { - inventoryCrafting.setItem(i, CraftItemStack.asNMSCopy(items[i])); - } - - Optional recipe = ((CraftServer) Bukkit.getServer()).getServer().getCraftingManager().craft(Recipes.CRAFTING, inventoryCrafting, craftWorld.getHandle()); - - // Generate the resulting ItemStack from the Crafting Matrix - net.minecraft.server.v1_16_R2.ItemStack itemStack = net.minecraft.server.v1_16_R2.ItemStack.b; - - if (recipe.isPresent()) { - itemStack = recipe.get().a(inventoryCrafting); - } - - return createItemCraftResult(CraftItemStack.asBukkitCopy(itemStack), inventoryCrafting, craftWorld.getHandle()); - } - - @Override - public Recipe getRecipe(Player player, World world, ItemStack[] items) { - Container container = new Container(null, -1) { - @Override - public InventoryView getBukkitView() { - return null; - } - - @Override - public boolean canUse(EntityHuman entityHuman) { - return false; - } - }; - - InventoryCrafting crafting = new InventoryCrafting(container, 3, 3); - - for (int i = 0; i < items.length; i++) { - if(i >= 9) break; // ItemList cant contain more than 9 items. - crafting.setItem(i, CraftItemStack.asNMSCopy(items[i])); - } - - CraftServer server = (CraftServer) Bukkit.getServer(); - CraftWorld craftWorld = (CraftWorld) world; - Optional optional = server.getServer().getCraftingManager().craft(Recipes.CRAFTING, crafting, craftWorld.getHandle()); - - return optional.map(IRecipe::toBukkitRecipe).orElse(null); - } - - private CraftingResult createItemCraftResult(ItemStack itemStack, InventoryCrafting inventoryCrafting, WorldServer worldServer) { - CraftServer server = (CraftServer) Bukkit.getServer(); - NonNullList remainingItems = server.getServer().getCraftingManager().c(Recipes.CRAFTING, inventoryCrafting, worldServer); - - CraftingResult craftItemResult = new CraftingResult(itemStack, new ItemStack[9], new ArrayList<>()); - - // Create resulting matrix and overflow items - for (int i = 0; i < remainingItems.size(); ++i) { - net.minecraft.server.v1_16_R2.ItemStack itemstack1 = inventoryCrafting.getItem(i); - net.minecraft.server.v1_16_R2.ItemStack itemstack2 = remainingItems.get(i); - - if (!itemstack1.isEmpty()) { - inventoryCrafting.splitStack(i, 1); - itemstack1 = inventoryCrafting.getItem(i); - } - - if (!itemstack2.isEmpty()) { - if (itemstack1.isEmpty()) { - inventoryCrafting.setItem(i, itemstack2); - } else if (net.minecraft.server.v1_16_R2.ItemStack.equals(itemstack1, itemstack2) && net.minecraft.server.v1_16_R2.ItemStack.matches(itemstack1, itemstack2)) { - itemstack2.add(itemstack1.getCount()); - inventoryCrafting.setItem(i, itemstack2); - } else { - craftItemResult.overflowItems().add(CraftItemStack.asBukkitCopy(itemstack2)); - } - } - } - - for (int i = 0; i < inventoryCrafting.getContents().size(); i++) { - craftItemResult.setResultMatrix(i, CraftItemStack.asBukkitCopy(inventoryCrafting.getItem(i))); - } - - return craftItemResult; - } -} diff --git a/ChestsPlusPlus_1_16_R2/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R2/NMSProviderImpl.java b/ChestsPlusPlus_1_16_R2/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R2/NMSProviderImpl.java deleted file mode 100644 index b0920c2..0000000 --- a/ChestsPlusPlus_1_16_R2/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R2/NMSProviderImpl.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.jamesdpeters.minecraft.chests.v1_16_R2; - -import com.jamesdpeters.minecraft.chests.BaseMaterialChecker; -import com.jamesdpeters.minecraft.chests.ChestOpener; -import com.jamesdpeters.minecraft.chests.CraftingProvider; -import com.jamesdpeters.minecraft.chests.EntityEventListener; -import com.jamesdpeters.minecraft.chests.MaterialChecker; -import com.jamesdpeters.minecraft.chests.NMSProvider; -import com.jamesdpeters.minecraft.chests.v1_16_R1.EntityEventListener_1_16; -import org.bukkit.block.Lidded; -import org.bukkit.entity.ItemFrame; - -public class NMSProviderImpl implements NMSProvider { - - @Override - public ChestOpener getChestOpener() { - return (inventory, container, tileEntityOpener) -> { - if(hasLiddedAPI()){ - if(container instanceof Lidded){ - if(inventory.getViewers().size() > 0){ - ((Lidded) container).open(); - } else { - ((Lidded) container).close(); - } - } - } - return null; - }; - } - - @Override - public MaterialChecker getMaterialChecker() { - return new BaseMaterialChecker(); - } - - @Override - public CraftingProvider getCraftingProvider() { - return new Crafting(); - } - - @Override - public EntityEventListener getEntityEventListener() { - return new EntityEventListener_1_16(); - } - - @Override - public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) { - itemFrame.setVisible(visible); - } - - private boolean hasLiddedAPI(){ - try { - Class.forName("org.bukkit.block.Lidded"); - return true; - } catch (ClassNotFoundException e){ - return false; - } - } -} diff --git a/ChestsPlusPlus_1_16_R3/pom.xml b/ChestsPlusPlus_1_16_R3/pom.xml deleted file mode 100644 index 9779359..0000000 --- a/ChestsPlusPlus_1_16_R3/pom.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - ChestsPlusPlus-Parent - com.jamesdpeters.minecraft.chests - 1.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - jar - ChestsPlusPlus_1_16_R3 - 1.0-SNAPSHOT - - - - spigotmc-repo - https://hub.spigotmc.org/nexus/content/repositories/snapshots/ - - - - - - com.jamesdpeters.minecraft.chests - ChestsPlusPlus-API - 1.0-SNAPSHOT - - - - org.spigotmc - spigot-api - 1.16.4-R0.1-SNAPSHOT - provided - - - com.jamesdpeters.minecraft.chests - ChestsPlusPlus_1_16 - 1.0-SNAPSHOT - compile - - - - org.bukkit - craftbukkit - 1.16.4-R0.1-SNAPSHOT - provided - - - - - \ No newline at end of file diff --git a/ChestsPlusPlus_1_16_R3/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R3/Crafting.java b/ChestsPlusPlus_1_16_R3/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R3/Crafting.java deleted file mode 100644 index 14e5fd1..0000000 --- a/ChestsPlusPlus_1_16_R3/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R3/Crafting.java +++ /dev/null @@ -1,132 +0,0 @@ -package com.jamesdpeters.minecraft.chests.v1_16_R3; - -import com.jamesdpeters.minecraft.chests.CraftingProvider; -import com.jamesdpeters.minecraft.chests.CraftingResult; -import net.minecraft.server.v1_16_R3.Container; -import net.minecraft.server.v1_16_R3.EntityHuman; -import net.minecraft.server.v1_16_R3.IRecipe; -import net.minecraft.server.v1_16_R3.InventoryCrafting; -import net.minecraft.server.v1_16_R3.NonNullList; -import net.minecraft.server.v1_16_R3.RecipeCrafting; -import net.minecraft.server.v1_16_R3.Recipes; -import net.minecraft.server.v1_16_R3.WorldServer; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_16_R3.CraftServer; -import org.bukkit.craftbukkit.v1_16_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack; -import org.bukkit.entity.Player; -import org.bukkit.inventory.InventoryView; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Recipe; - -import java.util.ArrayList; -import java.util.Optional; - -public class Crafting implements CraftingProvider { - - @Override - public CraftingResult craft(World world, ItemStack[] items) { - CraftWorld craftWorld = (CraftWorld) world; - - // Setup crafting inventories. - InventoryCrafting inventoryCrafting = new InventoryCrafting(new Container(null, -1) { - @Override - public InventoryView getBukkitView() { - return null; - } - - @Override - public boolean canUse(EntityHuman entityHuman) { - return false; - } - }, 3, 3); - - for (int i = 0; i < items.length; i++) { - inventoryCrafting.setItem(i, CraftItemStack.asNMSCopy(items[i])); - } - - Optional recipe = ((CraftServer) Bukkit.getServer()).getServer().getCraftingManager().craft(Recipes.CRAFTING, inventoryCrafting, craftWorld.getHandle()); - - // Generate the resulting ItemStack from the Crafting Matrix - net.minecraft.server.v1_16_R3.ItemStack itemStack = net.minecraft.server.v1_16_R3.ItemStack.b; - - if (recipe.isPresent()) { - itemStack = recipe.get().a(inventoryCrafting); - } - - return createItemCraftResult(CraftItemStack.asBukkitCopy(itemStack), inventoryCrafting, craftWorld.getHandle()); - } - - @Override - public Recipe getRecipe(Player player, World world, ItemStack[] items) { - Container container = new Container(null, -1) { - @Override - public InventoryView getBukkitView() { - return null; - } - - @Override - public boolean canUse(EntityHuman entityHuman) { - return false; - } - }; - - InventoryCrafting crafting = new InventoryCrafting(container, 3, 3); - - for (int i = 0; i < items.length; i++) { - if(i >= 9) break; // ItemList cant contain more than 9 items. - crafting.setItem(i, CraftItemStack.asNMSCopy(items[i])); - } - - CraftServer server = (CraftServer) Bukkit.getServer(); - CraftWorld craftWorld = (CraftWorld) world; - Optional optional = server.getServer().getCraftingManager().craft(Recipes.CRAFTING, crafting, craftWorld.getHandle()); - - return optional.map(IRecipe::toBukkitRecipe).orElse(null); - } - - private Optional getNMSRecipe(ItemStack[] craftingMatrix, InventoryCrafting inventoryCrafting, CraftWorld world) { - for(int i = 0; i < craftingMatrix.length; ++i) { - inventoryCrafting.setItem(i, CraftItemStack.asNMSCopy(craftingMatrix[i])); - } - - CraftServer server = (CraftServer) Bukkit.getServer(); - return server.getServer().getCraftingManager().craft(Recipes.CRAFTING, inventoryCrafting, world.getHandle()); - } - - private CraftingResult createItemCraftResult(ItemStack itemStack, InventoryCrafting inventoryCrafting, WorldServer worldServer) { - CraftServer server = (CraftServer) Bukkit.getServer(); - NonNullList remainingItems = server.getServer().getCraftingManager().c(Recipes.CRAFTING, inventoryCrafting, worldServer); - - CraftingResult craftItemResult = new CraftingResult(itemStack, new ItemStack[9], new ArrayList<>()); - - // Create resulting matrix and overflow items - for (int i = 0; i < remainingItems.size(); ++i) { - net.minecraft.server.v1_16_R3.ItemStack itemstack1 = inventoryCrafting.getItem(i); - net.minecraft.server.v1_16_R3.ItemStack itemstack2 = remainingItems.get(i); - - if (!itemstack1.isEmpty()) { - inventoryCrafting.splitStack(i, 1); - itemstack1 = inventoryCrafting.getItem(i); - } - - if (!itemstack2.isEmpty()) { - if (itemstack1.isEmpty()) { - inventoryCrafting.setItem(i, itemstack2); - } else if (net.minecraft.server.v1_16_R3.ItemStack.equals(itemstack1, itemstack2) && net.minecraft.server.v1_16_R3.ItemStack.matches(itemstack1, itemstack2)) { - itemstack2.add(itemstack1.getCount()); - inventoryCrafting.setItem(i, itemstack2); - } else { - craftItemResult.overflowItems().add(CraftItemStack.asBukkitCopy(itemstack2)); - } - } - } - - for (int i = 0; i < inventoryCrafting.getContents().size(); i++) { - craftItemResult.setResultMatrix(i, CraftItemStack.asBukkitCopy(inventoryCrafting.getItem(i))); - } - - return craftItemResult; - } -} diff --git a/ChestsPlusPlus_1_16_R3/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R3/NMSProviderImpl.java b/ChestsPlusPlus_1_16_R3/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R3/NMSProviderImpl.java deleted file mode 100644 index 92934bd..0000000 --- a/ChestsPlusPlus_1_16_R3/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R3/NMSProviderImpl.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.jamesdpeters.minecraft.chests.v1_16_R3; - -import com.jamesdpeters.minecraft.chests.BaseMaterialChecker; -import com.jamesdpeters.minecraft.chests.ChestOpener; -import com.jamesdpeters.minecraft.chests.CraftingProvider; -import com.jamesdpeters.minecraft.chests.EntityEventListener; -import com.jamesdpeters.minecraft.chests.MaterialChecker; -import com.jamesdpeters.minecraft.chests.NMSProvider; -import com.jamesdpeters.minecraft.chests.v1_16_R1.EntityEventListener_1_16; -import org.bukkit.block.Lidded; -import org.bukkit.entity.ItemFrame; - -public class NMSProviderImpl implements NMSProvider { - - @Override - public ChestOpener getChestOpener() { - return (inventory, container, tileEntityOpener) -> { - if(hasLiddedAPI()){ - if(container instanceof Lidded){ - if(inventory.getViewers().size() > 0){ - ((Lidded) container).open(); - } else { - ((Lidded) container).close(); - } - } - } - return null; - }; - } - - @Override - public MaterialChecker getMaterialChecker() { - return new BaseMaterialChecker(); - } - - @Override - public CraftingProvider getCraftingProvider() { - return new Crafting(); - } - - @Override - public EntityEventListener getEntityEventListener() { - return new EntityEventListener_1_16(); - } - - @Override - public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) { - itemFrame.setVisible(visible); - } - - private boolean hasLiddedAPI(){ - try { - Class.forName("org.bukkit.block.Lidded"); - return true; - } catch (ClassNotFoundException e){ - return false; - } - } -} diff --git a/ChestsPlusPlus_1_17_R1/pom.xml b/ChestsPlusPlus_1_17_R1/pom.xml index f72caad..8cf27ba 100644 --- a/ChestsPlusPlus_1_17_R1/pom.xml +++ b/ChestsPlusPlus_1_17_R1/pom.xml @@ -39,12 +39,6 @@ ${minecraft.version}-R0.1-SNAPSHOT provided - - com.jamesdpeters.minecraft.chests - ChestsPlusPlus_1_16 - 1.0-SNAPSHOT - compile - org.spigotmc diff --git a/ChestsPlusPlus_Main/pom.xml b/ChestsPlusPlus_Main/pom.xml index 77b29f6..648d6eb 100644 --- a/ChestsPlusPlus_Main/pom.xml +++ b/ChestsPlusPlus_Main/pom.xml @@ -6,7 +6,7 @@ com.jamesdpeters.minecraft.chests ChestsPlusPlus-Master - 2.6.2-Release + 2.6.3-Beta 16 @@ -63,7 +63,7 @@ org.spigotmc spigot-api - 1.14.4-R0.1-SNAPSHOT + 1.17.1-R0.1-SNAPSHOT provided @@ -122,30 +122,6 @@ compile - - com.jamesdpeters.minecraft.chests - ChestsPlusPlus_1_16_R3 - 1.0-SNAPSHOT - jar - compile - - - - com.jamesdpeters.minecraft.chests - ChestsPlusPlus_1_16_R2 - 1.0-SNAPSHOT - jar - compile - - - - com.jamesdpeters.minecraft.chests - ChestsPlusPlus_1_16 - 1.0-SNAPSHOT - jar - compile - - com.jamesdpeters.minecraft.chests ChestsPlusPlus-API diff --git a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/ChestsPlusPlus.java b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/ChestsPlusPlus.java index 3ba3001..4a3e9d5 100644 --- a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/ChestsPlusPlus.java +++ b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/ChestsPlusPlus.java @@ -6,8 +6,10 @@ import com.jamesdpeters.minecraft.chests.commands.ChestLinkCommand; import com.jamesdpeters.minecraft.chests.commands.ChestsPlusPlusCommand; import com.jamesdpeters.minecraft.chests.crafting.Crafting; import com.jamesdpeters.minecraft.chests.lang.LangFileProperties; -import com.jamesdpeters.minecraft.chests.listeners.HopperListener; +import com.jamesdpeters.minecraft.chests.listeners.AutoCrafterListener; +import com.jamesdpeters.minecraft.chests.listeners.HopperFilterListener; import com.jamesdpeters.minecraft.chests.listeners.InventoryListener; +import com.jamesdpeters.minecraft.chests.listeners.LinkedChestHopperListener; import com.jamesdpeters.minecraft.chests.listeners.StorageListener; import com.jamesdpeters.minecraft.chests.listeners.WorldListener; import com.jamesdpeters.minecraft.chests.maventemplates.BuildConstants; @@ -24,13 +26,16 @@ import com.jamesdpeters.minecraft.chests.serialize.MaterialSerializer; import com.jamesdpeters.minecraft.chests.serialize.RecipeSerializable; import com.jamesdpeters.minecraft.chests.serialize.SpigotConfig; import com.jamesdpeters.minecraft.chests.storage.autocraft.AutoCraftingStorage; +import com.jamesdpeters.minecraft.chests.storage.autocraft.AutoCraftingStorageType; import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorage; +import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorageType; import com.jamesdpeters.minecraft.chests.versionchecker.UpdateChecker; import fr.minuskube.inv.InventoryManager; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.configuration.serialization.ConfigurationSerialization; +import org.bukkit.event.HandlerList; import org.bukkit.permissions.PermissionDefault; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.annotation.command.Command; @@ -42,7 +47,7 @@ import org.bukkit.plugin.java.annotation.plugin.Plugin; import org.bukkit.plugin.java.annotation.plugin.author.Author; @Plugin(name = "ChestsPlusPlus", version = BuildConstants.VERSION) -@ApiVersion(ApiVersion.Target.v1_14) +@ApiVersion(ApiVersion.Target.v1_17) @Description(value = "Minecraft Spigot mod that enhances chests and hoppers, with ChestLinks and Hopper filters!") @Author(value = "jameslfc19") @Commands({ @@ -96,10 +101,7 @@ public class ChestsPlusPlus extends JavaPlugin { //API initialisation ApiSpecific.init(this); - //Register commands - new ChestLinkCommand().register(this); - new AutoCraftCommand().register(this); - new ChestsPlusPlusCommand().register(this); + //Load storage ServerType.init(); @@ -125,23 +127,50 @@ public class ChestsPlusPlus extends JavaPlugin { }), 0, PluginConfig.UPDATE_CHECKER_PERIOD.get() * 20); } - getServer().getPluginManager().registerEvents(ApiSpecific.getNmsProvider().getEntityEventListener(), this); - Bukkit.getWorlds().forEach(world -> { - ApiSpecific.getNmsProvider().getEntityEventListener().fixEntities(world); - }); - //Load storages after load. Bukkit.getScheduler().scheduleSyncDelayedTask(this, () -> { Crafting.load(); new Config(); getLogger().info("Chests++ Successfully Loaded Config and Recipes"); - //Register event listeners - getServer().getPluginManager().registerEvents(new StorageListener(), this); - getServer().getPluginManager().registerEvents(new InventoryListener(), this); - getServer().getPluginManager().registerEvents(new HopperListener(), this); + //LinkedChest + if (PluginConfig.CHESTLINKS_ENABLED.get()) { + new ChestLinkCommand().register(this); + getServer().getPluginManager().registerEvents(new LinkedChestHopperListener(), this); + } + + //AutoCrafter + if (PluginConfig.AUTOCRAFTERS_ENABLED.get()) { + new AutoCraftCommand().register(this); + getServer().getPluginManager().registerEvents(new AutoCrafterListener(), this); + } + + //HopperFilter + if (PluginConfig.HOPPER_FILTERS_ENABLED.get()) { + getServer().getPluginManager().registerEvents(new HopperFilterListener(), this); + } + + //Shared + if (PluginConfig.CHESTLINKS_ENABLED.get() || PluginConfig.AUTOCRAFTERS_ENABLED.get()) { + getServer().getPluginManager().registerEvents(new StorageListener(), this); + getServer().getPluginManager().registerEvents(new InventoryListener(), this); + } + + //Other getServer().getPluginManager().registerEvents(new WorldListener(), this); - Config.getStorageTypes().forEach(storageType -> getServer().getPluginManager().registerEvents(storageType, this)); + new ChestsPlusPlusCommand().register(this); + + Config.getStorageTypes().forEach(storageType -> { + if (storageType instanceof AutoCraftingStorageType && PluginConfig.AUTOCRAFTERS_ENABLED.get()) { + getServer().getPluginManager().registerEvents(storageType, this); + } + if (storageType instanceof ChestLinkStorageType && PluginConfig.CHESTLINKS_ENABLED.get()) { + getServer().getPluginManager().registerEvents(storageType, this); + } + }); + + getServer().getPluginManager().registerEvents(ApiSpecific.getNmsProvider().getEntityEventListener(), this); + Bukkit.getWorlds().forEach(world -> ApiSpecific.getNmsProvider().getEntityEventListener().fixEntities(world)); getLogger().info("Chests++ enabled!"); }, 1); } @@ -150,6 +179,7 @@ public class ChestsPlusPlus extends JavaPlugin { public void onDisable() { super.onDisable(); Config.save(); + HandlerList.unregisterAll(this); // //Remove entities that could have been left behind from bad save files/crashes etc. // Utils.fixEntities(); } diff --git a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/api/NMSProviderDefault.java b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/api/NMSProviderDefault.java index ff40b25..4c5c6cd 100644 --- a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/api/NMSProviderDefault.java +++ b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/api/NMSProviderDefault.java @@ -6,16 +6,13 @@ import org.bukkit.entity.ItemFrame; public class NMSProviderDefault implements NMSProvider { - //Latest version at time of build is 1.17 - //All new versions should be able to run with the default provided after 1.17 <- Not seem to be working by: ceze88 + //Latest version at time of build is 1.18.2 NMSProvider defaultProvider; public NMSProviderDefault() { String NAME = Bukkit.getServer().getClass().getPackage().getName(); String VERSION = NAME.substring(NAME.lastIndexOf('.') + 1); switch (VERSION) { - case "v1_16_R2" -> defaultProvider = new com.jamesdpeters.minecraft.chests.v1_16_R2.NMSProviderImpl(); - case "v1_16_R3" -> defaultProvider = new com.jamesdpeters.minecraft.chests.v1_16_R3.NMSProviderImpl(); case "v1_17_R1" -> defaultProvider = new com.jamesdpeters.minecraft.chests.v1_17_R1.NMSProviderImpl(); case "v1_18_R1" -> defaultProvider = new com.jamesdpeters.minecraft.chests.v1_18_R1.NMSProviderImpl(); case "v1_18_R2" -> defaultProvider = new com.jamesdpeters.minecraft.chests.v1_18_R2.NMSProviderImpl(); @@ -23,7 +20,7 @@ public class NMSProviderDefault implements NMSProvider { ChestsPlusPlus.PLUGIN.getLogger().severe("§c======================================================="); ChestsPlusPlus.PLUGIN.getLogger().severe("§cThis version is not supported. Please update your server!"); ChestsPlusPlus.PLUGIN.getLogger().severe("§c======================================================="); - defaultProvider = new com.jamesdpeters.minecraft.chests.v1_16_R1.NMSProviderImpl(); + defaultProvider = new com.jamesdpeters.minecraft.chests.v1_17_R1.NMSProviderImpl(); } } } diff --git a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/filters/ChestsPlusPlusTag.java b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/filters/ChestsPlusPlusTag.java new file mode 100644 index 0000000..61c9024 --- /dev/null +++ b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/filters/ChestsPlusPlusTag.java @@ -0,0 +1,39 @@ +package com.jamesdpeters.minecraft.chests.filters; + +import com.google.common.collect.Sets; +import com.jamesdpeters.minecraft.chests.ChestsPlusPlus; +import org.bukkit.Keyed; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.Tag; +import org.jetbrains.annotations.NotNull; + +import java.util.Set; + +@SuppressWarnings("rawtypes") +public class ChestsPlusPlusTag { + + public static Tag SEEDS; + + static { + SEEDS = new Tag() { + + @Override + public boolean isTagged(@NotNull Keyed item) { + return item.equals(Material.WHEAT_SEEDS) || item.equals(Material.PUMPKIN_SEEDS) || item.equals(Material.MELON_SEEDS) || item.equals(Material.BEETROOT_SEEDS); + } + + @NotNull + @Override + public Set getValues() { + return Sets.newHashSet(Material.WHEAT_SEEDS, Material.PUMPKIN_SEEDS, Material.MELON_SEEDS, Material.BEETROOT_SEEDS); + } + + @NotNull + @Override + public NamespacedKey getKey() { + return new NamespacedKey(ChestsPlusPlus.PLUGIN, "seeds"); + } + }; + } +} \ No newline at end of file diff --git a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/filters/ItemTypeUtil.java b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/filters/ItemTypeUtil.java index 326ef42..d8a05f5 100644 --- a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/filters/ItemTypeUtil.java +++ b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/filters/ItemTypeUtil.java @@ -7,13 +7,15 @@ import org.bukkit.inventory.ItemStack; import java.util.ArrayList; import java.util.List; +@SuppressWarnings("unchecked") public class ItemTypeUtil { - private static List> tags; + private static final List> tags; static { tags = new ArrayList<>(); + tags.add(ChestsPlusPlusTag.SEEDS); tags.add(Tag.WOOL); tags.add(Tag.PLANKS); tags.add(Tag.STONE_BRICKS); diff --git a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/interfaces/CraftingInventoryImpl.java b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/interfaces/CraftingInventoryImpl.java index 37f2fad..37d20fe 100644 --- a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/interfaces/CraftingInventoryImpl.java +++ b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/interfaces/CraftingInventoryImpl.java @@ -172,6 +172,11 @@ public class CraftingInventoryImpl implements CraftingInventory { return inventory.firstEmpty(); } + @Override + public boolean isEmpty() { + return inventory.isEmpty(); + } + @Override public void remove(@NotNull Material material) throws IllegalArgumentException { inventory.remove(material); diff --git a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/listeners/AutoCrafterListener.java b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/listeners/AutoCrafterListener.java new file mode 100644 index 0000000..11b8505 --- /dev/null +++ b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/listeners/AutoCrafterListener.java @@ -0,0 +1,89 @@ +package com.jamesdpeters.minecraft.chests.listeners; + +import com.jamesdpeters.minecraft.chests.ChestsPlusPlus; +import com.jamesdpeters.minecraft.chests.interfaces.VirtualCraftingHolder; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryAction; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.inventory.InventoryDragEvent; +import org.bukkit.event.inventory.InventoryInteractEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; + +public class AutoCrafterListener implements Listener { + + @EventHandler + public void onInventoryClose(InventoryCloseEvent event) { + InventoryHolder holder = event.getInventory().getHolder(); + if (holder instanceof VirtualCraftingHolder) { + ((VirtualCraftingHolder) holder).stopAnimation(); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onInventoryPlayerUpdate(InventoryDragEvent event) { + craftingUpdate(event); + } + + //CRAFTING + @EventHandler(priority = EventPriority.HIGHEST) + public void inventoryDragEvent(InventoryDragEvent event) { + Inventory inventory = event.getInventory(); + if (inventory.getHolder() instanceof VirtualCraftingHolder) { + Player p = (Player) event.getWhoClicked(); + for (int slot : event.getRawSlots()) { + if (slot >= p.getOpenInventory().getTopInventory().getSize()) + continue; + + setCraftingItem(event.getInventory(), slot, event.getOldCursor()); + event.setCancelled(true); + } + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onCraftingPlayerUpdate(InventoryClickEvent event) { + Player player = (Player) event.getWhoClicked(); + if (event.getView().getTopInventory().getHolder() instanceof VirtualCraftingHolder) { + if (event.getAction() == InventoryAction.COLLECT_TO_CURSOR || + event.getAction() == InventoryAction.MOVE_TO_OTHER_INVENTORY || + event.getAction() == InventoryAction.NOTHING) { + event.setCancelled(true); + player.updateInventory(); + return; + } + if (event.getClickedInventory() == player.getOpenInventory().getTopInventory()) { + if (event.getSlot() == 0) event.setCancelled(true); + if (event.getSlot() >= 1 && event.getSlot() <= 9) { + setCraftingItem(event.getInventory(), event.getSlot(), event.getCursor()); + event.setCancelled(true); + craftingUpdate(event); + } + } + } + + } + + private void setCraftingItem(Inventory inventory, int slot, ItemStack cursor) { + ItemStack clone = null; + if (cursor != null) { + clone = cursor.clone(); + clone.setAmount(1); + } + inventory.setItem(slot, clone); + } + + private void craftingUpdate(InventoryInteractEvent event) { + InventoryHolder holder = event.getInventory().getHolder(); + if (holder instanceof VirtualCraftingHolder) { + Bukkit.getScheduler().scheduleSyncDelayedTask(ChestsPlusPlus.PLUGIN, (((VirtualCraftingHolder) holder).setUpdatingRecipe(true))::updateCrafting, 1); + Bukkit.getScheduler().scheduleSyncDelayedTask(ChestsPlusPlus.PLUGIN, (((VirtualCraftingHolder) holder))::forceUpdateInventory, 1); + } + } +} diff --git a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/listeners/HopperListener.java b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/listeners/HopperFilterListener.java similarity index 95% rename from ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/listeners/HopperListener.java rename to ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/listeners/HopperFilterListener.java index 4ae2829..246fcd9 100644 --- a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/listeners/HopperListener.java +++ b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/listeners/HopperFilterListener.java @@ -10,6 +10,7 @@ import com.jamesdpeters.minecraft.chests.serialize.Config; import com.jamesdpeters.minecraft.chests.PluginConfig; import com.jamesdpeters.minecraft.chests.serialize.SpigotConfig; import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorage; +import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorageType; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; @@ -29,7 +30,7 @@ import org.bukkit.scheduler.BukkitRunnable; import java.util.function.Function; -public class HopperListener implements Listener { +public class HopperFilterListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST) public void onHopperMoveEvent(InventoryMoveItemEvent event) { @@ -77,7 +78,9 @@ public class HopperListener implements Listener { //FROM HOPPER if (event.getInitiator().getHolder() instanceof Hopper) { Location location = event.getDestination().getLocation(); - ChestLinkStorage storage = Config.getChestLink().getStorage(location); + ChestLinkStorageType storageType = Config.getChestLink(); + if (storageType == null) return; + ChestLinkStorage storage = storageType.getStorage(location); if (storage != null) { if(!event.isCancelled()) { event.setCancelled(true); diff --git a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/listeners/InventoryListener.java b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/listeners/InventoryListener.java index 5e15593..030ea5a 100644 --- a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/listeners/InventoryListener.java +++ b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/listeners/InventoryListener.java @@ -1,7 +1,6 @@ package com.jamesdpeters.minecraft.chests.listeners; import com.jamesdpeters.minecraft.chests.ChestsPlusPlus; -import com.jamesdpeters.minecraft.chests.interfaces.VirtualCraftingHolder; import com.jamesdpeters.minecraft.chests.interfaces.VirtualInventoryHolder; import com.jamesdpeters.minecraft.chests.misc.Utils; import com.jamesdpeters.minecraft.chests.sort.InventorySorter; @@ -10,14 +9,11 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryDragEvent; import org.bukkit.event.inventory.InventoryInteractEvent; -import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.ItemStack; public class InventoryListener implements Listener { @@ -39,9 +35,6 @@ public class InventoryListener implements Listener { Utils.closeStorageInventory(vHolder.getStorage()); vHolder.getStorage().onItemDisplayUpdate(InventorySorter.getMostCommonItem(event.getInventory())); } - if (holder instanceof VirtualCraftingHolder) { - ((VirtualCraftingHolder) holder).stopAnimation(); - } } catch (NullPointerException ignore) { } //Essentials does something weird with enderchests - shit fix but works :) } @@ -60,64 +53,5 @@ public class InventoryListener implements Listener { @EventHandler(priority = EventPriority.LOWEST) public void onInventoryPlayerUpdate(InventoryDragEvent event) { inventoryUpdate(event); - craftingUpdate(event); } - - //CRAFTING - @EventHandler(priority = EventPriority.HIGHEST) - public void inventoryDragEvent(InventoryDragEvent event) { - Inventory inventory = event.getInventory(); - if (inventory.getHolder() instanceof VirtualCraftingHolder) { - Player p = (Player) event.getWhoClicked(); - for (int slot : event.getRawSlots()) { - if (slot >= p.getOpenInventory().getTopInventory().getSize()) - continue; - - setCraftingItem(event.getInventory(), slot, event.getOldCursor()); - event.setCancelled(true); - } - } - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void onCraftingPlayerUpdate(InventoryClickEvent event) { - Player player = (Player) event.getWhoClicked(); - - if (event.getView().getTopInventory().getHolder() instanceof VirtualCraftingHolder) { - if (event.getAction() == InventoryAction.COLLECT_TO_CURSOR || - event.getAction() == InventoryAction.MOVE_TO_OTHER_INVENTORY || - event.getAction() == InventoryAction.NOTHING) { - event.setCancelled(true); - player.updateInventory(); - return; - } - - if (event.getClickedInventory() == player.getOpenInventory().getTopInventory()) { - if (event.getSlot() == 0) event.setCancelled(true); - if (event.getSlot() >= 1 && event.getSlot() <= 9) { - setCraftingItem(event.getInventory(), event.getSlot(), event.getCursor()); - event.setCancelled(true); - craftingUpdate(event); - } - } - } - } - - private void setCraftingItem(Inventory inventory, int slot, ItemStack cursor) { - ItemStack clone = null; - if (cursor != null) { - clone = cursor.clone(); - clone.setAmount(1); - } - inventory.setItem(slot, clone); - } - - private void craftingUpdate(InventoryInteractEvent event) { - InventoryHolder holder = event.getInventory().getHolder(); - if (holder instanceof VirtualCraftingHolder) { - Bukkit.getScheduler().scheduleSyncDelayedTask(ChestsPlusPlus.PLUGIN, (((VirtualCraftingHolder) holder).setUpdatingRecipe(true))::updateCrafting, 1); - Bukkit.getScheduler().scheduleSyncDelayedTask(ChestsPlusPlus.PLUGIN, (((VirtualCraftingHolder) holder))::forceUpdateInventory, 1); - } - } - } diff --git a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/listeners/LinkedChestHopperListener.java b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/listeners/LinkedChestHopperListener.java new file mode 100644 index 0000000..d00a7dc --- /dev/null +++ b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/listeners/LinkedChestHopperListener.java @@ -0,0 +1,49 @@ +package com.jamesdpeters.minecraft.chests.listeners; + +import com.jamesdpeters.minecraft.chests.ChestsPlusPlus; +import com.jamesdpeters.minecraft.chests.misc.Utils; +import com.jamesdpeters.minecraft.chests.serialize.Config; +import com.jamesdpeters.minecraft.chests.serialize.SpigotConfig; +import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorage; +import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorageType; +import org.bukkit.Location; +import org.bukkit.block.Hopper; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryMoveItemEvent; +import org.bukkit.scheduler.BukkitRunnable; + +public class LinkedChestHopperListener implements Listener { + + @EventHandler(priority = EventPriority.HIGH) + public void fromHopper(InventoryMoveItemEvent event) { + //FROM HOPPER + if (event.getInitiator().getHolder() instanceof Hopper) { + Location location = event.getDestination().getLocation(); + if (location == null) return; + if (!Utils.isLocationChunkLoaded(location)) return; + + ChestLinkStorageType storageType = Config.getChestLink(); + if (storageType == null) return; + ChestLinkStorage storage = storageType.getStorage(location); + if (storage != null) { + if(!event.isCancelled()) { + event.setCancelled(true); + new BukkitRunnable() { + @Override + public void run() { + + int hopperAmount = SpigotConfig.getWorldSettings(location.getWorld()).getHopperAmount(); + if (Utils.hopperMove(event.getSource(), hopperAmount, storage.getInventory())) { + storage.updateDisplayItem(); + } + if (event.getDestination().getHolder() != null) event.getDestination().getHolder().getInventory().clear(); + if (storage.getInventory().getViewers().size() > 0) storage.sort(); + } + }.runTaskLater(ChestsPlusPlus.PLUGIN, 1); + } + } + } + } +} \ No newline at end of file diff --git a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/misc/Utils.java b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/misc/Utils.java index ed1f2b6..f99e5a5 100644 --- a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/misc/Utils.java +++ b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/misc/Utils.java @@ -147,7 +147,11 @@ public class Utils { } public static List getAllPlayers() { - return getPlayersAsNameList(Arrays.asList(Bukkit.getOfflinePlayers())); + List result = new ArrayList<>(); + for (Player p : Bukkit.getOnlinePlayers()) { + result.add(p.getName()); + } + return result; } public static List getPlayersAsNameList(Collection players) { diff --git a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/runnables/VirtualChestToHopper.java b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/runnables/VirtualChestToHopper.java index 11b06fc..943ec0e 100644 --- a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/runnables/VirtualChestToHopper.java +++ b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/runnables/VirtualChestToHopper.java @@ -4,7 +4,6 @@ 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.LocationInfo; -import com.jamesdpeters.minecraft.chests.PluginConfig; import com.jamesdpeters.minecraft.chests.serialize.SpigotConfig; import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorage; import org.bukkit.Location; @@ -35,7 +34,7 @@ public class VirtualChestToHopper extends BukkitRunnable { for (LocationInfo location : storage.getLocations()) { if (location != null) { if (location.getLocation() != null) { - if (!PluginConfig.SHOULD_RUN_HOPPERS_UNLOADED_CHUNKS.get() && !Utils.isLocationChunkLoaded(location.getLocation())) + if (!Utils.isLocationChunkLoaded(location.getLocation()) || !location.getLocation().getChunk().isEntitiesLoaded()) continue; Location below = location.getLocation().clone().subtract(0, 1, 0); if (below.getBlock().getState() instanceof Hopper hopper) { diff --git a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/serialize/Config.java b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/serialize/Config.java index a582595..961c68c 100644 --- a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/serialize/Config.java +++ b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/serialize/Config.java @@ -2,6 +2,7 @@ package com.jamesdpeters.minecraft.chests.serialize; import com.google.common.base.Charsets; import com.jamesdpeters.minecraft.chests.ChestsPlusPlus; +import com.jamesdpeters.minecraft.chests.PluginConfig; import com.jamesdpeters.minecraft.chests.storage.abstracts.AbstractStorage; import com.jamesdpeters.minecraft.chests.storage.abstracts.StorageType; import com.jamesdpeters.minecraft.chests.storage.autocraft.AutoCraftingStorageType; @@ -53,13 +54,13 @@ public class Config { store = new ConfigStorage(); saveASync(); } - chestLinkStorageType = new ChestLinkStorageType(store); - autoCraftingStorageType = new AutoCraftingStorageType(store); + if (PluginConfig.CHESTLINKS_ENABLED.get()) chestLinkStorageType = new ChestLinkStorageType(store); + if (PluginConfig.AUTOCRAFTERS_ENABLED.get()) autoCraftingStorageType = new AutoCraftingStorageType(store); //Add each storage type to a list. storageTypes = new ArrayList<>(); - storageTypes.add(chestLinkStorageType); - storageTypes.add(autoCraftingStorageType); + if (PluginConfig.CHESTLINKS_ENABLED.get()) storageTypes.add(chestLinkStorageType); + if (PluginConfig.AUTOCRAFTERS_ENABLED.get()) storageTypes.add(autoCraftingStorageType); storageTypes.forEach(StorageType::onConfigLoad); } diff --git a/ChestsPlusPlus_Main/src/main/resources/lang/en_GB.properties b/ChestsPlusPlus_Main/src/main/resources/lang/en_GB.properties index c1e1106..2ed8894 100644 --- a/ChestsPlusPlus_Main/src/main/resources/lang/en_GB.properties +++ b/ChestsPlusPlus_Main/src/main/resources/lang/en_GB.properties @@ -1,4 +1,4 @@ -# Chests++ Language File (Version 2.6.2-Beta) +# Chests++ Language File (Version 2.6.3-Beta) # NOTE: This file gets replaced when the plugin launches! If you want to make modifications create a copy first! # To create a new language file simply create a copy of this file and rename it to your desired choice for example 'en_US.properties' # It should be located in the 'lang' folder diff --git a/pom.xml b/pom.xml index ba53430..1a98706 100644 --- a/pom.xml +++ b/pom.xml @@ -19,9 +19,6 @@ ChestsPlusPlus_1_18_R2 ChestsPlusPlus_1_18_R1 ChestsPlusPlus_1_17_R1 - ChestsPlusPlus_1_16_R3 - ChestsPlusPlus_1_16_R2 - ChestsPlusPlus_1_16 ChestsPlusPlus_Main