From 1524866432811e2a94dd13dfdf1f91762e402b59 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Wed, 25 Aug 2021 06:32:54 -0400 Subject: [PATCH] HELP ME --- src/main/java/com/volmit/iris/Iris.java | 2 +- .../com/volmit/iris/core/nms/INMSBinding.java | 3 +- .../iris/core/nms/v17_1/NMSBinding17_1.java | 43 ++++++++++++------- .../iris/core/nms/v1X/NMSBinding1X.java | 3 +- .../iris/engine/data/cache/AtomicCache.java | 16 +++++++ 5 files changed, 49 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index a9b0a0a7e..a013ee464 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -129,7 +129,7 @@ public class Iris extends VolmitPlugin implements Listener { private void testmca() { try { - int forceBits = 6; + int forceBits = 5; int possibilities = (int) (Math.pow(2, forceBits) - 1); KList bp = new KList<>(); Set bf = new KSet<>(); diff --git a/src/main/java/com/volmit/iris/core/nms/INMSBinding.java b/src/main/java/com/volmit/iris/core/nms/INMSBinding.java index f6c218166..f4b3f83e0 100644 --- a/src/main/java/com/volmit/iris/core/nms/INMSBinding.java +++ b/src/main/java/com/volmit/iris/core/nms/INMSBinding.java @@ -18,6 +18,7 @@ package com.volmit.iris.core.nms; +import com.volmit.iris.util.nbt.mca.nmspalettes.PaletteAccess; import com.volmit.iris.util.nbt.mca.palettes.RegistryBlockID; import com.volmit.iris.util.nbt.tag.CompoundTag; import org.bukkit.Location; @@ -76,5 +77,5 @@ public interface INMSBinding { return false; } - RegistryBlockID computeBlockIDRegistry() throws NoSuchFieldException, IllegalAccessException; + PaletteAccess createPalette(); } diff --git a/src/main/java/com/volmit/iris/core/nms/v17_1/NMSBinding17_1.java b/src/main/java/com/volmit/iris/core/nms/v17_1/NMSBinding17_1.java index 9c83a05ac..685c4a8ab 100644 --- a/src/main/java/com/volmit/iris/core/nms/v17_1/NMSBinding17_1.java +++ b/src/main/java/com/volmit/iris/core/nms/v17_1/NMSBinding17_1.java @@ -20,9 +20,11 @@ package com.volmit.iris.core.nms.v17_1; import com.volmit.iris.Iris; import com.volmit.iris.core.nms.INMSBinding; +import com.volmit.iris.engine.data.cache.AtomicCache; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.nbt.io.NBTUtil; import com.volmit.iris.util.nbt.mca.NBTWorld; +import com.volmit.iris.util.nbt.mca.nmspalettes.*; import com.volmit.iris.util.nbt.mca.palettes.RegistryBlockID; import com.volmit.iris.util.nbt.tag.CompoundTag; import net.minecraft.core.BlockPosition; @@ -46,6 +48,7 @@ import net.minecraft.world.level.chunk.Chunk; import net.minecraft.world.level.chunk.ChunkSection; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -66,7 +69,10 @@ import java.util.List; import java.util.concurrent.atomic.AtomicInteger; public class NMSBinding17_1 implements INMSBinding { + private final BlockData AIR = Material.AIR.createBlockData(); private final KMap baseBiomeCache = new KMap<>(); + private final AtomicCache> registryCache = new AtomicCache<>(); + private final AtomicCache> globalCache = new AtomicCache<>(); private Field biomeStorageCache = null; public boolean supportsDataPacks() { @@ -74,21 +80,28 @@ public class NMSBinding17_1 implements INMSBinding { } @Override - public RegistryBlockID computeBlockIDRegistry() throws NoSuchFieldException, IllegalAccessException { - Field cf = net.minecraft.core.RegistryBlockID.class.getDeclaredField("c"); - Field df = net.minecraft.core.RegistryBlockID.class.getDeclaredField("d"); - cf.setAccessible(true); - df.setAccessible(true); - net.minecraft.core.RegistryBlockID blockData = Block.p; - IdentityHashMap c = (IdentityHashMap) cf.get(blockData); - List d = (List) df.get(blockData); - List realTags = new ArrayList<>(); - HashMap realMap = new HashMap<>(512); - d.forEach((i) -> realTags.add(NBTWorld.getCompound(CraftBlockData.fromData(i)))); - c.forEach((k,v) -> realMap.put(NBTWorld.getCompound(CraftBlockData.fromData(k)), v)); - RegistryBlockID registry = new RegistryBlockID(realMap, realTags); - Iris.info("INMS: Stole Global Palette: " + realTags.size() + " Tags, " + realMap.size() + " Mapped"); - return registry; + public PaletteAccess createPalette() { + IdMapper registry = registryCache.aquireNasty(() -> { + Field cf = net.minecraft.core.RegistryBlockID.class.getDeclaredField("c"); + Field df = net.minecraft.core.RegistryBlockID.class.getDeclaredField("d"); + Field bf = net.minecraft.core.RegistryBlockID.class.getDeclaredField("b"); + cf.setAccessible(true); + df.setAccessible(true); + bf.setAccessible(true); + net.minecraft.core.RegistryBlockID blockData = Block.p; + int b = bf.getInt(blockData); + IdentityHashMap c = (IdentityHashMap) cf.get(blockData); + List d = (List) df.get(blockData); + return new IdMapper<>(c, d, b); + }); + Palette global = globalCache.aquireNasty(() -> new GlobalPalette<>(registry, ((CraftBlockData)AIR).getState())); + PalettedContainer container = new PalettedContainer<>(global, registry, + i -> ((CraftBlockData)NBTWorld.getBlockData(i)).getState(), + i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), + ((CraftBlockData) AIR).getState()); + return new WrappedPalettedContainer<>(container, + i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), + i -> ((CraftBlockData)NBTWorld.getBlockData(i)).getState()); } private Object getBiomeStorage(ChunkGenerator.BiomeGrid g) { diff --git a/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java b/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java index ba07fadcb..610229938 100644 --- a/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java +++ b/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java @@ -20,6 +20,7 @@ package com.volmit.iris.core.nms.v1X; import com.volmit.iris.Iris; import com.volmit.iris.core.nms.INMSBinding; +import com.volmit.iris.util.nbt.mca.nmspalettes.PaletteAccess; import com.volmit.iris.util.nbt.mca.palettes.RegistryBlockID; import com.volmit.iris.util.nbt.tag.CompoundTag; import org.bukkit.Location; @@ -146,7 +147,7 @@ public class NMSBinding1X implements INMSBinding { } @Override - public RegistryBlockID computeBlockIDRegistry() throws NoSuchFieldException, IllegalAccessException { + public PaletteAccess createPalette() { Iris.error("Cannot use the global data palette! Iris is incapable of using MCA generation on this version of minecraft!"); return null; } diff --git a/src/main/java/com/volmit/iris/engine/data/cache/AtomicCache.java b/src/main/java/com/volmit/iris/engine/data/cache/AtomicCache.java index 27341de5d..1ace0fb27 100644 --- a/src/main/java/com/volmit/iris/engine/data/cache/AtomicCache.java +++ b/src/main/java/com/volmit/iris/engine/data/cache/AtomicCache.java @@ -19,6 +19,7 @@ package com.volmit.iris.engine.data.cache; import com.volmit.iris.Iris; +import com.volmit.iris.util.function.NastySupplier; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; @@ -50,6 +51,21 @@ public class AtomicCache { } } + public T aquireNasty(NastySupplier t) + { + return aquire(() -> { + try + { + return t.get(); + } + + catch(Throwable e) + { + return null; + } + }); + } + public T aquire(Supplier t) { if (this.t.get() != null) { return this.t.get();