Skip to content

Commit 7b8c789

Browse files
authored
Make usage of stateful patterns thread-safe (#2633)
* Make usage of No(Axis)Patterns thread-safe * make more pattern usage thread-safe * make more WE patterns thread safe * remove StatefulPattern
1 parent 8095111 commit 7b8c789

18 files changed

+117
-1
lines changed

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

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

33
import com.sk89q.worldedit.function.pattern.AbstractPattern;
4+
import com.sk89q.worldedit.function.pattern.Pattern;
45
import com.sk89q.worldedit.internal.expression.EvaluationException;
56
import com.sk89q.worldedit.internal.expression.Expression;
67
import com.sk89q.worldedit.internal.expression.ExpressionException;
@@ -57,4 +58,9 @@ public BaseBlock applyBlock(BlockVector3 vector) {
5758
}
5859
}
5960

61+
@Override
62+
public Pattern fork() {
63+
return new ExpressionPattern(this.expression.clone());
64+
}
65+
6066
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import com.sk89q.worldedit.math.BlockVector3;
88
import com.sk89q.worldedit.world.block.BaseBlock;
99

10+
import java.util.Arrays;
11+
1012
import static java.lang.Math.floorDiv;
1113

1214
/**
@@ -52,4 +54,10 @@ public boolean apply(Extent extent, BlockVector3 get, BlockVector3 set) throws W
5254
return patternsArray[index].apply(extent, get, set);
5355
}
5456

57+
@Override
58+
public Pattern fork() {
59+
final Pattern[] forked = Arrays.stream(this.patternsArray).map(Pattern::fork).toArray(Pattern[]::new);
60+
return new Linear2DBlockPattern(forked, this.xScale, this.zScale);
61+
}
62+
5563
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import com.sk89q.worldedit.math.BlockVector3;
88
import com.sk89q.worldedit.world.block.BaseBlock;
99

10+
import java.util.Arrays;
11+
1012
import static java.lang.Math.floorDiv;
1113

1214
/**
@@ -56,4 +58,10 @@ public boolean apply(Extent extent, BlockVector3 get, BlockVector3 set) throws W
5658
return patternsArray[index].apply(extent, get, set);
5759
}
5860

61+
@Override
62+
public Pattern fork() {
63+
final Pattern[] forked = Arrays.stream(this.patternsArray).map(Pattern::fork).toArray(Pattern[]::new);
64+
return new Linear3DBlockPattern(forked, this.xScale, this.yScale, this.zScale);
65+
}
66+
5967
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,10 @@ public void reset() {
4747
index = 0;
4848
}
4949

50+
@Override
51+
public Pattern fork() {
52+
final Pattern[] forked = Arrays.stream(this.patternsArray).map(Pattern::fork).toArray(Pattern[]::new);
53+
return new LinearBlockPattern(forked);
54+
}
55+
5056
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,9 @@ public boolean apply(Extent extent, BlockVector3 get, BlockVector3 set) throws W
4343
return secondary.apply(extent, get, set);
4444
}
4545

46+
@Override
47+
public Pattern fork() {
48+
return new MaskedPattern(this.mask.copy(), this.primary.fork(), this.secondary.fork());
49+
}
50+
4651
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,9 @@ public boolean apply(Extent extent, BlockVector3 get, BlockVector3 set) throws W
3636
return pattern.apply(extent, mutable, set);
3737
}
3838

39+
@Override
40+
public Pattern fork() {
41+
return new NoXPattern(this.pattern.fork());
42+
}
43+
3944
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,9 @@ public boolean apply(Extent extent, BlockVector3 get, BlockVector3 set) throws W
3636
return pattern.apply(extent, mutable, set);
3737
}
3838

39+
@Override
40+
public Pattern fork() {
41+
return new NoYPattern(this.pattern.fork());
42+
}
43+
3944
}

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

Lines changed: 6 additions & 0 deletions
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.queue.Filter;
45
import com.sk89q.worldedit.WorldEditException;
56
import com.sk89q.worldedit.extent.Extent;
67
import com.sk89q.worldedit.function.pattern.AbstractPattern;
@@ -36,4 +37,9 @@ public boolean apply(Extent extent, BlockVector3 get, BlockVector3 set) throws W
3637
return pattern.apply(extent, mutable, set);
3738
}
3839

40+
@Override
41+
public Pattern fork() {
42+
return new NoZPattern(this.pattern.fork());
43+
}
44+
3945
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,9 @@ public boolean apply(Extent extent, BlockVector3 get, BlockVector3 set) throws W
6060
return pattern.apply(extent, get, mutable);
6161
}
6262

63+
@Override
64+
public Pattern fork() {
65+
return new OffsetPattern(this.pattern.fork(), this.dx, this.dy, this.dz, this.minY, this.maxY);
66+
}
67+
6368
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,9 @@ public boolean apply(Extent extent, BlockVector3 get, BlockVector3 set) throws W
7272
return pattern.apply(extent, get, mutable);
7373
}
7474

75+
@Override
76+
public Pattern fork() {
77+
return new RandomOffsetPattern(this.pattern.fork(), this.dx, this.dy, this.dz, this.minY, this.maxY);
78+
}
79+
7580
}

0 commit comments

Comments
 (0)