From 43a654176330cc9f0fc76002f7c5fb952d800f0e Mon Sep 17 00:00:00 2001 From: Jesse Boyd Date: Mon, 13 May 2019 00:21:01 +1000 Subject: [PATCH] shift some code to EditSessionBuilder --- .../com/boydti/fawe/object/HistoryExtent.java | 8 +- .../brush/visualization/VisualExtent.java | 2 +- .../fawe/object/extent/FaweRegionExtent.java | 57 +--- .../boydti/fawe/util/EditSessionBuilder.java | 208 +++++++++----- .../java/com/sk89q/worldedit/EditSession.java | 267 +++--------------- .../worldedit/command/tool/BrushTool.java | 12 +- .../extent/AbstractDelegateExtent.java | 4 +- 7 files changed, 200 insertions(+), 358 deletions(-) diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/HistoryExtent.java b/worldedit-core/src/main/java/com/boydti/fawe/object/HistoryExtent.java index e66e505c6..c52ecf6f8 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/object/HistoryExtent.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/object/HistoryExtent.java @@ -35,7 +35,6 @@ public class HistoryExtent extends AbstractDelegateExtent { private FaweChangeSet changeSet; private final FaweQueue queue; - private final EditSession session; /** * Create a new instance. @@ -43,12 +42,11 @@ public class HistoryExtent extends AbstractDelegateExtent { * @param extent the extent * @param changeSet the change set */ - public HistoryExtent(final EditSession session, final Extent extent, final FaweChangeSet changeSet, FaweQueue queue) { + public HistoryExtent(final Extent extent, final FaweChangeSet changeSet, FaweQueue queue) { super(extent); checkNotNull(changeSet); this.queue = queue; this.changeSet = changeSet; - this.session = session; } public FaweChangeSet getChangeSet() { @@ -61,9 +59,9 @@ public class HistoryExtent extends AbstractDelegateExtent { @Override public > boolean setBlock(int x, int y, int z, B block) throws WorldEditException { - BaseBlock previous = queue.getFullBlock(mutable.setComponents(x, y, z)).toBaseBlock(); + BaseBlock previous = queue.getFullBlock(x, y, z); if (previous.getInternalId() == block.getInternalId()) { - if (!previous.hasNbtData() && (block instanceof BaseBlock && !((BaseBlock)block).hasNbtData())) { + if (!previous.hasNbtData() && (block instanceof BaseBlock && !block.hasNbtData())) { return false; } } diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/brush/visualization/VisualExtent.java b/worldedit-core/src/main/java/com/boydti/fawe/object/brush/visualization/VisualExtent.java index c8b29f3ef..4b8eeb0ba 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/object/brush/visualization/VisualExtent.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/object/brush/visualization/VisualExtent.java @@ -40,7 +40,7 @@ public class VisualExtent extends AbstractDelegateExtent { @Override public boolean setBlock(int x, int y, int z, BlockStateHolder block) throws WorldEditException { - BlockStateHolder previous = super.getLazyBlock(x, y, z); + BlockStateHolder previous = super.getBlock(x, y, z); int cx = x >> 4; int cz = z >> 4; long chunkPair = MathMan.pairInt(cx, cz); diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/extent/FaweRegionExtent.java b/worldedit-core/src/main/java/com/boydti/fawe/object/extent/FaweRegionExtent.java index 3c6cb801b..6e9306b07 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/object/extent/FaweRegionExtent.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/object/extent/FaweRegionExtent.java @@ -56,17 +56,6 @@ public abstract class FaweRegionExtent extends ResettableExtent { return contains(p.getBlockX(), p.getBlockZ()); } - @Override - public > boolean setBlock(BlockVector3 location, B block) throws WorldEditException { - if (!contains(location)) { - if (!limit.MAX_FAILS()) { - WEManager.IMP.cancelEditSafe(this, BBC.WORLDEDIT_CANCEL_REASON_OUTSIDE_REGION); - } - return false; - } - return super.setBlock(location, block); - } - @Override public > boolean setBlock(int x, int y, int z, B block) throws WorldEditException { if (!contains(x, y, z)) { @@ -78,17 +67,6 @@ public abstract class FaweRegionExtent extends ResettableExtent { return super.setBlock(x, y, z, block); } - @Override - public boolean setBiome(BlockVector2 position, BiomeType biome) { - if (!contains(position)) { - if (!limit.MAX_FAILS()) { - WEManager.IMP.cancelEditSafe(this, BBC.WORLDEDIT_CANCEL_REASON_OUTSIDE_REGION); - } - return false; - } - return super.setBiome(position, biome); - } - @Override public boolean setBiome(int x, int y, int z, BiomeType biome) { if (!contains(x, y, z)) { @@ -110,7 +88,18 @@ public abstract class FaweRegionExtent extends ResettableExtent { } return super.getBiome(position); } - + + @Override + public BiomeType getBiome(int x, int z) { + if (!contains(x, z)) { + if (!limit.MAX_FAILS()) { + WEManager.IMP.cancelEditSafe(this, BBC.WORLDEDIT_CANCEL_REASON_OUTSIDE_REGION); + } + return null; + } + return super.getBiome(x, z); + } + @Override public BaseBlock getFullBlock(BlockVector3 position) { if (!contains(position)) { @@ -133,28 +122,6 @@ public abstract class FaweRegionExtent extends ResettableExtent { return super.getBlock(position); } - @Override - public BlockState getLazyBlock(BlockVector3 position) { - if (!contains(position)) { - if (!limit.MAX_FAILS()) { - WEManager.IMP.cancelEditSafe(this, BBC.WORLDEDIT_CANCEL_REASON_OUTSIDE_REGION); - } - return EditSession.nullBlock; - } - return super.getLazyBlock(position); - } - - @Override - public BlockState getLazyBlock(int x, int y, int z) { - if (!contains(x, y, z)) { - if (!limit.MAX_FAILS()) { - WEManager.IMP.cancelEditSafe(this, BBC.WORLDEDIT_CANCEL_REASON_OUTSIDE_REGION); - } - return EditSession.nullBlock; - } - return super.getLazyBlock(x, y, z); - } - @Override public int getBlockLight(int x, int y, int z) { if (!contains(x, y, z)) { diff --git a/worldedit-core/src/main/java/com/boydti/fawe/util/EditSessionBuilder.java b/worldedit-core/src/main/java/com/boydti/fawe/util/EditSessionBuilder.java index 81e11ddc5..0c7bce19e 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/util/EditSessionBuilder.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/util/EditSessionBuilder.java @@ -79,6 +79,12 @@ public class EditSessionBuilder { this.worldName = Fawe.imp().getWorldName(world); } + public EditSessionBuilder(World world, String worldName) { + if (world == null && worldName == null) throw new NullPointerException("Both world and worldname cannot be null"); + this.world = world; + this.worldName = worldName; + } + public EditSessionBuilder(@Nonnull String worldName) { checkNotNull(worldName); this.worldName = worldName; @@ -253,8 +259,16 @@ public class EditSessionBuilder { return extent; } - public EditSessionBuilder commit() { - // reset + private FaweChangeSet changeTask; + private AbstractDelegateExtent extent; + private int maxY; + private HistoryExtent history; + private AbstractDelegateExtent bypassHistory; + private AbstractDelegateExtent bypassAll; + + public EditSessionBuilder compile() { + if (extent != null) return this; + wrapped = false; // if (worldName == null) { @@ -336,9 +350,6 @@ public class EditSessionBuilder { // If the edit uses items from the inventory we can't use a delayed task && this.blockBag == null; } -// if (Settings.IMP.EXPERIMENTAL.ANVIL_QUEUE_MODE && !(queue instanceof MCAQueue)) { -// queue = new MCAQueue(queue); -// } if (!Settings.IMP.QUEUE.PROGRESS.DISPLAY.equalsIgnoreCase("false") && player != null) { switch (Settings.IMP.QUEUE.PROGRESS.DISPLAY.toLowerCase()) { case "chat": @@ -350,76 +361,131 @@ public class EditSessionBuilder { this.queue.setProgressTask(new DefaultProgressTracker(player)); } } -// this.bypassAll = wrapExtent(new FastWorldEditExtent(world, queue), eventBus, event, EditSession.Stage.BEFORE_CHANGE); -// this.bypassHistory = (this.extent = wrapExtent(bypassAll, eventBus, event, EditSession.Stage.BEFORE_REORDER)); -// if (!this.fastMode || changeSet != null) { -// if (changeSet == null) { -// if (Settings.IMP.HISTORY.USE_DISK) { -// UUID uuid = player == null ? EditSession.CONSOLE : player.getUUID(); -// if (Settings.IMP.HISTORY.USE_DATABASE) { -// changeSet = new RollbackOptimizedHistory(world, uuid); -// } else { -// changeSet = new DiskStorageHistory(world, uuid); + this.bypassAll = wrapExtent(new FastWorldEditExtent(world, queue), eventBus, event, EditSession.Stage.BEFORE_CHANGE); + this.bypassHistory = (this.extent = wrapExtent(bypassAll, eventBus, event, EditSession.Stage.BEFORE_REORDER)); + if (!this.fastmode || changeSet != null) { + if (changeSet == null) { + if (Settings.IMP.HISTORY.USE_DISK) { + UUID uuid = player == null ? EditSession.CONSOLE : player.getUUID(); + if (Settings.IMP.HISTORY.USE_DATABASE) { + changeSet = new RollbackOptimizedHistory(world, uuid); + } else { + changeSet = new DiskStorageHistory(world, uuid); + } + } else if (combineStages && Settings.IMP.HISTORY.COMPRESSION_LEVEL == 0 && !(queue instanceof MCAQueue)) { + changeSet = new CPUOptimizedChangeSet(world); + } else { + changeSet = new MemoryOptimizedHistory(world); + } + } + if (this.limit.SPEED_REDUCTION > 0) { + this.bypassHistory = new SlowExtent(this.bypassHistory, this.limit.SPEED_REDUCTION); + } + if (changeSet instanceof NullChangeSet && Fawe.imp().getBlocksHubApi() != null && player != null) { + changeSet = LoggingChangeSet.wrap(player, changeSet); + } + if (!(changeSet instanceof NullChangeSet)) { + 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); + } + if (combineStages) { + changeTask = changeSet; + changeSet.addChangeTask(queue); + } else { + this.extent = (history = new HistoryExtent(bypassHistory, changeSet, queue)); +// if (this.blockBag != null) { +// this.extent = new BlockBagExtent(this.extent, blockBag, limit.INVENTORY_MODE == 1); // } -// } else if (combineStages && Settings.IMP.HISTORY.COMPRESSION_LEVEL == 0 && !(queue instanceof MCAQueue)) { -// changeSet = new CPUOptimizedChangeSet(world); -// } else { -// changeSet = new MemoryOptimizedHistory(world); -// } -// } -// if (this.limit.SPEED_REDUCTION > 0) { -// this.bypassHistory = new SlowExtent(this.bypassHistory, this.limit.SPEED_REDUCTION); -// } -// if (changeSet instanceof NullChangeSet && Fawe.imp().getBlocksHubApi() != null && player != null) { -// changeSet = LoggingChangeSet.wrap(player, changeSet); -// } -// if (!(changeSet instanceof NullChangeSet)) { -// 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); -// } -// if (combineStages) { -// changeTask = changeSet; -// changeSet.addChangeTask(queue); -// } else { -// this.extent = (history = new HistoryExtent(this, bypassHistory, changeSet, queue)); -//// if (this.blockBag != null) { -//// this.extent = new BlockBagExtent(this.extent, blockBag, limit.INVENTORY_MODE == 1); -//// } -// } -// } -// } -// if (allowedRegions == null) { -// if (player != null && !player.hasPermission("fawe.bypass") && !player.hasPermission("fawe.bypass.regions") && !(queue instanceof VirtualWorld)) { -// allowedRegions = player.getCurrentRegions(); -// } -// } -// this.maxY = getWorld() == null ? 255 : world.getMaxY(); -// if (allowedRegions != null) { -// if (allowedRegions.length == 0) { -// this.extent = new NullExtent(this.extent, BBC.WORLDEDIT_CANCEL_REASON_NO_REGION); -// } else { -// this.extent = new ProcessedWEExtent(this.extent, this.limit); -// if (allowedRegions.length == 1) { -// Region region = allowedRegions[0]; -// this.extent = new SingleRegionExtent(this.extent, this.limit, allowedRegions[0]); -// } else { -// this.extent = new MultiRegionExtent(this.extent, this.limit, allowedRegions); -// } -// } -// } else { -// this.extent = new HeightBoundExtent(this.extent, this.limit, 0, maxY); -// } -// if (this.limit.STRIP_NBT != null && !this.limit.STRIP_NBT.isEmpty()) { -// this.extent = new StripNBTExtent(this.extent, this.limit.STRIP_NBT); -// } -// this.extent = wrapExtent(this.extent, bus, event, Stage.BEFORE_HISTORY); + } + } + } + if (allowedRegions == null) { + if (player != null && !player.hasPermission("fawe.bypass") && !player.hasPermission("fawe.bypass.regions") && !(queue instanceof VirtualWorld)) { + allowedRegions = player.getCurrentRegions(); + } + } + this.maxY = world == null ? 255 : world.getMaxY(); + if (allowedRegions != null) { + if (allowedRegions.length == 0) { + this.extent = new NullExtent(this.extent, BBC.WORLDEDIT_CANCEL_REASON_NO_REGION); + } else { + this.extent = new ProcessedWEExtent(this.extent, this.limit); + if (allowedRegions.length == 1) { + this.extent = new SingleRegionExtent(this.extent, this.limit, allowedRegions[0]); + } else { + this.extent = new MultiRegionExtent(this.extent, this.limit, allowedRegions); + } + } + } else { + this.extent = new HeightBoundExtent(this.extent, this.limit, 0, maxY); + } + if (this.limit.STRIP_NBT != null && !this.limit.STRIP_NBT.isEmpty()) { + this.extent = new StripNBTExtent(this.extent, this.limit.STRIP_NBT); + } + this.extent = wrapExtent(this.extent, eventBus, event, EditSession.Stage.BEFORE_HISTORY); return this; } public EditSession build() { - return new EditSession(worldName, world, queue, player, limit, changeSet, allowedRegions, autoQueue, fastmode, checkMemory, combineStages, blockBag, eventBus, event); + return new EditSession(this); + } + + public Extent getExtent() { + return extent; + } + + public World getWorld() { + return world; + } + + public String getWorldName() { + return worldName; + } + + public FaweQueue getQueue() { + return queue; + } + + public boolean isWrapped() { + return wrapped; + } + + public boolean hasFastMode() { + return fastmode; + } + + public HistoryExtent getHistory() { + return history; + } + + public AbstractDelegateExtent getBypassHistory() { + return bypassHistory; + } + + public AbstractDelegateExtent getBypassAll() { + return bypassAll; + } + + public FaweLimit getLimit() { + return limit; + } + + public FawePlayer getPlayer() { + return player; + } + + public FaweChangeSet getChangeTask() { + return changeTask; + } + + public BlockBag getBlockBag() { + return blockBag; + } + + public int getMaxY() { + return maxY; } } 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 1f9aaf8ca..8fb6178f7 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/EditSession.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/EditSession.java @@ -204,19 +204,18 @@ public class EditSession extends AbstractDelegateExtent implements HasFaweQueue, private final FaweQueue queue; private final boolean wrapped; private final boolean fastMode; - private final AbstractDelegateExtent extent; private final HistoryExtent history; - private final AbstractDelegateExtent bypassHistory; - private final AbstractDelegateExtent bypassAll; + private AbstractDelegateExtent bypassHistory; + private AbstractDelegateExtent bypassAll; private final FaweLimit originalLimit; private final FaweLimit limit; private final FawePlayer player; private final FaweChangeSet changeTask; - private MutableBlockVector3 mutablebv = new MutableBlockVector3(); + private final MutableBlockVector3 mutablebv = new MutableBlockVector3(); private int changes = 0; - private BlockBag blockBag; + private final BlockBag blockBag; private final int maxY; @@ -234,163 +233,26 @@ public class EditSession extends AbstractDelegateExtent implements HasFaweQueue, } 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() : Fawe.imp().getWorldName(world) : worldName; - if (world == null && this.worldName != null) world = FaweAPI.getWorld(this.worldName); - this.world = world; - if (bus == null) { - bus = WorldEdit.getInstance().getEventBus(); - } - if (event == null) { - event = new EditSessionEvent(world, player == null ? null : (player.getPlayer()), -1, null); - } - if (player == null && event.getActor() != null) { - player = FawePlayer.wrap(event.getActor()); - } - this.player = player; - if (limit == null) { - if (player == null) { - limit = FaweLimit.MAX; - } else { - limit = player.getLimit(); - } - } - if (autoQueue == null) { - autoQueue = true; - } - if (fastmode == null) { - if (player == null) { - fastmode = !Settings.IMP.HISTORY.ENABLE_FOR_CONSOLE; - } else { - fastmode = player.getSession().hasFastMode(); - } - } - this.fastMode = fastmode; - if (checkMemory == null) { - checkMemory = player != null && !this.fastMode; - } - if (checkMemory) { - if (MemUtil.isMemoryLimitedSlow()) { - if (Perm.hasPermission(player, "worldedit.fast")) { - BBC.WORLDEDIT_OOM_ADMIN.send(player); - } - throw new FaweException(BBC.WORLDEDIT_CANCEL_REASON_LOW_MEMORY); - } - } - this.originalLimit = limit; - this.blockBag = limit.INVENTORY_MODE != 0 ? blockBag : null; - this.limit = limit.copy(); - - if (queue == null) { - boolean placeChunks = this.fastMode || this.limit.FAST_PLACEMENT; - World unwrapped = WorldWrapper.unwrap(world); - if (unwrapped instanceof FaweQueue) { - queue = (FaweQueue) unwrapped; - } else if (unwrapped instanceof MCAWorld) { - queue = ((MCAWorld) unwrapped).getQueue(); - } else if (player != null && world.equals(player.getWorld())) { - queue = player.getFaweQueue(placeChunks, autoQueue); - } else { - queue = SetQueue.IMP.getNewQueue(world, placeChunks, autoQueue); - } - } - if (combineStages == null) { - combineStages = - // If it's enabled in the settings - Settings.IMP.HISTORY.COMBINE_STAGES - // If fast placement is disabled, it's slower to perform a copy on each chunk - && this.limit.FAST_PLACEMENT - // If the specific queue doesn't support it - && queue.supports(FaweQueue.Capability.CHANGE_TASKS) - // If the edit uses items from the inventory we can't use a delayed task - && this.blockBag == null; - } - if (Settings.IMP.EXPERIMENTAL.ANVIL_QUEUE_MODE && !(queue instanceof MCAQueue)) { - queue = new MCAQueue(queue); - } - this.queue = queue; - this.queue.addEditSession(this); - if (!Settings.IMP.QUEUE.PROGRESS.DISPLAY.equalsIgnoreCase("false") && player != null) { - switch (Settings.IMP.QUEUE.PROGRESS.DISPLAY.toLowerCase()) { - case "chat": - this.queue.setProgressTask(new ChatProgressTracker(player)); - break; - case "title": - case "true": - default: - this.queue.setProgressTask(new DefaultProgressTracker(player)); - } - } - this.bypassAll = wrapExtent(new FastWorldEditExtent(world, queue), bus, event, Stage.BEFORE_CHANGE); - this.bypassHistory = (this.extent = wrapExtent(bypassAll, bus, event, Stage.BEFORE_REORDER)); - if (!this.fastMode || changeSet != null) { - if (changeSet == null) { - if (Settings.IMP.HISTORY.USE_DISK) { - UUID uuid = player == null ? CONSOLE : player.getUUID(); - if (Settings.IMP.HISTORY.USE_DATABASE) { - changeSet = new RollbackOptimizedHistory(world, uuid); - } else { - changeSet = new DiskStorageHistory(world, uuid); - } - } else if (combineStages && Settings.IMP.HISTORY.COMPRESSION_LEVEL == 0 && !(queue instanceof MCAQueue)) { - changeSet = new CPUOptimizedChangeSet(world); - } else { - changeSet = new MemoryOptimizedHistory(world); - } - } - if (this.limit.SPEED_REDUCTION > 0) { - this.bypassHistory = new SlowExtent(this.bypassHistory, this.limit.SPEED_REDUCTION); - } - if (changeSet instanceof NullChangeSet && Fawe.imp().getBlocksHubApi() != null && player != null) { - changeSet = LoggingChangeSet.wrap(player, changeSet); - } - if (!(changeSet instanceof NullChangeSet)) { - 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); - } - if (combineStages) { - changeTask = changeSet; - changeSet.addChangeTask(queue); - } else { - this.extent = (history = new HistoryExtent(this, bypassHistory, changeSet, queue)); -// if (this.blockBag != null) { -// this.extent = new BlockBagExtent(this.extent, blockBag, limit.INVENTORY_MODE == 1); -// } - } - } - } - if (allowedRegions == null) { - if (player != null && !player.hasPermission("fawe.bypass") && !player.hasPermission("fawe.bypass.regions") && !(queue instanceof VirtualWorld)) { - allowedRegions = player.getCurrentRegions(); - } - } - this.maxY = getWorld() == null ? 255 : world.getMaxY(); - if (allowedRegions != null) { - if (allowedRegions.length == 0) { - this.extent = new NullExtent(this.extent, BBC.WORLDEDIT_CANCEL_REASON_NO_REGION); - } else { - this.extent = new ProcessedWEExtent(this.extent, this.limit); - if (allowedRegions.length == 1) { - Region region = allowedRegions[0]; - this.extent = new SingleRegionExtent(this.extent, this.limit, allowedRegions[0]); - } else { - this.extent = new MultiRegionExtent(this.extent, this.limit, allowedRegions); - } - } - } else { - this.extent = new HeightBoundExtent(this.extent, this.limit, 0, maxY); - } - if (this.limit.STRIP_NBT != null && !this.limit.STRIP_NBT.isEmpty()) { - this.extent = new StripNBTExtent(this.extent, this.limit.STRIP_NBT); - } - this.extent = wrapExtent(this.extent, bus, event, Stage.BEFORE_HISTORY); + this(new EditSessionBuilder(world, worldName).queue(queue).player(player).limit(limit).changeSet(changeSet).allowedRegions(allowedRegions).autoQueue(autoQueue).fastmode(fastmode).checkMemory(checkMemory).combineStages(combineStages).blockBag(blockBag).eventBus(bus).event(event)); } public EditSession(EditSessionBuilder builder) { - super(builder.) + super(builder.compile().getExtent()); + this.world = builder.getWorld(); + this.worldName = builder.getWorldName(); + this.queue = builder.getQueue(); + this.wrapped = builder.isWrapped(); + this.fastMode = builder.hasFastMode(); + this.history = builder.getHistory(); + this.bypassHistory = builder.getBypassHistory(); + this.bypassAll = builder.getBypassAll(); + this.originalLimit = builder.getLimit(); + this.limit = builder.getLimit().copy(); + this.player = builder.getPlayer(); + this.changeTask = builder.getChangeTask(); + this.maxY = builder.getMaxY(); + this.blockBag = builder.getBlockBag(); + } /** @@ -442,7 +304,7 @@ public class EditSession extends AbstractDelegateExtent implements HasFaweQueue, public void resetLimit() { this.limit.set(this.originalLimit); - ExtentTraverser find = new ExtentTraverser(extent).find(ProcessedWEExtent.class); + ExtentTraverser find = new ExtentTraverser(this).find(ProcessedWEExtent.class); if (find != null && find.get() != null) { find.get().setLimit(this.limit); } @@ -481,7 +343,7 @@ public class EditSession extends AbstractDelegateExtent implements HasFaweQueue, * @return FaweRegionExtent (may be null) */ public FaweRegionExtent getRegionExtent() { - ExtentTraverser traverser = new ExtentTraverser(this.extent).find(FaweRegionExtent.class); + ExtentTraverser traverser = new ExtentTraverser(this).find(FaweRegionExtent.class); return traverser == null ? null : traverser.get(); } @@ -504,18 +366,17 @@ public class EditSession extends AbstractDelegateExtent implements HasFaweQueue, } public boolean cancel() { - ExtentTraverser traverser = new ExtentTraverser(this.extent); + ExtentTraverser traverser = new ExtentTraverser(this); NullExtent nullExtent = new NullExtent(world, BBC.WORLDEDIT_CANCEL_REASON_MANUAL); while (traverser != null) { - ExtentTraverser next = traverser.next(); Extent get = traverser.get(); if (get instanceof AbstractDelegateExtent && !(get instanceof NullExtent)) { traverser.setNext(nullExtent); } + ExtentTraverser next = traverser.next(); traverser = next; } bypassHistory = nullExtent; - this.extent = nullExtent; bypassAll = nullExtent; dequeue(); if (!queue.isEmpty()) { @@ -569,46 +430,6 @@ public class EditSession extends AbstractDelegateExtent implements HasFaweQueue, return queue; } - @Deprecated - private AbstractDelegateExtent wrapExtent(final AbstractDelegateExtent extent, final EventBus eventBus, EditSessionEvent event, final Stage stage) { - event = event.clone(stage); - event.setExtent(extent); - eventBus.post(event); - if (event.isCancelled()) { - return new NullExtent(extent, BBC.WORLDEDIT_CANCEL_REASON_MANUAL); - } - final Extent toReturn = event.getExtent(); - if(toReturn instanceof com.sk89q.worldedit.extent.NullExtent) { - return new NullExtent(toReturn, null); - } - if (!(toReturn instanceof AbstractDelegateExtent)) { - Fawe.debug("Extent " + toReturn + " must be AbstractDelegateExtent"); - return extent; - } - if (toReturn != extent) { - String className = toReturn.getClass().getName().toLowerCase(); - for (String allowed : Settings.IMP.EXTENT.ALLOWED_PLUGINS) { - if (className.contains(allowed.toLowerCase())) { - this.wrapped = true; - return (AbstractDelegateExtent) toReturn; - } - } - if (Settings.IMP.EXTENT.DEBUG) { - Fawe.debug("&cPotentially unsafe extent blocked: " + toReturn.getClass().getName()); - Fawe.debug("&8 - &7For area restrictions, it is recommended to use the FaweAPI"); - Fawe.debug("&8 - &7For block logging, it is recommended to use use BlocksHub"); - Fawe.debug("&8 - &7To allow this plugin add it to the FAWE `allowed-plugins` list"); - Fawe.debug("&8 - &7To hide this message set `debug` to false in the FAWE config.yml"); - if (toReturn.getClass().getName().contains("CoreProtect")) { - Fawe.debug("Note on CoreProtect: "); - Fawe.debug(" - If you disable CP's WE logger (CP config) and this still shows, please update CP"); - Fawe.debug(" - Use BlocksHub and set `debug` false in the FAWE config"); - } - } - } - return extent; - } - // pkg private for TracedEditSession only, may later become public API boolean commitRequired() { return false; @@ -910,20 +731,6 @@ public class EditSession extends AbstractDelegateExtent implements HasFaweQueue, return this.blockBag; } - /** - * Set a {@link BlockBag} to use. - * - * @param blockBag the block bag to set, or null to use none - */ - public void setBlockBag(final BlockBag blockBag) { - this.blockBag = blockBag; - } - - @Override - public String toString() { - return super.toString() + ":" + extent; - } - /** * Gets the list of missing blocks and clears the list for the next * operation. @@ -1005,19 +812,19 @@ public class EditSession extends AbstractDelegateExtent implements HasFaweQueue, @Override public BiomeType getBiome(final BlockVector2 position) { - return this.extent.getBiome(position); + return this.getExtent().getBiome(position); } @Override public boolean setBiome(final BlockVector2 position, final BiomeType biome) { this.changes++; - return this.extent.setBiome(position, biome); + return this.getExtent().setBiome(position, biome); } @Override public boolean setBiome(int x, int y, int z, BiomeType biome) { this.changes++; - return this.extent.setBiome(x, y, z, biome); + return this.getExtent().setBiome(x, y, z, biome); } @Override @@ -1046,17 +853,17 @@ public class EditSession extends AbstractDelegateExtent implements HasFaweQueue, } public BlockState getBlock(int x, int y, int z) { - return extent.getBlock(x, y, z); + return getExtent().getBlock(x, y, z); } @Override public BlockState getBlock(BlockVector3 position) { - return extent.getBlock(position); + return getExtent().getBlock(position); } @Override public BaseBlock getFullBlock(BlockVector3 position) { - return extent.getFullBlock(position); + return getExtent().getFullBlock(position); } /** @@ -1131,7 +938,7 @@ public class EditSession extends AbstractDelegateExtent implements HasFaweQueue, this.changes++; switch (stage) { case BEFORE_HISTORY: - return this.extent.setBlock(position, block); + return this.getExtent().setBlock(position, block); case BEFORE_CHANGE: return this.bypassHistory.setBlock(position, block); case BEFORE_REORDER: @@ -1177,7 +984,7 @@ public class EditSession extends AbstractDelegateExtent implements HasFaweQueue, public > boolean setBlock(BlockVector3 position, B block) throws MaxChangedBlocksException { this.changes++; try { - return this.extent.setBlock(position, block); + return this.getExtent().setBlock(position, block); } catch (MaxChangedBlocksException e) { throw e; } catch (WorldEditException e) { @@ -1188,7 +995,7 @@ public class EditSession extends AbstractDelegateExtent implements HasFaweQueue, public > boolean setBlock(int x, int y, int z, B block) { this.changes++; try { - return this.extent.setBlock(x, y, z, block); + return this.getExtent().setBlock(x, y, z, block); } catch (WorldEditException e) { throw new RuntimeException("Unexpected exception", e); } @@ -1198,7 +1005,7 @@ public class EditSession extends AbstractDelegateExtent implements HasFaweQueue, this.changes++; try { BlockVector3 bv = mutablebv.setComponents(x, y, z); - return pattern.apply(extent, bv, bv); + return pattern.apply(getExtent(), bv, bv); } catch (WorldEditException e) { throw new RuntimeException("Unexpected exception", e); } @@ -1208,7 +1015,7 @@ public class EditSession extends AbstractDelegateExtent implements HasFaweQueue, public boolean setBlock(final BlockVector3 position, final Pattern pattern) { this.changes++; try { - return pattern.apply(this.extent, position, position); + return pattern.apply(this.getExtent(), position, position); } catch (WorldEditException e) { throw new RuntimeException(e); } @@ -1216,7 +1023,7 @@ public class EditSession extends AbstractDelegateExtent implements HasFaweQueue, @SuppressWarnings("deprecation") public int setBlocks(final Set vset, final Pattern pattern) { - RegionVisitor visitor = new RegionVisitor(vset, new BlockReplace(extent, pattern), this); + RegionVisitor visitor = new RegionVisitor(vset, new BlockReplace(getExtent(), pattern), this); Operations.completeBlindly(visitor); changes += visitor.getAffected(); return changes; diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/BrushTool.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/BrushTool.java index 269d9b7b5..960be3c95 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/BrushTool.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/BrushTool.java @@ -602,15 +602,19 @@ public class BrushTool implements DoubleActionTraceTool, ScrollTool, MovableTool Brush brush = current.getBrush(); if (brush == null) return; FawePlayer fp = FawePlayer.wrap(player); - EditSession editSession = new EditSessionBuilder(player.getWorld()) + EditSessionBuilder builder = new EditSessionBuilder(player.getWorld()) .player(fp) .allowedRegionsEverywhere() .autoQueue(false) .blockBag(null) .changeSetNull() - .combineStages(false) - .build(); - VisualExtent newVisualExtent = new VisualExtent(editSession.getExtent(), editSession.getQueue()); + .combineStages(false); + + builder.commit(); + + EditSession editSession = builder.build(); + + VisualExtent newVisualExtent = new VisualExtent(builder.getExtent(), builder.getQueue()); BlockVector3 position = getPosition(editSession, player); if (position != null) { editSession.setExtent(newVisualExtent); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/AbstractDelegateExtent.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/AbstractDelegateExtent.java index 93b541b2f..3bbaa8ca0 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/AbstractDelegateExtent.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/AbstractDelegateExtent.java @@ -100,8 +100,8 @@ public class AbstractDelegateExtent implements Extent, LightingExtent { } @Override - public boolean setBiome(int x, int z, BiomeType biome) { - return extent.setBiome(x, z, biome); + public boolean setBiome(int x, int y, int z, BiomeType biome) { + return extent.setBiome(x, y, z, biome); } /*