diff --git a/nms/v1_19_R1/src/main/java/com/volmit/iris/core/nms/v1_19_R1/NMSBinding.java b/nms/v1_19_R1/src/main/java/com/volmit/iris/core/nms/v1_19_R1/NMSBinding.java index 49c921288..bcb92f603 100644 --- a/nms/v1_19_R1/src/main/java/com/volmit/iris/core/nms/v1_19_R1/NMSBinding.java +++ b/nms/v1_19_R1/src/main/java/com/volmit/iris/core/nms/v1_19_R1/NMSBinding.java @@ -12,6 +12,7 @@ import java.util.List; import java.util.Vector; import java.util.concurrent.atomic.AtomicInteger; +import net.minecraft.world.level.Level; import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -170,6 +171,17 @@ public class NMSBinding implements INMSBinding { return null; } + private RegistryAccess getRegistryAccess(World world) { + try { + var field = getField(Level.class, RegistryAccess.class); + field.setAccessible(true); + return (RegistryAccess) field.get(((CraftWorld) world).getHandle()); + } catch (Throwable e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } + @Override public void deserializeTile(CompoundTag c, Location pos) { ((CraftWorld) pos.getWorld()).getHandle().getChunkAt(new BlockPos(pos.getBlockX(), 0, pos.getBlockZ())).setBlockEntityNbt(convert(c)); @@ -253,8 +265,7 @@ public class NMSBinding implements INMSBinding { @Override public Object getBiomeBase(World world, Biome biome) { - return CraftBlock.biomeToBiomeBase(((CraftWorld) world).getHandle() - .registryAccess().registry(Registry.BIOME_REGISTRY).orElse(null), biome); + return CraftBlock.biomeToBiomeBase(getRegistryAccess(world).registry(Registry.BIOME_REGISTRY).orElse(null), biome); } @Override @@ -291,8 +302,11 @@ public class NMSBinding implements INMSBinding { public int getBiomeId(Biome biome) { for (World i : Bukkit.getWorlds()) { if (i.getEnvironment().equals(World.Environment.NORMAL)) { - Registry registry = ((CraftWorld) i).getHandle().registryAccess().registry(Registry.BIOME_REGISTRY).orElse(null); - return registry.getId((net.minecraft.world.level.biome.Biome) getBiomeBase(registry, biome)); + var registry = getRegistryAccess(i).registry(Registry.BIOME_REGISTRY).orElse(null); + if (registry != null) { + var holder = (Holder) getBiomeBase(registry, biome); + return registry.getId(holder.value()); + } } } diff --git a/nms/v1_19_R2/src/main/java/com/volmit/iris/core/nms/v1_19_R2/NMSBinding.java b/nms/v1_19_R2/src/main/java/com/volmit/iris/core/nms/v1_19_R2/NMSBinding.java index 8aa76bc52..49b65bf1a 100644 --- a/nms/v1_19_R2/src/main/java/com/volmit/iris/core/nms/v1_19_R2/NMSBinding.java +++ b/nms/v1_19_R2/src/main/java/com/volmit/iris/core/nms/v1_19_R2/NMSBinding.java @@ -12,6 +12,7 @@ import java.util.List; import java.util.Vector; import java.util.concurrent.atomic.AtomicInteger; +import net.minecraft.world.level.Level; import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -171,6 +172,17 @@ public class NMSBinding implements INMSBinding { return null; } + private RegistryAccess getRegistryAccess(World world) { + try { + var field = getField(Level.class, RegistryAccess.class); + field.setAccessible(true); + return (RegistryAccess) field.get(((CraftWorld) world).getHandle()); + } catch (Throwable e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } + @Override public void deserializeTile(CompoundTag c, Location pos) { ((CraftWorld) pos.getWorld()).getHandle().getChunkAt(new BlockPos(pos.getBlockX(), 0, pos.getBlockZ())).setBlockEntityNbt(convert(c)); @@ -254,8 +266,7 @@ public class NMSBinding implements INMSBinding { @Override public Object getBiomeBase(World world, Biome biome) { - return CraftBlock.biomeToBiomeBase(((CraftWorld) world).getHandle() - .registryAccess().registry(Registries.BIOME).orElse(null), biome); + return CraftBlock.biomeToBiomeBase(getRegistryAccess(world).registry(Registries.BIOME).orElse(null), biome); } @Override @@ -292,8 +303,11 @@ public class NMSBinding implements INMSBinding { public int getBiomeId(Biome biome) { for (World i : Bukkit.getWorlds()) { if (i.getEnvironment().equals(World.Environment.NORMAL)) { - Registry registry = ((CraftWorld) i).getHandle().registryAccess().registry(Registries.BIOME).orElse(null); - return registry.getId((net.minecraft.world.level.biome.Biome) getBiomeBase(registry, biome)); + var registry = getRegistryAccess(i).registry(Registries.BIOME).orElse(null); + if (registry != null) { + var holder = (Holder) getBiomeBase(registry, biome); + return registry.getId(holder.value()); + } } } diff --git a/nms/v1_19_R3/src/main/java/com/volmit/iris/core/nms/v1_19_R3/NMSBinding.java b/nms/v1_19_R3/src/main/java/com/volmit/iris/core/nms/v1_19_R3/NMSBinding.java index c32354ae9..63cb230dc 100644 --- a/nms/v1_19_R3/src/main/java/com/volmit/iris/core/nms/v1_19_R3/NMSBinding.java +++ b/nms/v1_19_R3/src/main/java/com/volmit/iris/core/nms/v1_19_R3/NMSBinding.java @@ -12,6 +12,7 @@ import java.util.List; import java.util.Vector; import java.util.concurrent.atomic.AtomicInteger; +import net.minecraft.world.level.Level; import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -172,6 +173,17 @@ public class NMSBinding implements INMSBinding { return null; } + private RegistryAccess getRegistryAccess(World world) { + try { + var field = getField(Level.class, RegistryAccess.class); + field.setAccessible(true); + return (RegistryAccess) field.get(((CraftWorld) world).getHandle()); + } catch (Throwable e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } + @Override public void deserializeTile(CompoundTag c, Location pos) { ((CraftWorld) pos.getWorld()).getHandle().getChunkAt(new BlockPos(pos.getBlockX(), 0, pos.getBlockZ())).setBlockEntityNbt(convert(c)); @@ -255,8 +267,7 @@ public class NMSBinding implements INMSBinding { @Override public Object getBiomeBase(World world, Biome biome) { - return CraftBlock.biomeToBiomeBase(((CraftWorld) world).getHandle() - .registryAccess().registry(Registries.BIOME).orElse(null), biome); + return CraftBlock.biomeToBiomeBase(getRegistryAccess(world).registry(Registries.BIOME).orElse(null), biome); } @Override @@ -294,8 +305,11 @@ public class NMSBinding implements INMSBinding { public int getBiomeId(Biome biome) { for (World i : Bukkit.getWorlds()) { if (i.getEnvironment().equals(World.Environment.NORMAL)) { - Registry registry = ((CraftWorld) i).getHandle().registryAccess().registry(Registries.BIOME).orElse(null); - return registry.getId((net.minecraft.world.level.biome.Biome) getBiomeBase(registry, biome)); + var registry = getRegistryAccess(i).registry(Registries.BIOME).orElse(null); + if (registry != null) { + var holder = (Holder) getBiomeBase(registry, biome); + return registry.getId(holder.value()); + } } } diff --git a/nms/v1_20_R1/src/main/java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java b/nms/v1_20_R1/src/main/java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java index 165f97808..701187373 100644 --- a/nms/v1_20_R1/src/main/java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java +++ b/nms/v1_20_R1/src/main/java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java @@ -27,6 +27,7 @@ import net.minecraft.nbt.TagParser; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.level.Level; import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; @@ -175,6 +176,17 @@ public class NMSBinding implements INMSBinding { return null; } + private RegistryAccess getRegistryAccess(World world) { + try { + var field = getField(Level.class, RegistryAccess.class); + field.setAccessible(true); + return (RegistryAccess) field.get(((CraftWorld) world).getHandle()); + } catch (Throwable e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } + @Override public void deserializeTile(CompoundTag c, Location pos) { ((CraftWorld) pos.getWorld()).getHandle().getChunkAt(new BlockPos(pos.getBlockX(), 0, pos.getBlockZ())).setBlockEntityNbt(convert(c)); @@ -258,8 +270,7 @@ public class NMSBinding implements INMSBinding { @Override public Object getBiomeBase(World world, Biome biome) { - return CraftBlock.biomeToBiomeBase(((CraftWorld) world).getHandle() - .registryAccess().registry(Registries.BIOME).orElse(null), biome); + return CraftBlock.biomeToBiomeBase(getRegistryAccess(world).registry(Registries.BIOME).orElse(null), biome); } @Override @@ -296,8 +307,11 @@ public class NMSBinding implements INMSBinding { public int getBiomeId(Biome biome) { for (World i : Bukkit.getWorlds()) { if (i.getEnvironment().equals(World.Environment.NORMAL)) { - Registry registry = ((CraftWorld) i).getHandle().registryAccess().registry(Registries.BIOME).orElse(null); - return registry.getId((net.minecraft.world.level.biome.Biome) getBiomeBase(registry, biome)); + var registry = getRegistryAccess(i).registry(Registries.BIOME).orElse(null); + if (registry != null) { + var holder = (Holder) getBiomeBase(registry, biome); + return registry.getId(holder.value()); + } } } diff --git a/nms/v1_20_R2/src/main/java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java b/nms/v1_20_R2/src/main/java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java index 73a15d89c..79407553c 100644 --- a/nms/v1_20_R2/src/main/java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java +++ b/nms/v1_20_R2/src/main/java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java @@ -12,6 +12,7 @@ import java.util.List; import java.util.Vector; import java.util.concurrent.atomic.AtomicInteger; +import net.minecraft.world.level.Level; import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -173,6 +174,17 @@ public class NMSBinding implements INMSBinding { return null; } + private RegistryAccess getRegistryAccess(World world) { + try { + var field = getField(Level.class, RegistryAccess.class); + field.setAccessible(true); + return (RegistryAccess) field.get(((CraftWorld) world).getHandle()); + } catch (Throwable e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } + @Override public void deserializeTile(CompoundTag c, Location pos) { ((CraftWorld) pos.getWorld()).getHandle().getChunkAt(new BlockPos(pos.getBlockX(), 0, pos.getBlockZ())).setBlockEntityNbt(convert(c)); @@ -256,8 +268,7 @@ public class NMSBinding implements INMSBinding { @Override public Object getBiomeBase(World world, Biome biome) { - return biomeToBiomeBase(((CraftWorld) world).getHandle() - .registryAccess().registry(Registries.BIOME).orElse(null), biome); + return biomeToBiomeBase(getRegistryAccess(world).registry(Registries.BIOME).orElse(null), biome); } @Override @@ -294,8 +305,11 @@ public class NMSBinding implements INMSBinding { public int getBiomeId(Biome biome) { for (World i : Bukkit.getWorlds()) { if (i.getEnvironment().equals(World.Environment.NORMAL)) { - Registry registry = ((CraftWorld) i).getHandle().registryAccess().registry(Registries.BIOME).orElse(null); - return registry.getId((net.minecraft.world.level.biome.Biome) getBiomeBase(registry, biome)); + var registry = getRegistryAccess(i).registry(Registries.BIOME).orElse(null); + if (registry != null) { + var holder = (Holder) getBiomeBase(registry, biome); + return registry.getId(holder.value()); + } } } diff --git a/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java b/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java index 01fa75d94..6700c6345 100644 --- a/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java +++ b/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java @@ -12,6 +12,7 @@ import java.util.List; import java.util.Vector; import java.util.concurrent.atomic.AtomicInteger; +import net.minecraft.world.level.Level; import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -173,6 +174,17 @@ public class NMSBinding implements INMSBinding { return null; } + private RegistryAccess getRegistryAccess(World world) { + try { + var field = getField(Level.class, RegistryAccess.class); + field.setAccessible(true); + return (RegistryAccess) field.get(((CraftWorld) world).getHandle()); + } catch (Throwable e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } + @Override public void deserializeTile(CompoundTag c, Location pos) { ((CraftWorld) pos.getWorld()).getHandle().getChunkAt(new BlockPos(pos.getBlockX(), 0, pos.getBlockZ())).setBlockEntityNbt(convert(c)); @@ -256,8 +268,7 @@ public class NMSBinding implements INMSBinding { @Override public Object getBiomeBase(World world, Biome biome) { - return biomeToBiomeBase(((CraftWorld) world).getHandle() - .registryAccess().registry(Registries.BIOME).orElse(null), biome); + return biomeToBiomeBase(getRegistryAccess(world).registry(Registries.BIOME).orElse(null), biome); } @Override @@ -294,8 +305,11 @@ public class NMSBinding implements INMSBinding { public int getBiomeId(Biome biome) { for (World i : Bukkit.getWorlds()) { if (i.getEnvironment().equals(World.Environment.NORMAL)) { - Registry registry = ((CraftWorld) i).getHandle().registryAccess().registry(Registries.BIOME).orElse(null); - return registry.getId((net.minecraft.world.level.biome.Biome) getBiomeBase(registry, biome)); + var registry = getRegistryAccess(i).registry(Registries.BIOME).orElse(null); + if (registry != null) { + var holder = (Holder) getBiomeBase(registry, biome); + return registry.getId(holder.value()); + } } }