Linear Patterns require flooring division (#2079)

Use floorDiv in linear patterns
This commit is contained in:
Hannes Greule 2023-01-31 11:21:11 +01:00 committed by GitHub
parent 214954bb09
commit 158e51191f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 3 deletions

View File

@ -7,6 +7,8 @@ import com.sk89q.worldedit.function.pattern.Pattern;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.world.block.BaseBlock; import com.sk89q.worldedit.world.block.BaseBlock;
import static java.lang.Math.floorDiv;
public class Linear2DBlockPattern extends AbstractPattern { public class Linear2DBlockPattern extends AbstractPattern {
private final Pattern[] patternsArray; private final Pattern[] patternsArray;
@ -37,7 +39,8 @@ public class Linear2DBlockPattern extends AbstractPattern {
@Override @Override
public boolean apply(Extent extent, BlockVector3 get, BlockVector3 set) throws WorldEditException { public boolean apply(Extent extent, BlockVector3 get, BlockVector3 set) throws WorldEditException {
int index = (get.getBlockX() / this.xScale + get.getBlockZ() / this.zScale) % patternsArray.length; int index = (floorDiv(get.getBlockX(), this.xScale)
+ floorDiv(get.getBlockZ(), this.zScale)) % patternsArray.length;
if (index < 0) { if (index < 0) {
index += patternsArray.length; index += patternsArray.length;
} }

View File

@ -7,6 +7,8 @@ import com.sk89q.worldedit.function.pattern.Pattern;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.world.block.BaseBlock; import com.sk89q.worldedit.world.block.BaseBlock;
import static java.lang.Math.floorDiv;
public class Linear3DBlockPattern extends AbstractPattern { public class Linear3DBlockPattern extends AbstractPattern {
private final Pattern[] patternsArray; private final Pattern[] patternsArray;
@ -41,8 +43,8 @@ public class Linear3DBlockPattern extends AbstractPattern {
@Override @Override
public boolean apply(Extent extent, BlockVector3 get, BlockVector3 set) throws WorldEditException { public boolean apply(Extent extent, BlockVector3 get, BlockVector3 set) throws WorldEditException {
int index = (get.getBlockX() / this.xScale int index = (floorDiv(get.getBlockX(), this.xScale)
+ get.getBlockY() / this.yScale + get.getBlockZ() / this.zScale) % patternsArray.length; + floorDiv(get.getBlockY(), this.yScale) + floorDiv(get.getBlockZ(), this.zScale)) % patternsArray.length;
if (index < 0) { if (index < 0) {
index += patternsArray.length; index += patternsArray.length;
} }