9
0
mirror of https://github.com/VolmitSoftware/Iris.git synced 2025-12-30 04:29:05 +00:00

fix jigsaw place command

This commit is contained in:
CrazyDev22
2024-04-19 15:18:11 +02:00
parent 6645eb9806
commit a7118aa785
3 changed files with 20 additions and 13 deletions

View File

@@ -57,7 +57,7 @@ public class CommandJigsaw implements DecreeExecutor {
PrecisionStopwatch p = PrecisionStopwatch.start();
PlannedStructure ps = new PlannedStructure(structure, new IrisPosition(player().getLocation()), new RNG());
sender().sendMessage(C.GREEN + "Generated " + ps.getPieces().size() + " pieces in " + Form.duration(p.getMilliseconds(), 2));
ps.place(world());
ps.place(world(), failed -> sender().sendMessage(failed == 0 ? C.GREEN + "Placed the structure!" : C.RED + "Failed to place " + failed + " pieces!"));
}
@Decree(description = "Create a jigsaw piece")

View File

@@ -165,7 +165,7 @@ public class PlannedPiece {
return connected.size() >= piece.getConnectors().size() || isDead();
}
public void place(World world) {
public boolean place(World world) {
PlatformChunkGenerator a = IrisToolbelt.access(world);
int minY = 0;
@@ -175,14 +175,16 @@ public class PlannedPiece {
if (!a.getEngine().getDimension().isBedrock())
minY--; //If the dimension has no bedrock, allow it to go a block lower
}
Engine engine = a != null ? a.getEngine() : IrisContext.get().getEngine();
getPiece().getPlacementOptions().setTranslate(new IrisObjectTranslate());
getPiece().getPlacementOptions().setRotation(rotation);
getPiece().getPlacementOptions().getRotation().setEnabled(false);
getPiece().getPlacementOptions().setRotateTowardsSlope(false);
int finalMinY = minY;
RNG rng = getStructure().getRng().nextParallelRNG(37555);
// TODO: REAL CLASSES!!!!!!!
getOgObject().place(position.getX() + getObject().getCenter().getBlockX(), position.getY() + getObject().getCenter().getBlockY(), position.getZ() + getObject().getCenter().getBlockZ(), new IObjectPlacer() {
return getObject().place(position.getX() + getObject().getCenter().getBlockX(), position.getY() + getObject().getCenter().getBlockY(), position.getZ() + getObject().getCenter().getBlockZ(), new IObjectPlacer() {
@Override
public int getHighest(int x, int z, IrisData data) {
return position.getY();
@@ -207,7 +209,6 @@ public class PlannedPiece {
IrisLootTable table = getPiece().getPlacementOptions().getTable(block.getBlockData(), getData());
if (table == null) return;
Engine engine = a.getEngine();
engine.addItems(false, ((InventoryHolder) block.getState()).getInventory(),
rng.nextParallelRNG(BlockPosition.toLong(x, y, z)),
new KList<>(table), InventorySlotType.STORAGE, x, y, z, 15);
@@ -258,12 +259,8 @@ public class PlannedPiece {
@Override
public Engine getEngine() {
if (IrisToolbelt.isIrisWorld(world)) {
return IrisToolbelt.access(world).getEngine();
}
return IrisContext.get().getEngine();
return engine;
}
}, piece.getPlacementOptions(), rng, getData());
}, piece.getPlacementOptions(), rng, getData().getEngine() == null ? engine.getData() : getData()) != -1;
}
}

View File

@@ -34,6 +34,9 @@ import lombok.Data;
import org.bukkit.Axis;
import org.bukkit.World;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.IntConsumer;
@Data
public class PlannedStructure {
private static ConcurrentLinkedHashMap<String, IrisObject> objectRotationCache
@@ -138,9 +141,16 @@ public class PlannedStructure {
}, null, getData()) != -1;
}
public void place(World world) {
public void place(World world, IntConsumer consumer) {
AtomicInteger processed = new AtomicInteger();
AtomicInteger failures = new AtomicInteger();
for (PlannedPiece i : pieces) {
Iris.sq(() -> i.place(world));
Iris.sq(() -> {
if (!i.place(world)) failures.incrementAndGet();
if (processed.incrementAndGet() == pieces.size()) {
consumer.accept(failures.get());
}
});
}
}