Reimplement l2d, l3d, existing and buffer pattern (#684)

* Reimplement l2d, l3d, existing and buffer pattern
Also smaller translation improvements and cleanup

* Allow aliases in RichParser
This commit is contained in:
Hannes Greule
2020-10-08 17:39:15 +02:00
committed by GitHub
parent 116c5d17c5
commit 4407749219
17 changed files with 395 additions and 89 deletions

View File

@ -10,14 +10,18 @@ import com.sk89q.worldedit.world.block.BaseBlock;
public class Linear2DBlockPattern extends AbstractPattern {
private final Pattern[] patternsArray;
private final int xScale;
private final int zScale;
public Linear2DBlockPattern(Pattern[] patterns) {
public Linear2DBlockPattern(Pattern[] patterns, int xScale, int zScale) {
this.patternsArray = patterns;
this.xScale = xScale;
this.zScale = zScale;
}
@Override
public BaseBlock apply(BlockVector3 position) {
int index = (position.getBlockX() + position.getBlockZ()) % patternsArray.length;
int index = (position.getBlockX() / this.xScale + position.getBlockZ() / this.zScale) % patternsArray.length;
if (index < 0) {
index += patternsArray.length;
}
@ -26,7 +30,7 @@ public class Linear2DBlockPattern extends AbstractPattern {
@Override
public boolean apply(Extent extent, BlockVector3 get, BlockVector3 set) throws WorldEditException {
int index = (get.getBlockX() + get.getBlockZ()) % patternsArray.length;
int index = (get.getBlockX() / this.xScale + get.getBlockZ() / this.zScale) % patternsArray.length;
if (index < 0) {
index += patternsArray.length;
}

View File

@ -10,14 +10,21 @@ import com.sk89q.worldedit.world.block.BaseBlock;
public class Linear3DBlockPattern extends AbstractPattern {
private final Pattern[] patternsArray;
private final int xScale;
private final int yScale;
private final int zScale;
public Linear3DBlockPattern(Pattern[] patterns) {
public Linear3DBlockPattern(Pattern[] patterns, int xScale, int yScale, int zScale) {
this.patternsArray = patterns;
this.xScale = xScale;
this.yScale = yScale;
this.zScale = zScale;
}
@Override
public BaseBlock apply(BlockVector3 position) {
int index = (position.getBlockX() + position.getBlockY() + position.getBlockZ()) % patternsArray.length;
int index = (position.getBlockX() / this.xScale
+ position.getBlockY() / this.yScale + position.getBlockZ() / this.zScale) % patternsArray.length;
if (index < 0) {
index += patternsArray.length;
}
@ -26,7 +33,8 @@ public class Linear3DBlockPattern extends AbstractPattern {
@Override
public boolean apply(Extent extent, BlockVector3 get, BlockVector3 set) throws WorldEditException {
int index = (get.getBlockX() + get.getBlockY() + get.getBlockZ()) % patternsArray.length;
int index = (get.getBlockX() / this.xScale
+ get.getBlockY() / this.yScale + get.getBlockZ() / this.zScale) % patternsArray.length;
if (index < 0) {
index += patternsArray.length;
}