From 5fa1efb1f27d6e6251b2ea701eabedabea4b0af9 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Wed, 12 Jan 2022 08:01:26 -0500 Subject: [PATCH] Fix by id nms --- .../iris/core/nms/v18_1/NMSBinding18_1.java | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/nms/v18_1/NMSBinding18_1.java b/src/main/java/com/volmit/iris/core/nms/v18_1/NMSBinding18_1.java index fabf939d2..0cda4e8e3 100644 --- a/src/main/java/com/volmit/iris/core/nms/v18_1/NMSBinding18_1.java +++ b/src/main/java/com/volmit/iris/core/nms/v18_1/NMSBinding18_1.java @@ -35,8 +35,10 @@ import com.volmit.iris.util.nbt.mca.palette.MCAPaletteAccess; import com.volmit.iris.util.nbt.mca.palette.MCAPalettedContainer; import com.volmit.iris.util.nbt.mca.palette.MCAWrappedPalettedContainer; import com.volmit.iris.util.nbt.tag.CompoundTag; +import com.volmit.iris.util.scheduling.J; import it.unimi.dsi.fastutil.objects.Object2IntMap; import net.minecraft.core.BlockPos; +import net.minecraft.core.IdMap; import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; import net.minecraft.nbt.NbtIo; @@ -63,7 +65,9 @@ import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; @@ -76,6 +80,7 @@ public class NMSBinding18_1 implements INMSBinding { private final AtomicCache> registryCache = new AtomicCache<>(); private final AtomicCache> globalCache = new AtomicCache<>(); private final AtomicCache registryAccess = new AtomicCache<>(); + private final AtomicCache byIdRef = new AtomicCache<>(); private Field biomeStorageCache = null; @Override @@ -159,7 +164,25 @@ public class NMSBinding18_1 implements INMSBinding { @Override public Object getBiomeBaseFromId(int id) { - return getCustomBiomeRegistry().byId(id); + try { + return byIdRef.aquire(() -> { + for(Method i : IdMap.class.getDeclaredMethods()) + { + if(i.getParameterCount() == 1 && i.getParameterTypes()[0].equals(int.class)) + { + Iris.info("[NMS] Found byId method in " + IdMap.class.getSimpleName() + "." + i.getName() + "(int) => " + Biome.class.getSimpleName()); + return i; + } + } + + Iris.error("Cannot find byId method!"); + return null; + }).invoke(getCustomBiomeRegistry(), id); + } catch(IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + } + + return null; } @Override @@ -254,7 +277,7 @@ public class NMSBinding18_1 implements INMSBinding { @Override public net.minecraft.world.level.biome.Biome byId(int paramInt) { - return getCustomBiomeRegistry().byId(paramInt); + return (net.minecraft.world.level.biome.Biome) getBiomeBaseFromId(paramInt); } }); }