skip over buffer when pasting trees

This commit is contained in:
dfsek
2021-01-06 11:56:17 -07:00
parent 512edae9c6
commit 23d8a0aeeb
3 changed files with 48 additions and 1 deletions

View File

@@ -24,6 +24,7 @@ import com.dfsek.terra.api.structures.script.builders.UnaryNumberFunctionBuilder
import com.dfsek.terra.api.structures.script.builders.UnaryStringFunctionBuilder;
import com.dfsek.terra.api.structures.structure.Rotation;
import com.dfsek.terra.api.structures.structure.buffer.Buffer;
import com.dfsek.terra.api.structures.structure.buffer.DirectBuffer;
import com.dfsek.terra.api.structures.structure.buffer.StructureBuffer;
import com.dfsek.terra.debug.Debug;
import com.dfsek.terra.generation.math.SamplerCache;
@@ -128,6 +129,11 @@ public class StructureScript {
return !block.apply(new TerraImplementationArguments(buffer, rotation, random, recursions)).getLevel().equals(Block.ReturnLevel.FAIL);
}
public boolean executeDirect(Location location, Random random, Rotation rotation) {
DirectBuffer buffer = new DirectBuffer(location);
return !block.apply(new TerraImplementationArguments(buffer, rotation, random, 0)).getLevel().equals(Block.ReturnLevel.FAIL);
}
public String getId() {
return id;
}

View File

@@ -0,0 +1,41 @@
package com.dfsek.terra.api.structures.structure.buffer;
import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.structures.structure.buffer.items.BufferedItem;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* Buffer implementation that directly pastes to the world.
*/
public class DirectBuffer implements Buffer {
private final Location origin;
private final Map<Location, String> marks = new LinkedHashMap<>();
public DirectBuffer(Location origin) {
this.origin = origin;
}
@Override
public Buffer addItem(BufferedItem item, Location location) {
item.paste(origin.clone().add(location));
return this;
}
@Override
public Location getOrigin() {
return origin;
}
@Override
public String getMark(Location location) {
return marks.get(location);
}
@Override
public Buffer setMark(String mark, Location location) {
marks.put(location, mark);
return this;
}
}

View File

@@ -22,7 +22,7 @@ public class TerraTree implements Tree {
@Override
public synchronized boolean plant(Location location, Random random) {
return structure.get(random).execute(location.clone().add(0, yOffset, 0), random, Rotation.fromDegrees(90 * random.nextInt(4)));
return structure.get(random).executeDirect(location.clone().add(0, yOffset, 0), random, Rotation.fromDegrees(90 * random.nextInt(4)));
}
@Override