Merge remote-tracking branch 'CrazyDev/jigsaw_placement_fix' into PixelatedDev

This commit is contained in:
RePixelatedMC
2024-02-14 09:13:37 +01:00
2 changed files with 23 additions and 101 deletions
@@ -28,7 +28,6 @@ import com.volmit.iris.engine.object.*;
import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.mantle.Mantle; import com.volmit.iris.util.mantle.Mantle;
import com.volmit.iris.util.math.RNG; 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 com.volmit.iris.util.matter.slices.container.JigsawPieceContainer;
import lombok.Data; import lombok.Data;
import org.bukkit.Axis; import org.bukkit.Axis;
@@ -75,7 +74,7 @@ public class PlannedStructure {
} }
} }
public void place(MantleWriter placer, Mantle e, Engine eng) { public void place(IObjectPlacer placer, Mantle e, Engine eng) {
IrisObjectPlacement options = new IrisObjectPlacement(); IrisObjectPlacement options = new IrisObjectPlacement();
options.getRotation().setEnabled(false); options.getRotation().setEnabled(false);
int startHeight = pieces.get(0).getPosition().getY(); int startHeight = pieces.get(0).getPosition().getY();
@@ -85,7 +84,7 @@ public class PlannedStructure {
} }
} }
public void place(PlannedPiece i, int startHeight, IrisObjectPlacement o, MantleWriter placer, Mantle e, Engine eng) { public void place(PlannedPiece i, int startHeight, IrisObjectPlacement o, IObjectPlacer placer, Mantle e, Engine eng) {
IrisObjectPlacement options = o; IrisObjectPlacement options = o;
if (i.getPiece().getPlacementOptions() != null) { if (i.getPiece().getPlacementOptions() != null) {
@@ -123,69 +122,10 @@ public class PlannedStructure {
int id = rng.i(0, Integer.MAX_VALUE); int id = rng.i(0, Integer.MAX_VALUE);
JigsawPieceContainer container = JigsawPieceContainer.toContainer(i.getPiece()); JigsawPieceContainer container = JigsawPieceContainer.toContainer(i.getPiece());
vo.place(xx, height, zz, new IObjectPlacer() { vo.place(xx, height, zz, placer, options, rng, (b, data) -> {
@Override e.set(b.getX(), b.getY(), b.getZ(), v.getLoadKey() + "@" + id);
public int getHighest(int x, int z, IrisData data) { e.set(b.getX(), b.getY(), b.getZ(), container);
return placer.getHighest(x, z, data); }, null, getData());
}
@Override
public int getHighest(int x, int z, IrisData data, boolean ignoreFluid) {
return placer.getHighest(x, z, data, ignoreFluid);
}
@Override
public void set(int x, int y, int z, BlockData d) {
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, container);
return placer.get(x, y, z);
}
@Override
public boolean isPreventingDecay() {
return placer.isPreventingDecay();
}
@Override
public boolean isCarved(int x, int y, int z) {
return placer.isCarved(x, y, z);
}
@Override
public boolean isSolid(int x, int y, int z) {
return placer.isSolid(x, y, z);
}
@Override
public boolean isUnderwater(int x, int z) {
return placer.isUnderwater(x, z);
}
@Override
public int getFluidHeight() {
return placer.getFluidHeight();
}
@Override
public boolean isDebugSmartBore() {
return placer.isDebugSmartBore();
}
@Override
public void setTile(int xx, int yy, int zz, TileData<? extends TileState> tile) {
placer.setTile(xx, yy, zz, tile);
}
@Override
public Engine getEngine() {
return placer.getEngine();
}
}, options, rng, (b, data) -> e.set(b.getX(), b.getY(), b.getZ(), v.getLoadKey() + "@" + id), null, getData());
} }
public void place(World world) { public void place(World world) {
@@ -361,10 +301,6 @@ public class PlannedStructure {
public boolean collidesWith(PlannedPiece piece, PlannedPiece ignore) { public boolean collidesWith(PlannedPiece piece, PlannedPiece ignore) {
for (PlannedPiece i : pieces) { for (PlannedPiece i : pieces) {
if (i.equals(ignore)) {
continue;
}
if (i.collidesWith(piece)) { if (i.collidesWith(piece)) {
return true; return true;
} }
@@ -23,6 +23,7 @@ import com.volmit.iris.engine.mantle.EngineMantle;
import com.volmit.iris.engine.mantle.IrisMantleComponent; import com.volmit.iris.engine.mantle.IrisMantleComponent;
import com.volmit.iris.engine.mantle.MantleWriter; import com.volmit.iris.engine.mantle.MantleWriter;
import com.volmit.iris.engine.object.*; import com.volmit.iris.engine.object.*;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.context.ChunkContext; import com.volmit.iris.util.context.ChunkContext;
import com.volmit.iris.util.documentation.BlockCoordinates; import com.volmit.iris.util.documentation.BlockCoordinates;
import com.volmit.iris.util.documentation.ChunkCoordinates; import com.volmit.iris.util.documentation.ChunkCoordinates;
@@ -53,8 +54,6 @@ public class MantleJigsawComponent extends IrisMantleComponent {
@ChunkCoordinates @ChunkCoordinates
private void generateJigsaw(MantleWriter writer, RNG rng, int x, int z, IrisBiome biome, IrisRegion region) { private void generateJigsaw(MantleWriter writer, RNG rng, int x, int z, IrisBiome biome, IrisRegion region) {
boolean placed = false;
if (getDimension().getStronghold() != null) { if (getDimension().getStronghold() != null) {
List<Position2> poss = getDimension().getStrongholds(seed()); List<Position2> poss = getDimension().getStrongholds(seed());
@@ -63,43 +62,30 @@ public class MantleJigsawComponent extends IrisMantleComponent {
if (x == pos.getX() >> 4 && z == pos.getZ() >> 4) { if (x == pos.getX() >> 4 && z == pos.getZ() >> 4) {
IrisJigsawStructure structure = getData().getJigsawStructureLoader().load(getDimension().getStronghold()); IrisJigsawStructure structure = getData().getJigsawStructureLoader().load(getDimension().getStronghold());
place(writer, pos.toIris(), structure, rng); place(writer, pos.toIris(), structure, rng);
placed = true; return;
} }
} }
} }
} }
if (!placed) { boolean placed = placeStructures(writer, rng, x, z, biome.getJigsawStructures());
for (IrisJigsawStructurePlacement i : biome.getJigsawStructures()) { if (!placed)
if (rng.nextInt(i.getRarity()) == 0) { placed = placeStructures(writer, rng, x, z, region.getJigsawStructures());
IrisPosition position = new IrisPosition((x << 4) + rng.nextInt(15), 0, (z << 4) + rng.nextInt(15)); if (!placed)
IrisJigsawStructure structure = getData().getJigsawStructureLoader().load(i.getStructure()); placeStructures(writer, rng, x, z, getDimension().getJigsawStructures());
place(writer, position, structure, rng); }
placed = true;
}
}
}
if (!placed) { @ChunkCoordinates
for (IrisJigsawStructurePlacement i : region.getJigsawStructures()) { private boolean placeStructures(MantleWriter writer, RNG rng, int x, int z, KList<IrisJigsawStructurePlacement> structures) {
if (rng.nextInt(i.getRarity()) == 0) { for (IrisJigsawStructurePlacement i : structures) {
IrisPosition position = new IrisPosition((x << 4) + rng.nextInt(15), 0, (z << 4) + rng.nextInt(15)); if (rng.nextInt(i.getRarity()) == 0) {
IrisJigsawStructure structure = getData().getJigsawStructureLoader().load(i.getStructure()); IrisPosition position = new IrisPosition((x << 4) + rng.nextInt(15), 0, (z << 4) + rng.nextInt(15));
place(writer, position, structure, rng); IrisJigsawStructure structure = getData().getJigsawStructureLoader().load(i.getStructure());
placed = true; place(writer, position, structure, rng);
} return true;
}
}
if (!placed) {
for (IrisJigsawStructurePlacement i : getDimension().getJigsawStructures()) {
if (rng.nextInt(i.getRarity()) == 0) {
IrisPosition position = new IrisPosition((x << 4) + rng.nextInt(15), 0, (z << 4) + rng.nextInt(15));
IrisJigsawStructure structure = getData().getJigsawStructureLoader().load(i.getStructure());
place(writer, position, structure, rng);
}
} }
} }
return false;
} }
@ChunkCoordinates @ChunkCoordinates