Fix IrisJigsawPiece tectonic plate panic

This commit is contained in:
CrazyDev22 2023-10-01 22:28:03 +02:00 committed by RePixelatedMC
parent 1619df1ba3
commit f25c4c74be
5 changed files with 66 additions and 6 deletions

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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<IrisJigsawPiece> {
public class JigsawPieceMatter extends RawMatter<JigsawPieceContainer> {
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<JigsawPieceContainer> 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());
}
}

View File

@ -0,0 +1,13 @@
package com.volmit.iris.util.matter.slices.container;
import com.volmit.iris.engine.object.IrisJigsawPiece;
public class JigsawPieceContainer extends RegistrantContainer<IrisJigsawPiece> {
public JigsawPieceContainer(String loadKey) {
super(IrisJigsawPiece.class, loadKey);
}
public static JigsawPieceContainer toContainer(IrisJigsawPiece piece) {
return new JigsawPieceContainer(piece.getLoadKey());
}
}

View File

@ -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<T extends IrisRegistrant> {
private final Class<T> type;
private final String loadKey;
public RegistrantContainer(Class<T> 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;
}
}