mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-04-22 16:18:32 +00:00
skip over buffer when pasting trees
This commit is contained in:
@@ -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.script.builders.UnaryStringFunctionBuilder;
|
||||||
import com.dfsek.terra.api.structures.structure.Rotation;
|
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.Buffer;
|
||||||
|
import com.dfsek.terra.api.structures.structure.buffer.DirectBuffer;
|
||||||
import com.dfsek.terra.api.structures.structure.buffer.StructureBuffer;
|
import com.dfsek.terra.api.structures.structure.buffer.StructureBuffer;
|
||||||
import com.dfsek.terra.debug.Debug;
|
import com.dfsek.terra.debug.Debug;
|
||||||
import com.dfsek.terra.generation.math.SamplerCache;
|
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);
|
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() {
|
public String getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,7 +22,7 @@ public class TerraTree implements Tree {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized boolean plant(Location location, Random random) {
|
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
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user