Skip to content

Commit 6ae1449

Browse files
committed
Alter implementation
1 parent baec56d commit 6ae1449

File tree

10 files changed

+48
-29
lines changed

10 files changed

+48
-29
lines changed

worldedit-core/src/main/java/com/fastasyncworldedit/core/function/generator/SchemGen.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.fastasyncworldedit.core.function.generator;
22

33
import com.fastasyncworldedit.core.math.MutableBlockVector3;
4+
import com.fastasyncworldedit.core.math.transform.MutatingOperationTransformHolder;
45
import com.sk89q.worldedit.WorldEditException;
56
import com.sk89q.worldedit.extent.Extent;
67
import com.sk89q.worldedit.extent.clipboard.Clipboard;
@@ -92,7 +93,7 @@ public boolean spawn(Random random, int x, int z) throws WorldEditException {
9293
if (transform.isIdentity()) {
9394
clipboard.paste(extent, mutable, false);
9495
} else {
95-
transform.mutate();
96+
MutatingOperationTransformHolder.transform(transform);
9697
clipboard.paste(extent, mutable, false, transform);
9798
}
9899
mutable.mutY(y);

worldedit-core/src/main/java/com/fastasyncworldedit/core/function/pattern/RandomFullClipboardPattern.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.fastasyncworldedit.core.function.pattern;
22

33
import com.fastasyncworldedit.core.math.MutableBlockVector3;
4+
import com.fastasyncworldedit.core.math.transform.MutatingOperationTransformHolder;
45
import com.sk89q.worldedit.WorldEditException;
56
import com.sk89q.worldedit.extent.Extent;
67
import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard;
@@ -67,7 +68,7 @@ public boolean apply(Extent extent, BlockVector3 get, BlockVector3 set) throws W
6768
if (newTransform.isIdentity()) {
6869
clipboard.paste(extent, set, false);
6970
} else {
70-
newTransform.mutate();
71+
MutatingOperationTransformHolder.transform(newTransform);
7172
clipboard.paste(extent, set, false, newTransform);
7273
}
7374
return true;

worldedit-core/src/main/java/com/fastasyncworldedit/core/math/transform/MutatingOperationTransformHolder.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.fastasyncworldedit.core.math.transform;
22

3+
import com.fastasyncworldedit.core.extent.transform.MultiTransform;
34
import com.sk89q.worldedit.math.Vector3;
5+
import com.sk89q.worldedit.math.transform.CombinedTransform;
46
import com.sk89q.worldedit.math.transform.Transform;
57

68
import java.util.function.Function;
@@ -28,6 +30,23 @@ public MutatingOperationTransformHolder(T transform, Function<? super T, ? exten
2830
this.operation = operation;
2931
}
3032

33+
/**
34+
* Perform a mutation on the given transform, if supported. Else, does nothing. This mutation will depend on the specific
35+
* transform implementation.
36+
* <p>
37+
* Implementation detail: it may be possible for this method to be called multiple times before an operation actually occurs.
38+
*
39+
* @since TODO
40+
*/
41+
public static void transform(Transform transform) {
42+
switch (transform) {
43+
case MutatingOperationTransformHolder<?> mutating -> mutating.mutate();
44+
case CombinedTransform combined -> combined.getTransforms().forEach(MutatingOperationTransformHolder::transform);
45+
default -> {
46+
}
47+
}
48+
}
49+
3150
/**
3251
* Apply the mutator to the transform
3352
*

worldedit-core/src/main/java/com/sk89q/worldedit/command/ClipboardCommands.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.fastasyncworldedit.core.extent.clipboard.WorldCopyClipboard;
3333
import com.fastasyncworldedit.core.internal.io.FastByteArrayOutputStream;
3434
import com.fastasyncworldedit.core.limit.FaweLimit;
35+
import com.fastasyncworldedit.core.math.transform.MutatingOperationTransformHolder;
3536
import com.fastasyncworldedit.core.util.ImgurUtility;
3637
import com.fastasyncworldedit.core.util.MainUtil;
3738
import com.fastasyncworldedit.core.util.MaskTraverser;
@@ -404,7 +405,7 @@ public void run(OutputStream out) {
404405
final Clipboard target;
405406
// If we have a transform, bake it into the copy
406407
if (!transform.isIdentity()) {
407-
transform.mutate();
408+
MutatingOperationTransformHolder.transform(transform);
408409
target = clipboard.transform(transform);
409410
} else {
410411
target = clipboard;
@@ -474,7 +475,7 @@ public void place(
474475
if (selectPasted || onlySelect || removeEntities) {
475476
BlockVector3 clipboardOffset = clipboard.getRegion().getMinimumPoint().subtract(clipboard.getOrigin());
476477
Transform transform = holder.getTransform();
477-
transform.mutate();
478+
MutatingOperationTransformHolder.transform(transform);
478479
BlockVector3 realTo = to.add(transform.apply(clipboardOffset.toVector3()).toBlockPoint());
479480
BlockVector3 max = realTo.add(transform
480481
.apply(region.getMaximumPoint().subtract(region.getMinimumPoint()).toVector3())
@@ -566,7 +567,7 @@ public void paste(
566567

567568
if (selectPasted || onlySelect || removeEntities) {
568569
BlockVector3 clipboardOffset = clipboard.getRegion().getMinimumPoint().subtract(clipboard.getOrigin());
569-
holder.getTransform().mutate(); //FAWE: mutate transform
570+
MutatingOperationTransformHolder.transform(holder.getTransform()); //FAWE: mutate transform
570571
Vector3 realTo = to.toVector3().add(holder.getTransform().apply(clipboardOffset.toVector3()));
571572
Vector3 max = realTo.add(holder
572573
.getTransform()

worldedit-core/src/main/java/com/sk89q/worldedit/command/SchematicCommands.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -915,7 +915,7 @@ private abstract static class SchematicOutputTask<T> implements Callable<T> {
915915
protected void writeToOutputStream(OutputStream outputStream) throws IOException, WorldEditException {
916916
Clipboard clipboard = holder.getClipboard();
917917
Transform transform = holder.getTransform();
918-
transform.mutate(); //FAWE: mutate transform
918+
MutatingOperationTransformHolder.transform(transform); //FAWE: mutate transform
919919
Clipboard target = clipboard.transform(transform);
920920

921921
try (Closer closer = Closer.create()) {
@@ -955,7 +955,7 @@ public Void call() throws Exception {
955955
Clipboard target;
956956

957957
//FAWE start
958-
transform.mutate();
958+
MutatingOperationTransformHolder.transform(transform);
959959
boolean checkFilesize = Settings.settings().PATHS.PER_PLAYER_SCHEMATICS
960960
&& actor.getLimit().SCHEM_FILE_SIZE_LIMIT > -1;
961961

worldedit-core/src/main/java/com/sk89q/worldedit/command/argument/FactoryConverter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import com.fastasyncworldedit.core.extent.ResettableExtent;
2323
import com.fastasyncworldedit.core.extent.SupplyingExtent;
24+
import com.fastasyncworldedit.core.math.transform.MutatingOperationTransformHolder;
2425
import com.sk89q.worldedit.EmptyClipboardException;
2526
import com.sk89q.worldedit.LocalSession;
2627
import com.sk89q.worldedit.WorldEdit;
@@ -98,7 +99,7 @@ public static void register(WorldEdit worldEdit, CommandManager commandManager)
9899
try {
99100
ClipboardHolder holder = context.getSession().getClipboard();
100101
Transform transform = holder.getTransform();
101-
transform.mutate(); //FAWE: mutate transform
102+
MutatingOperationTransformHolder.transform(transform); //FAWE: mutate transform
102103
Extent target;
103104
if (transform.isIdentity()) {
104105
target = holder.getClipboard();

worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/brush/ClipboardBrush.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
package com.sk89q.worldedit.command.tool.brush;
2121

22+
import com.fastasyncworldedit.core.math.transform.MutatingOperationTransformHolder;
2223
import com.sk89q.worldedit.EditSession;
2324
import com.sk89q.worldedit.MaxChangedBlocksException;
2425
import com.sk89q.worldedit.extent.clipboard.Clipboard;
@@ -90,7 +91,7 @@ public void build(EditSession editSession, BlockVector3 position, Pattern patter
9091
int rotate = 90 * ThreadLocalRandom.current().nextInt(4);
9192
transform = ((AffineTransform) transform).rotateY(rotate);
9293
if (originalTransform != null) {
93-
originalTransform.mutate();
94+
MutatingOperationTransformHolder.transform(originalTransform);
9495
transform = originalTransform.combine(transform);
9596
}
9697
}

worldedit-core/src/main/java/com/sk89q/worldedit/math/transform/CombinedTransform.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
package com.sk89q.worldedit.math.transform;
2121

22+
import com.fastasyncworldedit.core.math.transform.MutatingOperationTransformHolder;
2223
import com.sk89q.worldedit.math.Vector3;
2324

2425
import java.util.ArrayList;
@@ -96,11 +97,18 @@ public Transform combine(Transform other) {
9697
}
9798
}
9899

99-
@Override
100-
public void mutate() {
101-
for (Transform transform : transforms) {
102-
transform.mutate();
103-
}
100+
//FAWE start
101+
102+
/**
103+
* Get an unmodifiable view of the transforms stored by this {@link CombinedTransform}. Individuable transforms may be
104+
* mutable ({@link MutatingOperationTransformHolder})
105+
*
106+
* @return view of held transforms
107+
* @since TODO
108+
*/
109+
public List<Transform> getTransforms() {
110+
return List.of(transforms);
104111
}
112+
//FAWE end
105113

106114
}

worldedit-core/src/main/java/com/sk89q/worldedit/math/transform/Transform.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -58,18 +58,4 @@ public interface Transform {
5858
*/
5959
Transform combine(Transform other);
6060

61-
//FAWE start- mutating transforms
62-
63-
/**
64-
* Perform a mutation on this transform, if supported. Else, does nothing. This mutation will depend on the specific
65-
* transform implementation.
66-
* <p>
67-
* Implementation detail: it may be possible for this method to be called multiple times before an operation actually occurs.
68-
*
69-
* @since TODO
70-
*/
71-
default void mutate() {
72-
}
73-
//FAWE end
74-
7561
}

worldedit-core/src/main/java/com/sk89q/worldedit/session/PasteBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
package com.sk89q.worldedit.session;
2121

22+
import com.fastasyncworldedit.core.math.transform.MutatingOperationTransformHolder;
2223
import com.fastasyncworldedit.core.util.MaskTraverser;
2324
import com.sk89q.worldedit.EditSession;
2425
import com.sk89q.worldedit.extent.Extent;
@@ -144,7 +145,7 @@ public Operation build() {
144145
//FAWE start
145146
Extent extent = clipboard;
146147
if (!transform.isIdentity()) {
147-
transform.mutate();
148+
MutatingOperationTransformHolder.transform(transform);
148149
extent = new BlockTransformExtent(extent, transform);
149150
}
150151
//FAWE end

0 commit comments

Comments
 (0)