diff --git a/CHANGELOG.md b/CHANGELOG.md index 771f1a809..d380fddfa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,8 @@ ### Fixes * Fixed #1553 +* Fixed #1513 +* Fixed #1557 ## Release Candidate 6 (16 Feb 2020) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/AutonomousToolsListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/DispenserListener.java similarity index 75% rename from src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/AutonomousToolsListener.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/DispenserListener.java index 66702d25b..a4c429fc0 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/AutonomousToolsListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/DispenserListener.java @@ -1,6 +1,5 @@ package io.github.thebusybiscuit.slimefun4.implementation.listeners; -import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; @@ -11,35 +10,36 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.BlockDispenseEvent; import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.AutonomousMachineHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.BlockDispenseHandler; import me.mrCookieSlime.Slimefun.api.BlockStorage; -public class AutonomousToolsListener implements Listener { +public class DispenserListener implements Listener { - public AutonomousToolsListener(SlimefunPlugin plugin) { + public DispenserListener(SlimefunPlugin plugin) { plugin.getServer().getPluginManager().registerEvents(this, plugin); } @EventHandler public void onBlockDispensing(BlockDispenseEvent e) { Block dispenser = e.getBlock(); + if (dispenser.getType() == Material.DISPENSER) { Dispenser d = (Dispenser) dispenser.getState(); 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) { if (machine.isItem(SlimefunItems.BLOCK_PLACER) && dispenser.getRelative(BlockFace.DOWN).getType() == Material.HOPPER){ e.setCancelled(true); - } else { - machine.callItemHandler(AutonomousMachineHandler.class, handler -> handler.onBlockDispense(e, dispenser, d, block, chest, machine)); + } + else { + machine.callItemHandler(BlockDispenseHandler.class, handler -> handler.onBlockDispense(e, d, block, machine)); } - } } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/BlockPlacer.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/BlockPlacer.java index a483afbc4..97f4d4807 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/BlockPlacer.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/BlockPlacer.java @@ -16,12 +16,12 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.AutonomousMachineHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.BlockDispenseHandler; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class BlockPlacer extends SimpleSlimefunItem { +public class BlockPlacer extends SimpleSlimefunItem { private String[] blacklist; @@ -35,67 +35,65 @@ public class BlockPlacer extends SimpleSlimefunItem { } @Override - public AutonomousMachineHandler getItemHandler() { - return (e, dispenser, d, block, chest, machine) -> { - if (machine.getID().equalsIgnoreCase(getID())) { - e.setCancelled(true); + public BlockDispenseHandler getItemHandler() { + return (e, dispenser, facedBlock, machine) -> { + e.setCancelled(true); + + if ((facedBlock.getType() == null || facedBlock.getType() == Material.AIR) && e.getItem().getType().isBlock()) { + for (String blockType : blacklist) { + if (e.getItem().getType().toString().equals(blockType)) { + return; + } + } - if ((block.getType() == null || block.getType() == Material.AIR) && e.getItem().getType().isBlock()) { - for (String blockType : blacklist) { - if (e.getItem().getType().toString().equals(blockType)) { - return false; - } - } - - SlimefunItem sfItem = SlimefunItem.getByItem(e.getItem()); - if (sfItem != null) { - if (!SlimefunPlugin.getRegistry().getBlockHandlers().containsKey(sfItem.getID())) { - block.setType(e.getItem().getType()); - BlockStorage.store(block, sfItem.getID()); - block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, e.getItem().getType()); - - if (d.getInventory().containsAtLeast(e.getItem(), 2)) { - d.getInventory().removeItem(new CustomItem(e.getItem(), 1)); - } - else { - Slimefun.runSync(() -> d.getInventory().removeItem(e.getItem()), 2L); - } - } - } - else { - block.setType(e.getItem().getType()); + SlimefunItem sfItem = SlimefunItem.getByItem(e.getItem()); + + if (sfItem != null) { + if (!SlimefunPlugin.getRegistry().getBlockHandlers().containsKey(sfItem.getID())) { + facedBlock.setType(e.getItem().getType()); + BlockStorage.store(facedBlock, sfItem.getID()); + facedBlock.getWorld().playEffect(facedBlock.getLocation(), Effect.STEP_SOUND, e.getItem().getType()); - if (e.getItem().hasItemMeta() && e.getItem().getItemMeta() instanceof BlockStateMeta) { - BlockState itemBlockState = ((BlockStateMeta) e.getItem().getItemMeta()).getBlockState(); - BlockState blockState = block.getState(); - - if ((blockState instanceof Nameable) && e.getItem().getItemMeta().hasDisplayName()) { - ((Nameable) blockState).setCustomName(e.getItem().getItemMeta().getDisplayName()); - } - - //Update block state after changing name - blockState.update(); - - //Changing the inventory of the block based on the inventory of the block's itemstack (Currently only applies to shulker boxes) - //Inventory has to be changed after blockState.update() as updating it will create a different Inventory for the object - if (block.getState() instanceof BlockInventoryHolder) { - ((BlockInventoryHolder) block.getState()).getInventory().setContents(((BlockInventoryHolder) itemBlockState).getInventory().getContents()); - } - - } - block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, e.getItem().getType()); - - if (d.getInventory().containsAtLeast(e.getItem(), 2)) { - d.getInventory().removeItem(new CustomItem(e.getItem(), 1)); + if (dispenser.getInventory().containsAtLeast(e.getItem(), 2)) { + dispenser.getInventory().removeItem(new CustomItem(e.getItem(), 1)); } else { - Slimefun.runSync(() -> d.getInventory().removeItem(e.getItem()), 2L); + Slimefun.runSync(() -> dispenser.getInventory().removeItem(e.getItem()), 2L); } } } - return true; + else { + facedBlock.setType(e.getItem().getType()); + + if (e.getItem().hasItemMeta() && e.getItem().getItemMeta() instanceof BlockStateMeta) { + BlockState itemBlockState = ((BlockStateMeta) e.getItem().getItemMeta()).getBlockState(); + BlockState blockState = facedBlock.getState(); + + if ((blockState instanceof Nameable) && e.getItem().getItemMeta().hasDisplayName()) { + ((Nameable) blockState).setCustomName(e.getItem().getItemMeta().getDisplayName()); + } + + //Update block state after changing name + blockState.update(); + + //Changing the inventory of the block based on the inventory of the block's itemstack (Currently only applies to shulker boxes) + //Inventory has to be changed after blockState.update() as updating it will create a different Inventory for the object + if (facedBlock.getState() instanceof BlockInventoryHolder) { + ((BlockInventoryHolder) facedBlock.getState()).getInventory().setContents(((BlockInventoryHolder) itemBlockState).getInventory().getContents()); + } + + } + + facedBlock.getWorld().playEffect(facedBlock.getLocation(), Effect.STEP_SOUND, e.getItem().getType()); + + if (dispenser.getInventory().containsAtLeast(e.getItem(), 2)) { + dispenser.getInventory().removeItem(new CustomItem(e.getItem(), 1)); + } + else { + Slimefun.runSync(() -> dispenser.getInventory().removeItem(e.getItem()), 2L); + } + } } - else return false; }; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/AutonomousMachineHandler.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/BlockDispenseHandler.java similarity index 59% rename from src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/AutonomousMachineHandler.java rename to src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/BlockDispenseHandler.java index e4799e633..3ee907a31 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/AutonomousMachineHandler.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/BlockDispenseHandler.java @@ -1,18 +1,18 @@ package me.mrCookieSlime.Slimefun.Objects.handlers; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; - import org.bukkit.block.Block; import org.bukkit.block.Dispenser; import org.bukkit.event.block.BlockDispenseEvent; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; + @FunctionalInterface -public interface AutonomousMachineHandler extends ItemHandler { +public interface BlockDispenseHandler extends ItemHandler { - boolean onBlockDispense(BlockDispenseEvent e, Block dispenser, Dispenser d, Block block, Block chest, SlimefunItem machine); + void onBlockDispense(BlockDispenseEvent e, Dispenser dispenser, Block facedBlock, SlimefunItem machine); @Override default Class getIdentifier() { - return AutonomousMachineHandler.class; + return BlockDispenseHandler.class; } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java index a6c48d748..5b69c784f 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java @@ -35,7 +35,7 @@ import io.github.thebusybiscuit.slimefun4.core.services.MetricsService; import io.github.thebusybiscuit.slimefun4.core.services.UpdaterService; import io.github.thebusybiscuit.slimefun4.implementation.listeners.AncientAltarListener; import io.github.thebusybiscuit.slimefun4.implementation.listeners.AndroidKillingListener; -import io.github.thebusybiscuit.slimefun4.implementation.listeners.AutonomousToolsListener; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.DispenserListener; import io.github.thebusybiscuit.slimefun4.implementation.listeners.BackpackListener; import io.github.thebusybiscuit.slimefun4.implementation.listeners.BlockListener; import io.github.thebusybiscuit.slimefun4.implementation.listeners.BlockPhysicsListener; @@ -203,7 +203,7 @@ public final class SlimefunPlugin extends JavaPlugin implements SlimefunAddon { new BlockPhysicsListener(this); new MultiBlockListener(this); new GearListener(this); - new AutonomousToolsListener(this); + new DispenserListener(this); new DamageListener(this); new BlockListener(this); new EnhancedFurnaceListener(this); diff --git a/src/main/resources/languages/messages_ar.yml b/src/main/resources/languages/messages_ar.yml index 9c3593b5f..1757348d0 100644 --- a/src/main/resources/languages/messages_ar.yml +++ b/src/main/resources/languages/messages_ar.yml @@ -255,7 +255,7 @@ messages: whirlwind: "&a&oأبعدت تعويذتك القذيفة عنك" wizard: "&a&oحسنت تعويذتك حالة حظك لكن غالبا سوءت حالات أخرى" unknown-player: "&4لاعب غير معروف: &c%player%" - unlocked: &bتم فتح &7"%research%" + unlocked: '&bتم فتح &7"%research%"' usage: "&4طريقة الإستعمال: &c%usage%" miner: no-ores: "&eعفوا، لم أجد أي ركيزة بالجوار!"