Skip to content

Commit

Permalink
fix: set and clone Expression Environment after Expression cloning (#…
Browse files Browse the repository at this point in the history
…2617)

- Fixes #2616
  • Loading branch information
MineFact committed Mar 15, 2024
1 parent facd31c commit df9527b
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 4 deletions.
Expand Up @@ -24,6 +24,7 @@
import com.sk89q.worldedit.antlr.ExpressionLexer;
import com.sk89q.worldedit.antlr.ExpressionParser;
import com.sk89q.worldedit.internal.expression.invoke.ExpressionCompiler;
import com.sk89q.worldedit.regions.shape.WorldEditExpressionEnvironment;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.CommonTokenStream;
Expand Down Expand Up @@ -199,7 +200,9 @@ public void setEnvironment(ExpressionEnvironment environment) {

//FAWE start
public Expression clone() {
return new Expression(initialExpression, new HashSet<>(providedSlots));
Expression expression = new Expression(initialExpression, new HashSet<>(providedSlots));
expression.setEnvironment(getEnvironment().clone());
return expression;
}
//FAWE end

Expand Down
Expand Up @@ -22,7 +22,7 @@
/**
* Represents a way to access blocks in a world. Has to accept non-rounded coordinates.
*/
public interface ExpressionEnvironment {
public interface ExpressionEnvironment extends Cloneable {

int getBlockType(double x, double y, double z);

Expand All @@ -36,4 +36,7 @@ public interface ExpressionEnvironment {

int getBlockDataRel(double x, double y, double z);

// FAWE start
ExpressionEnvironment clone();
// FAWE end
}
Expand Up @@ -28,6 +28,8 @@

public class WorldEditExpressionEnvironment implements ExpressionEnvironment {

private static final Vector3 BLOCK_CENTER_OFFSET = Vector3.at(0.5, 0.5, 0.5);

private final Vector3 unit;
private final Vector3 zero2;
//FAWE start - MutableVector3
Expand All @@ -42,7 +44,7 @@ public WorldEditExpressionEnvironment(EditSession editSession, Vector3 unit, Vec
public WorldEditExpressionEnvironment(Extent extent, Vector3 unit, Vector3 zero) {
this.extent = extent;
this.unit = unit;
this.zero2 = zero.add(0.5, 0.5, 0.5);
this.zero2 = zero.add(BLOCK_CENTER_OFFSET);
}

public BlockVector3 toWorld(double x, double y, double z) {
Expand Down Expand Up @@ -94,10 +96,13 @@ public void setCurrentBlock(int x, int y, int z) {
public Vector3 toWorldRel(double x, double y, double z) {
return current.add(x, y, z);
}

public WorldEditExpressionEnvironment clone() {
return new WorldEditExpressionEnvironment(extent, unit, zero2.subtract(BLOCK_CENTER_OFFSET));
}
//FAWe end

public void setCurrentBlock(Vector3 current) {
this.current = current;
}

}
Expand Up @@ -114,6 +114,11 @@ public int getBlockTypeRel(double x, double y, double z) {
public int getBlockDataRel(double x, double y, double z) {
return (int) y * 100;
}

@Override
public ExpressionEnvironment clone() {
return this;
}
});

return expression.evaluate();
Expand Down

0 comments on commit df9527b

Please sign in to comment.