diff --git a/nmshandler/src/main/java/net/aufdemrand/denizen/nms/NMSHandler.java b/nmshandler/src/main/java/net/aufdemrand/denizen/nms/NMSHandler.java index 5dab2836ee..d45ca63016 100644 --- a/nmshandler/src/main/java/net/aufdemrand/denizen/nms/NMSHandler.java +++ b/nmshandler/src/main/java/net/aufdemrand/denizen/nms/NMSHandler.java @@ -177,12 +177,4 @@ public void forceAttachMove(Entity a, Entity b, Vector offset, boolean matchRota attachmentRotations.add(a.getUniqueId()); } } - - public Boolean getSwitchState(Block b) { - return null; - } - - public boolean setSwitchState(Location interactLocation, boolean state) { - return false; - } } diff --git a/nmshandler/src/main/java/net/aufdemrand/denizen/nms/abstracts/ModernBlockData.java b/nmshandler/src/main/java/net/aufdemrand/denizen/nms/abstracts/ModernBlockData.java index d58751fd35..d82dff8f92 100644 --- a/nmshandler/src/main/java/net/aufdemrand/denizen/nms/abstracts/ModernBlockData.java +++ b/nmshandler/src/main/java/net/aufdemrand/denizen/nms/abstracts/ModernBlockData.java @@ -5,6 +5,9 @@ import org.bukkit.block.Block; import org.bukkit.block.BlockState; import org.bukkit.block.data.BlockData; +import org.bukkit.block.data.Openable; +import org.bukkit.block.data.Powerable; +import org.bukkit.block.data.type.Dispenser; /** * Helper for 1.13+ block data. @@ -40,4 +43,37 @@ public BlockState getBlockState() { state.setBlockData(data); return state; } + + public Boolean getSwitchState() { + if (data instanceof Openable) { + return ((Openable) data).isOpen(); + } + else if (data instanceof Powerable) { + return ((Powerable) data).isPowered(); + } + else if (data instanceof Dispenser) { + return ((Dispenser) data).isTriggered(); + } + return null; + } + + public boolean setSwitchState(Block block, boolean state) { + if (data instanceof Openable) { + ((Openable) data).setOpen(state); + } + else if (data instanceof Powerable) { + ((Powerable) data).setPowered(true); + } + else if (data instanceof Dispenser) { + ((Dispenser) data).setTriggered(true); + } + else { + return false; + } + NMSHandler.getInstance().getChunkHelper().changeChunkServerThread(block.getWorld()); + block.setBlockData(data, true); + block.getState().update(true, true); + NMSHandler.getInstance().getChunkHelper().restoreServerThread(block.getWorld()); + return true; + } } diff --git a/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/world/SwitchCommand.java b/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/world/SwitchCommand.java index 945cf7763e..eae531ff56 100644 --- a/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/world/SwitchCommand.java +++ b/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/world/SwitchCommand.java @@ -3,6 +3,7 @@ import net.aufdemrand.denizen.BukkitScriptEntryData; import net.aufdemrand.denizen.nms.NMSHandler; import net.aufdemrand.denizen.nms.NMSVersion; +import net.aufdemrand.denizen.nms.abstracts.ModernBlockData; import net.aufdemrand.denizen.nms.interfaces.BlockData; import net.aufdemrand.denizen.objects.dLocation; import net.aufdemrand.denizen.utilities.DenizenAPI; @@ -103,9 +104,12 @@ public void run() { } public static boolean switchState(Block b) { - Boolean switchState = NMSHandler.getInstance().getSwitchState(b); - if (switchState != null) { - return switchState; + if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_13_R2)) { + ModernBlockData mbd = new ModernBlockData(b); + Boolean switchState = mbd.getSwitchState(); + if (switchState != null) { + return switchState; + } } //return (b.getData() & 0x8) > 0; Material type = b.getType(); @@ -147,7 +151,8 @@ public void switchBlock(ScriptEntry scriptEntry, Location interactLocation, Swit switchState.equals(SwitchState.TOGGLE)) { if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_13_R2)) { - NMSHandler.getInstance().setSwitchState(interactLocation, !currentState); + ModernBlockData mbd = new ModernBlockData(interactLocation.getBlock()); + mbd.setSwitchState(interactLocation.getBlock(), !currentState); } else { try { diff --git a/v1_13_R2/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_13_R2.java b/v1_13_R2/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_13_R2.java index fb2bc72a6b..6b49363031 100644 --- a/v1_13_R2/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_13_R2.java +++ b/v1_13_R2/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_13_R2.java @@ -246,34 +246,4 @@ public ProfileEditor getProfileEditor() { public BiomeNMS getBiomeNMS(Biome biome) { return new BiomeNMS_v1_13_R2(biome); } - - @Override - public Boolean getSwitchState(Block b) { - if (b.getBlockData() instanceof Openable) { - return ((Openable) b.getBlockData()).isOpen(); - } - else if (b.getBlockData() instanceof Powerable) { - return ((Powerable) b.getBlockData()).isPowered(); - } - return null; - } - - @Override - public boolean setSwitchState(Location interactLocation, boolean state) { - if (interactLocation.getBlock().getBlockData() instanceof Openable) { - Openable newState = ((Openable) interactLocation.getBlock().getBlockData()); - newState.setOpen(state); - interactLocation.getBlock().setBlockData(newState, true); - interactLocation.getBlock().getState().update(true, true); - return true; - } - else if (interactLocation.getBlock().getBlockData() instanceof Powerable) { - Powerable newState = ((Powerable) interactLocation.getBlock().getBlockData()); - newState.setPowered(state); - interactLocation.getBlock().setBlockData(newState, true); - interactLocation.getBlock().getState().update(true, true); - return true; - } - return false; - } } diff --git a/v1_14_R1/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_14_R1.java b/v1_14_R1/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_14_R1.java index 46c59061c0..b5831d6c15 100644 --- a/v1_14_R1/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_14_R1.java +++ b/v1_14_R1/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_14_R1.java @@ -27,6 +27,7 @@ import org.bukkit.block.Block; import org.bukkit.block.data.Openable; import org.bukkit.block.data.Powerable; +import org.bukkit.block.data.type.Dispenser; import org.bukkit.craftbukkit.v1_14_R1.CraftServer; import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftInventory; @@ -283,41 +284,4 @@ public ProfileEditor getProfileEditor() { public BiomeNMS getBiomeNMS(Biome biome) { return new BiomeNMS_v1_14_R1(biome); } - - @Override - public Boolean getSwitchState(Block b) { - ModernBlockData mbd = new ModernBlockData(b); - if (mbd.data instanceof Openable) { - return ((Openable) mbd.data).isOpen(); - } - else if (mbd.data instanceof Powerable) { - return ((Powerable) mbd.data).isPowered(); - } - return null; - } - - @Override - public boolean setSwitchState(Location interactLocation, boolean state) { - Block block = interactLocation.getBlock(); - ModernBlockData mbd = new ModernBlockData(block); - if (mbd.data instanceof Openable) { - Openable newState = ((Openable) mbd.data); - newState.setOpen(state); - NMSHandler.getInstance().getChunkHelper().changeChunkServerThread(block.getWorld()); - interactLocation.getBlock().setBlockData(newState, true); - interactLocation.getBlock().getState().update(true, true); - NMSHandler.getInstance().getChunkHelper().restoreServerThread(block.getWorld()); - return true; - } - else if (mbd.data instanceof Powerable) { - Powerable newState = ((Powerable) mbd.data); - newState.setPowered(state); - NMSHandler.getInstance().getChunkHelper().changeChunkServerThread(block.getWorld()); - interactLocation.getBlock().setBlockData(newState, true); - interactLocation.getBlock().getState().update(true, true); - NMSHandler.getInstance().getChunkHelper().restoreServerThread(block.getWorld()); - return true; - } - return false; - } }