From 733f5eabc46f33eea2c37dade5269f06e239a190 Mon Sep 17 00:00:00 2001 From: Jesse Boyd Date: Thu, 8 Sep 2016 16:18:45 +1000 Subject: [PATCH] Fix lrbuild --- core/src/main/java/com/boydti/fawe/Fawe.java | 2 + .../command/tool/LongRangeBuildTool.java | 103 ++++++++++++++++++ .../boydti/fawe/nukkit/core/NukkitWorld.java | 10 ++ 3 files changed, 115 insertions(+) create mode 100644 core/src/main/java/com/sk89q/worldedit/command/tool/LongRangeBuildTool.java diff --git a/core/src/main/java/com/boydti/fawe/Fawe.java b/core/src/main/java/com/boydti/fawe/Fawe.java index 74bd9216..ad4ecde1 100644 --- a/core/src/main/java/com/boydti/fawe/Fawe.java +++ b/core/src/main/java/com/boydti/fawe/Fawe.java @@ -34,6 +34,7 @@ import com.sk89q.worldedit.command.SchematicCommands; import com.sk89q.worldedit.command.ScriptingCommands; import com.sk89q.worldedit.command.ToolCommands; import com.sk89q.worldedit.command.composition.SelectionCommand; +import com.sk89q.worldedit.command.tool.LongRangeBuildTool; import com.sk89q.worldedit.command.tool.brush.GravityBrush; import com.sk89q.worldedit.event.extent.EditSessionEvent; import com.sk89q.worldedit.extension.platform.CommandManager; @@ -336,6 +337,7 @@ public class Fawe { ClipboardFormat.inject(); // Brushes GravityBrush.inject(); // Fix for instant placement assumption + LongRangeBuildTool.inject(); // Selectors CuboidRegionSelector.inject(); // Translations // Visitors diff --git a/core/src/main/java/com/sk89q/worldedit/command/tool/LongRangeBuildTool.java b/core/src/main/java/com/sk89q/worldedit/command/tool/LongRangeBuildTool.java new file mode 100644 index 00000000..b45b1431 --- /dev/null +++ b/core/src/main/java/com/sk89q/worldedit/command/tool/LongRangeBuildTool.java @@ -0,0 +1,103 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * Copyright (C) WorldEdit team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldedit.command.tool; + +import com.sk89q.worldedit.*; +import com.sk89q.worldedit.blocks.BaseBlock; +import com.sk89q.worldedit.blocks.BlockID; +import com.sk89q.worldedit.entity.Player; +import com.sk89q.worldedit.extension.platform.Actor; +import com.sk89q.worldedit.extension.platform.Platform; + +/** + * A tool that can place (or remove) blocks at a distance. + */ +public class LongRangeBuildTool extends BrushTool implements DoubleActionTraceTool { + + BaseBlock primary; + BaseBlock secondary; + + public LongRangeBuildTool(BaseBlock primary, BaseBlock secondary) { + super("worldedit.tool.lrbuild"); + this.primary = primary; + this.secondary = secondary; + } + + @Override + public boolean canUse(Actor player) { + return player.hasPermission("worldedit.tool.lrbuild"); + } + + @Override + public boolean actSecondary(Platform server, LocalConfiguration config, Player player, LocalSession session) { + WorldVectorFace pos = getTargetFace(player); + if (pos == null) return false; + EditSession eS = session.createEditSession(player); + try { + if (secondary.getType() == BlockID.AIR) { + eS.setBlock(pos, secondary); + } else { + eS.setBlock(pos.getFaceVector(), secondary); + } + eS.flushQueue(); + return true; + } catch (MaxChangedBlocksException e) { + // one block? eat it + } + return false; + + } + + @Override + public boolean actPrimary(Platform server, LocalConfiguration config, Player player, LocalSession session) { + WorldVectorFace pos = getTargetFace(player); + if (pos == null) return false; + EditSession eS = session.createEditSession(player); + try { + if (primary.getType() == BlockID.AIR) { + eS.setBlock(pos, primary); + } else { + eS.setBlock(pos.getFaceVector(), primary); + } + eS.flushQueue(); + return true; + } catch (MaxChangedBlocksException e) { + // one block? eat it + } + return false; + } + + public WorldVectorFace getTargetFace(Player player) { + WorldVectorFace target = null; + target = player.getBlockTraceFace(getRange(), true); + + if (target == null) { + player.printError("No block in sight!"); + return null; + } + + return target; + } + + public static Class inject() { + return LongRangeBuildTool.class; + } + +} \ No newline at end of file diff --git a/nukkit/src/main/java/com/boydti/fawe/nukkit/core/NukkitWorld.java b/nukkit/src/main/java/com/boydti/fawe/nukkit/core/NukkitWorld.java index da4bca38..d3c3fb2e 100644 --- a/nukkit/src/main/java/com/boydti/fawe/nukkit/core/NukkitWorld.java +++ b/nukkit/src/main/java/com/boydti/fawe/nukkit/core/NukkitWorld.java @@ -250,6 +250,16 @@ public class NukkitWorld extends LocalWorld { return 127; } + @Override + public Vector getMinimumPoint() { + return new Vector(-30000000, 0, -30000000); + } + + @Override + public Vector getMaximumPoint() { + return new Vector(30000000, 127, 30000000); + } + @Override public void fixAfterFastMode(Iterable chunks) {