From f45d643739b3305a5f75afa684a4e16c12c1c496 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Wed, 25 Aug 2021 02:41:37 -0400 Subject: [PATCH] Deobf datapalette block & fix a ton of issues --- .../nbt/mca/palettes/DataPaletteBlock.java | 247 +++++++++--------- 1 file changed, 122 insertions(+), 125 deletions(-) diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/palettes/DataPaletteBlock.java b/src/main/java/com/volmit/iris/util/nbt/mca/palettes/DataPaletteBlock.java index 65d943fc0..eef62b14d 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/palettes/DataPaletteBlock.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/palettes/DataPaletteBlock.java @@ -18,6 +18,8 @@ package com.volmit.iris.util.nbt.mca.palettes; +import com.volmit.iris.core.nms.INMS; +import com.volmit.iris.engine.data.cache.AtomicCache; import com.volmit.iris.util.math.MathHelper; import com.volmit.iris.util.nbt.mca.NBTWorld; import com.volmit.iris.util.nbt.tag.CompoundTag; @@ -28,36 +30,49 @@ import lombok.Getter; import net.minecraft.network.PacketDataSerializer; import org.bukkit.Material; -import java.util.concurrent.Semaphore; import java.util.function.Function; import java.util.function.Predicate; @Getter public class DataPaletteBlock implements DataPaletteExpandable { private static final int d = 4096; - public static final int a = 9; - public static final int b = 4; - private final DataPalette e; - private final DataPaletteExpandable f = (var0x, var1x) -> { - return 0; - }; - private final RegistryBlockID g; + public static final int HASH_BITS = 9; + public static final int LINEAR_BITS = 4; + private final DataPalette globalPalette; + private final DataPaletteExpandable f = (var0x, var1x) -> 0; + private final RegistryBlockID stolenRegistry; private final Function h; private final Function i; - private final T j; - private static final RegistryBlockID registry = new RegistryBlockID<>(); + private final T defAir; + private static final AtomicCache> reg = new AtomicCache<>(); + private static final AtomicCache> global = new AtomicCache<>(); private static final CompoundTag air = NBTWorld.getCompound(Material.AIR.createBlockData()); - protected DataBits c; - private DataPalette k; - private int bits; - private final Semaphore m = new Semaphore(1); - - public void b() { - this.m.release(); - } + protected DataBits dataBits; + private DataPalette currentPalette; + private int bits = 0; public DataPaletteBlock() { - this(null, (RegistryBlockID) registry, (i) -> (T) i, (i) -> (CompoundTag) i, (T) air); + this((DataPalette) global.aquire(() -> + new DataPaletteGlobal<>(reg.aquire(() -> { + try { + return INMS.get().computeBlockIDRegistry(); + } catch (NoSuchFieldException ex) { + ex.printStackTrace(); + } catch (IllegalAccessException ex) { + ex.printStackTrace(); + } + return null; + }), air) + ), (RegistryBlockID) reg.aquire(() -> { + try { + return INMS.get().computeBlockIDRegistry(); + } catch (NoSuchFieldException ex) { + ex.printStackTrace(); + } catch (IllegalAccessException ex) { + ex.printStackTrace(); + } + return null; + }), (i) -> (T) i, (i) -> (CompoundTag) i, (T) air); } public DataPaletteBlock(DataPalette var0, @@ -65,171 +80,153 @@ public class DataPaletteBlock implements DataPaletteExpandable { Function var2, Function var3, T var4) { - this.e = var0; - this.g = var1; + this.globalPalette = var0; + this.stolenRegistry = var1; this.h = var2; this.i = var3; - this.j = var4; - this.b(4); + this.defAir = var4; + this.changeBitsTo(4); } - private static int b(int var0, int var1, int var2) { + private static int blockIndex(int var0, int var1, int var2) { return var1 << 8 | var2 << 4 | var0; } - private void b(int var0) { - if (var0 != this.bits) { - this.bits = var0; - if (this.bits <= 4) { - this.bits = 4; - this.k = new DataPaletteLinear(this.g, this.bits, this, this.h); - } else if (this.bits < 9) { - this.k = new DataPaletteHash(this.g, this.bits, this, this.h, this.i); + private void changeBitsTo(int newbits) { + if (newbits != this.bits) { + this.bits = newbits; + if (this.bits <= LINEAR_BITS) { + this.bits = LINEAR_BITS; + this.currentPalette = new DataPaletteLinear(this.stolenRegistry, this.bits, this, this.h); + } else if (this.bits < HASH_BITS) { + this.currentPalette = new DataPaletteHash(this.stolenRegistry, this.bits, this, this.h, this.i); } else { - this.k = this.e; - this.bits = MathHelper.e(this.g.a()); + this.currentPalette = this.globalPalette; + this.bits = MathHelper.e(this.stolenRegistry.size()); } - this.k.a(this.j); - this.c = new DataBits(this.bits, 4096); + this.currentPalette.getIndex(this.defAir); + this.dataBits = new DataBits(this.bits, 4096); } } public int onResize(int var0, T var1) { - DataBits var2 = this.c; - DataPalette var3 = this.k; - this.b(var0); + DataBits var2 = this.dataBits; + DataPalette var3 = this.currentPalette; + this.changeBitsTo(var0); for (int var4 = 0; var4 < var2.b(); ++var4) { - T var5 = var3.a(var2.a(var4)); + T var5 = var3.getByIndex(var2.getIndexFromPos(var4)); if (var5 != null) { this.setBlockIndex(var4, var5); } } - return this.k.a(var1); + return this.currentPalette.getIndex(var1); } public T setBlock(int var0, int var1, int var2, T var3) { - T var6; - try { - var6 = this.a(b(var0, var1, var2), var3); - } finally { - this.b(); - } - - return var6; - } - - public T b(int var0, int var1, int var2, T var3) { - return this.a(b(var0, var1, var2), var3); + return this.a(blockIndex(var0, var1, var2), var3); } private T a(int var0, T var1) { - int var2 = this.k.a(var1); - int var3 = this.c.a(var0, var2); - T var4 = this.k.a(var3); - return var4 == null ? this.j : var4; + int var2 = this.currentPalette.getIndex(var1); + int var3 = this.dataBits.a(var0, var2); + T var4 = this.currentPalette.getByIndex(var3); + return var4 == null ? this.defAir : var4; } public void c(int var0, int var1, int var2, T var3) { - try { - this.setBlockIndex(b(var0, var1, var2), var3); - } finally { - this.b(); - } + this.setBlockIndex(blockIndex(var0, var1, var2), var3); } private void setBlockIndex(int var0, T var1) { - int var2 = this.k.a(var1); - this.c.b(var0, var2); + int var2 = this.currentPalette.getIndex(var1); + this.dataBits.b(var0, var2); } - public T a(int var0, int var1, int var2) { - return this.a(b(var0, var1, var2)); + public T getBlock(int var0, int var1, int var2) { + return this.getByIndex(blockIndex(var0, var1, var2)); } - protected T a(int var0) { - T var1 = this.k.a(this.c.a(var0)); - return var1 == null ? this.j : var1; + protected T getByIndex(int var0) { + if(this.currentPalette == null) + { + return null; + } + + T data = this.currentPalette.getByIndex(this.dataBits.getIndexFromPos(var0)); + return data == null ? this.defAir : data; } - public void a(ListTag palettedata, long[] databits) { - try { - int var2 = Math.max(4, MathHelper.e(palettedata.size())); - if (var2 != this.bits) { - this.b(var2); + public void load(ListTag palettedata, long[] databits) { + int readBits = Math.max(4, MathHelper.e(palettedata.size())); + if (readBits != this.bits) { + this.changeBitsTo(readBits); + } + + this.currentPalette.replace(palettedata); + int dblen = databits.length * 64 / 4096; + if (this.currentPalette == this.globalPalette) { + DataPalette hashPalette = new DataPaletteHash(this.stolenRegistry, readBits, this.f, this.h, this.i); + hashPalette.replace(palettedata); + DataBits var5 = new DataBits(readBits, 4096, databits); + + for (int var6 = 0; var6 < 4096; ++var6) { + this.dataBits.b(var6, this.globalPalette.getIndex(hashPalette.getByIndex(var5.getIndexFromPos(var6)))); } + } else if (dblen == this.bits) { + System.arraycopy(databits, 0, this.dataBits.getData(), 0, databits.length); + } else { + DataBits var4 = new DataBits(dblen, 4096, databits); - this.k.a(palettedata); - int var3 = databits.length * 64 / 4096; - if (this.k == this.e) { - DataPalette var4 = new DataPaletteHash(this.g, var2, this.f, this.h, this.i); - var4.a(palettedata); - DataBits var5 = new DataBits(var2, 4096, databits); - - for (int var6 = 0; var6 < 4096; ++var6) { - this.c.b(var6, this.e.a(var4.a(var5.a(var6)))); - } - } else if (var3 == this.bits) { - System.arraycopy(databits, 0, this.c.a(), 0, databits.length); - } else { - DataBits var4 = new DataBits(var3, 4096, databits); - - for (int var5 = 0; var5 < 4096; ++var5) { - this.c.b(var5, var4.a(var5)); - } + for (int var5 = 0; var5 < 4096; ++var5) { + this.dataBits.b(var5, var4.getIndexFromPos(var5)); } - } finally { - this.b(); } } - public void a(CompoundTag var0, String var1, String var2) { - try { - DataPaletteHash var3 = new DataPaletteHash(this.g, this.bits, this.f, this.h, this.i); - T var4 = this.j; - int var5 = var3.a(this.j); - int[] var6 = new int[4096]; + public void save(CompoundTag to, String paletteName, String blockStatesName) { + DataPaletteHash hashpal = new DataPaletteHash(this.stolenRegistry, bits, this.f, this.h, this.i); + T cursor = this.defAir; + int palIndex = hashpal.getIndex(this.defAir); + int[] var6 = new int[4096]; - for (int var7 = 0; var7 < 4096; ++var7) { - T var8 = this.a(var7); - if (var8 != var4) { - var4 = var8; - var5 = var3.a(var8); - } - - var6[var7] = var5; + for (int var7 = 0; var7 < 4096; ++var7) { + T entry = this.getByIndex(var7); + if (!entry.equals(cursor)) { + cursor = entry; + palIndex = hashpal.getIndex(entry); } - ListTag var7 = (ListTag) ListTag.createUnchecked(CompoundTag.class); - var3.b(var7); - var0.put(var1, var7); - int var8 = Math.max(4, MathHelper.e(var7.size())); - DataBits var9 = new DataBits(var8, 4096); - - for (int var10 = 0; var10 < var6.length; ++var10) { - var9.b(var10, var6[var10]); - } - - var0.putLongArray(var2, var9.a()); - } finally { - this.b(); + var6[var7] = palIndex; } + + ListTag npalette = (ListTag) ListTag.createUnchecked(CompoundTag.class); + hashpal.writePalette(npalette); + to.put(paletteName, npalette); + int var8 = Math.max(4, MathHelper.e(npalette.size())); + DataBits writeBits = new DataBits(var8, 4096); + + for (int var10 = 0; var10 < var6.length; ++var10) { + writeBits.b(var10, var6[var10]); + } + + to.putLongArray(blockStatesName, writeBits.getData()); } public int c() { - return 1 + this.k.a() + PacketDataSerializer.a(this.c.b()) + this.c.a().length * 8; + return 1 + this.currentPalette.a() + PacketDataSerializer.a(this.dataBits.b()) + this.dataBits.getData().length * 8; } public boolean contains(Predicate var0) { - return this.k.a(var0); + return this.currentPalette.a(var0); } public void a(DataPaletteBlock.a var0) { Int2IntMap var1 = new Int2IntOpenHashMap(); - this.c.a((var1x) -> var1.put(var1x, var1.get(var1x) + 1)); - var1.int2IntEntrySet().forEach((var1x) -> var0.accept(this.k.a(var1x.getIntKey()), var1x.getIntValue())); + this.dataBits.a((var1x) -> var1.put(var1x, var1.get(var1x) + 1)); + var1.int2IntEntrySet().forEach((var1x) -> var0.accept(this.currentPalette.getByIndex(var1x.getIntKey()), var1x.getIntValue())); } @FunctionalInterface