From e2d58f7f50d7f9d2e2a7bf1797253b7e34f7e615 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 29 Dec 2019 14:14:51 +0100 Subject: [PATCH] Several changes, won't list em all --- CHANGELOG.md | 2 + .../listeners/AndroidKillingListener.java | 50 ++++--- .../listeners/AutonomousToolsListener.java | 13 +- .../listeners/BackpackListener.java | 3 +- .../listeners/BlockListener.java | 55 ++++++++ .../listeners/CoolerListener.java | 2 +- .../listeners/EnhancedFurnaceListener.java} | 6 +- .../listeners/GearListener.java | 8 +- .../listeners/ItemPickupListener.java | 2 +- .../listeners/MultiBlockListener.java | 97 +++++++++++++ .../listeners/NetworkListener.java | 3 +- .../listeners/PlayerProfileListener.java} | 6 +- .../listeners/SlimefunGuideListener.java} | 6 +- .../listeners/SoulboundListener.java | 48 +++++++ .../listeners/TalismanListener.java | 2 +- .../listeners/TeleporterListener.java | 2 +- .../listeners/WorldListener.java | 2 +- .../Slimefun/Objects/MultiBlock.java | 38 +++-- .../Objects/SlimefunItem/SlimefunMachine.java | 30 ++-- .../multiblocks/EnhancedCraftingTable.java | 2 +- .../multiblocks/MagicWorkbench.java | 2 +- .../multiblocks/MultiBlockMachine.java | 2 +- .../Slimefun/Setup/SlimefunSetup.java | 28 ++-- .../Slimefun/SlimefunPlugin.java | 38 ++--- .../Slimefun/listeners/ArmorListener.java | 4 +- .../Slimefun/listeners/BlockListener.java | 132 ------------------ .../Slimefun/listeners/BowListener.java | 2 +- .../Slimefun/listeners/DamageListener.java | 23 --- .../Slimefun/listeners/ItemListener.java | 10 +- .../Slimefun/utils/Utilities.java | 4 +- src/main/resources/config.yml | 1 + 31 files changed, 351 insertions(+), 272 deletions(-) rename src/main/java/{me/mrCookieSlime/Slimefun => io/github/thebusybiscuit/slimefun4/implementation}/listeners/AndroidKillingListener.java (60%) rename src/main/java/{me/mrCookieSlime/Slimefun => io/github/thebusybiscuit/slimefun4/implementation}/listeners/AutonomousToolsListener.java (67%) rename src/main/java/{me/mrCookieSlime/Slimefun => io/github/thebusybiscuit/slimefun4/implementation}/listeners/BackpackListener.java (98%) create mode 100644 src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java rename src/main/java/{me/mrCookieSlime/Slimefun => io/github/thebusybiscuit/slimefun4/implementation}/listeners/CoolerListener.java (96%) rename src/main/java/{me/mrCookieSlime/Slimefun/listeners/FurnaceListener.java => io/github/thebusybiscuit/slimefun4/implementation/listeners/EnhancedFurnaceListener.java} (91%) rename src/main/java/{me/mrCookieSlime/Slimefun => io/github/thebusybiscuit/slimefun4/implementation}/listeners/GearListener.java (89%) rename src/main/java/{me/mrCookieSlime/Slimefun => io/github/thebusybiscuit/slimefun4/implementation}/listeners/ItemPickupListener.java (96%) create mode 100644 src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/MultiBlockListener.java rename src/main/java/{me/mrCookieSlime/Slimefun => io/github/thebusybiscuit/slimefun4/implementation}/listeners/NetworkListener.java (92%) rename src/main/java/{me/mrCookieSlime/Slimefun/listeners/PlayerQuitListener.java => io/github/thebusybiscuit/slimefun4/implementation/listeners/PlayerProfileListener.java} (72%) rename src/main/java/{me/mrCookieSlime/Slimefun/listeners/GuideOnJoinListener.java => io/github/thebusybiscuit/slimefun4/implementation/listeners/SlimefunGuideListener.java} (84%) create mode 100644 src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SoulboundListener.java rename src/main/java/{me/mrCookieSlime/Slimefun => io/github/thebusybiscuit/slimefun4/implementation}/listeners/TalismanListener.java (99%) rename src/main/java/{me/mrCookieSlime/Slimefun => io/github/thebusybiscuit/slimefun4/implementation}/listeners/TeleporterListener.java (96%) rename src/main/java/{me/mrCookieSlime/Slimefun => io/github/thebusybiscuit/slimefun4/implementation}/listeners/WorldListener.java (94%) delete mode 100644 src/main/java/me/mrCookieSlime/Slimefun/listeners/BlockListener.java diff --git a/CHANGELOG.md b/CHANGELOG.md index c485ddf03..2de647fb4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,7 @@ https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#4 * More performance improvements * Improved Cargo performance * Removed Nether Drill +* Tweaked Enhanced Furnace Recipes ### Fixes * Fixed Research Titles @@ -78,6 +79,7 @@ https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#4 * Fixed #1298 * Fixed #1325 * Fixed #1295 +* Fixed MultiBlocks not accepting different fence types ## Release Candidate 3 (21 Nov 2019) https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#3 diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/AndroidKillingListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/AndroidKillingListener.java similarity index 60% rename from src/main/java/me/mrCookieSlime/Slimefun/listeners/AndroidKillingListener.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/AndroidKillingListener.java index 9ff093834..487120a20 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/AndroidKillingListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/AndroidKillingListener.java @@ -1,11 +1,10 @@ -package me.mrCookieSlime.Slimefun.listeners; +package io.github.thebusybiscuit.slimefun4.implementation.listeners; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.ThreadLocalRandom; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; @@ -19,6 +18,7 @@ import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.androids.AndroidEntity; +import me.mrCookieSlime.Slimefun.api.Slimefun; public class AndroidKillingListener implements Listener { @@ -27,11 +27,11 @@ public class AndroidKillingListener implements Listener { } @EventHandler(priority = EventPriority.HIGHEST) - public void onDeath(final EntityDeathEvent e) { + public void onDeath(EntityDeathEvent e) { if (e.getEntity().hasMetadata("android_killer")) { - final AndroidEntity obj = (AndroidEntity) e.getEntity().getMetadata("android_killer").get(0).value(); + AndroidEntity obj = (AndroidEntity) e.getEntity().getMetadata("android_killer").get(0).value(); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { + Slimefun.runSync(() -> { List items = new ArrayList<>(); for (Entity n : e.getEntity().getNearbyEntities(0.5D, 0.5D, 0.5D)) { @@ -41,28 +41,32 @@ public class AndroidKillingListener implements Listener { } } - Random random = ThreadLocalRandom.current(); - - switch (e.getEntityType()) { - case BLAZE: - items.add(new ItemStack(Material.BLAZE_ROD, 1 + random.nextInt(2))); - break; - case PIG_ZOMBIE: - items.add(new ItemStack(Material.GOLD_NUGGET, 1 + random.nextInt(3))); - break; - case WITHER_SKELETON: - if (random.nextInt(250) < 2) { - items.add(new ItemStack(Material.WITHER_SKELETON_SKULL)); - } - break; - default: - break; - } + addExtraDrops(items, e.getEntityType()); obj.getAndroid().addItems(obj.getBlock(), items.toArray(new ItemStack[0])); ExperienceOrb exp = (ExperienceOrb) e.getEntity().getWorld().spawnEntity(e.getEntity().getLocation(), EntityType.EXPERIENCE_ORB); - exp.setExperience(1 + random.nextInt(6)); + exp.setExperience(1 + ThreadLocalRandom.current().nextInt(6)); }, 1L); } } + + private void addExtraDrops(List items, EntityType entityType) { + Random random = ThreadLocalRandom.current(); + + switch (entityType) { + case BLAZE: + items.add(new ItemStack(Material.BLAZE_ROD, 1 + random.nextInt(2))); + break; + case PIG_ZOMBIE: + items.add(new ItemStack(Material.GOLD_NUGGET, 1 + random.nextInt(3))); + break; + case WITHER_SKELETON: + if (random.nextInt(250) < 2) { + items.add(new ItemStack(Material.WITHER_SKELETON_SKULL)); + } + break; + default: + break; + } + } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/AutonomousToolsListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/AutonomousToolsListener.java similarity index 67% rename from src/main/java/me/mrCookieSlime/Slimefun/listeners/AutonomousToolsListener.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/AutonomousToolsListener.java index 449a2aae1..d727bc7be 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/AutonomousToolsListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/AutonomousToolsListener.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.listeners; +package io.github.thebusybiscuit.slimefun4.implementation.listeners; import org.bukkit.Material; import org.bukkit.block.Block; @@ -12,7 +12,6 @@ import org.bukkit.event.block.BlockDispenseEvent; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.AutonomousMachineHandler; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; import me.mrCookieSlime.Slimefun.api.BlockStorage; public class AutonomousToolsListener implements Listener { @@ -22,21 +21,19 @@ public class AutonomousToolsListener implements Listener { } @EventHandler - public void onBlockDispensing(final BlockDispenseEvent e) { + public void onBlockDispensing(BlockDispenseEvent e) { Block dispenser = e.getBlock(); if (dispenser.getType() == Material.DISPENSER) { - final Dispenser d = (Dispenser) dispenser.getState(); + Dispenser d = (Dispenser) dispenser.getState(); - BlockFace face = ((Directional)dispenser.getBlockData()).getFacing(); + BlockFace face = ((Directional) dispenser.getBlockData()).getFacing(); Block block = dispenser.getRelative(face); Block chest = dispenser.getRelative(face.getOppositeFace()); SlimefunItem machine = BlockStorage.check(dispenser); if (machine != null) { - for (ItemHandler handler : SlimefunItem.getHandlers("AutonomousMachineHandler")) { - if (((AutonomousMachineHandler) handler).onBlockDispense(e, dispenser, d, block, chest, machine)) break; - } + machine.callItemHandler(AutonomousMachineHandler.class, handler -> handler.onBlockDispense(e, dispenser, d, block, chest, machine)); } } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/BackpackListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BackpackListener.java similarity index 98% rename from src/main/java/me/mrCookieSlime/Slimefun/listeners/BackpackListener.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BackpackListener.java index 7947ff414..ff16a99a6 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/BackpackListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BackpackListener.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.listeners; +package io.github.thebusybiscuit.slimefun4.implementation.listeners; import java.util.List; @@ -89,6 +89,7 @@ public class BackpackListener implements Listener { private static void openBackpack(ItemStack item, PlayerProfile profile, int size) { Player p = profile.getPlayer(); + for (int line = 0; line < item.getItemMeta().getLore().size(); line++) { if (item.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { BackpackInventory backpack = profile.createBackpack(size); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java new file mode 100644 index 000000000..4cd0f08b1 --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java @@ -0,0 +1,55 @@ +package io.github.thebusybiscuit.slimefun4.implementation.listeners; + +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.FallingBlock; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockPistonExtendEvent; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.entity.EntityChangeBlockEvent; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.api.BlockStorage; + +public class BlockListener implements Listener { + + public BlockListener(SlimefunPlugin plugin) { + plugin.getServer().getPluginManager().registerEvents(this, plugin); + } + + @EventHandler + public void onBlockFall(EntityChangeBlockEvent event) { + if (event.getEntity() instanceof FallingBlock && BlockStorage.hasBlockInfo(event.getBlock())) { + event.setCancelled(true); + FallingBlock fb = (FallingBlock) event.getEntity(); + + if (fb.getDropItem()) { + fb.getWorld().dropItemNaturally(fb.getLocation(), new ItemStack(fb.getBlockData().getMaterial(), 1)); + } + } + } + + @EventHandler + public void onPistonExtend(BlockPistonExtendEvent e) { + for (Block b : e.getBlocks()) { + if (BlockStorage.hasBlockInfo(b) || b.getRelative(e.getDirection()).getType() == Material.AIR && BlockStorage.hasBlockInfo(b.getRelative(e.getDirection()))) { + e.setCancelled(true); + return; + } + } + } + + @EventHandler + public void onPistonRetract(BlockPistonRetractEvent e) { + if (e.isSticky()) { + for (Block b : e.getBlocks()) { + if (BlockStorage.hasBlockInfo(b) || b.getRelative(e.getDirection()).getType() == Material.AIR && BlockStorage.hasBlockInfo(b.getRelative(e.getDirection()))) { + e.setCancelled(true); + return; + } + } + } + } +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/CoolerListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/CoolerListener.java similarity index 96% rename from src/main/java/me/mrCookieSlime/Slimefun/listeners/CoolerListener.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/CoolerListener.java index 847cacaa6..6591c38cf 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/CoolerListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/CoolerListener.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.listeners; +package io.github.thebusybiscuit.slimefun4.implementation.listeners; import org.bukkit.Material; import org.bukkit.Sound; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/FurnaceListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/EnhancedFurnaceListener.java similarity index 91% rename from src/main/java/me/mrCookieSlime/Slimefun/listeners/FurnaceListener.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/EnhancedFurnaceListener.java index 7336b1054..a886727af 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/FurnaceListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/EnhancedFurnaceListener.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.listeners; +package io.github.thebusybiscuit.slimefun4.implementation.listeners; import java.util.Optional; @@ -17,9 +17,9 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.EnhancedFurnace; import me.mrCookieSlime.Slimefun.api.BlockStorage; -public class FurnaceListener implements Listener { +public class EnhancedFurnaceListener implements Listener { - public FurnaceListener(SlimefunPlugin plugin) { + public EnhancedFurnaceListener(SlimefunPlugin plugin) { plugin.getServer().getPluginManager().registerEvents(this, plugin); } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/GearListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/GearListener.java similarity index 89% rename from src/main/java/me/mrCookieSlime/Slimefun/listeners/GearListener.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/GearListener.java index a2678715c..bf4ae6830 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/GearListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/GearListener.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.listeners; +package io.github.thebusybiscuit.slimefun4.implementation.listeners; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; @@ -27,9 +27,9 @@ public class GearListener implements Listener { @EventHandler public void onToggleSneak(PlayerToggleSneakEvent e) { if (e.isSneaking()) { - final Player p = e.getPlayer(); - final SlimefunItem chestplate = SlimefunItem.getByItem(p.getInventory().getChestplate()); - final SlimefunItem boots = SlimefunItem.getByItem(p.getInventory().getBoots()); + Player p = e.getPlayer(); + SlimefunItem chestplate = SlimefunItem.getByItem(p.getInventory().getChestplate()); + SlimefunItem boots = SlimefunItem.getByItem(p.getInventory().getBoots()); if (chestplate != null) { if (chestplate instanceof Jetpack) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemPickupListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/ItemPickupListener.java similarity index 96% rename from src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemPickupListener.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/ItemPickupListener.java index e4cbc1882..c4a3b1737 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemPickupListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/ItemPickupListener.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.listeners; +package io.github.thebusybiscuit.slimefun4.implementation.listeners; import me.mrCookieSlime.Slimefun.SlimefunPlugin; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/MultiBlockListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/MultiBlockListener.java new file mode 100644 index 000000000..0c8d1c66f --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/MultiBlockListener.java @@ -0,0 +1,97 @@ +package io.github.thebusybiscuit.slimefun4.implementation.listeners; + +import java.util.LinkedList; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Tag; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlot; + +import io.github.thebusybiscuit.slimefun4.api.events.MultiBlockInteractEvent; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Objects.MultiBlock; +import me.mrCookieSlime.Slimefun.Objects.handlers.MultiBlockInteractionHandler; + +public class MultiBlockListener implements Listener { + + public MultiBlockListener(SlimefunPlugin plugin) { + plugin.getServer().getPluginManager().registerEvents(this, plugin); + } + + @EventHandler + public void onRightClick(PlayerInteractEvent e) { + if (e.getAction() != Action.RIGHT_CLICK_BLOCK || e.getHand() != EquipmentSlot.HAND) return; + + Player p = e.getPlayer(); + Block b = e.getClickedBlock(); + LinkedList multiblocks = new LinkedList<>(); + + for (MultiBlock mb : MultiBlock.list()) { + Block center = b.getRelative(mb.getTriggerBlock()); + + if (compareMaterials(center, mb.getBuild(), mb.isSymmetric())) { + multiblocks.add(mb); + } + } + + if (!multiblocks.isEmpty()) { + e.setCancelled(true); + + MultiBlock mb = multiblocks.getLast(); + mb.getSlimefunItem().callItemHandler(MultiBlockInteractionHandler.class, handler -> handler.onInteract(p, mb, b)); + Bukkit.getPluginManager().callEvent(new MultiBlockInteractEvent(p, mb, b)); + } + } + + protected boolean compareMaterials(Block b, Material[] blocks, boolean onlyTwoWay) { + if (!compareMaterialsVertical(b, blocks[1], blocks[4], blocks[7])) { + return false; + } + + BlockFace[] directions = onlyTwoWay ? new BlockFace[] {BlockFace.NORTH, BlockFace.EAST} : new BlockFace[] {BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST}; + + for (BlockFace direction : directions) { + if (compareMaterialsVertical(b.getRelative(direction), blocks[0], blocks[3], blocks[6]) + && compareMaterialsVertical(b.getRelative(direction.getOppositeFace()), blocks[2], blocks[5], blocks[8])) { + return true; + } + } + + return false; + } + + protected boolean compareMaterialsVertical(Block b, Material top, Material center, Material bottom) { + if (center != null && !equals(b.getType(), center)) { + return false; + } + + if (top != null && !equals(b.getRelative(BlockFace.UP).getType(), top)) { + return false; + } + + if (bottom != null && !equals(b.getRelative(BlockFace.DOWN).getType(), bottom)) { + return false; + } + + return true; + } + + private boolean equals(Material a, Material b) { + if (a == b) return true; + + for (Tag tag : MultiBlock.SUPPORTED_TAGS) { + if (tag.isTagged(a) && tag.isTagged(b)) { + return true; + } + } + + return false; + } +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/NetworkListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/NetworkListener.java similarity index 92% rename from src/main/java/me/mrCookieSlime/Slimefun/listeners/NetworkListener.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/NetworkListener.java index 5ea8b9556..3d47ee0d4 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/NetworkListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/NetworkListener.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.listeners; +package io.github.thebusybiscuit.slimefun4.implementation.listeners; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.api.network.Network; @@ -19,6 +19,7 @@ public class NetworkListener implements Listener { public void onBlockBreak(BlockBreakEvent e) { Network.handleAllNetworkLocationUpdate(e.getBlock().getLocation()); } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlaceBreak(BlockPlaceEvent e) { Network.handleAllNetworkLocationUpdate(e.getBlock().getLocation()); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/PlayerQuitListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/PlayerProfileListener.java similarity index 72% rename from src/main/java/me/mrCookieSlime/Slimefun/listeners/PlayerQuitListener.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/PlayerProfileListener.java index 943caa724..1defd6f8d 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/PlayerQuitListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/PlayerProfileListener.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.listeners; +package io.github.thebusybiscuit.slimefun4.implementation.listeners; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -7,9 +7,9 @@ import org.bukkit.event.player.PlayerQuitEvent; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.api.PlayerProfile; -public class PlayerQuitListener implements Listener { +public class PlayerProfileListener implements Listener { - public PlayerQuitListener(SlimefunPlugin plugin) { + public PlayerProfileListener(SlimefunPlugin plugin) { plugin.getServer().getPluginManager().registerEvents(this, plugin); } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/GuideOnJoinListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SlimefunGuideListener.java similarity index 84% rename from src/main/java/me/mrCookieSlime/Slimefun/listeners/GuideOnJoinListener.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SlimefunGuideListener.java index 287cfe1f3..5c8cab97f 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/GuideOnJoinListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SlimefunGuideListener.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.listeners; +package io.github.thebusybiscuit.slimefun4.implementation.listeners; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -9,9 +9,9 @@ import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuideLayout; import me.mrCookieSlime.Slimefun.SlimefunGuide; import me.mrCookieSlime.Slimefun.SlimefunPlugin; -public class GuideOnJoinListener implements Listener { +public class SlimefunGuideListener implements Listener { - public GuideOnJoinListener(SlimefunPlugin plugin) { + public SlimefunGuideListener(SlimefunPlugin plugin) { plugin.getServer().getPluginManager().registerEvents(this, plugin); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SoulboundListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SoulboundListener.java new file mode 100644 index 000000000..e4c44e472 --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SoulboundListener.java @@ -0,0 +1,48 @@ +package io.github.thebusybiscuit.slimefun4.implementation.listeners; + +import java.util.Iterator; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; +import me.mrCookieSlime.Slimefun.api.Soul; + +public class SoulboundListener implements Listener { + + public SoulboundListener(SlimefunPlugin plugin) { + plugin.getServer().getPluginManager().registerEvents(this, plugin); + } + + @EventHandler + public void onDamage(EntityDeathEvent e) { + if (e.getEntity() instanceof Player) { + Player p = (Player) e.getEntity(); + + for (int slot = 0; slot < p.getInventory().getSize(); slot++) { + ItemStack item = p.getInventory().getItem(slot); + + if (SlimefunManager.isItemSoulbound(item)) { + Soul.storeItem(p.getUniqueId(), slot, item); + } + } + + Iterator drops = e.getDrops().iterator(); + while (drops.hasNext()) { + ItemStack item = drops.next(); + if (SlimefunManager.isItemSoulbound(item)) drops.remove(); + } + + } + } + + @EventHandler + public void onRespawn(PlayerRespawnEvent e) { + Soul.retrieveItems(e.getPlayer()); + } +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/TalismanListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java similarity index 99% rename from src/main/java/me/mrCookieSlime/Slimefun/listeners/TalismanListener.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java index 4d861c9e4..67d87f3a8 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/TalismanListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.listeners; +package io.github.thebusybiscuit.slimefun4.implementation.listeners; import java.util.ArrayList; import java.util.Collection; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/TeleporterListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TeleporterListener.java similarity index 96% rename from src/main/java/me/mrCookieSlime/Slimefun/listeners/TeleporterListener.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TeleporterListener.java index a248d9220..469ea979c 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/TeleporterListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TeleporterListener.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.listeners; +package io.github.thebusybiscuit.slimefun4.implementation.listeners; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.GPS.Elevator; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/WorldListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/WorldListener.java similarity index 94% rename from src/main/java/me/mrCookieSlime/Slimefun/listeners/WorldListener.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/WorldListener.java index 4b2cc295c..c7d573bcd 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/WorldListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/WorldListener.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.listeners; +package io.github.thebusybiscuit.slimefun4.implementation.listeners; import java.util.logging.Level; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java index 7b89d202b..fa9a682f4 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java @@ -2,6 +2,7 @@ package me.mrCookieSlime.Slimefun.Objects; import java.util.Arrays; import java.util.List; +import java.util.Objects; import org.bukkit.Material; import org.bukkit.Tag; @@ -9,7 +10,6 @@ import org.bukkit.block.BlockFace; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine; public class MultiBlock { @@ -20,20 +20,25 @@ public class MultiBlock { Tag.WOODEN_SLABS ); + private final SlimefunItem item; private final Material[] blocks; private final BlockFace trigger; private final boolean isSymmetric; - public MultiBlock(Material[] build, BlockFace trigger) { + public MultiBlock(SlimefunItem item, Material[] build, BlockFace trigger) { + this.item = item; + this.blocks = build; this.trigger = trigger; this.isSymmetric = isSymmetric(build); } + public SlimefunItem getSlimefunItem() { + return item; + } + private static boolean isSymmetric(Material[] blocks) { - return blocks[0] == blocks[2] - && blocks[3] == blocks[5] - && blocks[6] == blocks[8]; + return blocks[0] == blocks[2] && blocks[3] == blocks[5] && blocks[6] == blocks[8]; } public Material[] getBuild() { @@ -52,16 +57,11 @@ public class MultiBlock { return SlimefunPlugin.getUtilities().allMultiblocks; } - public boolean isMultiBlock(SlimefunItem machine) { - if (machine instanceof SlimefunMachine) { - return isMultiBlock(((SlimefunMachine) machine).toMultiBlock()); - } - else return false; - } - - public boolean isMultiBlock(MultiBlock mb) { - if (mb == null) return false; + @Override + public boolean equals(Object obj) { + if (!(obj instanceof MultiBlock)) return false; + MultiBlock mb = (MultiBlock) obj; if (trigger == mb.getTriggerBlock()) { for (int i = 0; i < mb.getBuild().length; i++) { if (!compareBlocks(blocks[i], mb.getBuild()[i])) return false; @@ -72,6 +72,11 @@ public class MultiBlock { return false; } + + @Override + public int hashCode() { + return Objects.hash(item.getID(), blocks, trigger, isSymmetric); + } private boolean compareBlocks(Material a, Material b) { if (b != null) { @@ -93,4 +98,9 @@ public class MultiBlock { public boolean isSymmetric() { return this.isSymmetric; } + + @Override + public String toString() { + return "MultiBlock (" + item.getID() + ") {" + Arrays.toString(blocks) + "}"; + } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunMachine.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunMachine.java index c78375598..337246cca 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunMachine.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunMachine.java @@ -13,19 +13,28 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.MultiBlock; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem { protected final List recipes; protected final List shownRecipes; - protected final BlockFace trigger; + protected final MultiBlock multiblock; public SlimefunMachine(Category category, ItemStack item, String id, ItemStack[] recipe, ItemStack[] machineRecipes, BlockFace trigger) { super(category, item, id, RecipeType.MULTIBLOCK, recipe); this.recipes = new ArrayList<>(); this.shownRecipes = new ArrayList<>(); this.shownRecipes.addAll(Arrays.asList(machineRecipes)); - this.trigger = trigger; + this.multiblock = new MultiBlock(this, convertItemStacksToMaterial(recipe), trigger); + } + + public SlimefunMachine(Category category, SlimefunItemStack item, ItemStack[] recipe, ItemStack[] machineRecipes, BlockFace trigger) { + super(category, item, RecipeType.MULTIBLOCK, recipe); + this.recipes = new ArrayList<>(); + this.shownRecipes = new ArrayList<>(); + this.shownRecipes.addAll(Arrays.asList(machineRecipes)); + this.multiblock = new MultiBlock(this, convertItemStacksToMaterial(recipe), trigger); } public SlimefunMachine(Category category, ItemStack item, String id, ItemStack[] recipe, ItemStack[] machineRecipes, BlockFace trigger, boolean ghost) { @@ -33,7 +42,7 @@ public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem { this.recipes = new ArrayList<>(); this.shownRecipes = new ArrayList<>(); this.shownRecipes.addAll(Arrays.asList(machineRecipes)); - this.trigger = trigger; + this.multiblock = new MultiBlock(this, convertItemStacksToMaterial(recipe), trigger); } public SlimefunMachine(Category category, ItemStack item, String id, ItemStack[] recipe, ItemStack[] machineRecipes, BlockFace trigger, String[] keys, Object[] values) { @@ -41,7 +50,7 @@ public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem { this.recipes = new ArrayList<>(); this.shownRecipes = new ArrayList<>(); this.shownRecipes.addAll(Arrays.asList(machineRecipes)); - this.trigger = trigger; + this.multiblock = new MultiBlock(this, convertItemStacksToMaterial(recipe), trigger); } public List getRecipes() { @@ -62,7 +71,7 @@ public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem { @Override public void postRegister() { - this.toMultiBlock().register(); + multiblock.register(); } @Override @@ -86,12 +95,17 @@ public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem { return mats.toArray(new Material[0]); } - - public MultiBlock toMultiBlock() { - return new MultiBlock(convertItemStacksToMaterial(this.getRecipe()), this.trigger); + + @Override + protected boolean areItemHandlersPrivate() { + return true; } public Iterator recipeIterator() { return this.recipes.iterator(); } + + public MultiBlock getMultiBlock() { + return multiblock; + } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/EnhancedCraftingTable.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/EnhancedCraftingTable.java index 75a4eceba..bcea62bad 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/EnhancedCraftingTable.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/EnhancedCraftingTable.java @@ -16,6 +16,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.BackpackListener; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.Categories; @@ -26,7 +27,6 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.PlayerProfile; import me.mrCookieSlime.Slimefun.api.Slimefun; -import me.mrCookieSlime.Slimefun.listeners.BackpackListener; public class EnhancedCraftingTable extends MultiBlockMachine { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/MagicWorkbench.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/MagicWorkbench.java index f9e573b03..b082f2748 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/MagicWorkbench.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/MagicWorkbench.java @@ -3,7 +3,6 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks; import java.util.List; import java.util.UUID; -import me.mrCookieSlime.Slimefun.listeners.BackpackListener; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Effect; @@ -17,6 +16,7 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.BackpackListener; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.Categories; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/MultiBlockMachine.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/MultiBlockMachine.java index e28603b3c..f6fffb4b9 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/MultiBlockMachine.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/MultiBlockMachine.java @@ -41,7 +41,7 @@ public abstract class MultiBlockMachine extends SlimefunMachine { protected MultiBlockInteractionHandler getInteractionHandler() { return (p, mb, b) -> { - if (mb.isMultiBlock(this)) { + if (mb == getMultiBlock()) { if (!isDisabled() && SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), ProtectableAction.ACCESS_INVENTORIES) && Slimefun.hasUnlocked(p, this, true)) { onInteract(p, b); } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 22702f5ec..8e7d4023b 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -1041,8 +1041,8 @@ public final class SlimefunSetup { .register(true, new MultiBlockInteractionHandler() { @Override - public boolean onInteract(final Player p, MultiBlock mb, final Block b) { - if (mb.isMultiBlock(SlimefunItem.getByID("DIGITAL_MINER"))) { + public boolean onInteract(Player p, MultiBlock mb, Block b) { + if (mb.equals(((SlimefunMachine) SlimefunItem.getByID("DIGITAL_MINER")).getMultiBlock())) { p.sendMessage(ChatColor.DARK_RED + "THIS MACHINE WILL SOON BE REMOVED!"); if (CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true) && Slimefun.hasUnlocked(p, SlimefunItems.DIGITAL_MINER, true)) { Block chestBlock = b.getRelative(BlockFace.UP); @@ -1103,7 +1103,7 @@ public final class SlimefunSetup { @Override public boolean onInteract(final Player p, MultiBlock mb, final Block b) { - if (mb.isMultiBlock(SlimefunItem.getByID("ADVANCED_DIGITAL_MINER"))) { + if (mb.equals(((SlimefunMachine) SlimefunItem.getByID("ADVANCED_DIGITAL_MINER")).getMultiBlock())) { p.sendMessage(ChatColor.DARK_RED + "THIS MACHINE WILL SOON BE REMOVED!"); if (CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true) && Slimefun.hasUnlocked(p, SlimefunItems.ADVANCED_DIGITAL_MINER, true)) { Block chestBlock = b.getRelative(BlockFace.UP); @@ -1399,47 +1399,47 @@ public final class SlimefunSetup { }); new EnhancedFurnace(1, 1, 1, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE, - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, new ItemStack(Material.FURNACE), SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, new ItemStack(Material.FURNACE), SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(2, 1, 1, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE_2, - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.ENHANCED_FURNACE, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(2, 2, 1, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE_3, - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_2, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.ENHANCED_FURNACE_2, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(3, 2, 1, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE_4, - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_3, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.ENHANCED_FURNACE_3, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(3, 2, 2, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE_5, - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_4, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.ENHANCED_FURNACE_4, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(3, 3, 2, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE_6, - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_5, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.ENHANCED_FURNACE_5, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(4, 3, 2, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE_7, - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_6, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.ENHANCED_FURNACE_6, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(4, 4, 2, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE_8, - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_7, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.ENHANCED_FURNACE_7, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(5, 4, 2, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE_9, - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_8, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.ENHANCED_FURNACE_8, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(5, 5, 2, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE_10, - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_9, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.ENHANCED_FURNACE_9, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(5, 5, 3, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE_11, - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_10, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.ENHANCED_FURNACE_10, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(10, 10, 3, (SlimefunItemStack) SlimefunItems.REINFORCED_FURNACE, diff --git a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java index 28a4f3039..2cc148263 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java @@ -27,6 +27,22 @@ import io.github.thebusybiscuit.slimefun4.implementation.geo.resources.NetherIce import io.github.thebusybiscuit.slimefun4.implementation.geo.resources.OilResource; import io.github.thebusybiscuit.slimefun4.implementation.geo.resources.SaltResource; import io.github.thebusybiscuit.slimefun4.implementation.geo.resources.UraniumResource; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.AndroidKillingListener; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.AutonomousToolsListener; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.BackpackListener; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.BlockListener; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.CoolerListener; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.EnhancedFurnaceListener; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.GearListener; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.ItemPickupListener; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.MultiBlockListener; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.NetworkListener; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.PlayerProfileListener; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.SlimefunGuideListener; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.SoulboundListener; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.TalismanListener; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.TeleporterListener; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.WorldListener; import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib; import me.mrCookieSlime.Slimefun.GEO.OreGenSystem; import me.mrCookieSlime.Slimefun.GPS.GPSNetwork; @@ -48,25 +64,11 @@ import me.mrCookieSlime.Slimefun.api.SlimefunBackup; import me.mrCookieSlime.Slimefun.api.TickerTask; import me.mrCookieSlime.Slimefun.api.inventory.UniversalBlockMenu; import me.mrCookieSlime.Slimefun.hooks.SlimefunHooks; -import me.mrCookieSlime.Slimefun.listeners.AndroidKillingListener; import me.mrCookieSlime.Slimefun.listeners.ArmorListener; -import me.mrCookieSlime.Slimefun.listeners.AutonomousToolsListener; -import me.mrCookieSlime.Slimefun.listeners.BackpackListener; -import me.mrCookieSlime.Slimefun.listeners.BlockListener; import me.mrCookieSlime.Slimefun.listeners.BowListener; -import me.mrCookieSlime.Slimefun.listeners.CoolerListener; import me.mrCookieSlime.Slimefun.listeners.DamageListener; -import me.mrCookieSlime.Slimefun.listeners.FurnaceListener; -import me.mrCookieSlime.Slimefun.listeners.GearListener; -import me.mrCookieSlime.Slimefun.listeners.GuideOnJoinListener; import me.mrCookieSlime.Slimefun.listeners.ItemListener; -import me.mrCookieSlime.Slimefun.listeners.ItemPickupListener; -import me.mrCookieSlime.Slimefun.listeners.NetworkListener; -import me.mrCookieSlime.Slimefun.listeners.PlayerQuitListener; -import me.mrCookieSlime.Slimefun.listeners.TalismanListener; -import me.mrCookieSlime.Slimefun.listeners.TeleporterListener; import me.mrCookieSlime.Slimefun.listeners.ToolListener; -import me.mrCookieSlime.Slimefun.listeners.WorldListener; import me.mrCookieSlime.Slimefun.utils.ConfigCache; import me.mrCookieSlime.Slimefun.utils.Utilities; @@ -209,12 +211,13 @@ public final class SlimefunPlugin extends JavaPlugin { new ArmorListener(this); new ItemListener(this); new BlockListener(this); + new MultiBlockListener(this); new GearListener(this); new AutonomousToolsListener(this); new DamageListener(this); new BowListener(this); new ToolListener(this); - new FurnaceListener(this); + new EnhancedFurnaceListener(this); new TeleporterListener(this); new AndroidKillingListener(this); new NetworkListener(this); @@ -224,15 +227,16 @@ public final class SlimefunPlugin extends JavaPlugin { if (config.getBoolean("items.talismans")) new TalismanListener(this); if (config.getBoolean("items.backpacks")) new BackpackListener(this); if (config.getBoolean("items.coolers")) new CoolerListener(this); + if (config.getBoolean("items.soulbound")) new SoulboundListener(this); // Handle Slimefun Guide being given on Join - if (config.getBoolean("options.give-guide-on-first-join")) new GuideOnJoinListener(this); + if (config.getBoolean("options.give-guide-on-first-join")) new SlimefunGuideListener(this); // Load/Unload Worlds in Slimefun new WorldListener(this); // Clear the Slimefun Guide History upon Player Leaving - new PlayerQuitListener(this); + new PlayerProfileListener(this); // Initiating various Stuff and all Items with a slightly delay (0ms after the Server finished loading) Slimefun.runSync(() -> { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ArmorListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/ArmorListener.java index dec04eee7..d15d77977 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ArmorListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/ArmorListener.java @@ -59,7 +59,7 @@ public class ArmorListener implements Listener { e.setCancelled(true); p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ZOMBIE_BREAK_WOODEN_DOOR, 1F, 2F); p.setVelocity(new Vector(0.0, 0.7, 0.0)); - for (Entity n: p.getNearbyEntities(4, 4, 4)) { + for (Entity n : p.getNearbyEntities(4, 4, 4)) { if (n instanceof LivingEntity && !n.getUniqueId().equals(p.getUniqueId())) { n.setVelocity(n.getLocation().toVector().subtract(p.getLocation().toVector()) .normalize().multiply(1.4)); @@ -75,7 +75,7 @@ public class ArmorListener implements Listener { } } - for (BlockFace face: BlockFace.values()) { + for (BlockFace face : BlockFace.values()) { Block b = p.getLocation().getBlock().getRelative(BlockFace.DOWN).getRelative(face); p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType()); } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/BlockListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/BlockListener.java deleted file mode 100644 index eff0d4762..000000000 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/BlockListener.java +++ /dev/null @@ -1,132 +0,0 @@ -package me.mrCookieSlime.Slimefun.listeners; - -import java.util.LinkedList; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.FallingBlock; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.block.BlockPistonExtendEvent; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.entity.EntityChangeBlockEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; - -import io.github.thebusybiscuit.slimefun4.api.events.MultiBlockInteractEvent; -import me.mrCookieSlime.Slimefun.SlimefunPlugin; -import me.mrCookieSlime.Slimefun.Objects.MultiBlock; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; -import me.mrCookieSlime.Slimefun.Objects.handlers.MultiBlockInteractionHandler; -import me.mrCookieSlime.Slimefun.api.BlockStorage; - -public class BlockListener implements Listener { - - public BlockListener(SlimefunPlugin plugin) { - plugin.getServer().getPluginManager().registerEvents(this, plugin); - } - - @EventHandler - public void onBlockFall(EntityChangeBlockEvent event) { - if (event.getEntity() instanceof FallingBlock && BlockStorage.hasBlockInfo(event.getBlock())) { - event.setCancelled(true); - FallingBlock fb = (FallingBlock) event.getEntity(); - - if (fb.getDropItem()) { - fb.getWorld().dropItemNaturally(fb.getLocation(), new ItemStack(fb.getBlockData().getMaterial(), 1)); - } - } - } - - @EventHandler - public void onPistonExtend(BlockPistonExtendEvent e) { - for (Block b: e.getBlocks()) { - if (BlockStorage.hasBlockInfo(b) || b.getRelative(e.getDirection()).getType() == Material.AIR && BlockStorage.hasBlockInfo(b.getRelative(e.getDirection()))) { - e.setCancelled(true); - return; - } - } - } - - @EventHandler - public void onPistonRetract(BlockPistonRetractEvent e) { - if (e.isSticky()) { - for (Block b : e.getBlocks()) { - if (BlockStorage.hasBlockInfo(b) || b.getRelative(e.getDirection()).getType() == Material.AIR && BlockStorage.hasBlockInfo(b.getRelative(e.getDirection()))) { - e.setCancelled(true); - return; - } - } - } - } - - @EventHandler - public void onRightClick(PlayerInteractEvent e) { - if (e.getHand() != EquipmentSlot.HAND) return; - - if (e.getAction() == Action.RIGHT_CLICK_BLOCK) { - Player p = e.getPlayer(); - Block b = e.getClickedBlock(); - LinkedList multiblocks = new LinkedList<>(); - - for (MultiBlock mb : MultiBlock.list()) { - Block center = b.getRelative(mb.getTriggerBlock()); - - if (compareMaterials(center, mb.getBuild(), mb.isSymmetric())) { - multiblocks.add(mb); - } - } - - if (!multiblocks.isEmpty()) { - e.setCancelled(true); - MultiBlock multiblock = multiblocks.getLast(); - - for (ItemHandler handler : SlimefunItem.getHandlers("MultiBlockInteractionHandler")) { - if (((MultiBlockInteractionHandler) handler).onInteract(p, multiblock, b)) break; - } - - MultiBlockInteractEvent event = new MultiBlockInteractEvent(p, multiblock, b); - Bukkit.getPluginManager().callEvent(event); - } - } - } - - protected boolean compareMaterials(Block b, Material[] blocks, boolean onlyTwoWay) { - if (!compareMaterialsVertical(b, blocks[1], blocks[4], blocks[7])) { - return false; - } - - BlockFace[] directions = onlyTwoWay ? new BlockFace[] {BlockFace.NORTH, BlockFace.EAST} : new BlockFace[] {BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST}; - - for (BlockFace direction : directions) { - if (compareMaterialsVertical(b.getRelative(direction), blocks[0], blocks[3], blocks[6]) - && compareMaterialsVertical(b.getRelative(direction.getOppositeFace()), blocks[2], blocks[5], blocks[8])) { - return true; - } - } - - return false; - } - - protected boolean compareMaterialsVertical(Block b, Material top, Material center, Material bottom) { - if (center != null && b.getType() != center) { - return false; - } - - if (top != null && b.getRelative(BlockFace.UP).getType() != top) { - return false; - } - - if (bottom != null && b.getRelative(BlockFace.DOWN).getType() != bottom) { - return false; - } - - return true; - } -} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/BowListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/BowListener.java index 7aa47968e..c238c9eff 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/BowListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/BowListener.java @@ -34,7 +34,7 @@ public class BowListener implements Listener { } @EventHandler - public void onArrowHit(final ProjectileHitEvent e) { + public void onArrowHit(ProjectileHitEvent e) { Slimefun.runSync(() -> { if (e.getEntity().isValid()) { SlimefunPlugin.getUtilities().arrows.remove(e.getEntity().getUniqueId()); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/DamageListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/DamageListener.java index 21be3acc2..8ee6974f4 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/DamageListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/DamageListener.java @@ -2,7 +2,6 @@ package me.mrCookieSlime.Slimefun.listeners; import java.text.SimpleDateFormat; import java.util.Date; -import java.util.Iterator; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -11,7 +10,6 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityDeathEvent; -import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.Slimefun.SlimefunPlugin; @@ -21,7 +19,6 @@ import me.mrCookieSlime.Slimefun.Objects.handlers.EntityKillHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.Slimefun; -import me.mrCookieSlime.Slimefun.api.Soul; public class DamageListener implements Listener { @@ -38,21 +35,6 @@ public class DamageListener implements Listener { if (p.getInventory().containsAtLeast(SlimefunItems.GPS_EMERGENCY_TRANSMITTER, 1)) { Slimefun.getGPSNetwork().addWaypoint(p, "&4Deathpoint &7" + format.format(new Date()), p.getLocation().getBlock().getLocation()); } - - for (int slot = 0; slot < p.getInventory().getSize(); slot++) { - ItemStack item = p.getInventory().getItem(slot); - - if (SlimefunManager.isItemSoulbound(item)) { - Soul.storeItem(p.getUniqueId(), slot, item); - } - } - - Iterator drops = e.getDrops().iterator(); - while (drops.hasNext()) { - ItemStack item = drops.next(); - if (SlimefunManager.isItemSoulbound(item)) drops.remove(); - } - } if (e.getEntity().getKiller() instanceof Player) { @@ -86,9 +68,4 @@ public class DamageListener implements Listener { SlimefunPlugin.getUtilities().damage.remove(e.getEntity().getUniqueId()); } } - - @EventHandler - public void onRespawn(PlayerRespawnEvent e) { - Soul.retrieveItems(e.getPlayer()); - } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java index 649ea0d88..7637e20ba 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java @@ -39,6 +39,7 @@ import org.bukkit.potion.PotionEffectType; import io.github.thebusybiscuit.slimefun4.core.guide.GuideSettings; import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuideLayout; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.BackpackListener; import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent; import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull; import me.mrCookieSlime.Slimefun.SlimefunGuide; @@ -283,10 +284,9 @@ public class ItemListener implements Listener { String id = BlockStorage.checkID(e.getClickedBlock()); if (BlockMenuPreset.isInventory(id) && !canPlaceCargoNodes(p, item, e.getClickedBlock().getRelative(e.getParentEvent().getBlockFace())) && (!p.isSneaking() || item == null || item.getType() == Material.AIR)) { e.setCancelled(true); - BlockStorage storage = BlockStorage.getStorage(e.getClickedBlock().getWorld()); - if (storage.hasUniversalInventory(id)) { - UniversalBlockMenu menu = storage.getUniversalInventory(id); + if (BlockStorage.hasUniversalInventory(id)) { + UniversalBlockMenu menu = BlockStorage.getUniversalInventory(id); if (menu.canOpen(e.getClickedBlock(), p)) { menu.open(p); } @@ -294,7 +294,7 @@ public class ItemListener implements Listener { SlimefunPlugin.getLocal().sendMessage(p, "inventory.no-access", true); } } - else if (storage.hasInventory(e.getClickedBlock().getLocation())) { + else if (BlockStorage.getStorage(e.getClickedBlock().getWorld()).hasInventory(e.getClickedBlock().getLocation())) { BlockMenu menu = BlockStorage.getInventory(e.getClickedBlock().getLocation()); if (menu.canOpen(e.getClickedBlock(), p)) { menu.open(p); @@ -322,7 +322,7 @@ public class ItemListener implements Listener { @EventHandler public void onEat(PlayerItemConsumeEvent e) { - final Player p = e.getPlayer(); + Player p = e.getPlayer(); ItemStack item = e.getItem(); SlimefunItem sfItem = SlimefunItem.getByItem(item); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/utils/Utilities.java b/src/main/java/me/mrCookieSlime/Slimefun/utils/Utilities.java index 2abb2a563..ae5bced21 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/utils/Utilities.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/utils/Utilities.java @@ -100,7 +100,8 @@ public final class Utilities { public final List postHandlers = new ArrayList<>(); public final Map> drops = new EnumMap<>(EntityType.class); - + + public final Map arrows = new HashMap<>(); public final Map jumpState = new HashMap<>(); public final Set damage = new HashSet<>(); public final Map remove = new HashMap<>(); @@ -115,7 +116,6 @@ public final class Utilities { public final Map> soulbound = new HashMap<>(); public final List blocks = new ArrayList<>(); public final List cancelPlace = new ArrayList<>(); - public final Map arrows = new HashMap<>(); public final Set elevatorUsers = new HashSet<>(); public final Set teleporterUsers = new HashSet<>(); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index f6d98e1b1..663f9771b 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -29,6 +29,7 @@ items: talismans: true coolers: true backpacks: true + soulbound: true research-ranks: - Chicken - Cow