diff --git a/core/src/main/java/com/volmit/iris/engine/IrisEngine.java b/core/src/main/java/com/volmit/iris/engine/IrisEngine.java index 2f9bd5a88..e5db0d978 100644 --- a/core/src/main/java/com/volmit/iris/engine/IrisEngine.java +++ b/core/src/main/java/com/volmit/iris/engine/IrisEngine.java @@ -47,6 +47,7 @@ import com.volmit.iris.util.mantle.MantleFlag; import com.volmit.iris.util.math.M; import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.matter.MatterStructurePOI; +import com.volmit.iris.util.matter.slices.container.JigsawStructureContainer; import com.volmit.iris.util.scheduling.ChronoLatch; import com.volmit.iris.util.scheduling.J; import com.volmit.iris.util.scheduling.PrecisionStopwatch; @@ -223,6 +224,12 @@ public class IrisEngine implements Engine { return getMantle().getJigsawComponent().guess(x, z); } + @Override + public IrisJigsawStructure getStructureAt(int x, int y, int z) { + var container = getMantle().getMantle().get(x, y, z, JigsawStructureContainer.class); + return container == null ? null : container.load(getData()); + } + private void warmupChunk(int x, int z) { for (int i = 0; i < 16; i++) { for (int j = 0; j < 16; j++) { diff --git a/core/src/main/java/com/volmit/iris/engine/framework/Engine.java b/core/src/main/java/com/volmit/iris/engine/framework/Engine.java index 1e39c8667..40072c47b 100644 --- a/core/src/main/java/com/volmit/iris/engine/framework/Engine.java +++ b/core/src/main/java/com/volmit/iris/engine/framework/Engine.java @@ -231,6 +231,9 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat @ChunkCoordinates IrisJigsawStructure getStructureAt(int x, int z); + @BlockCoordinates + IrisJigsawStructure getStructureAt(int x, int y, int z); + @BlockCoordinates default IrisBiome getCaveBiome(int x, int z) { return getComplex().getCaveBiomeStream().get(x, z); diff --git a/core/src/main/java/com/volmit/iris/engine/jigsaw/PlannedStructure.java b/core/src/main/java/com/volmit/iris/engine/jigsaw/PlannedStructure.java index d6a49b58f..c045cf922 100644 --- a/core/src/main/java/com/volmit/iris/engine/jigsaw/PlannedStructure.java +++ b/core/src/main/java/com/volmit/iris/engine/jigsaw/PlannedStructure.java @@ -29,6 +29,7 @@ import com.volmit.iris.util.mantle.Mantle; import com.volmit.iris.util.math.Position2; import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.matter.slices.container.JigsawPieceContainer; +import com.volmit.iris.util.matter.slices.container.JigsawStructureContainer; import com.volmit.iris.util.matter.slices.container.JigsawStructuresContainer; import com.volmit.iris.util.scheduling.J; import lombok.Data; @@ -149,11 +150,13 @@ public class PlannedStructure { } int id = rng.i(0, Integer.MAX_VALUE); - JigsawPieceContainer container = JigsawPieceContainer.toContainer(i.getPiece()); + JigsawPieceContainer piece = JigsawPieceContainer.toContainer(i.getPiece()); + JigsawStructureContainer structure = JigsawStructureContainer.toContainer(getStructure()); i.setRealPositions(xx, height, zz, placer); return v.place(xx, height, zz, placer, options, rng, (b, data) -> { e.set(b.getX(), b.getY(), b.getZ(), v.getLoadKey() + "@" + id); - e.set(b.getX(), b.getY(), b.getZ(), container); + e.set(b.getX(), b.getY(), b.getZ(), structure); + e.set(b.getX(), b.getY(), b.getZ(), piece); }, null, getData().getEngine() != null ? getData() : eng.getData()) != -1; } diff --git a/core/src/main/java/com/volmit/iris/util/matter/slices/JigsawStructureMatter.java b/core/src/main/java/com/volmit/iris/util/matter/slices/JigsawStructureMatter.java new file mode 100644 index 000000000..6e9ec2ce0 --- /dev/null +++ b/core/src/main/java/com/volmit/iris/util/matter/slices/JigsawStructureMatter.java @@ -0,0 +1,35 @@ +package com.volmit.iris.util.matter.slices; + +import com.volmit.iris.util.data.palette.Palette; +import com.volmit.iris.util.matter.Sliced; +import com.volmit.iris.util.matter.slices.container.JigsawPieceContainer; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +@Sliced +public class JigsawStructureMatter extends RawMatter { + public JigsawStructureMatter() { + this(1,1,1); + } + + public JigsawStructureMatter(int width, int height, int depth) { + super(width, height, depth, JigsawPieceContainer.class); + } + + @Override + public Palette getGlobalPalette() { + return null; + } + + @Override + public void writeNode(JigsawPieceContainer b, DataOutputStream dos) throws IOException { + dos.writeUTF(b.getLoadKey()); + } + + @Override + public JigsawPieceContainer readNode(DataInputStream din) throws IOException { + return new JigsawPieceContainer(din.readUTF()); + } +} diff --git a/core/src/main/java/com/volmit/iris/util/matter/slices/container/JigsawStructureContainer.java b/core/src/main/java/com/volmit/iris/util/matter/slices/container/JigsawStructureContainer.java new file mode 100644 index 000000000..bd581ede3 --- /dev/null +++ b/core/src/main/java/com/volmit/iris/util/matter/slices/container/JigsawStructureContainer.java @@ -0,0 +1,13 @@ +package com.volmit.iris.util.matter.slices.container; + +import com.volmit.iris.engine.object.IrisJigsawStructure; + +public class JigsawStructureContainer extends RegistrantContainer { + public JigsawStructureContainer(String loadKey) { + super(IrisJigsawStructure.class, loadKey); + } + + public static JigsawStructureContainer toContainer(IrisJigsawStructure structure) { + return new JigsawStructureContainer(structure.getLoadKey()); + } +}