From 0bf0062c2c9aa1d3599aaa366f10beb1a2952991 Mon Sep 17 00:00:00 2001 From: CrazyDev22 Date: Sun, 1 Oct 2023 22:28:03 +0200 Subject: [PATCH] Fix IrisJigsawPiece tectonic plate panic --- .../volmit/iris/engine/framework/Engine.java | 4 ++- .../iris/engine/jigsaw/PlannedStructure.java | 7 +++-- .../util/matter/slices/JigsawPieceMatter.java | 26 ++++++++++++++++--- .../container/JigsawPieceContainer.java | 13 ++++++++++ .../slices/container/RegistrantContainer.java | 22 ++++++++++++++++ 5 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/volmit/iris/util/matter/slices/container/JigsawPieceContainer.java create mode 100644 src/main/java/com/volmit/iris/util/matter/slices/container/RegistrantContainer.java diff --git a/src/main/java/com/volmit/iris/engine/framework/Engine.java b/src/main/java/com/volmit/iris/engine/framework/Engine.java index 38e19c562..bc027df2e 100644 --- a/src/main/java/com/volmit/iris/engine/framework/Engine.java +++ b/src/main/java/com/volmit/iris/engine/framework/Engine.java @@ -49,6 +49,8 @@ import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.matter.MatterCavern; import com.volmit.iris.util.matter.MatterUpdate; import com.volmit.iris.util.matter.TileWrapper; +import com.volmit.iris.util.matter.slices.JigsawPieceMatter; +import com.volmit.iris.util.matter.slices.container.JigsawPieceContainer; import com.volmit.iris.util.parallel.BurstExecutor; import com.volmit.iris.util.parallel.MultiBurst; import com.volmit.iris.util.scheduling.ChronoLatch; @@ -771,7 +773,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat IrisContext.getOr(this); - IrisJigsawPiece piece = getMantle().getMantle().get(x, y, z, IrisJigsawPiece.class); + IrisJigsawPiece piece = getMantle().getMantle().get(x, y, z, JigsawPieceContainer.class).load(getData()); if (piece != null && piece.getObject().equals(object)) { return new PlacedObject(piece.getPlacementOptions(), getData().getObjectLoader().load(object), id, x, z); } diff --git a/src/main/java/com/volmit/iris/engine/jigsaw/PlannedStructure.java b/src/main/java/com/volmit/iris/engine/jigsaw/PlannedStructure.java index 94ab62563..b3dae5bf0 100644 --- a/src/main/java/com/volmit/iris/engine/jigsaw/PlannedStructure.java +++ b/src/main/java/com/volmit/iris/engine/jigsaw/PlannedStructure.java @@ -28,6 +28,8 @@ import com.volmit.iris.engine.object.*; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.mantle.Mantle; import com.volmit.iris.util.math.RNG; +import com.volmit.iris.util.matter.slices.JigsawPieceMatter; +import com.volmit.iris.util.matter.slices.container.JigsawPieceContainer; import lombok.Data; import org.bukkit.Axis; import org.bukkit.World; @@ -120,6 +122,7 @@ public class PlannedStructure { } int id = rng.i(0, Integer.MAX_VALUE); + JigsawPieceContainer container = JigsawPieceContainer.toContainer(i.getPiece()); vo.place(xx, height, zz, new IObjectPlacer() { @Override public int getHighest(int x, int z, IrisData data) { @@ -133,13 +136,13 @@ public class PlannedStructure { @Override public void set(int x, int y, int z, BlockData d) { - placer.setData(x, y, z, i.getPiece()); + placer.setData(x, y, z, container); placer.set(x, y, z, d); } @Override public BlockData get(int x, int y, int z) { - placer.setData(x, y, z, i.getPiece()); + placer.setData(x, y, z, container); return placer.get(x, y, z); } diff --git a/src/main/java/com/volmit/iris/util/matter/slices/JigsawPieceMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/JigsawPieceMatter.java index 20c7bf926..05cc08385 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/JigsawPieceMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/JigsawPieceMatter.java @@ -1,15 +1,35 @@ package com.volmit.iris.util.matter.slices; -import com.volmit.iris.engine.object.IrisJigsawPiece; +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 JigsawPieceMatter extends RegistryMatter { +public class JigsawPieceMatter extends RawMatter { public JigsawPieceMatter() { this(1,1,1); } public JigsawPieceMatter(int width, int height, int depth) { - super(width, height, depth, IrisJigsawPiece.class, new IrisJigsawPiece()); + 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/src/main/java/com/volmit/iris/util/matter/slices/container/JigsawPieceContainer.java b/src/main/java/com/volmit/iris/util/matter/slices/container/JigsawPieceContainer.java new file mode 100644 index 000000000..08e569d5f --- /dev/null +++ b/src/main/java/com/volmit/iris/util/matter/slices/container/JigsawPieceContainer.java @@ -0,0 +1,13 @@ +package com.volmit.iris.util.matter.slices.container; + +import com.volmit.iris.engine.object.IrisJigsawPiece; + +public class JigsawPieceContainer extends RegistrantContainer { + public JigsawPieceContainer(String loadKey) { + super(IrisJigsawPiece.class, loadKey); + } + + public static JigsawPieceContainer toContainer(IrisJigsawPiece piece) { + return new JigsawPieceContainer(piece.getLoadKey()); + } +} diff --git a/src/main/java/com/volmit/iris/util/matter/slices/container/RegistrantContainer.java b/src/main/java/com/volmit/iris/util/matter/slices/container/RegistrantContainer.java new file mode 100644 index 000000000..0ab161e57 --- /dev/null +++ b/src/main/java/com/volmit/iris/util/matter/slices/container/RegistrantContainer.java @@ -0,0 +1,22 @@ +package com.volmit.iris.util.matter.slices.container; + +import com.volmit.iris.core.loader.IrisData; +import com.volmit.iris.core.loader.IrisRegistrant; + +public abstract class RegistrantContainer { + private final Class type; + private final String loadKey; + + public RegistrantContainer(Class type, String loadKey) { + this.type = type; + this.loadKey = loadKey; + } + + public T load(IrisData data) { + return (T) data.getLoaders().get(type).load(loadKey); + } + + public String getLoadKey() { + return loadKey; + } +}