From 68ea3d6e99544795e44ad3a57c05ee87185533e0 Mon Sep 17 00:00:00 2001 From: Jesse Boyd Date: Wed, 17 Jul 2019 20:50:54 +1000 Subject: [PATCH] revert some changes --- .../util/CommandsManagerRegistration.java | 2 +- .../boydti/fawe/command/AnvilCommands.java | 2 +- .../com/boydti/fawe/command/CFICommand.java | 2 +- .../com/boydti/fawe/command/CFICommands.java | 5 +- .../general/plot/FaweSchematicHandler.java | 4 +- .../fawe/util/DocumentationPrinter.java | 2 +- .../java/com/sk89q/jnbt/NBTInputStream.java | 85 ++++ .../java/com/sk89q/jnbt/NBTOutputStream.java | 24 +- .../java/com/sk89q/worldedit/EditSession.java | 15 +- .../command/BrushOptionsCommands.java | 23 +- .../worldedit/command/ClipboardCommands.java | 30 +- .../worldedit/command/GeneralCommands.java | 176 +++++++-- .../worldedit/command/GenerationCommands.java | 58 +-- .../worldedit/command/HistoryCommands.java | 6 +- .../worldedit/command/MethodCommands.java | 2 +- .../worldedit/command/OptionsCommands.java | 372 ------------------ .../command/SuperPickaxeCommands.java | 2 +- .../command/composition/SelectionCommand.java | 2 +- .../composition/ShapedBrushCommand.java | 2 +- .../internal/util/DocumentationPrinter.java | 2 +- .../util/command/SimpleDispatcher.java | 2 +- .../FunctionParametricCallable.java | 2 +- .../command/parametric/InvokeListener.java | 2 +- .../command/parametric/ParametricBuilder.java | 2 +- .../parametric/ParametricCallable.java | 4 +- 25 files changed, 324 insertions(+), 504 deletions(-) delete mode 100644 worldedit-core/src/main/java/com/sk89q/worldedit/command/OptionsCommands.java diff --git a/worldedit-bukkit/src/main/java/com/sk89q/bukkit/util/CommandsManagerRegistration.java b/worldedit-bukkit/src/main/java/com/sk89q/bukkit/util/CommandsManagerRegistration.java index cdea2fda7..65c466ff3 100644 --- a/worldedit-bukkit/src/main/java/com/sk89q/bukkit/util/CommandsManagerRegistration.java +++ b/worldedit-bukkit/src/main/java/com/sk89q/bukkit/util/CommandsManagerRegistration.java @@ -20,7 +20,7 @@ package com.sk89q.bukkit.util; import org.enginehub.piston.annotation.Command; -import com.sk89q.minecraft.util.commands.CommandPermissions; +import com.sk89q.worldedit.command.util.CommandPermissions; import com.sk89q.minecraft.util.commands.CommandsManager; import org.bukkit.command.CommandExecutor; import org.bukkit.plugin.Plugin; diff --git a/worldedit-core/src/main/java/com/boydti/fawe/command/AnvilCommands.java b/worldedit-core/src/main/java/com/boydti/fawe/command/AnvilCommands.java index b80114a2b..482ff0e44 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/command/AnvilCommands.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/command/AnvilCommands.java @@ -30,7 +30,7 @@ import com.boydti.fawe.object.clipboard.remap.ClipboardRemapper; import com.boydti.fawe.util.MainUtil; import com.boydti.fawe.util.SetQueue; import org.enginehub.piston.annotation.Command; -import com.sk89q.minecraft.util.commands.CommandPermissions; +import com.sk89q.worldedit.command.util.CommandPermissions; import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.WorldEdit; diff --git a/worldedit-core/src/main/java/com/boydti/fawe/command/CFICommand.java b/worldedit-core/src/main/java/com/boydti/fawe/command/CFICommand.java index 7db691e92..7832ff34b 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/command/CFICommand.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/command/CFICommand.java @@ -7,7 +7,7 @@ import com.boydti.fawe.object.changeset.CFIChangeSet; import org.enginehub.piston.annotation.Command; import com.sk89q.minecraft.util.commands.CommandContext; import com.sk89q.minecraft.util.commands.CommandException; -import com.sk89q.minecraft.util.commands.CommandPermissions; +import com.sk89q.worldedit.command.util.CommandPermissions; import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.command.MethodCommands; diff --git a/worldedit-core/src/main/java/com/boydti/fawe/command/CFICommands.java b/worldedit-core/src/main/java/com/boydti/fawe/command/CFICommands.java index fade73d57..fc661440d 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/command/CFICommands.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/command/CFICommands.java @@ -25,7 +25,7 @@ import java.util.stream.IntStream; import org.enginehub.piston.annotation.Command; import com.sk89q.minecraft.util.commands.CommandContext; import com.sk89q.minecraft.util.commands.CommandException; -import com.sk89q.minecraft.util.commands.CommandPermissions; +import com.sk89q.worldedit.command.util.CommandPermissions; import com.sk89q.worldedit.EmptyClipboardException; import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.WorldEdit; @@ -727,7 +727,6 @@ public class CFICommands extends MethodCommands { @Command( name = "coloring", aliases = {"palette"}, - usage = "", desc = "Color the world using an image" ) @CommandPermissions("worldedit.anvil.cfi") @@ -902,7 +901,6 @@ public class CFICommands extends MethodCommands { @Command( name = "populate", - usage = "", desc = "" ) @CommandPermissions("worldedit.anvil.cfi") @@ -920,7 +918,6 @@ public class CFICommands extends MethodCommands { @Command( name = "component", aliases = {"components"}, - usage = "", desc = "Components menu" ) @CommandPermissions("worldedit.anvil.cfi") diff --git a/worldedit-core/src/main/java/com/boydti/fawe/regions/general/plot/FaweSchematicHandler.java b/worldedit-core/src/main/java/com/boydti/fawe/regions/general/plot/FaweSchematicHandler.java index 36f4b7bf1..34d02df17 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/regions/general/plot/FaweSchematicHandler.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/regions/general/plot/FaweSchematicHandler.java @@ -26,6 +26,8 @@ import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.extent.clipboard.io.SpongeSchematicWriter; import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.regions.CuboidRegion; +import net.jpountz.lz4.LZ4BlockInputStream; + import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.File; @@ -90,7 +92,7 @@ public class FaweSchematicHandler extends SchematicHandler { } } else { try (OutputStream stream = new FileOutputStream(tmp); BufferedOutputStream output = new BufferedOutputStream(new PGZIPOutputStream(stream))) { - DataInputStream is = cTag.adapt(cTag.getSource()); + LZ4BlockInputStream is = cTag.adapt(cTag.getSource()); IOUtil.copy(is, stream); } } diff --git a/worldedit-core/src/main/java/com/boydti/fawe/util/DocumentationPrinter.java b/worldedit-core/src/main/java/com/boydti/fawe/util/DocumentationPrinter.java index 87078340c..54dd39cae 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/util/DocumentationPrinter.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/util/DocumentationPrinter.java @@ -22,7 +22,7 @@ package com.boydti.fawe.util; import com.boydti.fawe.command.AnvilCommands; import com.boydti.fawe.command.CFICommands; import org.enginehub.piston.annotation.Command; -import com.sk89q.minecraft.util.commands.CommandPermissions; +import com.sk89q.worldedit.command.util.CommandPermissions; import com.sk89q.minecraft.util.commands.NestedCommand; import com.sk89q.worldedit.command.BiomeCommands; import com.sk89q.worldedit.command.BrushCommands; diff --git a/worldedit-core/src/main/java/com/sk89q/jnbt/NBTInputStream.java b/worldedit-core/src/main/java/com/sk89q/jnbt/NBTInputStream.java index d1cd534ef..6773d34e4 100644 --- a/worldedit-core/src/main/java/com/sk89q/jnbt/NBTInputStream.java +++ b/worldedit-core/src/main/java/com/sk89q/jnbt/NBTInputStream.java @@ -479,6 +479,91 @@ public final class NBTInputStream implements Closeable { } } + /* + Don't delete please + */ + public Object readDataPayload(int type, int depth) throws IOException { + switch (type) { + case NBTConstants.TYPE_END: + if (depth == 0) { + throw new IOException( + "TAG_End found without a TAG_Compound/TAG_List tag preceding it."); + } else { + return null; + } + case NBTConstants.TYPE_BYTE: + return is.readByte(); + case NBTConstants.TYPE_SHORT: + return is.readShort(); + case NBTConstants.TYPE_INT: + return is.readInt(); + case NBTConstants.TYPE_LONG: + return is.readLong(); + case NBTConstants.TYPE_FLOAT: + return is.readFloat(); + case NBTConstants.TYPE_DOUBLE: + return is.readDouble(); + case NBTConstants.TYPE_BYTE_ARRAY: + int length = is.readInt(); + byte[] bytes = new byte[length]; + is.readFully(bytes); + return bytes; + case NBTConstants.TYPE_STRING: + length = is.readShort(); + bytes = new byte[length]; + is.readFully(bytes); + return new String(bytes, NBTConstants.CHARSET); + case NBTConstants.TYPE_LIST: + int childType = is.readByte(); + if (childType == NBTConstants.TYPE_LIST) { + childType = NBTConstants.TYPE_COMPOUND; + } + length = is.readInt(); + ArrayList list = new ArrayList<>(); + for (int i = 0; i < length; ++i) { + Object obj = readDataPayload(childType, depth + 1); + if (obj == null) { + throw new IOException("TAG_End not permitted in a list."); + } + list.add(obj); + } + + return list; + case NBTConstants.TYPE_COMPOUND: + Map map = new HashMap<>(); + while (true) { + int newType = is.readByte(); + String name = readNamedTagName(newType); + Object data = readDataPayload(newType, depth + 1); + if (data == null) { + break; + } else { + map.put(name, data); + } + } + + return map; + case NBTConstants.TYPE_INT_ARRAY: { + length = is.readInt(); + int[] data = new int[length]; + for (int i = 0; i < length; i++) { + data[i] = is.readInt(); + } + return data; + } + case NBTConstants.TYPE_LONG_ARRAY: { + length = is.readInt(); + long[] data = new long[length]; + for (int i = 0; i < length; i++) { + data[i] = is.readLong(); + } + return data; + } + default: + throw new IOException("Invalid tag type: " + type + "."); + } + } + @Override public void close() throws IOException { is.close(); diff --git a/worldedit-core/src/main/java/com/sk89q/jnbt/NBTOutputStream.java b/worldedit-core/src/main/java/com/sk89q/jnbt/NBTOutputStream.java index 96c3b6de5..8feef2ddb 100644 --- a/worldedit-core/src/main/java/com/sk89q/jnbt/NBTOutputStream.java +++ b/worldedit-core/src/main/java/com/sk89q/jnbt/NBTOutputStream.java @@ -19,6 +19,8 @@ package com.sk89q.jnbt; +import com.boydti.fawe.object.io.LittleEndianOutputStream; + import static com.google.common.base.Preconditions.checkNotNull; import java.io.Closeable; @@ -43,7 +45,7 @@ public final class NBTOutputStream extends OutputStream implements Closeable, Da /** * The output stream. */ - private final DataOutputStream os; + private final DataOutput os; /** * Creates a new {@code NBTOutputStream}, which will write data to the @@ -55,7 +57,17 @@ public final class NBTOutputStream extends OutputStream implements Closeable, Da * if an I/O error occurs. */ public NBTOutputStream(OutputStream os) throws IOException { - this.os = new DataOutputStream(os); + this(os instanceof DataOutput ? (DataOutput) os : new DataOutputStream(os)); + } + + // Don't delete + public NBTOutputStream(DataOutput os) throws IOException { + this.os = os; + } + + // Don't delete + public NBTOutputStream(OutputStream os, boolean littleEndian) throws IOException { + this(littleEndian ? new LittleEndianOutputStream(os) : os); } public DataOutput getOutputStream() { @@ -405,7 +417,9 @@ public final class NBTOutputStream extends OutputStream implements Closeable, Da @Override public void close() throws IOException { - os.close(); + if (os instanceof Closeable) { + ((Closeable) os).close(); + } } @Override @@ -485,6 +499,8 @@ public final class NBTOutputStream extends OutputStream implements Closeable, Da */ @Override public void flush() throws IOException { - ((Flushable) os).flush(); + if (os instanceof Flushable) { + ((Flushable) os).flush(); + } } } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/EditSession.java b/worldedit-core/src/main/java/com/sk89q/worldedit/EditSession.java index c4e26b5fe..1c90a82ff 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/EditSession.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/EditSession.java @@ -32,6 +32,7 @@ import com.boydti.fawe.config.Settings; import com.boydti.fawe.example.MappedFaweQueue; import com.boydti.fawe.jnbt.anvil.MCAQueue; import com.boydti.fawe.jnbt.anvil.MCAWorld; +import com.boydti.fawe.logging.LoggingChangeSet; import com.boydti.fawe.logging.rollback.RollbackOptimizedHistory; import com.boydti.fawe.object.FaweLimit; import com.boydti.fawe.object.FawePlayer; @@ -253,13 +254,15 @@ public class EditSession extends AbstractDelegateExtent implements HasFaweQueue, this(null, world, queue, player, limit, changeSet, allowedRegions, autoQueue, fastmode, checkMemory, combineStages, blockBag, bus, event); } - public EditSession(@Nullable String worldName, @Nullable World world, @Nullable FaweQueue queue, @Nullable FawePlayer player, @Nullable FaweLimit limit, @Nullable FaweChangeSet changeSet, @Nullable Region[] allowedRegions, @Nullable Boolean autoQueue, @Nullable Boolean fastmode, @Nullable Boolean checkMemory, @Nullable Boolean combineStages, @Nullable BlockBag blockBag, @NotNull EventBus bus, @Nullable EditSessionEvent event) { + public EditSession(@Nullable String worldName, @Nullable World world, @Nullable FaweQueue queue, @Nullable FawePlayer player, @Nullable FaweLimit limit, @Nullable FaweChangeSet changeSet, @Nullable Region[] allowedRegions, @Nullable Boolean autoQueue, @Nullable Boolean fastmode, @Nullable Boolean checkMemory, @Nullable Boolean combineStages, @Nullable BlockBag blockBag, @Nullable EventBus bus, @Nullable EditSessionEvent event) { super(world); this.worldName = worldName == null ? world == null ? queue == null ? "" : queue.getWorldName() : world.getName() : worldName; if (world == null && this.worldName != null) world = FaweAPI.getWorld(this.worldName); this.world = world; - + if (bus == null) { // don't change + bus = WorldEdit.getInstance().getEventBus(); + } if (event == null) { event = new EditSessionEvent(world, player == null ? null : (player.getPlayer()), -1, null); } @@ -361,7 +364,15 @@ public class EditSession extends AbstractDelegateExtent implements HasFaweQueue, if (this.limit.SPEED_REDUCTION > 0) { this.bypassHistory = new SlowExtent(this.bypassHistory, this.limit.SPEED_REDUCTION); } + // don't delete + if (changeSet instanceof NullChangeSet && Fawe.imp().getBlocksHubApi() != null && player != null) { + changeSet = LoggingChangeSet.wrap(player, changeSet); + } if (!(changeSet instanceof NullChangeSet)) { + // don't delete + if (!(changeSet instanceof LoggingChangeSet) && player != null && Fawe.imp().getBlocksHubApi() != null) { + changeSet = LoggingChangeSet.wrap(player, changeSet); + } if (this.blockBag != null) { changeSet = new BlockBagChangeSet(changeSet, blockBag, limit.INVENTORY_MODE == 1); } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/BrushOptionsCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/BrushOptionsCommands.java index dbd5e6c08..8361b4c39 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/BrushOptionsCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/BrushOptionsCommands.java @@ -14,7 +14,7 @@ import com.boydti.fawe.util.MathMan; import org.enginehub.piston.annotation.Command; import com.sk89q.minecraft.util.commands.CommandContext; -import com.sk89q.minecraft.util.commands.CommandPermissions; +import com.sk89q.worldedit.command.util.CommandPermissions; import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.WorldEdit; @@ -131,7 +131,7 @@ public class BrushOptionsCommands extends MethodCommands { @Command( name = "/listbrush", desc = "List saved brushes", - max = -1, + descFooter = "List all brushes in the brush directory\n" + " -p prints the requested page\n" ) @@ -151,7 +151,6 @@ public class BrushOptionsCommands extends MethodCommands { @Command( name = "none", aliases = {"/none"}, - usage = "", desc = "Unbind a bound tool from your current item" ) public void none(Player player, LocalSession session, CommandContext args) throws WorldEditException { @@ -267,8 +266,7 @@ public class BrushOptionsCommands extends MethodCommands { @Command( name = "targetmask", aliases = {"tarmask", "tm"}, - desc = "Set the targeting mask", - max = -1 + desc = "Set the targeting mask" ) @CommandPermissions("worldedit.brush.targetmask") public void targetMask(Player player, EditSession editSession, LocalSession session, CommandContext context) throws WorldEditException { @@ -290,8 +288,7 @@ public class BrushOptionsCommands extends MethodCommands { @Command( name = "targetoffset", aliases = {"to"}, - desc = "Set the targeting mask", - max = -1 + desc = "Set the targeting mask" ) @CommandPermissions("worldedit.brush.targetoffset") public void targetOffset(Player player, EditSession editSession, LocalSession session, int offset) throws WorldEditException { @@ -306,8 +303,7 @@ public class BrushOptionsCommands extends MethodCommands { @Command( name = "scroll", - desc = "Toggle between different target modes", - max = -1 + desc = "Toggle between different target modes" ) @CommandPermissions("worldedit.brush.scroll") public void scroll(Player player, EditSession editSession, LocalSession session, @Optional @Switch(name='h', desc = "TODO") boolean offHand, CommandContext args) throws WorldEditException { @@ -332,8 +328,7 @@ public class BrushOptionsCommands extends MethodCommands { @Command( name = "mask", aliases = {"/mask"}, - desc = "Set the brush destination mask", - max = -1 + desc = "Set the brush destination mask" ) @CommandPermissions({"worldedit.brush.options.mask", "worldedit.mask.brush"}) public void mask(Player player, LocalSession session, EditSession editSession, @Optional @Switch(name='h', desc = "TODO") boolean offHand, CommandContext context) throws WorldEditException { @@ -364,8 +359,7 @@ public class BrushOptionsCommands extends MethodCommands { name = "smask", aliases = {"/smask", "/sourcemask", "sourcemask"}, desc = "Set the brush source mask", - descFooter = "Set the brush source mask", - max = -1 + descFooter = "Set the brush source mask" ) @CommandPermissions({"worldedit.brush.options.mask", "worldedit.mask.brush"}) public void smask(Player player, LocalSession session, EditSession editSession, @Optional @Switch(name='h', desc = "TODO") boolean offHand, CommandContext context) throws WorldEditException { @@ -394,8 +388,7 @@ public class BrushOptionsCommands extends MethodCommands { @Command( name = "transform", - desc = "Set the brush transform", - max = -1 + desc = "Set the brush transform" ) @CommandPermissions({"worldedit.brush.options.transform", "worldedit.transform.brush"}) public void transform(Player player, LocalSession session, EditSession editSession, @Optional @Switch(name='h', desc = "TODO") boolean offHand, CommandContext context) throws WorldEditException { diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/ClipboardCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/ClipboardCommands.java index 65339f6d9..df32908f4 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/ClipboardCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/ClipboardCommands.java @@ -115,8 +115,8 @@ public class ClipboardCommands { @CommandPermissions("worldedit.clipboard.copy") public void copy(FawePlayer fp, Player player, LocalSession session, EditSession editSession, @Selection Region region, - @Switch(name = 'e', desc = "Also copy entities") - boolean copyEntities, + @Switch(name = 'e', desc = "Skip copy entities") + boolean skipEntities, @Switch(name = 'b', desc = "Also copy biomes") boolean copyBiomes, @ArgFlag(name = 'm', desc = "Set the exclude mask, matching blocks become air", def = "") @@ -135,7 +135,7 @@ public class ClipboardCommands { clipboard.setOrigin(session.getPlacementPosition(player)); ForwardExtentCopy copy = new ForwardExtentCopy(editSession, region, clipboard, region.getMinimumPoint()); - copy.setCopyingEntities(copyEntities); + copy.setCopyingEntities(!skipEntities); copy.setCopyingBiomes(copyBiomes); Mask sourceMask = editSession.getSourceMask(); if (sourceMask != null) { @@ -161,8 +161,8 @@ public class ClipboardCommands { @CommandPermissions("worldedit.clipboard.lazycopy") public void lazyCopy(Player player, LocalSession session, EditSession editSession, @Selection Region region, - @Switch(name = 'e', desc = "Also copy entities") - boolean copyEntities, + @Switch(name = 'e', desc = "Skip copy entities") + boolean skipEntities, @ArgFlag(name = 'm', desc = "Set the exclude mask, matching blocks become air", def = "") Mask mask, @Switch(name = 'b', desc = "Also copy biomes") @@ -175,7 +175,7 @@ public class ClipboardCommands { throw new FaweException(BBC.WORLDEDIT_CANCEL_REASON_MAX_CHECKS); } session.setClipboard(null); - ReadOnlyClipboard lazyClipboard = ReadOnlyClipboard.of(editSession, region, copyEntities, copyBiomes); + ReadOnlyClipboard lazyClipboard = ReadOnlyClipboard.of(editSession, region, !skipEntities, copyBiomes); BlockArrayClipboard clipboard = new BlockArrayClipboard(region, lazyClipboard); clipboard.setOrigin(session.getPlacementPosition(player)); @@ -193,8 +193,8 @@ public class ClipboardCommands { @CommandPermissions("worldedit.clipboard.lazycut") public void lazyCut(Player player, LocalSession session, EditSession editSession, @Selection final Region region, - @Switch(name = 'e', desc = "Also copy entities") - boolean copyEntities, + @Switch(name = 'e', desc = "Skip copy entities") + boolean skipEntities, @ArgFlag(name = 'm', desc = "Set the exclude mask, matching blocks become air", def = "") Mask mask, @Switch(name = 'b', desc = "Also copy biomes") @@ -210,7 +210,7 @@ public class ClipboardCommands { throw new FaweException(BBC.WORLDEDIT_CANCEL_REASON_MAX_CHANGES); } session.setClipboard(null); - ReadOnlyClipboard lazyClipboard = new WorldCutClipboard(editSession, region, copyEntities, copyBiomes); + ReadOnlyClipboard lazyClipboard = new WorldCutClipboard(editSession, region, !skipEntities, copyBiomes); BlockArrayClipboard clipboard = new BlockArrayClipboard(region, lazyClipboard); clipboard.setOrigin(session.getPlacementPosition(player)); session.setClipboard(new ClipboardHolder(clipboard)); @@ -228,8 +228,8 @@ public class ClipboardCommands { @Selection Region region, @Arg(desc = "Pattern to leave in place of the selection", def = "air") Pattern leavePattern, - @Switch(name = 'e', desc = "Also cut entities") - boolean copyEntities, + @Switch(name = 'e', desc = "skip cut entities") + boolean skipEntities, @Switch(name = 'b', desc = "Also copy biomes, source biomes are unaffected") boolean copyBiomes, @ArgFlag(name = 'm', desc = "Set the exclude mask, matching blocks become air", def = "") @@ -251,7 +251,7 @@ public class ClipboardCommands { clipboard.setOrigin(session.getPlacementPosition(player)); ForwardExtentCopy copy = new ForwardExtentCopy(editSession, region, clipboard, region.getMinimumPoint()); copy.setSourceFunction(new BlockReplace(editSession, leavePattern)); - copy.setCopyingEntities(copyEntities); + copy.setCopyingEntities(!skipEntities); copy.setRemovingEntities(true); copy.setCopyingBiomes(copyBiomes); Mask sourceMask = editSession.getSourceMask(); @@ -531,12 +531,6 @@ public class ClipboardCommands { double xRotate, @Arg(desc = "Amount to rotate on the z-axis", def = "0") double zRotate) throws WorldEditException { - if (Math.abs(yRotate % 90) > 0.001 || - Math.abs(xRotate % 90) > 0.001 || - Math.abs(zRotate % 90) > 0.001) { - player.printDebug("Note: Interpolation is not yet supported, so angles that are multiples of 90 is recommended."); - } - ClipboardHolder holder = session.getClipboard(); AffineTransform transform = new AffineTransform(); transform = transform.rotateY(-yRotate); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/GeneralCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/GeneralCommands.java index 38d92a34e..a5001582b 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/GeneralCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/GeneralCommands.java @@ -19,6 +19,16 @@ package com.sk89q.worldedit.command; +import com.boydti.fawe.Fawe; +import com.boydti.fawe.config.BBC; +import com.boydti.fawe.object.FawePlayer; +import com.boydti.fawe.object.extent.ResettableExtent; +import com.boydti.fawe.util.CachedTextureUtil; +import com.boydti.fawe.util.CleanTextureUtil; +import com.boydti.fawe.util.MathMan; +import com.boydti.fawe.util.RandomTextureUtil; +import com.boydti.fawe.util.TextureUtil; +import com.sk89q.minecraft.util.commands.CommandContext; import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.LocalConfiguration; import com.sk89q.worldedit.LocalSession; @@ -29,10 +39,14 @@ import com.sk89q.worldedit.command.util.CommandPermissionsConditionGenerator; import com.sk89q.worldedit.command.util.WorldEditAsyncCommandBuilder; import com.sk89q.worldedit.entity.Player; import com.sk89q.worldedit.extension.input.DisallowedUsageException; +import com.sk89q.worldedit.extension.input.ParserContext; import com.sk89q.worldedit.extension.platform.Actor; +import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.function.mask.Mask; +import com.sk89q.worldedit.util.command.parametric.ParameterException; import com.sk89q.worldedit.util.formatting.component.PaginationBox; import com.sk89q.worldedit.util.formatting.text.Component; +import com.sk89q.worldedit.world.block.BaseBlock; import com.sk89q.worldedit.world.item.ItemType; import org.enginehub.piston.annotation.Command; import org.enginehub.piston.annotation.CommandContainer; @@ -40,7 +54,9 @@ import org.enginehub.piston.annotation.param.Arg; import org.enginehub.piston.annotation.param.ArgFlag; import org.enginehub.piston.annotation.param.Switch; +import java.io.FileNotFoundException; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; @@ -53,6 +69,7 @@ import static com.google.common.base.Preconditions.checkNotNull; * General WorldEdit commands. */ @CommandContainer(superTypes = CommandPermissionsConditionGenerator.Registration.class) +@Command(aliases = {}, desc = "Player toggles, settings and item info") public class GeneralCommands { private final WorldEdit worldEdit; @@ -117,25 +134,18 @@ public class GeneralCommands { } @Command( - name = "/fast", - desc = "Toggle fast mode" + name = "/fast", + desc = "Toggle fast mode" ) @CommandPermissions("worldedit.fast") - public void fast(Player player, LocalSession session, - @Arg(desc = "The new fast mode state", def = "") - Boolean fastMode) { + public void fast(Player player, LocalSession session, @Arg(desc = "The new fast mode state", def = "") Boolean fastMode) { boolean hasFastMode = session.hasFastMode(); - if (fastMode != null && fastMode == hasFastMode) { - player.printError("Fast mode already " + (fastMode ? "enabled" : "disabled") + "."); - return; - } - - if (hasFastMode) { - session.setFastMode(false); - player.print("Fast mode disabled."); + if (fastMode == null) fastMode = !hasFastMode; + session.setFastMode(fastMode); + if (fastMode) { + BBC.FAST_ENABLED.send(player); } else { - session.setFastMode(true); - player.print("Fast mode enabled. Lighting in the affected chunks may be wrong and/or you may need to rejoin to see changes."); + BBC.FAST_DISABLED.send(player); } } @@ -183,20 +193,19 @@ public class GeneralCommands { } @Command( - name = "gmask", - aliases = {"/gmask"}, - desc = "Set the global mask" + name = "/gmask", + aliases = {"gmask", "globalmask", "/globalmask"}, + descFooter = "The global destination mask applies to all edits you do and masks based on the destination blocks (i.e. the blocks in the world).", + desc = "Set the global mask" ) - @CommandPermissions("worldedit.global-mask") - public void gmask(Player player, LocalSession session, - @Arg(desc = "The mask to set", def = "") - Mask mask) { + @CommandPermissions({"worldedit.global-mask", "worldedit.mask.global"}) + public void gmask(Player player, LocalSession session, @Arg(desc = "The mask to set", def = "") Mask mask) { if (mask == null) { session.setMask(null); - player.print("Global mask disabled."); + BBC.MASK_DISABLED.send(player); } else { session.setMask(mask); - player.print("Global mask set."); + BBC.MASK.send(player); } } @@ -207,9 +216,9 @@ public class GeneralCommands { ) public void togglePlace(Player player, LocalSession session) { if (session.togglePlacementPosition()) { - player.print("Now placing at pos #1."); + BBC.PLACE_ENABLED.send(player); } else { - player.print("Now placing at the block you stand in."); + BBC.PLACE_DISABLED.send(player); } } @@ -242,7 +251,7 @@ public class GeneralCommands { "(Please wait... searching items.)"); } - private static class ItemSearcher implements Callable { + public static class ItemSearcher implements Callable { private final boolean blocksOnly; private final boolean itemsOnly; private final String search; @@ -281,4 +290,117 @@ public class GeneralCommands { return PaginationBox.fromStrings("Search results for '" + search + "'", command, list).create(page); } } + + @Command( + name = "/gtexture", + aliases = {"gtexture"}, + descFooter = "The global destination mask applies to all edits you do and masks based on the destination blocks (i.e. the blocks in the world).", + desc = "Set the global mask" + ) + @CommandPermissions("worldedit.global-texture") + public void gtexture(FawePlayer player, LocalSession session, EditSession editSession, @Arg(name = "context", desc = "CommandContext", def = "") CommandContext context) throws WorldEditException, FileNotFoundException, ParameterException { + if (context == null || context.argsLength() == 0) { + session.setTextureUtil(null); + BBC.TEXTURE_DISABLED.send(player); + } else { + String arg = context.getString(0); + String argLower = arg.toLowerCase(); + + TextureUtil util = Fawe.get().getTextureUtil(); + int randomIndex = 1; + boolean checkRandomization = true; + if (context.argsLength() >= 2 && MathMan.isInteger(context.getString(0)) && MathMan.isInteger(context.getString(1))) { + // complexity + int min = Integer.parseInt(context.getString(0)); + int max = Integer.parseInt(context.getString(1)); + if (min < 0 || max > 100) throw new ParameterException("Complexity must be in the range 0-100"); + if (min != 0 || max != 100) util = new CleanTextureUtil(util, min, max); + + randomIndex = 2; + } else if (context.argsLength() == 1 && argLower.equals("true") || argLower.equals("false")) { + if (argLower.equals("true")) util = new RandomTextureUtil(util); + checkRandomization = false; + } else { + HashSet blocks = null; + if (argLower.equals("#copy") || argLower.equals("#clipboard")) { + Clipboard clipboard = player.getSession().getClipboard().getClipboard(); + util = TextureUtil.fromClipboard(clipboard); + } else if (argLower.equals("*") || argLower.equals("true")) { + util = Fawe.get().getTextureUtil(); + } else { + ParserContext parserContext = new ParserContext(); + parserContext.setActor(player.getPlayer()); + parserContext.setWorld(player.getWorld()); + parserContext.setSession(session); + parserContext.setExtent(editSession); + Mask mask = worldEdit.getMaskFactory().parseFromInput(arg, parserContext); + util = TextureUtil.fromMask(mask); + } + } + if (checkRandomization) { + if (context.argsLength() > randomIndex) { + boolean random = Boolean.parseBoolean(context.getString(randomIndex)); + if (random) util = new RandomTextureUtil(util); + } + } + if (!(util instanceof CachedTextureUtil)) util = new CachedTextureUtil(util); + session.setTextureUtil(util); + BBC.TEXTURE_SET.send(player, context.getJoinedStrings(0)); + } + } + + @Command( + name = "/gsmask", + aliases = {"gsmask", "globalsourcemask", "/globalsourcemask"}, + desc = "Set the global source mask", + descFooter = "The global source mask applies to all edits you do and masks based on the source blocks (e.g. the blocks in your clipboard)" + ) + @CommandPermissions({"worldedit.global-mask", "worldedit.mask.global"}) + public void gsmask(Player player, LocalSession session, EditSession editSession, @Arg(desc = "The mask to set", def = "") Mask mask) throws WorldEditException { + if (mask == null) { + session.setSourceMask((Mask) null); + BBC.SOURCE_MASK_DISABLED.send(player); + } else { + session.setSourceMask(mask); + BBC.SOURCE_MASK.send(player); + } + } + + + @Command( + name = "/gtransform", + aliases = {"gtransform"}, + desc = "Set the global transform" + ) + @CommandPermissions({"worldedit.global-transform", "worldedit.transform.global"}) + public void gtransform(Player player, EditSession editSession, LocalSession session, @Arg(name = "context", desc = "CommandContext", def = "") CommandContext context) throws WorldEditException { + if (context == null || context.argsLength() == 0) { + session.setTransform(null); + BBC.TRANSFORM_DISABLED.send(player); + } else { + ParserContext parserContext = new ParserContext(); + parserContext.setActor(player); + parserContext.setWorld(player.getWorld()); + parserContext.setSession(session); + parserContext.setExtent(editSession); + ResettableExtent transform = Fawe.get().getTransformParser().parseFromInput(context.getJoinedStrings(0), parserContext); + session.setTransform(transform); + BBC.TRANSFORM.send(player); + } + } + + @Command( + name = "/tips", + aliases = {"tips"}, + desc = "Toggle FAWE tips" + ) + @CommandPermissions("fawe.tips") + public void tips(Player player, LocalSession session) throws WorldEditException { + FawePlayer fp = FawePlayer.wrap(player); + if (player.togglePermission("fawe.tips")) { + BBC.WORLDEDIT_TOGGLE_TIPS_ON.send(player); + } else { + BBC.WORLDEDIT_TOGGLE_TIPS_OFF.send(player); + } + } } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/GenerationCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/GenerationCommands.java index 76b64190d..568f40007 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/GenerationCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/GenerationCommands.java @@ -55,6 +55,7 @@ import com.sk89q.worldedit.math.Vector3; import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.util.TreeGenerator.TreeType; +import com.sk89q.worldedit.util.command.binding.Range; import com.sk89q.worldedit.world.biome.BiomeType; import com.sk89q.worldedit.world.block.BlockType; import org.enginehub.piston.annotation.Command; @@ -72,6 +73,7 @@ import java.net.URL; * Commands for the generation of shapes and other objects. */ @CommandContainer(superTypes = CommandPermissionsConditionGenerator.Registration.class) +@Command(aliases = {}, desc = "Create structures and features: [More Info](https://goo.gl/KuLFRW)") public class GenerationCommands { private final WorldEdit worldEdit; @@ -232,9 +234,7 @@ public class GenerationCommands { public void hsphere(FawePlayer fp, Player player, LocalSession session, EditSession editSession, @Arg(desc = "The pattern of blocks to generate") Pattern pattern, - @Arg(desc = "The radii of the sphere. Order is N/S, U/D, E/W") - @Radii(3) - List radii, + @Arg(desc = "The radii of the sphere. Order is N/S, U/D, E/W") BlockVector3 radii, @Switch(name = 'r', desc = "Raise the bottom of the sphere to the placement position") boolean raised, CommandContext context) throws WorldEditException { @@ -247,46 +247,19 @@ public class GenerationCommands { ) @CommandPermissions("worldedit.generation.sphere") @Logging(PLACEMENT) - public int sphere(FawePlayer fp, Player player, LocalSession session, EditSession editSession, + public void sphere(FawePlayer fp, Player player, LocalSession session, EditSession editSession, @Arg(desc = "The pattern of blocks to generate") Pattern pattern, @Arg(desc = "The radii of the sphere. Order is N/S, U/D, E/W") - @Radii(3) - List radii, + BlockVector3 radii, @Switch(name = 'r', desc = "Raise the bottom of the sphere to the placement position") boolean raised, @Switch(name = 'h', desc = "Make a hollow sphere") boolean hollow) throws WorldEditException { - final double radiusX, radiusY, radiusZ; - switch (radii.size()) { - case 1: - radiusX = radiusY = radiusZ = Math.max(1, radii.get(0)); - break; - - case 3: - radiusX = Math.max(1, radii.get(0)); - radiusY = Math.max(1, radii.get(1)); - radiusZ = Math.max(1, radii.get(2)); - break; - - default: - player.printError("You must either specify 1 or 3 radius values."); - return 0; - } - - worldEdit.checkMaxRadius(radiusX); - worldEdit.checkMaxRadius(radiusY); - worldEdit.checkMaxRadius(radiusZ); - BlockVector3 pos = session.getPlacementPosition(player); - BlockVector3 finalPos; - if (raised) { - finalPos = pos.add(0, (int) radiusY, 0); - } else { - finalPos = pos; - } + BlockVector3 finalPos = raised ? pos.add(0, radii.getY(), 0) : pos; fp.checkConfirmationRadius(() -> { - int affected = editSession.makeSphere(finalPos, pattern, radiusX, radiusY, radiusZ, !hollow); + int affected = editSession.makeSphere(finalPos, pattern, radii.getX(), radii.getY(), radii.getZ(), !hollow); player.findFreePosition(); BBC.VISITOR_BLOCK.send(fp, affected); }, getArguments(context), (int) max, context); @@ -303,9 +276,8 @@ public class GenerationCommands { int size, @Arg(desc = "The type of forest", def = "tree") TreeType type, - @Arg(desc = "The density of the forest, between 0 and 100", def = "5") + @Range(min=0, max = 100) @Arg(desc = "The density of the forest, between 0 and 100", def = "5") double density) throws WorldEditException { - checkCommandArgument(0 <= density && density <= 100, "Density must be between 0 and 100"); density = density / 100; int affected = editSession.makeForest(session.getPlacementPosition(player), size, density, type); player.print(affected + " trees created."); @@ -323,7 +295,7 @@ public class GenerationCommands { int size, @Arg(desc = "//TODO", def = "10") int apothem, - @Arg(desc = "//TODO ", def = "0.02") + @Range(min=0, max = 100) @Arg(desc = "//TODO ", def = "0.02") double density) throws WorldEditException { int affected = editSession.makePumpkinPatches(session.getPlacementPosition(player), apothem, density); BBC.COMMAND_PUMPKIN.send(player, affected); @@ -375,7 +347,7 @@ public class GenerationCommands { ) @CommandPermissions("worldedit.generation.shape") @Logging(ALL) - public int generate(FawePlayer fp, Player player, LocalSession session, EditSession editSession, + public void generate(FawePlayer fp, Player player, LocalSession session, EditSession editSession, @Selection Region region, @Arg(desc = "The pattern of blocks to set") Pattern pattern, @@ -419,25 +391,25 @@ public class GenerationCommands { final Vector3 unit1 = unit; - final int affected = 0; fp.checkConfirmationRegion(() -> { try { - affected = editSession.makeShape(region, zero, unit1, pattern, String.join(" ", expression), hollow, session.getTimeout()); + int affected = editSession.makeShape(region, zero, unit1, pattern, String.join(" ", expression), hollow, session.getTimeout()); player.findFreePosition(); BBC.VISITOR_BLOCK.send(fp, affected); } catch (ExpressionException e) { player.printError(e.getMessage()); - return 0; } }, getArguments(context), region, context); - return affected; } @Command( name = "/generatebiome", aliases = { "/genbiome", "/gb" }, desc = "Sets biome according to a formula.", - descFooter = "See also https://tinyurl.com/weexpr." + + descFooter = "Formula must return positive numbers (true) if the point is inside the shape\n" + + "Sets the biome of blocks in that shape.\n" + +"See also https://tinyurl.com/weexpr." ) @CommandPermissions("worldedit.generation.shape.biome") @Logging(ALL) diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/HistoryCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/HistoryCommands.java index bbec8bab3..41f5b475d 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/HistoryCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/HistoryCommands.java @@ -59,6 +59,7 @@ import org.enginehub.piston.annotation.param.Arg; * Commands to undo, redo, and clear history. */ @CommandContainer(superTypes = CommandPermissionsConditionGenerator.Registration.class) +@Command(aliases = {}, desc = "Commands to undo, redo, and clear history: [More Info](http://wiki.sk89q.com/wiki/WorldEdit/Features#History)") public class HistoryCommands extends MethodCommands { /** @@ -72,8 +73,7 @@ public class HistoryCommands extends MethodCommands { @Command( name = "fawerollback", - name = "/frb", - aliases = {"frb", "fawerollback", "/fawerollback", "/rollback"}, + aliases = {"frb", "/fawerollback", "/rollback"}, desc = "Undo a specific edit. " + " - The time uses s, m, h, d, y.\n" + " - Import from disk: /frb #import" @@ -199,7 +199,7 @@ public class HistoryCommands extends MethodCommands { @Command( name = "fawerestore", - alias = {"/fawerestore", "/frestore"}, + aliases = {"/fawerestore", "/frestore"}, desc = "Redo a specific edit. " + " - The time uses s, m, h, d, y.\n" + " - Import from disk: /frb #import" diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/MethodCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/MethodCommands.java index 97b2849ed..ffd70be2e 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/MethodCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/MethodCommands.java @@ -4,7 +4,7 @@ import com.boydti.fawe.config.Commands; import org.enginehub.piston.annotation.Command; import com.sk89q.minecraft.util.commands.CommandContext; import com.sk89q.minecraft.util.commands.CommandLocals; -import com.sk89q.minecraft.util.commands.CommandPermissions; +import com.sk89q.worldedit.command.util.CommandPermissions; import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.util.command.CommandCallable; import com.sk89q.worldedit.util.command.Dispatcher; diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/OptionsCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/OptionsCommands.java deleted file mode 100644 index 1fc22813b..000000000 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/OptionsCommands.java +++ /dev/null @@ -1,372 +0,0 @@ -package com.sk89q.worldedit.command; - -import com.boydti.fawe.Fawe; -import com.boydti.fawe.config.BBC; -import com.boydti.fawe.object.FawePlayer; -import com.boydti.fawe.object.extent.ResettableExtent; -import com.boydti.fawe.util.CachedTextureUtil; -import com.boydti.fawe.util.CleanTextureUtil; -import com.boydti.fawe.util.MathMan; -import com.boydti.fawe.util.RandomTextureUtil; -import com.boydti.fawe.util.TextureUtil; - -import static com.google.common.base.Preconditions.checkNotNull; -import com.google.common.collect.Sets; -import org.enginehub.piston.annotation.Command; -import com.sk89q.minecraft.util.commands.CommandContext; -import com.sk89q.minecraft.util.commands.CommandPermissions; -import com.sk89q.worldedit.EditSession; -import com.sk89q.worldedit.LocalConfiguration; -import com.sk89q.worldedit.LocalSession; -import com.sk89q.worldedit.WorldEdit; -import com.sk89q.worldedit.WorldEditException; -import com.sk89q.worldedit.entity.Player; -import com.sk89q.worldedit.extension.input.DisallowedUsageException; -import com.sk89q.worldedit.extension.input.ParserContext; -import com.sk89q.worldedit.extension.platform.Actor; -import com.sk89q.worldedit.extent.clipboard.Clipboard; -import com.sk89q.worldedit.function.mask.Mask; -import com.sk89q.worldedit.util.command.parametric.Optional; -import com.sk89q.worldedit.util.command.parametric.ParameterException; -import com.sk89q.worldedit.world.block.BaseBlock; -import com.sk89q.worldedit.world.item.ItemType; -import com.sk89q.worldedit.world.item.ItemTypes; - -import java.io.FileNotFoundException; -import java.util.HashSet; - -/** - * General WorldEdit commands. - */ -@Command(aliases = {}, desc = "Player toggles, settings and item info") -public class OptionsCommands { - - private final WorldEdit worldEdit; - - /** - * Create a new instance. - * - * @param worldEdit reference to WorldEdit - */ - public OptionsCommands(WorldEdit worldEdit) { - checkNotNull(worldEdit); - this.worldEdit = worldEdit; - } - - @Command( - name = "/tips", - aliases = {"tips"}, - desc = "Toggle FAWE tips" - ) - @CommandPermissions("fawe.tips") - public void tips(Player player, LocalSession session) throws WorldEditException { - FawePlayer fp = FawePlayer.wrap(player); - if (player.togglePermission("fawe.tips")) { - BBC.WORLDEDIT_TOGGLE_TIPS_ON.send(player); - } else { - BBC.WORLDEDIT_TOGGLE_TIPS_OFF.send(player); - } - } - - @Command( - name = "/fast", - desc = "Toggles FAWE undo" -) - @CommandPermissions("worldedit.fast") - public void fast(Player player, LocalSession session, CommandContext args) throws WorldEditException { - - String newState = args.getString(0, null); - if (session.hasFastMode()) { - if ("on".equals(newState)) { - BBC.FAST_ENABLED.send(player); - return; - } - - session.setFastMode(false); - BBC.FAST_DISABLED.send(player); - } else { - if ("off".equals(newState)) { - BBC.FAST_DISABLED.send(player); - return; - } - - session.setFastMode(true); - BBC.FAST_ENABLED.send(player); - } - } - - @Command( - name = "/gtexture", - aliases = {"gtexture"}, - descFooter = "The global destination mask applies to all edits you do and masks based on the destination blocks (i.e. the blocks in the world).", - desc = "Set the global mask", - max = -1 - ) - @CommandPermissions("worldedit.global-texture") - public void gtexture(FawePlayer player, LocalSession session, EditSession editSession, @Arg(name = "context", desc = "CommandContext", def = "") CommandContext context) throws WorldEditException, FileNotFoundException, ParameterException { - if (context == null || context.argsLength() == 0) { - session.setTextureUtil(null); - BBC.TEXTURE_DISABLED.send(player); - } else { - String arg = context.getString(0); - String argLower = arg.toLowerCase(); - - TextureUtil util = Fawe.get().getTextureUtil(); - int randomIndex = 1; - boolean checkRandomization = true; - if (context.argsLength() >= 2 && MathMan.isInteger(context.getString(0)) && MathMan.isInteger(context.getString(1))) { - // complexity - int min = Integer.parseInt(context.getString(0)); - int max = Integer.parseInt(context.getString(1)); - if (min < 0 || max > 100) throw new ParameterException("Complexity must be in the range 0-100"); - if (min != 0 || max != 100) util = new CleanTextureUtil(util, min, max); - - randomIndex = 2; - } else if (context.argsLength() == 1 && argLower.equals("true") || argLower.equals("false")) { - if (argLower.equals("true")) util = new RandomTextureUtil(util); - checkRandomization = false; - } else { - HashSet blocks = null; - if (argLower.equals("#copy") || argLower.equals("#clipboard")) { - Clipboard clipboard = player.getSession().getClipboard().getClipboard(); - util = TextureUtil.fromClipboard(clipboard); - } else if (argLower.equals("*") || argLower.equals("true")) { - util = Fawe.get().getTextureUtil(); - } else { - ParserContext parserContext = new ParserContext(); - parserContext.setActor(player.getPlayer()); - parserContext.setWorld(player.getWorld()); - parserContext.setSession(session); - parserContext.setExtent(editSession); - Mask mask = worldEdit.getMaskFactory().parseFromInput(arg, parserContext); - util = TextureUtil.fromMask(mask); - } - } - if (checkRandomization) { - if (context.argsLength() > randomIndex) { - boolean random = Boolean.parseBoolean(context.getString(randomIndex)); - if (random) util = new RandomTextureUtil(util); - } - } - if (!(util instanceof CachedTextureUtil)) util = new CachedTextureUtil(util); - session.setTextureUtil(util); - BBC.TEXTURE_SET.send(player, context.getJoinedStrings(0)); - } - } - - @Command( - name = "/gmask", - aliases = {"gmask", "globalmask", "/globalmask"}, - descFooter = "The global destination mask applies to all edits you do and masks based on the destination blocks (i.e. the blocks in the world).", - desc = "Set the global mask", - max = -1 - ) - @CommandPermissions({"worldedit.global-mask", "worldedit.mask.global"}) - public void gmask(Player player, LocalSession session, EditSession editSession, @Arg(name = "context", desc = "CommandContext", def = "") CommandContext context) throws WorldEditException { - if (context == null || context.argsLength() == 0) { - session.setMask((Mask) null); - BBC.MASK_DISABLED.send(player); - } else { - ParserContext parserContext = new ParserContext(); - parserContext.setActor(player); - parserContext.setWorld(player.getWorld()); - parserContext.setSession(session); - parserContext.setExtent(editSession); - Mask mask = worldEdit.getMaskFactory().parseFromInput(context.getJoinedStrings(0), parserContext); - session.setMask(mask); - BBC.MASK.send(player); - } - } - - @Command( - name = "/gsmask", - aliases = {"gsmask", "globalsourcemask", "/globalsourcemask"}, - desc = "Set the global source mask", - descFooter = "The global source mask applies to all edits you do and masks based on the source blocks (e.g. the blocks in your clipboard)", - max = -1 - ) - @CommandPermissions({"worldedit.global-mask", "worldedit.mask.global"}) - public void gsmask(Player player, LocalSession session, EditSession editSession, @Arg(name = "context", desc = "CommandContext", def = "") CommandContext context) throws WorldEditException { - if (context == null || context.argsLength() == 0) { - session.setSourceMask((Mask) null); - BBC.SOURCE_MASK_DISABLED.send(player); - } else { - ParserContext parserContext = new ParserContext(); - parserContext.setActor(player); - parserContext.setWorld(player.getWorld()); - parserContext.setSession(session); - parserContext.setExtent(editSession); - Mask mask = worldEdit.getMaskFactory().parseFromInput(context.getJoinedStrings(0), parserContext); - session.setSourceMask(mask); - BBC.SOURCE_MASK.send(player); - } - } - - @Command( - name = "/gtransform", - aliases = {"gtransform"}, - desc = "Set the global transform", - max = -1 - ) - @CommandPermissions({"worldedit.global-transform", "worldedit.transform.global"}) - public void gtransform(Player player, EditSession editSession, LocalSession session, @Arg(name = "context", desc = "CommandContext", def = "") CommandContext context) throws WorldEditException { - if (context == null || context.argsLength() == 0) { - session.setTransform(null); - BBC.TRANSFORM_DISABLED.send(player); - } else { - ParserContext parserContext = new ParserContext(); - parserContext.setActor(player); - parserContext.setWorld(player.getWorld()); - parserContext.setSession(session); - parserContext.setExtent(editSession); - ResettableExtent transform = Fawe.get().getTransformParser().parseFromInput(context.getJoinedStrings(0), parserContext); - session.setTransform(transform); - BBC.TRANSFORM.send(player); - } - } - - @Command( - name = "/toggleplace", - aliases = {"toggleplace"}, - usage = "", - desc = "Switch between your position and pos1 for placement" -) - public void togglePlace(Player player, LocalSession session, CommandContext args) throws WorldEditException { - - if (session.togglePlacementPosition()) { - BBC.PLACE_ENABLED.send(player); - } else { - BBC.PLACE_DISABLED.send(player); - } - } - - @Command( - name = "/timeout", - desc = "Modify evaluation timeout time." -) - @CommandPermissions("worldedit.timeout") - public void timeout(Player player, LocalSession session, CommandContext args) throws WorldEditException { - - LocalConfiguration config = worldEdit.getConfiguration(); - boolean mayDisable = player.hasPermission("worldedit.timeout.unrestricted"); - - int limit = args.argsLength() == 0 ? config.calculationTimeout : Math.max(-1, args.getInteger(0)); - if (!mayDisable && config.maxCalculationTimeout > -1) { - if (limit > config.maxCalculationTimeout) { - player.printError("Your maximum allowable timeout is " + config.maxCalculationTimeout + " ms."); - return; - } - } - - session.setTimeout(limit); - - if (limit != config.calculationTimeout) { - player.print("Timeout time set to " + limit + " ms. (Use //timeout to go back to the default.)"); - } else { - player.print("Timeout time set to " + limit + " ms."); - } - } - - @Command( - name = "/drawsel", - desc = "Toggle drawing the current selection" -) - @CommandPermissions("worldedit.drawsel") - public void drawSelection(Player player, LocalSession session, CommandContext args) throws WorldEditException { - - if (!WorldEdit.getInstance().getConfiguration().serverSideCUI) { - throw new DisallowedUsageException("This functionality is disabled in the configuration!"); - } - String newState = args.getString(0, null); - if (session.shouldUseServerCUI()) { - if ("on".equals(newState)) { - player.printError("Server CUI already enabled."); - return; - } - - session.setUseServerCUI(false); - session.updateServerCUI(player); - player.print("Server CUI disabled."); - } else { - if ("off".equals(newState)) { - player.printError("Server CUI already disabled."); - return; - } - - session.setUseServerCUI(true); - session.updateServerCUI(player); - player.print("Server CUI enabled. This only supports cuboid regions, with a maximum size of 32x32x32."); - } - } - - @Command( - name = "/searchitem", - aliases = {"/l", "/search", "searchitem"}, - desc = "Search for an item", - descFooter = - "Searches for an item.\n" + - "Flags:\n" + - " -b only search for blocks\n" + - " -i only search for items" -) - @CommandPermissions("worldedit.searchitem") - public void searchItem(Actor actor, CommandContext args) throws WorldEditException { - - String query = args.getString(0).trim().toLowerCase(); - boolean blocksOnly = args.hasFlag('b'); - boolean itemsOnly = args.hasFlag('i'); - - ItemType type = ItemTypes.get(query); - - if (type != null) { - actor.print(type.getId() + " (" + type.getName() + ")"); - } else { - if (query.length() <= 2) { - actor.printError("Enter a longer search string (len > 2)."); - return; - } - - if (!blocksOnly && !itemsOnly) { - actor.print("Searching for: " + query); - } else if (blocksOnly && itemsOnly) { - actor.printError("You cannot use both the 'b' and 'i' flags simultaneously."); - return; - } else if (blocksOnly) { - actor.print("Searching for blocks: " + query); - } else { - actor.print("Searching for items: " + query); - } - - int found = 0; - - for (ItemType searchType : ItemType.REGISTRY) { - if (found >= 15) { - actor.print("Too many results!"); - break; - } - - if (blocksOnly && !searchType.hasBlockType()) { - continue; - } - - if (itemsOnly && searchType.hasBlockType()) { - continue; - } - - for (String alias : Sets.newHashSet(searchType.getId(), searchType.getName())) { - if (alias.contains(query)) { - actor.print(searchType.getId() + " (" + searchType.getName() + ")"); - ++found; - break; - } - } - } - - if (found == 0) { - actor.printError("No items found."); - } - } - } - - -} diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/SuperPickaxeCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/SuperPickaxeCommands.java index 414031a8a..8727e8dbb 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/SuperPickaxeCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/SuperPickaxeCommands.java @@ -22,7 +22,7 @@ package com.sk89q.worldedit.command; import com.boydti.fawe.config.BBC; import org.enginehub.piston.annotation.Command; import com.sk89q.minecraft.util.commands.CommandContext; -import com.sk89q.minecraft.util.commands.CommandPermissions; +import com.sk89q.worldedit.command.util.CommandPermissions; import com.sk89q.worldedit.LocalConfiguration; import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.WorldEdit; diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/composition/SelectionCommand.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/composition/SelectionCommand.java index 62acc1b16..21af016af 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/composition/SelectionCommand.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/composition/SelectionCommand.java @@ -32,7 +32,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.collect.Lists; import com.sk89q.minecraft.util.commands.CommandException; import com.sk89q.minecraft.util.commands.CommandLocals; -import com.sk89q.minecraft.util.commands.CommandPermissionsException; +import com.sk89q.worldedit.command.util.CommandPermissionsException; import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.IncompleteRegionException; import com.sk89q.worldedit.LocalSession; diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/composition/ShapedBrushCommand.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/composition/ShapedBrushCommand.java index 1511a0fbf..ae7d799f9 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/composition/ShapedBrushCommand.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/composition/ShapedBrushCommand.java @@ -23,7 +23,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.sk89q.minecraft.util.commands.CommandException; import com.sk89q.minecraft.util.commands.CommandLocals; -import com.sk89q.minecraft.util.commands.CommandPermissionsException; +import com.sk89q.worldedit.command.util.CommandPermissionsException; import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.MaxBrushRadiusException; import com.sk89q.worldedit.WorldEdit; diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/internal/util/DocumentationPrinter.java b/worldedit-core/src/main/java/com/sk89q/worldedit/internal/util/DocumentationPrinter.java index ef0138c9b..fcb8dfbee 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/internal/util/DocumentationPrinter.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/internal/util/DocumentationPrinter.java @@ -20,7 +20,7 @@ package com.sk89q.worldedit.internal.util; import org.enginehub.piston.annotation.Command; -import com.sk89q.minecraft.util.commands.CommandPermissions; +import com.sk89q.worldedit.command.util.CommandPermissions; import com.sk89q.minecraft.util.commands.NestedCommand; import com.sk89q.worldedit.command.*; diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/util/command/SimpleDispatcher.java b/worldedit-core/src/main/java/com/sk89q/worldedit/util/command/SimpleDispatcher.java index 949869cdd..bc634c06f 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/util/command/SimpleDispatcher.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/util/command/SimpleDispatcher.java @@ -26,7 +26,7 @@ import com.google.common.base.Joiner; import com.sk89q.minecraft.util.commands.CommandContext; import com.sk89q.minecraft.util.commands.CommandException; import com.sk89q.minecraft.util.commands.CommandLocals; -import com.sk89q.minecraft.util.commands.CommandPermissionsException; +import com.sk89q.worldedit.command.util.CommandPermissionsException; import com.sk89q.minecraft.util.commands.WrappedCommandException; import java.util.ArrayList; diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/util/command/parametric/FunctionParametricCallable.java b/worldedit-core/src/main/java/com/sk89q/worldedit/util/command/parametric/FunctionParametricCallable.java index 5f886a07a..26a764444 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/util/command/parametric/FunctionParametricCallable.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/util/command/parametric/FunctionParametricCallable.java @@ -7,7 +7,7 @@ import org.enginehub.piston.annotation.Command; import com.sk89q.minecraft.util.commands.CommandContext; import com.sk89q.minecraft.util.commands.CommandException; import com.sk89q.minecraft.util.commands.CommandLocals; -import com.sk89q.minecraft.util.commands.CommandPermissionsException; +import com.sk89q.worldedit.command.util.CommandPermissionsException; import com.sk89q.minecraft.util.commands.WrappedCommandException; import com.sk89q.worldedit.util.command.CommandCallable; import com.sk89q.worldedit.util.command.InvalidUsageException; diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/util/command/parametric/InvokeListener.java b/worldedit-core/src/main/java/com/sk89q/worldedit/util/command/parametric/InvokeListener.java index f30f86c9f..6dce1d21f 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/util/command/parametric/InvokeListener.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/util/command/parametric/InvokeListener.java @@ -19,7 +19,7 @@ package com.sk89q.worldedit.util.command.parametric; -import com.sk89q.minecraft.util.commands.CommandPermissions; +import com.sk89q.worldedit.command.util.CommandPermissions; import com.sk89q.worldedit.util.command.CommandCallable; import com.sk89q.worldedit.util.command.SimpleDescription; diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/util/command/parametric/ParametricBuilder.java b/worldedit-core/src/main/java/com/sk89q/worldedit/util/command/parametric/ParametricBuilder.java index 84a0ee465..9d4cfdb64 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/util/command/parametric/ParametricBuilder.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/util/command/parametric/ParametricBuilder.java @@ -26,7 +26,7 @@ import com.boydti.fawe.config.Commands; import com.google.common.collect.ImmutableBiMap.Builder; import com.sk89q.minecraft.util.commands.CommandContext; import com.sk89q.minecraft.util.commands.CommandException; -import com.sk89q.minecraft.util.commands.CommandPermissions; +import com.sk89q.worldedit.command.util.CommandPermissions; import com.sk89q.worldedit.command.MethodCommands; import com.sk89q.worldedit.util.auth.Authorizer; import com.sk89q.worldedit.util.auth.NullAuthorizer; diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/util/command/parametric/ParametricCallable.java b/worldedit-core/src/main/java/com/sk89q/worldedit/util/command/parametric/ParametricCallable.java index ef08042cd..c17282aca 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/util/command/parametric/ParametricCallable.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/util/command/parametric/ParametricCallable.java @@ -24,8 +24,8 @@ import org.enginehub.piston.annotation.Command; import com.sk89q.minecraft.util.commands.CommandContext; import com.sk89q.minecraft.util.commands.CommandException; import com.sk89q.minecraft.util.commands.CommandLocals; -import com.sk89q.minecraft.util.commands.CommandPermissions; -import com.sk89q.minecraft.util.commands.CommandPermissionsException; +import com.sk89q.worldedit.command.util.CommandPermissions; +import com.sk89q.worldedit.command.util.CommandPermissionsException; import com.sk89q.minecraft.util.commands.WrappedCommandException; import com.sk89q.worldedit.util.command.CommandCallable; import com.sk89q.worldedit.util.command.InvalidUsageException;