implement script structures with chunkification(tm)

This commit is contained in:
dfsek
2020-12-25 20:43:41 -07:00
parent cccb706ad5
commit 5db1494341
5 changed files with 44 additions and 28 deletions
@@ -2,6 +2,7 @@ package com.dfsek.terra.api.structures.script;
import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.api.platform.world.Chunk;
import com.dfsek.terra.api.structures.parser.Parser;
import com.dfsek.terra.api.structures.parser.exceptions.ParseException;
import com.dfsek.terra.api.structures.parser.lang.Block;
@@ -65,6 +66,13 @@ public class StructureScript {
return !level.equals(Block.ReturnLevel.FAIL);
}
public boolean execute(Location location, Chunk chunk, Random random, Rotation rotation) {
StructureBuffer buffer = new StructureBuffer(location);
Block.ReturnLevel level = block.apply(buffer, rotation, random, 0);
buffer.paste(chunk);
return !level.equals(Block.ReturnLevel.FAIL);
}
public void executeInBuffer(Buffer buffer, Random random, Rotation rotation, int recursions) {
block.apply(buffer, rotation, random, recursions);
}
@@ -2,8 +2,10 @@ package com.dfsek.terra.api.structures.structure.buffer;
import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.platform.world.Chunk;
import com.dfsek.terra.api.structures.structure.buffer.items.BufferedItem;
import com.dfsek.terra.api.structures.structure.buffer.items.Mark;
import net.jafama.FastMath;
import java.util.HashMap;
import java.util.Map;
@@ -17,7 +19,14 @@ public class StructureBuffer implements Buffer {
}
public void paste() {
bufferedItemMap.forEach(((vector3, item) -> item.paste(origin.clone().add(vector3))));
}
public void paste(Chunk chunk) {
bufferedItemMap.forEach(((vector3, item) -> {
Location current = origin.clone().add(vector3);
if(FastMath.floorDiv(current.getBlockX(), 16) != chunk.getX() || FastMath.floorDiv(current.getBlockZ(), 16) != chunk.getZ())
return;
item.paste(origin.clone().add(vector3));
}));
}