From 1760ba3abf6d997e5889176e953e23bd51fd7401 Mon Sep 17 00:00:00 2001 From: mcmonkey4eva Date: Sun, 1 Jan 2017 08:05:19 -0800 Subject: [PATCH] (experimental) schematic comamnd auto nophysics --- .../commands/world/SchematicCommand.java | 18 +++++++++++++++++- .../utilities/blocks/CuboidBlockSet.java | 6 ++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/world/SchematicCommand.java b/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/world/SchematicCommand.java index 3409917726..d3fb18a88f 100644 --- a/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/world/SchematicCommand.java +++ b/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/world/SchematicCommand.java @@ -4,6 +4,7 @@ import net.aufdemrand.denizen.objects.dCuboid; import net.aufdemrand.denizen.objects.dLocation; import net.aufdemrand.denizen.objects.dMaterial; +import net.aufdemrand.denizen.utilities.DenizenAPI; import net.aufdemrand.denizen.utilities.blocks.CuboidBlockSet; import net.aufdemrand.denizen.utilities.debugging.dB; import net.aufdemrand.denizencore.exceptions.CommandExecutionException; @@ -17,6 +18,10 @@ import net.aufdemrand.denizencore.tags.Attribute; import net.aufdemrand.denizencore.tags.ReplaceableTagEvent; import net.aufdemrand.denizencore.tags.TagManager; +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockPhysicsEvent; import java.io.File; import java.io.FileInputStream; @@ -26,12 +31,23 @@ import java.util.HashMap; import java.util.Map; -public class SchematicCommand extends AbstractCommand implements Holdable { +public class SchematicCommand extends AbstractCommand implements Holdable, Listener { @Override public void onEnable() { TagManager.registerTagEvents(this); schematics = new HashMap(); + noPhys = false; + Bukkit.getPluginManager().registerEvents(this, DenizenAPI.getCurrentInstance()); + } + + public static boolean noPhys = false; + + @EventHandler + public void onBlockPhysics(BlockPhysicsEvent event) { + if (noPhys) { + event.setCancelled(true); + } } diff --git a/plugin/src/main/java/net/aufdemrand/denizen/utilities/blocks/CuboidBlockSet.java b/plugin/src/main/java/net/aufdemrand/denizen/utilities/blocks/CuboidBlockSet.java index fb0cb40203..092bc68d1e 100644 --- a/plugin/src/main/java/net/aufdemrand/denizen/utilities/blocks/CuboidBlockSet.java +++ b/plugin/src/main/java/net/aufdemrand/denizen/utilities/blocks/CuboidBlockSet.java @@ -4,6 +4,7 @@ import net.aufdemrand.denizen.nms.interfaces.BlockData; import net.aufdemrand.denizen.nms.util.jnbt.*; import net.aufdemrand.denizen.objects.dCuboid; +import net.aufdemrand.denizen.scripts.commands.world.SchematicCommand; import net.aufdemrand.denizen.utilities.DenizenAPI; import net.aufdemrand.denizen.utilities.debugging.dB; import net.aufdemrand.denizencore.utilities.CoreUtilities; @@ -81,6 +82,7 @@ public void setBlocksDelayed(final Location loc, final Runnable runme, final boo new BukkitRunnable() { @Override public void run() { + SchematicCommand.noPhys = true; long start = System.currentTimeMillis(); while (index.theInt < goal) { long z = index.theInt % ((long) (z_height)); @@ -91,9 +93,11 @@ public void run() { } index.theInt++; if (System.currentTimeMillis() - start > 50) { + SchematicCommand.noPhys = false; return; } } + SchematicCommand.noPhys = false; if (runme != null) { runme.run(); } @@ -105,6 +109,7 @@ public void run() { @Override public void setBlocks(Location loc, boolean noAir) { + SchematicCommand.noPhys = true; int index = 0; for (int x = 0; x < x_width; x++) { for (int y = 0; y < y_length; y++) { @@ -116,6 +121,7 @@ public void setBlocks(Location loc, boolean noAir) { } } } + SchematicCommand.noPhys = false; } public void rotateOne() {