From bf2da499d6c7078875d0a986a06e7e0714ff6f26 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Thu, 23 Sep 2021 21:23:38 -0400 Subject: [PATCH] Fixes --- .../volmit/iris/engine/object/IrisLake.java | 41 -------- .../volmit/iris/engine/object/IrisRiver.java | 41 -------- .../volmit/iris/util/hunk/bits/DataBits.java | 31 +++++-- .../iris/util/hunk/bits/DataContainer.java | 93 +++++++++++++------ .../iris/util/hunk/bits/HashPalette.java | 13 ++- .../iris/util/hunk/bits/LinearPalette.java | 7 +- .../volmit/iris/util/hunk/bits/Palette.java | 28 ++---- .../iris/util/hunk/storage/PaletteHunk.java | 5 +- .../iris/util/hunk/storage/PaletteOrHunk.java | 4 +- .../volmit/iris/util/matter/MatterSlice.java | 2 +- .../volmit/iris/util/matter/MatterTest.java | 47 ---------- .../iris/util/matter/slices/BiomeMatter.java | 40 -------- .../iris/util/matter/slices/BlockMatter.java | 5 +- .../util/matter/slices/BooleanMatter.java | 2 +- .../iris/util/matter/slices/CavernMatter.java | 4 +- .../util/matter/slices/CompoundMatter.java | 4 +- .../iris/util/matter/slices/EntityMatter.java | 3 +- .../util/matter/slices/FluidBodyMatter.java | 64 ------------- .../iris/util/matter/slices/IntMatter.java | 2 +- .../iris/util/matter/slices/LongMatter.java | 2 +- .../iris/util/matter/slices/MarkerMatter.java | 3 +- .../iris/util/matter/slices/NBTMatter.java | 6 +- .../iris/util/matter/slices/PlayerMatter.java | 60 ------------ .../iris/util/matter/slices/RawMatter.java | 4 +- .../iris/util/matter/slices/RegionMatter.java | 33 ------- .../util/matter/slices/RegistryMatter.java | 4 +- .../util/matter/slices/SpawnerMatter.java | 2 +- .../iris/util/matter/slices/StringMatter.java | 2 +- .../iris/util/matter/slices/TileMatter.java | 4 +- .../iris/util/matter/slices/UpdateMatter.java | 2 +- 30 files changed, 152 insertions(+), 406 deletions(-) delete mode 100644 src/main/java/com/volmit/iris/util/matter/slices/BiomeMatter.java delete mode 100644 src/main/java/com/volmit/iris/util/matter/slices/FluidBodyMatter.java delete mode 100644 src/main/java/com/volmit/iris/util/matter/slices/PlayerMatter.java delete mode 100644 src/main/java/com/volmit/iris/util/matter/slices/RegionMatter.java diff --git a/src/main/java/com/volmit/iris/engine/object/IrisLake.java b/src/main/java/com/volmit/iris/engine/object/IrisLake.java index dbe33cfaf..7c463e553 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisLake.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisLake.java @@ -29,7 +29,6 @@ import com.volmit.iris.engine.object.annotations.Snippet; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.matter.MatterFluidBody; -import com.volmit.iris.util.matter.slices.FluidBodyMatter; import com.volmit.iris.util.noise.CNG; import lombok.AllArgsConstructor; import lombok.Data; @@ -66,46 +65,6 @@ public class IrisLake implements IRare { } public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) { - KList pos = getWorm().generate(rng, engine.getData(), writer, null, x, y, z, (at) -> { - }); - CNG dg = depthStyle.getGenerator().createNoCache(rng, engine.getData()); - CNG bw = widthStyle.getGenerator().createNoCache(rng, engine.getData()); - IrisPosition avg; - double ax = 0; - double ay = 0; - double az = 0; - double[] surfaces = new double[pos.size()]; - int i = 0; - for (IrisPosition p : pos) { - surfaces[i] = engine.getComplex().getHeightStream().get(x, z); - ax += p.getX(); - ay += surfaces[i]; - az += p.getZ(); - i++; - } - - avg = new IrisPosition(ax / pos.size(), ay / pos.size(), az / pos.size()); - MatterFluidBody body = FluidBodyMatter.get(customBiome, false); - i = 0; - - for (IrisPosition p : pos) { - - double surface = surfaces[i]; - double depth = dg.fitDouble(depthStyle.getMin(), depthStyle.getMax(), p.getX(), p.getZ()) + (surface - avg.getY()); - double width = bw.fitDouble(widthStyle.getMin(), widthStyle.getMax(), p.getX(), p.getZ()); - - if (depth > 1) { - writer.setElipsoidFunction(p.getX(), avg.getY(), p.getZ(), width, depth, width, true, (xx, yy, zz) -> { - if (yy > avg.getY()) { - return null; - } - - return body; - }); - } - - i++; - } } } diff --git a/src/main/java/com/volmit/iris/engine/object/IrisRiver.java b/src/main/java/com/volmit/iris/engine/object/IrisRiver.java index 35a2b2216..6a2e76c2b 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisRiver.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisRiver.java @@ -29,7 +29,6 @@ import com.volmit.iris.engine.object.annotations.Snippet; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.matter.MatterFluidBody; -import com.volmit.iris.util.matter.slices.FluidBodyMatter; import com.volmit.iris.util.noise.CNG; import lombok.AllArgsConstructor; import lombok.Data; @@ -69,46 +68,6 @@ public class IrisRiver implements IRare { } public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) { - KList pos = getWorm().generate(rng, engine.getData(), writer, null, x, y, z, (at) -> { - }); - CNG dg = depthStyle.getGenerator().createNoCache(rng, engine.getData()); - CNG bw = widthStyle.getGenerator().createNoCache(rng, engine.getData()); - IrisPosition avg; - double ax = 0; - double ay = 0; - double az = 0; - double[] surfaces = new double[pos.size()]; - int i = 0; - for (IrisPosition p : pos) { - surfaces[i] = engine.getComplex().getHeightStream().get(x, z); - ax += p.getX(); - ay += surfaces[i]; - az += p.getZ(); - i++; - } - - avg = new IrisPosition(ax / pos.size(), ay / pos.size(), az / pos.size()); - MatterFluidBody body = FluidBodyMatter.get(customBiome, false); - i = 0; - - for (IrisPosition p : pos) { - - double surface = surfaces[i]; - double depth = dg.fitDouble(depthStyle.getMin(), depthStyle.getMax(), p.getX(), p.getZ()) + (surface - avg.getY()); - double width = bw.fitDouble(widthStyle.getMin(), widthStyle.getMax(), p.getX(), p.getZ()); - - if (depth > 1) { - writer.setElipsoidFunction(p.getX(), avg.getY(), p.getZ(), width, depth, width, true, (xx, yy, zz) -> { - if (yy > avg.getY()) { - return null; - } - - return body; - }); - } - - i++; - } } } diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/DataBits.java b/src/main/java/com/volmit/iris/util/hunk/bits/DataBits.java index 52f877657..7b4b67e2f 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/DataBits.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/DataBits.java @@ -18,6 +18,7 @@ package com.volmit.iris.util.hunk.bits; +import com.volmit.iris.Iris; import com.volmit.iris.util.data.Varint; import org.apache.commons.lang3.Validate; @@ -66,7 +67,7 @@ public class DataBits { public DataBits(int bits, int length, DataInputStream din) throws IOException { - this(bits, length, longs(din, (length + ((char) (64 / bits)) - 1) / ((char) (64 / bits)))); + this(bits, length, longs(din)); } public DataBits(int bits, int length, AtomicLongArray data) { @@ -80,10 +81,11 @@ public class DataBits { this.divideAdd = MAGIC[var3 + 1]; this.divideShift = MAGIC[var3 + 2]; int var4 = (length + valuesPerLong - 1) / valuesPerLong; + if (data != null) { if (data.length() != var4) { - throw new RuntimeException("NO!"); + throw new RuntimeException("NO! Trying to load " + data.length() + " into actual size of " + var4 + " because length: " + length + " (bits: " + bits + ")"); } this.data = data; } else { @@ -91,10 +93,20 @@ public class DataBits { } } - private static AtomicLongArray longs(DataInputStream din, int len) throws IOException{ - AtomicLongArray a = new AtomicLongArray(len); + public String toString() + { + return "DBits: " + size + "/" + bits + "[" + data.length() + "]"; + } - for(int i = 0; i < len; i++) + private static int dataLength(int bits, int length) + { + return (length + ((char) (64 / bits)) - 1) / ((char) (64 / bits)); + } + + private static AtomicLongArray longs(DataInputStream din) throws IOException{ + AtomicLongArray a = new AtomicLongArray(din.readInt()); + + for(int i = 0; i < a.length(); i++) { a.set(i, din.readLong()); } @@ -108,7 +120,12 @@ public class DataBits { { DataBits newData = new DataBits(newBits, size); AtomicInteger c = new AtomicInteger(0); - getAll((i) -> newData.set(c.incrementAndGet(), i)); + + for(int i = 0; i < size; i++) + { + newData.set(i, get(i)); + } + return newData; } @@ -181,7 +198,7 @@ public class DataBits { } public void write(DataOutputStream dos) throws IOException { - dos.writeByte(bits); + dos.writeInt(data.length()); for(int i = 0; i < data.length(); i++) { diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java b/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java index a515fda80..23ed74184 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java @@ -18,13 +18,13 @@ package com.volmit.iris.util.hunk.bits; +import com.volmit.iris.Iris; import com.volmit.iris.util.data.Varint; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; -import java.io.InputStream; import java.io.OutputStream; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; @@ -40,13 +40,27 @@ public class DataContainer { private final int length; private final Writable writer; - public DataContainer(Writable writer, int length) + public DataContainer(Writable writer, int length, T empty) { this.writer = writer; this.length = length; - this.palette = new AtomicReference<>(newPalette(INITIAL_BITS)); - this.data = new AtomicReference<>(new DataBits(INITIAL_BITS, length)); this.bits = new AtomicInteger(INITIAL_BITS); + this.data = new AtomicReference<>(new DataBits(INITIAL_BITS, length)); + this.palette = new AtomicReference<>(newPalette(INITIAL_BITS)); + this.ensurePaletted(empty); + } + + public DataContainer(DataInputStream din, Writable writer) throws IOException { + this.writer = writer; + this.length = din.readInt(); + this.palette = new AtomicReference<>(newPalette(din)); + this.data = new AtomicReference<>(new DataBits(palette.get().bits(), length, din)); + this.bits = new AtomicInteger(palette.get().bits()); + } + + public String toString(){ + return "DataContainer <" + length + " x " + bits + " bits> -> Palette<"+palette.get().getClass().getSimpleName().replaceAll("\\QPalette\\E", "")+">: " + palette.get().size() + + " " + data.get().toString() + " PalBit: " + palette.get().bits(); } public byte[] write() throws IOException @@ -56,33 +70,25 @@ public class DataContainer { return boas.toByteArray(); } - public static DataContainer read(InputStream in, Writable writer) throws IOException { - DataInputStream din = new DataInputStream(in); - return readDin(din, writer); - } - - public static DataContainer readDin(DataInputStream in, Writable writer) throws IOException { - DataInputStream din = new DataInputStream(in); - DataContainer container = new DataContainer<>(writer, Varint.readUnsignedVarInt(din)); - int paletteSize = Varint.readUnsignedVarInt(din); - container.palette.set(container.newPalette(BIT[paletteSize]).from(paletteSize, writer, din)); - container.data.set(new DataBits(container.palette.get().bits(), container.length, din)); - return container; - } - public void write(OutputStream out) throws IOException { - DataOutputStream dos = new DataOutputStream(out); - writeDos(dos); + writeDos(new DataOutputStream(out)); } - public void writeDos(DataOutputStream out) throws IOException + public void writeDos(DataOutputStream dos) throws IOException { - DataOutputStream dos = new DataOutputStream(out); - Varint.writeUnsignedVarInt(length); - Varint.writeUnsignedVarInt(palette.get().size()); + dos.writeInt(length); + dos.writeInt(palette.get().size()); palette.get().iterateIO((data, __) -> writer.writeNodeData(dos, data)); data.get().write(dos); + dos.flush(); + } + + private Palette newPalette(DataInputStream din) throws IOException { + int paletteSize = din.readInt(); + Palette d = newPalette(bits(paletteSize)); + d.from(paletteSize, writer, din); + return d; } private Palette newPalette(int bits) @@ -95,12 +101,29 @@ public class DataContainer { return new HashPalette<>(); } + private void checkBits() + { + if(palette.get().size() >= BIT[bits.get()]) + { + setBits(bits.get() + 1); + } + } + + public void ensurePaletted(T t) + { + if(palette.get().id(t) == -1) + { + checkBits(); + } + } + public void set(int position, T t) { int id = palette.get().id(t); if(id == -1) { + checkBits(); id = palette.get().add(t); } @@ -109,14 +132,14 @@ public class DataContainer { public T get(int position) { - int id = data.get().get(position); + int id = data.get().get(position)+1; if(id <= 0) { return null; } - return palette.get().get(id - 1); + return palette.get().get(id-1); } public void setBits(int bits) @@ -143,4 +166,22 @@ public class DataContainer { return m; } + + protected static int bits(int size) + { + if(DataContainer.BIT[INITIAL_BITS] >= size) + { + return INITIAL_BITS; + } + + for(int i = 0; i < DataContainer.BIT.length; i++) + { + if(DataContainer.BIT[i] >= size) + { + return i; + } + } + + return DataContainer.BIT.length - 1; + } } diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/HashPalette.java b/src/main/java/com/volmit/iris/util/hunk/bits/HashPalette.java index c7cbd41c3..091de10e9 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/HashPalette.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/HashPalette.java @@ -18,20 +18,22 @@ package com.volmit.iris.util.hunk.bits; +import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.function.Consumer2; +import java.util.LinkedHashMap; import java.util.concurrent.atomic.AtomicInteger; public class HashPalette implements Palette { - private final KMap palette; + private final LinkedHashMap palette; private final KMap lookup; private final AtomicInteger size; public HashPalette() { this.size = new AtomicInteger(0); - this.palette = new KMap<>(); + this.palette = new LinkedHashMap<>(); this.lookup = new KMap<>(); } @@ -49,7 +51,12 @@ public class HashPalette implements Palette { public int add(T t) { int index = size.getAndIncrement(); palette.put(t, index); - lookup.put(index, t); + + if(t != null) + { + lookup.put(index, t); + } + return index; } diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java b/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java index 5a9224e09..bce74031a 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java @@ -70,7 +70,12 @@ public class LinearPalette implements Palette { public int id(T t) { for(int i = 0; i < size(); i++) { - if(t.equals(palette.get().get(i))) + if(t == null && palette.get().get(i) == null) + { + return i; + } + + if(t != null && t.equals(palette.get().get(i))) { return i; } diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/Palette.java b/src/main/java/com/volmit/iris/util/hunk/bits/Palette.java index bb4a4a1d1..6c98cb228 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/Palette.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/Palette.java @@ -18,6 +18,7 @@ package com.volmit.iris.util.hunk.bits; +import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.function.Consumer2; import com.volmit.iris.util.function.Consumer2IO; @@ -35,25 +36,7 @@ public interface Palette { default int bits() { - return bits(DataContainer.INITIAL_BITS); - } - - default int bits(int minBits) - { - if(size() <= DataContainer.BIT[minBits]) - { - return minBits; - } - - for(int i = 0; i < DataContainer.BIT.length; i++) - { - if(DataContainer.BIT[i] >= size()) - { - return i; - } - } - - return DataContainer.BIT.length - 1; + return DataContainer.bits(size()); } void iterate(Consumer2 c); @@ -83,4 +66,11 @@ public interface Palette { oldPalette.iterate((k,v) -> add(k)); return this; } + + default KList list() + { + KList t = new KList<>(); + iterate((tx, __) -> t.add(tx)); + return t; + } } diff --git a/src/main/java/com/volmit/iris/util/hunk/storage/PaletteHunk.java b/src/main/java/com/volmit/iris/util/hunk/storage/PaletteHunk.java index cadd12b21..e26848a85 100644 --- a/src/main/java/com/volmit/iris/util/hunk/storage/PaletteHunk.java +++ b/src/main/java/com/volmit/iris/util/hunk/storage/PaletteHunk.java @@ -37,12 +37,11 @@ import java.util.Map; public class PaletteHunk extends StorageHunk implements Hunk { private DataContainer data; - public PaletteHunk(int w, int h, int d, Writable writer) { + public PaletteHunk(int w, int h, int d, Writable writer, T e) { super(w,h,d); - data = new DataContainer<>(writer, w * h * d); + data = new DataContainer<>(writer, w * h * d, e); } - public void setPalette(DataContainer c) { data = c; } diff --git a/src/main/java/com/volmit/iris/util/hunk/storage/PaletteOrHunk.java b/src/main/java/com/volmit/iris/util/hunk/storage/PaletteOrHunk.java index c2e679a97..8a2afd5ff 100644 --- a/src/main/java/com/volmit/iris/util/hunk/storage/PaletteOrHunk.java +++ b/src/main/java/com/volmit/iris/util/hunk/storage/PaletteOrHunk.java @@ -31,9 +31,9 @@ import java.util.function.Supplier; public abstract class PaletteOrHunk extends StorageHunk implements Hunk, Writable { private final Hunk hunk; - public PaletteOrHunk(int width, int height, int depth, boolean allow, Supplier> factory) { + public PaletteOrHunk(int width, int height, int depth, boolean allow, Supplier> factory, T e) { super(width, height, depth); - hunk = (allow) ? new PaletteHunk<>(width, height, depth, this) : factory.get(); + hunk = (allow) ? new PaletteHunk<>(width, height, depth, this, e) : factory.get(); } public DataContainer palette() diff --git a/src/main/java/com/volmit/iris/util/matter/MatterSlice.java b/src/main/java/com/volmit/iris/util/matter/MatterSlice.java index d187cacdc..ad5d85693 100644 --- a/src/main/java/com/volmit/iris/util/matter/MatterSlice.java +++ b/src/main/java/com/volmit/iris/util/matter/MatterSlice.java @@ -191,7 +191,7 @@ public interface MatterSlice extends Hunk, PaletteType, Writable { default void read(DataInputStream din) throws IOException { if((this instanceof PaletteOrHunk f && f.isPalette())) { - f.setPalette(DataContainer.readDin(din, this)); + f.setPalette(new DataContainer<>(din, this)); return; } diff --git a/src/main/java/com/volmit/iris/util/matter/MatterTest.java b/src/main/java/com/volmit/iris/util/matter/MatterTest.java index 77a45904f..7e539df25 100644 --- a/src/main/java/com/volmit/iris/util/matter/MatterTest.java +++ b/src/main/java/com/volmit/iris/util/matter/MatterTest.java @@ -19,67 +19,20 @@ package com.volmit.iris.util.matter; import com.volmit.iris.Iris; -import com.volmit.iris.engine.object.NoiseStyle; -import com.volmit.iris.util.collection.KList; -import com.volmit.iris.util.data.palette.PalettedContainer; import com.volmit.iris.util.hunk.bits.DataContainer; import com.volmit.iris.util.hunk.bits.Writable; import com.volmit.iris.util.io.IO; import com.volmit.iris.util.math.RNG; -import com.volmit.iris.util.noise.CNG; -import org.checkerframework.checker.units.qual.K; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.Arrays; -import java.util.List; public class MatterTest { public static void test() { - try - { - CNG cng = NoiseStyle.STATIC.create(new RNG(1337)); - Writable ffs = new Writable() { - @Override - public Integer readNodeData(DataInputStream din) throws IOException { - return din.readInt(); - } - @Override - public void writeNodeData(DataOutputStream dos, Integer integer) throws IOException { - dos.writeInt(integer); - } - }; - DataContainer p = new DataContainer<>(ffs, 32); - - for(int i = 0; i < 32; i++) - { - p.set(i,cng.fit(1, 7, i, i * 2)); - } - - byte[] dat = p.write(); - Iris.info("RAW DATA: " + IO.bytesToHex(dat)); - - DataContainer f = DataContainer.read(new ByteArrayInputStream(dat), ffs); - byte[] d2 = f.write(); - if(Arrays.equals(dat, d2)) - { - Iris.info("Correct! All data matches!"); - } - - else - { - Iris.warn("No match"); - Iris.error("RAW DATA: " + IO.bytesToHex(d2)); - } - } - - catch(Throwable e) - { - e.printStackTrace(); - } } } diff --git a/src/main/java/com/volmit/iris/util/matter/slices/BiomeMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/BiomeMatter.java deleted file mode 100644 index 3f5ff39f2..000000000 --- a/src/main/java/com/volmit/iris/util/matter/slices/BiomeMatter.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Iris is a World Generator for Minecraft Bukkit Servers - * Copyright (c) 2021 Arcane Arts (Volmit Software) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.volmit.iris.util.matter.slices; - -import com.volmit.iris.engine.object.IrisBiome; -import com.volmit.iris.util.data.palette.Palette; -import com.volmit.iris.util.matter.Sliced; -import org.bukkit.entity.Player; - -@Sliced -public class BiomeMatter extends RegistryMatter { - public BiomeMatter() { - this(1, 1, 1); - } - - @Override - public Palette getGlobalPalette() { - return null; - } - - public BiomeMatter(int width, int height, int depth) { - super(width, height, depth, IrisBiome.class); - } -} diff --git a/src/main/java/com/volmit/iris/util/matter/slices/BlockMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/BlockMatter.java index 0acc3257d..1290cec47 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/BlockMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/BlockMatter.java @@ -21,6 +21,7 @@ package com.volmit.iris.util.matter.slices; import com.volmit.iris.util.data.B; import com.volmit.iris.util.data.palette.Palette; import com.volmit.iris.util.matter.Sliced; +import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.data.BlockData; import org.bukkit.entity.Player; @@ -31,6 +32,8 @@ import java.io.IOException; @Sliced public class BlockMatter extends RawMatter { + public static final BlockData AIR = Material.AIR.createBlockData(); + public BlockMatter() { this(1, 1, 1); } @@ -41,7 +44,7 @@ public class BlockMatter extends RawMatter { } public BlockMatter(int width, int height, int depth) { - super(width, height, depth, BlockData.class); + super(width, height, depth, BlockData.class, AIR); registerWriter(World.class, ((w, d, x, y, z) -> w.getBlockAt(x, y, z).setBlockData(d))); registerReader(World.class, (w, x, y, z) -> { BlockData d = w.getBlockAt(x, y, z).getBlockData(); diff --git a/src/main/java/com/volmit/iris/util/matter/slices/BooleanMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/BooleanMatter.java index 4d0211e10..220c5a937 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/BooleanMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/BooleanMatter.java @@ -38,7 +38,7 @@ public class BooleanMatter extends RawMatter { } public BooleanMatter(int width, int height, int depth) { - super(width, height, depth, Boolean.class); + super(width, height, depth, Boolean.class, false); } @Override diff --git a/src/main/java/com/volmit/iris/util/matter/slices/CavernMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/CavernMatter.java index 04c4ecd30..51692451e 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/CavernMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/CavernMatter.java @@ -29,6 +29,8 @@ import java.io.IOException; @Sliced public class CavernMatter extends RawMatter { + public static final MatterCavern EMPTY = new MatterCavern(false, "", (byte) 0); + public CavernMatter() { this(1, 1, 1); } @@ -39,7 +41,7 @@ public class CavernMatter extends RawMatter { } public CavernMatter(int width, int height, int depth) { - super(width, height, depth, MatterCavern.class); + super(width, height, depth, MatterCavern.class, EMPTY); } public static MatterCavern get(String customBiome, int liquid) { diff --git a/src/main/java/com/volmit/iris/util/matter/slices/CompoundMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/CompoundMatter.java index 18c38fc86..6c98bdd0a 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/CompoundMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/CompoundMatter.java @@ -23,11 +23,13 @@ import com.volmit.iris.util.nbt.tag.CompoundTag; @Sliced public class CompoundMatter extends NBTMatter { + public static final CompoundTag EMPTY = new CompoundTag(); + public CompoundMatter() { this(1, 1, 1); } public CompoundMatter(int width, int height, int depth) { - super(width, height, depth, CompoundTag.class); + super(width, height, depth, CompoundTag.class, EMPTY); } } diff --git a/src/main/java/com/volmit/iris/util/matter/slices/EntityMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/EntityMatter.java index c24f711e1..427159937 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/EntityMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/EntityMatter.java @@ -42,6 +42,7 @@ import java.io.IOException; @Sliced public class EntityMatter extends RawMatter { + public static final MatterEntityGroup EMPTY = new MatterEntityGroup(); private transient KMap> entityCache = new KMap<>(); public EntityMatter() { @@ -54,7 +55,7 @@ public class EntityMatter extends RawMatter { } public EntityMatter(int width, int height, int depth) { - super(width, height, depth, MatterEntityGroup.class); + super(width, height, depth, MatterEntityGroup.class, EMPTY); registerWriter(World.class, ((w, d, x, y, z) -> { for (MatterEntity i : d.getEntities()) { Location realPosition = new Location(w, x + i.getXOff(), y + i.getYOff(), z + i.getZOff()); diff --git a/src/main/java/com/volmit/iris/util/matter/slices/FluidBodyMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/FluidBodyMatter.java deleted file mode 100644 index 32c285f4a..000000000 --- a/src/main/java/com/volmit/iris/util/matter/slices/FluidBodyMatter.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Iris is a World Generator for Minecraft Bukkit Servers - * Copyright (c) 2021 Arcane Arts (Volmit Software) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.volmit.iris.util.matter.slices; - -import com.volmit.iris.util.data.palette.Palette; -import com.volmit.iris.util.matter.MatterFluidBody; -import com.volmit.iris.util.matter.Sliced; -import org.bukkit.entity.Player; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -@Sliced -public class FluidBodyMatter extends RawMatter { - public FluidBodyMatter() { - this(1, 1, 1); - } - - @Override - public Palette getGlobalPalette() { - return null; - } - - public FluidBodyMatter(int width, int height, int depth) { - super(width, height, depth, MatterFluidBody.class); - } - - public static MatterFluidBody get(String customBiome, boolean lava) { - return new MatterFluidBody(true, customBiome, lava); - } - - @Override - public void writeNode(MatterFluidBody b, DataOutputStream dos) throws IOException { - dos.writeBoolean(b.isBody()); - dos.writeBoolean(b.isLava()); - dos.writeUTF(b.getCustomBiome()); - } - - @Override - public MatterFluidBody readNode(DataInputStream din) throws IOException { - boolean b = din.readBoolean(); - boolean l = din.readBoolean(); - String v = din.readUTF(); - - return new MatterFluidBody(b, v, l); - } -} diff --git a/src/main/java/com/volmit/iris/util/matter/slices/IntMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/IntMatter.java index 51d366e98..6da6a2876 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/IntMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/IntMatter.java @@ -39,7 +39,7 @@ public class IntMatter extends RawMatter { } public IntMatter(int width, int height, int depth) { - super(width, height, depth, Integer.class); + super(width, height, depth, Integer.class, 0); } @Override diff --git a/src/main/java/com/volmit/iris/util/matter/slices/LongMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/LongMatter.java index 4a3dbd3a5..a19f1cf7d 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/LongMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/LongMatter.java @@ -39,7 +39,7 @@ public class LongMatter extends RawMatter { } public LongMatter(int width, int height, int depth) { - super(width, height, depth, Long.class); + super(width, height, depth, Long.class, 0L); } @Override diff --git a/src/main/java/com/volmit/iris/util/matter/slices/MarkerMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/MarkerMatter.java index 456ad44d1..9b680d370 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/MarkerMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/MarkerMatter.java @@ -30,6 +30,7 @@ import java.io.IOException; @Sliced public class MarkerMatter extends RawMatter { + public static final MatterMarker NONE = new MatterMarker("none"); public static final MatterMarker CAVE_FLOOR = new MatterMarker("cave_floor"); public static final MatterMarker CAVE_CEILING = new MatterMarker("cave_ceiling"); private static final KMap markers = new KMap<>(); @@ -44,7 +45,7 @@ public class MarkerMatter extends RawMatter { } public MarkerMatter(int width, int height, int depth) { - super(width, height, depth, MatterMarker.class); + super(width, height, depth, MatterMarker.class, NONE); } @Override diff --git a/src/main/java/com/volmit/iris/util/matter/slices/NBTMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/NBTMatter.java index 33b5e90ed..9aee92288 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/NBTMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/NBTMatter.java @@ -20,6 +20,8 @@ package com.volmit.iris.util.matter.slices; import com.volmit.iris.util.data.palette.Palette; import com.volmit.iris.util.nbt.io.NBTUtil; +import com.volmit.iris.util.nbt.tag.CompoundTag; +import com.volmit.iris.util.nbt.tag.IntTag; import com.volmit.iris.util.nbt.tag.Tag; import org.bukkit.entity.Player; @@ -28,8 +30,8 @@ import java.io.DataOutputStream; import java.io.IOException; public class NBTMatter> extends RawMatter { - public NBTMatter(int width, int height, int depth, Class c) { - super(width, height, depth, c); + public NBTMatter(int width, int height, int depth, Class c, T e) { + super(width, height, depth, c, e); } @Override diff --git a/src/main/java/com/volmit/iris/util/matter/slices/PlayerMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/PlayerMatter.java deleted file mode 100644 index f8320c634..000000000 --- a/src/main/java/com/volmit/iris/util/matter/slices/PlayerMatter.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Iris is a World Generator for Minecraft Bukkit Servers - * Copyright (c) 2021 Arcane Arts (Volmit Software) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.volmit.iris.util.matter.slices; - -import com.volmit.iris.util.data.Varint; -import com.volmit.iris.util.data.palette.Palette; -import com.volmit.iris.util.matter.MatterTile; -import com.volmit.iris.util.matter.Sliced; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.UUID; - -@Sliced -public class PlayerMatter extends RawMatter { - public PlayerMatter() { - this(1, 1, 1); - } - - @Override - public Palette getGlobalPalette() { - return null; - } - - public PlayerMatter(int width, int height, int depth) { - super(width, height, depth, Player.class); - } - - @Override - public void writeNode(Player b, DataOutputStream dos) throws IOException { - Varint.writeSignedVarLong(b.getUniqueId().getMostSignificantBits(), dos); - Varint.writeSignedVarLong(b.getUniqueId().getLeastSignificantBits(), dos); - } - - @Override - public Player readNode(DataInputStream din) throws IOException { - UUID id = new UUID(Varint.readSignedVarLong(din), Varint.readSignedVarLong(din)); - - return Bukkit.getPlayer(id); - } -} diff --git a/src/main/java/com/volmit/iris/util/matter/slices/RawMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/RawMatter.java index 15ebb07ba..a31f614cb 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/RawMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/RawMatter.java @@ -37,8 +37,8 @@ public abstract class RawMatter extends PaletteOrHunk implements MatterSli @Getter private final Class type; - public RawMatter(int width, int height, int depth, Class type) { - super(width, height, depth, false, () -> new MappedHunk<>(width, height, depth)); + public RawMatter(int width, int height, int depth, Class type, T e) { + super(width, height, depth, false, () -> new MappedHunk<>(width, height, depth), e); writers = new KMap<>(); readers = new KMap<>(); this.type = type; diff --git a/src/main/java/com/volmit/iris/util/matter/slices/RegionMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/RegionMatter.java deleted file mode 100644 index ae89607ca..000000000 --- a/src/main/java/com/volmit/iris/util/matter/slices/RegionMatter.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Iris is a World Generator for Minecraft Bukkit Servers - * Copyright (c) 2021 Arcane Arts (Volmit Software) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.volmit.iris.util.matter.slices; - -import com.volmit.iris.core.loader.IrisRegistrant; -import com.volmit.iris.util.matter.Sliced; - -@Sliced -public class RegionMatter extends RegistryMatter { - public RegionMatter() { - this(1, 1, 1); - } - - public RegionMatter(int width, int height, int depth) { - super(width, height, depth, IrisRegistrant.class); - } -} diff --git a/src/main/java/com/volmit/iris/util/matter/slices/RegistryMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/RegistryMatter.java index 8f4158717..55a1122fd 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/RegistryMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/RegistryMatter.java @@ -28,8 +28,8 @@ import java.io.DataOutputStream; import java.io.IOException; public class RegistryMatter extends RawMatter { - public RegistryMatter(int width, int height, int depth, Class c) { - super(width, height, depth, c); + public RegistryMatter(int width, int height, int depth, Class c, T e) { + super(width, height, depth, c, e); } @Override diff --git a/src/main/java/com/volmit/iris/util/matter/slices/SpawnerMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/SpawnerMatter.java index 473b2a847..ee843370c 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/SpawnerMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/SpawnerMatter.java @@ -28,6 +28,6 @@ public class SpawnerMatter extends RegistryMatter { } public SpawnerMatter(int width, int height, int depth) { - super(width, height, depth, IrisSpawner.class); + super(width, height, depth, IrisSpawner.class, new IrisSpawner()); } } diff --git a/src/main/java/com/volmit/iris/util/matter/slices/StringMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/StringMatter.java index 6af11b595..e5e5e3387 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/StringMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/StringMatter.java @@ -32,7 +32,7 @@ public class StringMatter extends RawMatter { } public StringMatter(int width, int height, int depth) { - super(width, height, depth, String.class); + super(width, height, depth, String.class, ""); } @Override diff --git a/src/main/java/com/volmit/iris/util/matter/slices/TileMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/TileMatter.java index ed68daf1b..44c95d8c4 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/TileMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/TileMatter.java @@ -33,6 +33,8 @@ import java.io.IOException; @Sliced public class TileMatter extends RawMatter { + public static final MatterTile EMPTY = new MatterTile(new CompoundTag()); + public TileMatter() { this(1, 1, 1); } @@ -43,7 +45,7 @@ public class TileMatter extends RawMatter { } public TileMatter(int width, int height, int depth) { - super(width, height, depth, MatterTile.class); + super(width, height, depth, MatterTile.class, EMPTY); registerWriter(World.class, ((w, d, x, y, z) -> INMS.get().deserializeTile(d.getTileData(), new Location(w, x, y, z)))); registerReader(World.class, (w, x, y, z) -> { Location l = new Location(w, x, y, z); diff --git a/src/main/java/com/volmit/iris/util/matter/slices/UpdateMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/UpdateMatter.java index cba6fefb7..c24f07fa7 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/UpdateMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/UpdateMatter.java @@ -44,7 +44,7 @@ public class UpdateMatter extends RawMatter { } public UpdateMatter(int width, int height, int depth) { - super(width, height, depth, MatterUpdate.class); + super(width, height, depth, MatterUpdate.class, OFF); } @Override