From 41833188c5839a3ce51db1fb412caf6c527eaa9b Mon Sep 17 00:00:00 2001 From: Jesse Boyd Date: Sat, 8 Jul 2017 23:36:59 +1000 Subject: [PATCH] Fixes #627 --- core/src/main/java/com/boydti/fawe/Fawe.java | 5 +- .../worldedit/command/tool/SinglePickaxe.java | 68 +++++++++++++++++++ 2 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 core/src/main/java/com/sk89q/worldedit/command/tool/SinglePickaxe.java diff --git a/core/src/main/java/com/boydti/fawe/Fawe.java b/core/src/main/java/com/boydti/fawe/Fawe.java index f37ab6ef..9eb4f26a 100644 --- a/core/src/main/java/com/boydti/fawe/Fawe.java +++ b/core/src/main/java/com/boydti/fawe/Fawe.java @@ -55,6 +55,7 @@ import com.sk89q.worldedit.command.tool.BrushTool; import com.sk89q.worldedit.command.tool.FloodFillTool; import com.sk89q.worldedit.command.tool.LongRangeBuildTool; import com.sk89q.worldedit.command.tool.RecursivePickaxe; +import com.sk89q.worldedit.command.tool.SinglePickaxe; import com.sk89q.worldedit.command.tool.brush.GravityBrush; import com.sk89q.worldedit.command.util.EntityRemover; import com.sk89q.worldedit.event.extent.EditSessionEvent; @@ -433,8 +434,7 @@ public class Fawe { Settings.IMP.DATE = new Date(100 + version.year, version.month, version.day).toGMTString(); Settings.IMP.BUILD = "https://ci.athion.net/job/FastAsyncWorldEdit/" + version.build; Settings.IMP.COMMIT = "https://github.com/boy0001/FastAsyncWorldedit/commit/" + Integer.toHexString(version.hash); - } catch (Throwable ignore) { - } + } catch (Throwable ignore) {} Settings.IMP.reload(file); // Setting up message.yml BBC.load(new File(this.IMP.getDirectory(), "message.yml")); @@ -500,6 +500,7 @@ public class Fawe { GravityBrush.inject(); // Fix for instant placement assumption LongRangeBuildTool.inject(); AreaPickaxe.inject(); // Fixes + SinglePickaxe.inject(); // Fixes RecursivePickaxe.inject(); // Fixes BrushTool.inject(); // Add transform + support for double action brushes + visualizations // Selectors diff --git a/core/src/main/java/com/sk89q/worldedit/command/tool/SinglePickaxe.java b/core/src/main/java/com/sk89q/worldedit/command/tool/SinglePickaxe.java new file mode 100644 index 00000000..ceb81324 --- /dev/null +++ b/core/src/main/java/com/sk89q/worldedit/command/tool/SinglePickaxe.java @@ -0,0 +1,68 @@ +/* + * 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.EditSession; +import com.sk89q.worldedit.LocalConfiguration; +import com.sk89q.worldedit.LocalSession; +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; +import com.sk89q.worldedit.world.World; + +/** + * A super pickaxe mode that removes one block. + */ +public class SinglePickaxe implements BlockTool { + + @Override + public boolean canUse(Actor player) { + return player.hasPermission("worldedit.superpickaxe"); + } + + @Override + public boolean actPrimary(Platform server, LocalConfiguration config, Player player, LocalSession session, com.sk89q.worldedit.util.Location clicked) { + World world = (World) clicked.getExtent(); + final int blockType = world.getBlockType(clicked.toVector()); + if (blockType == BlockID.BEDROCK + && !player.canDestroyBedrock()) { + return true; + } + + EditSession editSession = session.createEditSession(player); + editSession.getSurvivalExtent().setToolUse(config.superPickaxeDrop); + + try { + editSession.setBlock(clicked.getBlockX(), clicked.getBlockY(), clicked.getBlockZ(), EditSession.nullBlock); + } finally { + editSession.flushQueue(); + session.remember(editSession); + } + + world.playEffect(clicked.toVector(), 2001, blockType); + + return true; + } + + public static Class inject() { + return SinglePickaxe.class; + } +}