From 308395aa86e9a1bc8b7d8fa29ad5515d51f23573 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Sun, 23 Aug 2020 03:25:12 -0400 Subject: [PATCH] Fix --- src/main/java/com/volmit/iris/Iris.java | 10 ++++------ .../com/volmit/iris/gen/IrisChunkGenerator.java | 12 ++++++++++++ .../volmit/iris/gen/ParallaxChunkGenerator.java | 6 +++--- .../volmit/iris/gen/atomics/AtomicRegionData.java | 15 ++++++++++++--- .../com/volmit/iris/gen/atomics/AtomicSliver.java | 13 ++++++------- .../volmit/iris/gen/atomics/AtomicSliverMap.java | 13 +++++++++++-- .../volmit/iris/gen/atomics/AtomicWorldData.java | 2 +- .../com/volmit/iris/object/IrisDimension.java | 10 +++++++--- .../java/com/volmit/iris/object/IrisObject.java | 12 ++---------- 9 files changed, 58 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index c4f56c5d6..d1ee2711a 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -104,14 +104,8 @@ public class Iris extends MortarPlugin implements BoardProvider public void onDisable() { - lock.unlock(); proj.close(); - for(GroupedExecutor i : executors) - { - i.close(); - } - for(World i : Bukkit.getWorlds()) { if(i.getGenerator() instanceof IrisChunkGenerator) @@ -119,6 +113,10 @@ public class Iris extends MortarPlugin implements BoardProvider ((IrisChunkGenerator) i).close(); } } + for(GroupedExecutor i : executors) + { + i.close(); + } executors.clear(); manager.onDisable(); diff --git a/src/main/java/com/volmit/iris/gen/IrisChunkGenerator.java b/src/main/java/com/volmit/iris/gen/IrisChunkGenerator.java index ba48a921a..9761132d0 100644 --- a/src/main/java/com/volmit/iris/gen/IrisChunkGenerator.java +++ b/src/main/java/com/volmit/iris/gen/IrisChunkGenerator.java @@ -301,4 +301,16 @@ public class IrisChunkGenerator extends PostBlockChunkGenerator implements IrisC hr = region; return biome.getName() + " (" + Form.capitalizeWords(biome.getInferredType().name().toLowerCase().replaceAll("\\Q_\\E", " ") + ") in " + region.getName() + "\nY: " + (int) height); } + + public void saveAllParallax() + { + try + { + getParallaxMap().saveAll(); + } + catch(IOException e) + { + e.printStackTrace(); + } + } } diff --git a/src/main/java/com/volmit/iris/gen/ParallaxChunkGenerator.java b/src/main/java/com/volmit/iris/gen/ParallaxChunkGenerator.java index 6b1b79214..22a86bdc1 100644 --- a/src/main/java/com/volmit/iris/gen/ParallaxChunkGenerator.java +++ b/src/main/java/com/volmit/iris/gen/ParallaxChunkGenerator.java @@ -40,6 +40,7 @@ public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator imple protected KMap sliverCache; protected AtomicWorldData parallaxMap; private MasterLock masterLock; + private IrisLock flock = new IrisLock("ParallaxLock"); private IrisLock lock = new IrisLock("ParallaxLock"); private IrisLock lockq = new IrisLock("ParallaxQueueLock"); private GenLayerUpdate glUpdate; @@ -112,9 +113,7 @@ public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator imple @Override public void set(int x, int y, int z, BlockData d) { - getMasterLock().lock((x >> 4) + "." + (z >> 4)); getParallaxSliver(x, z).set(y, d); - getMasterLock().unlock((x >> 4) + "." + (z >> 4)); } @Override @@ -189,6 +188,7 @@ public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator imple @Override protected void onPostGenerate(RNG random, int x, int z, ChunkData data, BiomeGrid grid, HeightMap height, BiomeMap biomeMap, AtomicSliverMap map) { + // flock.lock(); if(getSliverCache().size() > 20000) { getSliverCache().clear(); @@ -213,6 +213,7 @@ public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator imple super.onPostParallaxPostGenerate(random, x, z, data, grid, height, biomeMap, map); getParallaxMap().clean(ticks); getData().getObjectLoader().clean(); + // flock.unlock(); } public IrisStructureResult getStructure(int x, int y, int z) @@ -349,7 +350,6 @@ public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator imple } getAccelerant().waitFor(key); - lockq.lock(); for(NastyRunnable i : q) { diff --git a/src/main/java/com/volmit/iris/gen/atomics/AtomicRegionData.java b/src/main/java/com/volmit/iris/gen/atomics/AtomicRegionData.java index 3e8e8ad6a..1170691cd 100644 --- a/src/main/java/com/volmit/iris/gen/atomics/AtomicRegionData.java +++ b/src/main/java/com/volmit/iris/gen/atomics/AtomicRegionData.java @@ -9,6 +9,7 @@ import java.util.zip.GZIPInputStream; import org.bukkit.World; +import com.volmit.iris.Iris; import com.volmit.iris.IrisSettings; import com.volmit.iris.util.ByteArrayTag; import com.volmit.iris.util.CompoundTag; @@ -100,7 +101,8 @@ public class AtomicRegionData data.write(out); out.flush(); out.close(); - tag[(rz << 5) | rx] = new ByteArrayTag(rx + "." + rz, boas.toByteArray()); + byte[] b = boas.toByteArray(); + tag[(rz << 5) | rx] = new ByteArrayTag(rx + "." + rz, b); } public AtomicSliverMap get(int rx, int rz) throws IOException @@ -112,9 +114,15 @@ public class AtomicRegionData return data; } + ByteArrayTag btag = (ByteArrayTag) tag[(rz << 5) | rx]; + try { - ByteArrayTag btag = (ByteArrayTag) tag[(rz << 5) | rx]; + if(btag.getValue().length == 0) + { + Iris.warn("EMPTY BYTE TAG " + rx + " " + rz); + return data; + } InputStream in; @@ -129,11 +137,12 @@ public class AtomicRegionData } data.read(in); + in.close(); } catch(Throwable e) { - + Iris.warn("Failed to load " + rx + "." + rz + " with " + btag.getValue().length); } return data; diff --git a/src/main/java/com/volmit/iris/gen/atomics/AtomicSliver.java b/src/main/java/com/volmit/iris/gen/atomics/AtomicSliver.java index 35d7e228b..d36edc8fb 100644 --- a/src/main/java/com/volmit/iris/gen/atomics/AtomicSliver.java +++ b/src/main/java/com/volmit/iris/gen/atomics/AtomicSliver.java @@ -30,8 +30,8 @@ public class AtomicSliver private transient IrisLock lock = new IrisLock("Sliver"); private transient int highestBiome = 0; private transient long last = M.ms(); - private transient int x; - private transient int z; + private transient final int x; + private transient final int z; private transient boolean modified = false; private KMap block; private KSet blockUpdates; @@ -39,7 +39,6 @@ public class AtomicSliver public AtomicSliver(int x, int z) { - lock.setDisabled(true); this.x = x; this.z = z; blockUpdates = new KSet<>(); @@ -204,12 +203,12 @@ public class AtomicSliver lock.lock(); this.block = new KMap(); + getUpdatables().clear(); // Block Palette - int h = din.readByte() - Byte.MIN_VALUE; int p = din.readByte() - Byte.MIN_VALUE; + int h = din.readByte() - Byte.MIN_VALUE; int u = din.readByte() - Byte.MIN_VALUE; KList palette = new KList(); - getUpdatables().clear(); highestBlock = h; for(int i = 0; i < p; i++) @@ -224,7 +223,7 @@ public class AtomicSliver } // Updates - for(int i = 0; i <= u; i++) + for(int i = 0; i < u; i++) { update(din.readByte() - Byte.MIN_VALUE); } @@ -236,7 +235,6 @@ public class AtomicSliver public void write(DataOutputStream dos) throws IOException { lock.lock(); - dos.writeByte(highestBlock + Byte.MIN_VALUE); // Block Palette KList palette = new KList<>(); @@ -253,6 +251,7 @@ public class AtomicSliver } dos.writeByte(palette.size() + Byte.MIN_VALUE); + dos.writeByte(highestBlock + Byte.MIN_VALUE); dos.writeByte(blockUpdates.size() + Byte.MIN_VALUE); for(String i : palette) diff --git a/src/main/java/com/volmit/iris/gen/atomics/AtomicSliverMap.java b/src/main/java/com/volmit/iris/gen/atomics/AtomicSliverMap.java index f128b29ef..45218ef92 100644 --- a/src/main/java/com/volmit/iris/gen/atomics/AtomicSliverMap.java +++ b/src/main/java/com/volmit/iris/gen/atomics/AtomicSliverMap.java @@ -82,9 +82,18 @@ public class AtomicSliverMap DataOutputStream dos = new DataOutputStream(out); dos.writeBoolean(isParallaxGenerated()); dos.writeBoolean(isWorldGenerated()); + for(int i = 0; i < 256; i++) { - slivers[i].write(dos); + try + { + slivers[i].write(dos); + } + + catch(Throwable e) + { + e.printStackTrace(); + } } KList structurePalette = new KList<>(); @@ -132,7 +141,7 @@ public class AtomicSliverMap catch(Throwable e) { - + e.printStackTrace(); } } diff --git a/src/main/java/com/volmit/iris/gen/atomics/AtomicWorldData.java b/src/main/java/com/volmit/iris/gen/atomics/AtomicWorldData.java index 76896e566..ac041cb98 100644 --- a/src/main/java/com/volmit/iris/gen/atomics/AtomicWorldData.java +++ b/src/main/java/com/volmit/iris/gen/atomics/AtomicWorldData.java @@ -313,7 +313,7 @@ public class AtomicWorldData break; } - if(M.ms() - lastChunk.get(i) > 15000) + if(M.ms() - lastChunk.get(i) > 60000) { m++; unloadChunks.add(i); diff --git a/src/main/java/com/volmit/iris/object/IrisDimension.java b/src/main/java/com/volmit/iris/object/IrisDimension.java index 18830c866..afd9b94f4 100644 --- a/src/main/java/com/volmit/iris/object/IrisDimension.java +++ b/src/main/java/com/volmit/iris/object/IrisDimension.java @@ -19,7 +19,6 @@ import com.volmit.iris.util.DontObfuscate; import com.volmit.iris.util.Form; import com.volmit.iris.util.IrisLock; import com.volmit.iris.util.IrisPostBlockFilter; -import com.volmit.iris.util.J; import com.volmit.iris.util.KList; import com.volmit.iris.util.KSet; import com.volmit.iris.util.MaxNumber; @@ -619,8 +618,10 @@ public class IrisDimension extends IrisRegistrant { Iris.info("Calculating the Parallax Size in Parallel"); O xg = new O<>(); + O yg = new O<>(); O zg = new O<>(); xg.set(0); + yg.set(0); zg.set(0); KSet objects = new KSet<>(); @@ -649,6 +650,7 @@ public class IrisDimension extends IrisRegistrant BlockVector bv = IrisObject.sampleSize(g.getData().getObjectLoader().findFile(i)); t.lock(); xg.set(bv.getBlockX() > xg.get() ? bv.getBlockX() : xg.get()); + yg.set(bv.getBlockY() > yg.get() ? bv.getBlockY() : yg.get()); zg.set(bv.getBlockZ() > zg.get() ? bv.getBlockZ() : zg.get()); t.unlock(); } @@ -662,8 +664,8 @@ public class IrisDimension extends IrisRegistrant g.getAccelerant().waitFor("tx-psize"); g.changeThreadCount(tc); - int x = xg.get(); - int z = zg.get(); + int x = Math.max(xg.get(), Math.max(yg.get(), zg.get())); + int z = x; for(IrisDepositGenerator i : getDeposits()) { @@ -696,6 +698,8 @@ public class IrisDimension extends IrisRegistrant z = (Math.max(z, 16) + 16) >> 4; x = x % 2 == 0 ? x + 1 : x; z = z % 2 == 0 ? z + 1 : z; + z = Math.max(x, z); + x = z; Iris.info("Done! Parallax Size: " + x + ", " + z); return new ChunkPosition(x, z); }); diff --git a/src/main/java/com/volmit/iris/object/IrisObject.java b/src/main/java/com/volmit/iris/object/IrisObject.java index 3dab3fb6d..ba14c1a35 100644 --- a/src/main/java/com/volmit/iris/object/IrisObject.java +++ b/src/main/java/com/volmit/iris/object/IrisObject.java @@ -147,18 +147,10 @@ public class IrisObject extends IrisRegistrant { if(config.getMode().equals(ObjectPlaceMode.CENTER_HEIGHT_RIGID)) { - if(config.isTranslateCenter()) - { - y = placer.getHighest(x, z, config.isUnderwater()) + rty; - } - - else - { - y = placer.getHighest(x, z, config.isUnderwater()) + rty; - } + y = placer.getHighest(x, z, config.isUnderwater()) + rty; } - if(config.getMode().equals(ObjectPlaceMode.MAX_HEIGHT_RIGID_ACCURATE)) + else if(config.getMode().equals(ObjectPlaceMode.MAX_HEIGHT_RIGID_ACCURATE)) { BlockVector offset = new BlockVector(config.getTranslate().getX(), config.getTranslate().getY(), config.getTranslate().getZ()); BlockVector rotatedDimensions = config.getRotation().rotate(new BlockVector(getW(), getH(), getD()), spinx, spiny, spinz).clone();