From b6bc269505571778f9fb8f23b173d238e455bd1a Mon Sep 17 00:00:00 2001 From: StrangeOne101 Date: Sat, 19 Jun 2021 19:34:46 +1200 Subject: [PATCH] Fixes - Fixed NPE occuring when Jigsaw fails to find Object in pool. Now just produces a warning in the console like it should - Fixed pointless copies of lists being created within PlannedStructure - Fixed mobs spawning within other blocks and suffocating on spawn - Fixed creating a jigsaw with a non existent object causing jigsaw commands to lock up (#377) - Fixed editing a non existent jigsaw just not doing anything --- .../iris/manager/command/jigsaw/CommandIrisJigsawEdit.java | 3 +++ .../iris/manager/command/jigsaw/CommandIrisJigsawNew.java | 6 ++++++ .../com/volmit/iris/object/IrisEntityInitialSpawn.java | 2 +- .../com/volmit/iris/scaffold/jigsaw/PlannedStructure.java | 7 +++---- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/volmit/iris/manager/command/jigsaw/CommandIrisJigsawEdit.java b/src/main/java/com/volmit/iris/manager/command/jigsaw/CommandIrisJigsawEdit.java index 579a65683..2bcc14ca7 100644 --- a/src/main/java/com/volmit/iris/manager/command/jigsaw/CommandIrisJigsawEdit.java +++ b/src/main/java/com/volmit/iris/manager/command/jigsaw/CommandIrisJigsawEdit.java @@ -53,8 +53,11 @@ public class CommandIrisJigsawEdit extends MortarCommand { File dest = piece.getLoadFile(); new JigsawEditor(sender.player(), piece, IrisDataManager.loadAnyObject(piece.getObject()), dest); + return true; } + sender.sendMessage("Failed to find existing jigsaw piece: " + args[0]); + return true; } diff --git a/src/main/java/com/volmit/iris/manager/command/jigsaw/CommandIrisJigsawNew.java b/src/main/java/com/volmit/iris/manager/command/jigsaw/CommandIrisJigsawNew.java index 49e90f8a5..04424cd60 100644 --- a/src/main/java/com/volmit/iris/manager/command/jigsaw/CommandIrisJigsawNew.java +++ b/src/main/java/com/volmit/iris/manager/command/jigsaw/CommandIrisJigsawNew.java @@ -48,6 +48,12 @@ public class CommandIrisJigsawNew extends MortarCommand } IrisObject object = IrisDataManager.loadAnyObject(args[2]); + + if (object == null) { + sender.sendMessage("Failed to find existing object: " + args[2]); + return true; + } + File dest = Iris.instance.getDataFile("packs", args[1], "jigsaw-pieces", args[0] + ".json"); new JigsawEditor(sender.player(), null, object, dest); sender.sendMessage("* Right Click blocks to make them connectors"); diff --git a/src/main/java/com/volmit/iris/object/IrisEntityInitialSpawn.java b/src/main/java/com/volmit/iris/object/IrisEntityInitialSpawn.java index 0a4418ef5..bc9a44d02 100644 --- a/src/main/java/com/volmit/iris/object/IrisEntityInitialSpawn.java +++ b/src/main/java/com/volmit/iris/object/IrisEntityInitialSpawn.java @@ -80,6 +80,6 @@ public class IrisEntityInitialSpawn private Entity spawn100(Engine g, Location at) { - return getRealEntity(g).spawn(g, at.clone().add(0, 1, 0), rng.aquire(() -> new RNG(g.getTarget().getWorld().getSeed() + 4))); + return getRealEntity(g).spawn(g, at.clone().add(0.5, 1, 0.5), rng.aquire(() -> new RNG(g.getTarget().getWorld().getSeed() + 4))); } } diff --git a/src/main/java/com/volmit/iris/scaffold/jigsaw/PlannedStructure.java b/src/main/java/com/volmit/iris/scaffold/jigsaw/PlannedStructure.java index 35ca00087..350797d0c 100644 --- a/src/main/java/com/volmit/iris/scaffold/jigsaw/PlannedStructure.java +++ b/src/main/java/com/volmit/iris/scaffold/jigsaw/PlannedStructure.java @@ -179,7 +179,7 @@ public class PlannedStructure { } private void generateOutwards() { - for(PlannedPiece i : getPiecesWithAvailableConnectors().shuffleCopy(rng)) + for(PlannedPiece i : getPiecesWithAvailableConnectors().shuffle(rng)) { if(!generatePieceOutwards(i)) { @@ -317,7 +317,7 @@ public class PlannedStructure { { IrisJigsawPiece pi = getData().getJigsawPieceLoader().load(j); - if(terminating && !pi.isTerminal()) + if (pi == null || (terminating && !pi.isTerminal())) { continue; } @@ -325,8 +325,7 @@ public class PlannedStructure { p.addIfMissing(pi); } } - - return p.shuffleCopy(rng); + return p.shuffle(rng); } private void generateStartPiece() {