From f8aaf0cae3264d2932c9290f06b3ccee7a66bc19 Mon Sep 17 00:00:00 2001 From: dordsor21 Date: Thu, 2 Sep 2021 17:13:38 +0100 Subject: [PATCH] Don't set extent to self when cancelling in AbstractDelegateExtent #749 --- .../core/extent/NullExtent.java | 10 ++++++++ .../extent/AbstractDelegateExtent.java | 23 ++++++++++++++++++- .../com/sk89q/worldedit/extent/Extent.java | 1 + 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/extent/NullExtent.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/extent/NullExtent.java index c775bf438..5d4d7d478 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/extent/NullExtent.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/extent/NullExtent.java @@ -222,6 +222,16 @@ public class NullExtent extends FaweRegionExtent implements IBatchProcessor { throw reason; } + @Override + public Extent addProcessor(final IBatchProcessor processor) { + return null; + } + + @Override + public Extent addPostProcessor(final IBatchProcessor processor) { + return null; + } + @Override public BlockArrayClipboard lazyCopy(Region region) { throw reason; 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 643cec495..170966fa5 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 @@ -19,8 +19,10 @@ package com.sk89q.worldedit.extent; +import com.fastasyncworldedit.core.FaweCache; import com.fastasyncworldedit.core.configuration.Settings; import com.fastasyncworldedit.core.extent.HistoryExtent; +import com.fastasyncworldedit.core.extent.NullExtent; import com.fastasyncworldedit.core.history.changeset.AbstractChangeSet; import com.fastasyncworldedit.core.internal.exception.FaweException; import com.fastasyncworldedit.core.queue.IBatchProcessor; @@ -41,7 +43,6 @@ import com.sk89q.worldedit.world.block.BaseBlock; import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockStateHolder; import org.apache.logging.log4j.Logger; -import org.jetbrains.annotations.Range; import javax.annotation.Nullable; import java.util.List; @@ -160,6 +161,26 @@ public class AbstractDelegateExtent implements Extent { } } + @Override + public boolean cancel() { + ExtentTraverser traverser = new ExtentTraverser<>(this); + + NullExtent nullExtent = new NullExtent(getExtent(), FaweCache.MANUAL); + + ExtentTraverser next = traverser.next(); + if (next != null) { + Extent child = next.get(); + if (child instanceof NullExtent) { + return true; + } + traverser.setNext(nullExtent); + child.cancel(); + } + addProcessor(nullExtent); + addPostProcessor(nullExtent); + return true; + } + //FAWE start @Override public void removeEntity(int x, int y, int z, UUID uuid) { diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/Extent.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/Extent.java index dfda01b0f..1b117fc3a 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/Extent.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/Extent.java @@ -646,6 +646,7 @@ public interface Extent extends InputExtent, OutputExtent { child.cancel(); } addProcessor(nullExtent); + addPostProcessor(nullExtent); return true; }