From 06a45056d9eb2e7d63788c54a620933932741ab0 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Sat, 22 Mar 2025 12:31:30 +0100 Subject: [PATCH 1/3] use flat level source instead of trying to get the levelstems --- .../iris/core/nms/v1_20_R1/NMSBinding.java | 30 ++++++++++++++----- .../iris/core/nms/v1_20_R2/NMSBinding.java | 30 ++++++++++++++----- .../iris/core/nms/v1_20_R3/NMSBinding.java | 30 ++++++++++++++----- .../iris/core/nms/v1_20_R4/NMSBinding.java | 30 ++++++++++++++----- .../iris/core/nms/v1_21_R1/NMSBinding.java | 30 ++++++++++++++----- .../iris/core/nms/v1_21_R2/NMSBinding.java | 30 ++++++++++++++----- .../iris/core/nms/v1_21_R3/NMSBinding.java | 30 ++++++++++++++----- 7 files changed, 154 insertions(+), 56 deletions(-) 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 0a0e51a6e..04dee2073 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 @@ -38,7 +38,9 @@ import net.minecraft.tags.TagKey; import net.minecraft.world.entity.EntityDimensions; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.biome.Biomes; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; @@ -47,6 +49,9 @@ import net.minecraft.world.level.chunk.ChunkStatus; import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.LevelStem; +import net.minecraft.world.level.levelgen.FlatLevelSource; +import net.minecraft.world.level.levelgen.flat.FlatLayerInfo; +import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorSettings; import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -703,23 +708,32 @@ public class NMSBinding implements INMSBinding { private RegistryAccess.Frozen createRegistryAccess(RegistryAccess.Frozen datapack, boolean copy, boolean overworld, boolean nether, boolean end) { var access = registry(); var dimensions = access.registryOrThrow(Registries.DIMENSION_TYPE); - var levelStems = access.registryOrThrow(Registries.LEVEL_STEM); + var settings = new FlatLevelGeneratorSettings( + Optional.empty(), + access.lookupOrThrow(Registries.BIOME).getOrThrow(Biomes.THE_VOID), + List.of() + ); + settings.getLayersInfo().add(new FlatLayerInfo(1, Blocks.AIR)); + settings.updateLayers(); + + var source = new FlatLevelSource(settings); var fake = new MappedRegistry<>(Registries.LEVEL_STEM, Lifecycle.experimental()); - if (overworld) register(fake, levelStems, dimensions, LevelStem.OVERWORLD); - if (nether) register(fake, levelStems, dimensions, LevelStem.NETHER); - if (end) register(fake, levelStems, dimensions, LevelStem.END); + if (overworld) register(fake, dimensions, source, LevelStem.OVERWORLD); + if (nether) register(fake, dimensions, source, LevelStem.NETHER); + if (end) register(fake, dimensions, source, LevelStem.END); copy(fake, datapack.registry(Registries.LEVEL_STEM).orElse(null)); - if (copy) copy(fake, levelStems); + if (copy) copy(fake, access.registryOrThrow(Registries.LEVEL_STEM)); return new RegistryAccess.Frozen.ImmutableRegistryAccess(List.of(fake.freeze())).freeze(); } - private void register(MappedRegistry target, Registry levelStems, Registry dimensions, ResourceKey key) { + private void register(MappedRegistry target, Registry dimensions, FlatLevelSource source, ResourceKey key) { + var loc = new ResourceLocation("iris", key.location().getPath()); target.register(key, new LevelStem( - dimensions.getHolderOrThrow(ResourceKey.create(Registries.DIMENSION_TYPE, new ResourceLocation("iris", key.location().getPath()))), - levelStems.getOrThrow(key).generator() + dimensions.getHolder(ResourceKey.create(Registries.DIMENSION_TYPE, loc)).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())), + source ), Lifecycle.stable()); } 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 924e04791..89b22cfd5 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 @@ -28,9 +28,14 @@ import net.minecraft.server.WorldLoader; import net.minecraft.server.commands.data.BlockDataAccessor; import net.minecraft.tags.TagKey; import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.biome.Biomes; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.LevelStem; +import net.minecraft.world.level.levelgen.FlatLevelSource; +import net.minecraft.world.level.levelgen.flat.FlatLayerInfo; +import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorSettings; import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -704,23 +709,32 @@ public class NMSBinding implements INMSBinding { private RegistryAccess.Frozen createRegistryAccess(RegistryAccess.Frozen datapack, boolean copy, boolean overworld, boolean nether, boolean end) { var access = registry(); var dimensions = access.registryOrThrow(Registries.DIMENSION_TYPE); - var levelStems = access.registryOrThrow(Registries.LEVEL_STEM); + var settings = new FlatLevelGeneratorSettings( + Optional.empty(), + access.lookupOrThrow(Registries.BIOME).getOrThrow(Biomes.THE_VOID), + List.of() + ); + settings.getLayersInfo().add(new FlatLayerInfo(1, Blocks.AIR)); + settings.updateLayers(); + + var source = new FlatLevelSource(settings); var fake = new MappedRegistry<>(Registries.LEVEL_STEM, Lifecycle.experimental()); - if (overworld) register(fake, levelStems, dimensions, LevelStem.OVERWORLD); - if (nether) register(fake, levelStems, dimensions, LevelStem.NETHER); - if (end) register(fake, levelStems, dimensions, LevelStem.END); + if (overworld) register(fake, dimensions, source, LevelStem.OVERWORLD); + if (nether) register(fake, dimensions, source, LevelStem.NETHER); + if (end) register(fake, dimensions, source, LevelStem.END); copy(fake, datapack.registry(Registries.LEVEL_STEM).orElse(null)); - if (copy) copy(fake, levelStems); + if (copy) copy(fake, access.registryOrThrow(Registries.LEVEL_STEM)); return new RegistryAccess.Frozen.ImmutableRegistryAccess(List.of(fake.freeze())).freeze(); } - private void register(MappedRegistry target, Registry levelStems, Registry dimensions, ResourceKey key) { + private void register(MappedRegistry target, Registry dimensions, FlatLevelSource source, ResourceKey key) { + var loc = new ResourceLocation("iris", key.location().getPath()); target.register(key, new LevelStem( - dimensions.getHolderOrThrow(ResourceKey.create(Registries.DIMENSION_TYPE, new ResourceLocation("iris", key.location().getPath()))), - levelStems.getOrThrow(key).generator() + dimensions.getHolder(ResourceKey.create(Registries.DIMENSION_TYPE, loc)).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())), + source ), Lifecycle.stable()); } 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 283e4a594..20319a3ed 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 @@ -28,9 +28,14 @@ import net.minecraft.server.WorldLoader; import net.minecraft.server.commands.data.BlockDataAccessor; import net.minecraft.tags.TagKey; import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.biome.Biomes; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.LevelStem; +import net.minecraft.world.level.levelgen.FlatLevelSource; +import net.minecraft.world.level.levelgen.flat.FlatLayerInfo; +import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorSettings; import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -705,23 +710,32 @@ public class NMSBinding implements INMSBinding { private RegistryAccess.Frozen createRegistryAccess(RegistryAccess.Frozen datapack, boolean copy, boolean overworld, boolean nether, boolean end) { var access = registry(); var dimensions = access.registryOrThrow(Registries.DIMENSION_TYPE); - var levelStems = access.registryOrThrow(Registries.LEVEL_STEM); + var settings = new FlatLevelGeneratorSettings( + Optional.empty(), + access.lookupOrThrow(Registries.BIOME).getOrThrow(Biomes.THE_VOID), + List.of() + ); + settings.getLayersInfo().add(new FlatLayerInfo(1, Blocks.AIR)); + settings.updateLayers(); + + var source = new FlatLevelSource(settings); var fake = new MappedRegistry<>(Registries.LEVEL_STEM, Lifecycle.experimental()); - if (overworld) register(fake, levelStems, dimensions, LevelStem.OVERWORLD); - if (nether) register(fake, levelStems, dimensions, LevelStem.NETHER); - if (end) register(fake, levelStems, dimensions, LevelStem.END); + if (overworld) register(fake, dimensions, source, LevelStem.OVERWORLD); + if (nether) register(fake, dimensions, source, LevelStem.NETHER); + if (end) register(fake, dimensions, source, LevelStem.END); copy(fake, datapack.registry(Registries.LEVEL_STEM).orElse(null)); - if (copy) copy(fake, levelStems); + if (copy) copy(fake, access.registryOrThrow(Registries.LEVEL_STEM)); return new RegistryAccess.Frozen.ImmutableRegistryAccess(List.of(fake.freeze())).freeze(); } - private void register(MappedRegistry target, Registry levelStems, Registry dimensions, ResourceKey key) { + private void register(MappedRegistry target, Registry dimensions, FlatLevelSource source, ResourceKey key) { + var loc = new ResourceLocation("iris", key.location().getPath()); target.register(key, new LevelStem( - dimensions.getHolderOrThrow(ResourceKey.create(Registries.DIMENSION_TYPE, new ResourceLocation("iris", key.location().getPath()))), - levelStems.getOrThrow(key).generator() + dimensions.getHolder(ResourceKey.create(Registries.DIMENSION_TYPE, loc)).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())), + source ), Lifecycle.stable()); } diff --git a/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java b/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java index 14e103eb5..29d66b026 100644 --- a/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java +++ b/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java @@ -38,11 +38,16 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.tags.TagKey; import net.minecraft.world.item.component.CustomData; import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.biome.Biomes; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.chunk.status.ChunkStatus; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.LevelStem; +import net.minecraft.world.level.levelgen.FlatLevelSource; +import net.minecraft.world.level.levelgen.flat.FlatLayerInfo; +import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorSettings; import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -730,23 +735,32 @@ public class NMSBinding implements INMSBinding { private RegistryAccess.Frozen createRegistryAccess(RegistryAccess.Frozen datapack, boolean copy, boolean overworld, boolean nether, boolean end) { var access = registry(); var dimensions = access.registryOrThrow(Registries.DIMENSION_TYPE); - var levelStems = access.registryOrThrow(Registries.LEVEL_STEM); + var settings = new FlatLevelGeneratorSettings( + Optional.empty(), + access.lookupOrThrow(Registries.BIOME).getOrThrow(Biomes.THE_VOID), + List.of() + ); + settings.getLayersInfo().add(new FlatLayerInfo(1, Blocks.AIR)); + settings.updateLayers(); + + var source = new FlatLevelSource(settings); var fake = new MappedRegistry<>(Registries.LEVEL_STEM, Lifecycle.experimental()); - if (overworld) register(fake, levelStems, dimensions, LevelStem.OVERWORLD); - if (nether) register(fake, levelStems, dimensions, LevelStem.NETHER); - if (end) register(fake, levelStems, dimensions, LevelStem.END); + if (overworld) register(fake, dimensions, source, LevelStem.OVERWORLD); + if (nether) register(fake, dimensions, source, LevelStem.NETHER); + if (end) register(fake, dimensions, source, LevelStem.END); copy(fake, datapack.registry(Registries.LEVEL_STEM).orElse(null)); - if (copy) copy(fake, levelStems); + if (copy) copy(fake, access.registryOrThrow(Registries.LEVEL_STEM)); return new RegistryAccess.Frozen.ImmutableRegistryAccess(List.of(fake.freeze())).freeze(); } - private void register(MappedRegistry target, Registry levelStems, Registry dimensions, ResourceKey key) { + private void register(MappedRegistry target, Registry dimensions, FlatLevelSource source, ResourceKey key) { + var loc = new ResourceLocation("iris", key.location().getPath()); target.register(key, new LevelStem( - dimensions.getHolder(new ResourceLocation("iris", key.location().getPath())).orElseThrow(), - levelStems.getOrThrow(key).generator() + dimensions.getHolder(ResourceKey.create(Registries.DIMENSION_TYPE, loc)).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())), + source ), RegistrationInfo.BUILT_IN); } diff --git a/nms/v1_21_R1/src/main/java/com/volmit/iris/core/nms/v1_21_R1/NMSBinding.java b/nms/v1_21_R1/src/main/java/com/volmit/iris/core/nms/v1_21_R1/NMSBinding.java index da85e16de..edf76e919 100644 --- a/nms/v1_21_R1/src/main/java/com/volmit/iris/core/nms/v1_21_R1/NMSBinding.java +++ b/nms/v1_21_R1/src/main/java/com/volmit/iris/core/nms/v1_21_R1/NMSBinding.java @@ -32,11 +32,16 @@ import net.minecraft.server.level.ChunkMap; import net.minecraft.tags.TagKey; import net.minecraft.world.item.component.CustomData; import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.biome.Biomes; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.chunk.status.ChunkStatus; import net.minecraft.world.level.chunk.status.WorldGenContext; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.LevelStem; +import net.minecraft.world.level.levelgen.FlatLevelSource; +import net.minecraft.world.level.levelgen.flat.FlatLayerInfo; +import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorSettings; import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -734,23 +739,32 @@ public class NMSBinding implements INMSBinding { private RegistryAccess.Frozen createRegistryAccess(RegistryAccess.Frozen datapack, boolean copy, boolean overworld, boolean nether, boolean end) { var access = registry(); var dimensions = access.registryOrThrow(Registries.DIMENSION_TYPE); - var levelStems = access.registryOrThrow(Registries.LEVEL_STEM); + var settings = new FlatLevelGeneratorSettings( + Optional.empty(), + access.lookupOrThrow(Registries.BIOME).getOrThrow(Biomes.THE_VOID), + List.of() + ); + settings.getLayersInfo().add(new FlatLayerInfo(1, Blocks.AIR)); + settings.updateLayers(); + + var source = new FlatLevelSource(settings); var fake = new MappedRegistry<>(Registries.LEVEL_STEM, Lifecycle.experimental()); - if (overworld) register(fake, levelStems, dimensions, LevelStem.OVERWORLD); - if (nether) register(fake, levelStems, dimensions, LevelStem.NETHER); - if (end) register(fake, levelStems, dimensions, LevelStem.END); + if (overworld) register(fake, dimensions, source, LevelStem.OVERWORLD); + if (nether) register(fake, dimensions, source, LevelStem.NETHER); + if (end) register(fake, dimensions, source, LevelStem.END); copy(fake, datapack.registry(Registries.LEVEL_STEM).orElse(null)); - if (copy) copy(fake, levelStems); + if (copy) copy(fake, access.registryOrThrow(Registries.LEVEL_STEM)); return new RegistryAccess.Frozen.ImmutableRegistryAccess(List.of(fake.freeze())).freeze(); } - private void register(MappedRegistry target, Registry levelStems, Registry dimensions, ResourceKey key) { + private void register(MappedRegistry target, Registry dimensions, FlatLevelSource source, ResourceKey key) { + var loc = ResourceLocation.fromNamespaceAndPath("iris", key.location().getPath()); target.register(key, new LevelStem( - dimensions.getHolder(ResourceLocation.fromNamespaceAndPath("iris", key.location().getPath())).orElseThrow(), - levelStems.getOrThrow(key).generator() + dimensions.getHolder(ResourceKey.create(Registries.DIMENSION_TYPE, loc)).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())), + source ), RegistrationInfo.BUILT_IN); } diff --git a/nms/v1_21_R2/src/main/java/com/volmit/iris/core/nms/v1_21_R2/NMSBinding.java b/nms/v1_21_R2/src/main/java/com/volmit/iris/core/nms/v1_21_R2/NMSBinding.java index 5773392ae..fd2a60574 100644 --- a/nms/v1_21_R2/src/main/java/com/volmit/iris/core/nms/v1_21_R2/NMSBinding.java +++ b/nms/v1_21_R2/src/main/java/com/volmit/iris/core/nms/v1_21_R2/NMSBinding.java @@ -27,11 +27,16 @@ import net.minecraft.server.commands.data.BlockDataAccessor; import net.minecraft.tags.TagKey; import net.minecraft.world.item.component.CustomData; import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.biome.Biomes; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.chunk.status.ChunkStatus; import net.minecraft.world.level.chunk.status.WorldGenContext; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.LevelStem; +import net.minecraft.world.level.levelgen.FlatLevelSource; +import net.minecraft.world.level.levelgen.flat.FlatLayerInfo; +import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorSettings; import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -724,23 +729,32 @@ public class NMSBinding implements INMSBinding { private RegistryAccess.Frozen createRegistryAccess(RegistryAccess.Frozen datapack, boolean copy, boolean overworld, boolean nether, boolean end) { var access = registry(); var dimensions = access.lookupOrThrow(Registries.DIMENSION_TYPE); - var levelStems = access.lookupOrThrow(Registries.LEVEL_STEM); + var settings = new FlatLevelGeneratorSettings( + Optional.empty(), + access.lookupOrThrow(Registries.BIOME).getOrThrow(Biomes.THE_VOID), + List.of() + ); + settings.getLayersInfo().add(new FlatLayerInfo(1, Blocks.AIR)); + settings.updateLayers(); + + var source = new FlatLevelSource(settings); var fake = new MappedRegistry<>(Registries.LEVEL_STEM, Lifecycle.experimental()); - if (overworld) register(fake, levelStems, dimensions, LevelStem.OVERWORLD); - if (nether) register(fake, levelStems, dimensions, LevelStem.NETHER); - if (end) register(fake, levelStems, dimensions, LevelStem.END); + if (overworld) register(fake, dimensions, source, LevelStem.OVERWORLD); + if (nether) register(fake, dimensions, source, LevelStem.NETHER); + if (end) register(fake, dimensions, source, LevelStem.END); copy(fake, datapack.lookup(Registries.LEVEL_STEM).orElse(null)); - if (copy) copy(fake, levelStems); + if (copy) copy(fake, access.lookupOrThrow(Registries.LEVEL_STEM)); return new RegistryAccess.Frozen.ImmutableRegistryAccess(List.of(fake.freeze())).freeze(); } - private void register(MappedRegistry target, Registry levelStems, Registry dimensions, ResourceKey key) { + private void register(MappedRegistry target, Registry dimensions, FlatLevelSource source, ResourceKey key) { + var loc = ResourceLocation.fromNamespaceAndPath("iris", key.location().getPath()); target.register(key, new LevelStem( - dimensions.get(ResourceLocation.fromNamespaceAndPath("iris", key.location().getPath())).orElseThrow(), - levelStems.getValueOrThrow(key).generator() + dimensions.get(loc).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())), + source ), RegistrationInfo.BUILT_IN); } diff --git a/nms/v1_21_R3/src/main/java/com/volmit/iris/core/nms/v1_21_R3/NMSBinding.java b/nms/v1_21_R3/src/main/java/com/volmit/iris/core/nms/v1_21_R3/NMSBinding.java index e31895550..011256342 100644 --- a/nms/v1_21_R3/src/main/java/com/volmit/iris/core/nms/v1_21_R3/NMSBinding.java +++ b/nms/v1_21_R3/src/main/java/com/volmit/iris/core/nms/v1_21_R3/NMSBinding.java @@ -39,7 +39,9 @@ import net.minecraft.tags.TagKey; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.component.CustomData; import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.biome.Biomes; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; @@ -49,6 +51,9 @@ import net.minecraft.world.level.chunk.status.ChunkStatus; import net.minecraft.world.level.chunk.status.WorldGenContext; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.LevelStem; +import net.minecraft.world.level.levelgen.FlatLevelSource; +import net.minecraft.world.level.levelgen.flat.FlatLayerInfo; +import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorSettings; import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -723,23 +728,32 @@ public class NMSBinding implements INMSBinding { private RegistryAccess.Frozen createRegistryAccess(RegistryAccess.Frozen datapack, boolean copy, boolean overworld, boolean nether, boolean end) { var access = registry(); var dimensions = access.lookupOrThrow(Registries.DIMENSION_TYPE); - var levelStems = access.lookupOrThrow(Registries.LEVEL_STEM); + var settings = new FlatLevelGeneratorSettings( + Optional.empty(), + access.lookupOrThrow(Registries.BIOME).getOrThrow(Biomes.THE_VOID), + List.of() + ); + settings.getLayersInfo().add(new FlatLayerInfo(1, Blocks.AIR)); + settings.updateLayers(); + + var source = new FlatLevelSource(settings); var fake = new MappedRegistry<>(Registries.LEVEL_STEM, Lifecycle.experimental()); - if (overworld) register(fake, levelStems, dimensions, LevelStem.OVERWORLD); - if (nether) register(fake, levelStems, dimensions, LevelStem.NETHER); - if (end) register(fake, levelStems, dimensions, LevelStem.END); + if (overworld) register(fake, dimensions, source, LevelStem.OVERWORLD); + if (nether) register(fake, dimensions, source, LevelStem.NETHER); + if (end) register(fake, dimensions, source, LevelStem.END); copy(fake, datapack.lookup(Registries.LEVEL_STEM).orElse(null)); - if (copy) copy(fake, levelStems); + if (copy) copy(fake, access.lookupOrThrow(Registries.LEVEL_STEM)); return new RegistryAccess.Frozen.ImmutableRegistryAccess(List.of(fake.freeze())).freeze(); } - private void register(MappedRegistry target, Registry levelStems, Registry dimensions, ResourceKey key) { + private void register(MappedRegistry target, Registry dimensions, FlatLevelSource source, ResourceKey key) { + var loc = ResourceLocation.fromNamespaceAndPath("iris", key.location().getPath()); target.register(key, new LevelStem( - dimensions.get(ResourceLocation.fromNamespaceAndPath("iris", key.location().getPath())).orElseThrow(), - levelStems.getValueOrThrow(key).generator() + dimensions.get(loc).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())), + source ), RegistrationInfo.BUILT_IN); } From 24355064ffd58494b7dad14cd8df3359867cb942 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Sun, 23 Mar 2025 13:09:57 +0100 Subject: [PATCH 2/3] add safeguard for missing dimension types to prevent world corruption --- core/src/main/java/com/volmit/iris/Iris.java | 6 ++++-- .../volmit/iris/core/ServerConfigurator.java | 2 ++ .../com/volmit/iris/core/nms/INMSBinding.java | 16 +++++++--------- .../volmit/iris/core/nms/v1X/NMSBinding1X.java | 17 +++++++++++++++++ .../iris/core/safeguard/IrisSafeguard.java | 9 +++++++++ .../iris/core/safeguard/ServerBootSFG.java | 8 ++++++++ .../volmit/iris/core/safeguard/UtilsSFG.java | 5 +++++ .../iris/engine/object/IrisContextInjector.java | 10 ++++++++++ .../volmit/iris/util/misc/ServerProperties.java | 7 ++++++- .../iris/core/nms/v1_20_R1/NMSBinding.java | 15 ++++++++++++++- .../iris/core/nms/v1_20_R2/NMSBinding.java | 15 ++++++++++++++- .../iris/core/nms/v1_20_R3/NMSBinding.java | 15 ++++++++++++++- .../iris/core/nms/v1_20_R4/NMSBinding.java | 15 ++++++++++++++- .../iris/core/nms/v1_21_R1/NMSBinding.java | 15 ++++++++++++++- .../iris/core/nms/v1_21_R2/NMSBinding.java | 15 ++++++++++++++- .../iris/core/nms/v1_21_R3/NMSBinding.java | 15 ++++++++++++++- 16 files changed, 166 insertions(+), 19 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index db0d69377..07e01c6e4 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -459,15 +459,17 @@ public class Iris extends VolmitPlugin implements Listener { initialize("com.volmit.iris.core.service").forEach((i) -> services.put((Class) i.getClass(), (IrisService) i)); INMS.get(); IO.delete(new File("iris")); + compat = IrisCompat.configured(getDataFile("compat.json")); + ServerConfigurator.configure(); + new IrisContextInjector(); IrisSafeguard.IrisSafeguardSystem(); getSender().setTag(getTag()); - compat = IrisCompat.configured(getDataFile("compat.json")); + IrisSafeguard.earlySplash(); linkMultiverseCore = new MultiverseCoreLink(); linkMythicMobs = new MythicMobsLink(); configWatcher = new FileWatcher(getDataFile("settings.json")); services.values().forEach(IrisService::onEnable); services.values().forEach(this::registerListener); - registerListener(new IrisContextInjector()); J.s(() -> { J.a(() -> PaperLib.suggestPaper(this)); J.a(() -> IO.delete(getTemp())); diff --git a/core/src/main/java/com/volmit/iris/core/ServerConfigurator.java b/core/src/main/java/com/volmit/iris/core/ServerConfigurator.java index aace8e897..ffeae3115 100644 --- a/core/src/main/java/com/volmit/iris/core/ServerConfigurator.java +++ b/core/src/main/java/com/volmit/iris/core/ServerConfigurator.java @@ -31,6 +31,7 @@ import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.collection.KSet; import com.volmit.iris.util.format.C; +import com.volmit.iris.util.misc.ServerProperties; import com.volmit.iris.util.plugin.VolmitSender; import com.volmit.iris.util.scheduling.J; import lombok.Data; @@ -97,6 +98,7 @@ public class ServerConfigurator { } KList worlds = new KList<>(); Bukkit.getServer().getWorlds().forEach(w -> worlds.add(new File(w.getWorldFolder(), "datapacks"))); + if (worlds.isEmpty()) worlds.add(new File(Bukkit.getWorldContainer(), ServerProperties.LEVEL_NAME + "/datapacks")); return worlds; } diff --git a/core/src/main/java/com/volmit/iris/core/nms/INMSBinding.java b/core/src/main/java/com/volmit/iris/core/nms/INMSBinding.java index ac3894f65..25e5f688b 100644 --- a/core/src/main/java/com/volmit/iris/core/nms/INMSBinding.java +++ b/core/src/main/java/com/volmit/iris/core/nms/INMSBinding.java @@ -32,15 +32,12 @@ import com.volmit.iris.util.nbt.mca.palette.MCAPaletteAccess; import com.volmit.iris.util.nbt.tag.CompoundTag; import org.bukkit.*; import org.bukkit.block.Biome; -import org.bukkit.entity.Dolphin; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.generator.ChunkGenerator; -import org.bukkit.generator.structure.Structure; import org.bukkit.inventory.ItemStack; -import java.awt.*; import java.awt.Color; public interface INMSBinding { @@ -93,6 +90,9 @@ public interface INMSBinding { MCABiomeContainer newBiomeContainer(int min, int max); default World createWorld(WorldCreator c) { + if (missingDimensionTypes(true, true, true)) + throw new IllegalStateException("Missing dimenstion types to create world"); + try (var ignored = injectLevelStems()) { return c.createWorld(); } @@ -130,11 +130,9 @@ public interface INMSBinding { KList getStructureKeys(); - default AutoClosing injectLevelStems() { - return new AutoClosing(() -> {}); - } + AutoClosing injectLevelStems(); - default Pair injectUncached(boolean overworld, boolean nether, boolean end) { - return new Pair<>(0, injectLevelStems()); - } + Pair injectUncached(boolean overworld, boolean nether, boolean end); + + boolean missingDimensionTypes(boolean overworld, boolean nether, boolean end); } diff --git a/core/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java b/core/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java index fa722e688..33f83ddd4 100644 --- a/core/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java +++ b/core/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java @@ -20,7 +20,9 @@ package com.volmit.iris.core.nms.v1X; import com.volmit.iris.Iris; import com.volmit.iris.core.nms.INMSBinding; +import com.volmit.iris.core.nms.container.AutoClosing; import com.volmit.iris.core.nms.container.BiomeColor; +import com.volmit.iris.core.nms.container.Pair; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; @@ -118,6 +120,21 @@ public class NMSBinding1X implements INMSBinding { return new KList<>(list); } + @Override + public AutoClosing injectLevelStems() { + return new AutoClosing(() -> {}); + } + + @Override + public Pair injectUncached(boolean overworld, boolean nether, boolean end) { + return new Pair<>(0, new AutoClosing(() -> {})); + } + + @Override + public boolean missingDimensionTypes(boolean overworld, boolean nether, boolean end) { + return false; + } + @Override public CompoundTag serializeEntity(Entity location) { return null; diff --git a/core/src/main/java/com/volmit/iris/core/safeguard/IrisSafeguard.java b/core/src/main/java/com/volmit/iris/core/safeguard/IrisSafeguard.java index 4fb25371a..5217be9f2 100644 --- a/core/src/main/java/com/volmit/iris/core/safeguard/IrisSafeguard.java +++ b/core/src/main/java/com/volmit/iris/core/safeguard/IrisSafeguard.java @@ -1,6 +1,7 @@ package com.volmit.iris.core.safeguard; import com.volmit.iris.Iris; +import com.volmit.iris.core.IrisSettings; public class IrisSafeguard { public static boolean unstablemode = false; @@ -11,5 +12,13 @@ public class IrisSafeguard { Iris.info("Enabled Iris SafeGuard"); ServerBootSFG.BootCheck(); } + + public static void earlySplash() { + if (ServerBootSFG.safeguardPassed || IrisSettings.get().getGeneral().DoomsdayAnnihilationSelfDestructMode) + return; + + Iris.instance.splash(); + UtilsSFG.splash(); + } } diff --git a/core/src/main/java/com/volmit/iris/core/safeguard/ServerBootSFG.java b/core/src/main/java/com/volmit/iris/core/safeguard/ServerBootSFG.java index a1de18768..2c59c2ae9 100644 --- a/core/src/main/java/com/volmit/iris/core/safeguard/ServerBootSFG.java +++ b/core/src/main/java/com/volmit/iris/core/safeguard/ServerBootSFG.java @@ -3,6 +3,7 @@ package com.volmit.iris.core.safeguard; import com.volmit.iris.Iris; import com.volmit.iris.core.nms.INMS; import com.volmit.iris.core.nms.v1X.NMSBinding1X; +import com.volmit.iris.engine.object.IrisContextInjector; import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; @@ -29,6 +30,7 @@ public class ServerBootSFG { public static boolean isJRE = false; public static boolean hasPrivileges = true; public static boolean unsuportedversion = false; + public static boolean missingDimensionTypes = false; protected static boolean safeguardPassed; public static boolean passedserversoftware = true; protected static int count; @@ -110,6 +112,12 @@ public class ServerBootSFG { severityMedium++; } + if (IrisContextInjector.isMissingDimensionTypes()) { + missingDimensionTypes = true; + joiner.add("Missing Dimension Types"); + severityHigh++; + } + allIncompatibilities = joiner.toString(); safeguardPassed = (severityHigh == 0 && severityMedium == 0 && severityLow == 0); diff --git a/core/src/main/java/com/volmit/iris/core/safeguard/UtilsSFG.java b/core/src/main/java/com/volmit/iris/core/safeguard/UtilsSFG.java index cfff91b62..c45cfc7bb 100644 --- a/core/src/main/java/com/volmit/iris/core/safeguard/UtilsSFG.java +++ b/core/src/main/java/com/volmit/iris/core/safeguard/UtilsSFG.java @@ -39,6 +39,11 @@ public class UtilsSFG { Iris.safeguard(C.RED + "Server Version"); Iris.safeguard(C.RED + "- Iris only supports 1.20.1 > 1.21.4"); } + if (ServerBootSFG.missingDimensionTypes) { + Iris.safeguard(C.RED + "Dimension Types"); + Iris.safeguard(C.RED + "- Required Iris dimension types were not loaded."); + Iris.safeguard(C.RED + "- If this still happens after a restart please contact support."); + } if (!ServerBootSFG.passedserversoftware) { Iris.safeguard(C.YELLOW + "Unsupported Server Software"); Iris.safeguard(C.YELLOW + "- Please consider using Paper or Purpur instead."); diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisContextInjector.java b/core/src/main/java/com/volmit/iris/engine/object/IrisContextInjector.java index 772a4c560..3ecafab8a 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisContextInjector.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisContextInjector.java @@ -3,6 +3,7 @@ package com.volmit.iris.engine.object; import com.volmit.iris.core.nms.INMS; import com.volmit.iris.core.nms.container.AutoClosing; import com.volmit.iris.util.misc.ServerProperties; +import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; @@ -15,6 +16,8 @@ import java.util.List; import static com.volmit.iris.Iris.instance; public class IrisContextInjector implements Listener { + @Getter + private static boolean missingDimensionTypes = false; private AutoClosing autoClosing = null; private final int totalWorlds; private int worldCounter = 0; @@ -35,6 +38,12 @@ public class IrisContextInjector implements Listener { if (Bukkit.getAllowNether()) i++; if (Bukkit.getAllowEnd()) i++; + if (INMS.get().missingDimensionTypes(overworld, nether, end)) { + missingDimensionTypes = true; + totalWorlds = 0; + return; + } + if (overworld || nether || end) { var pair = INMS.get().injectUncached(overworld, nether, end); i += pair.getA() - 3; @@ -42,6 +51,7 @@ public class IrisContextInjector implements Listener { } totalWorlds = i; + instance.registerListener(this); } @EventHandler diff --git a/core/src/main/java/com/volmit/iris/util/misc/ServerProperties.java b/core/src/main/java/com/volmit/iris/util/misc/ServerProperties.java index b79e844f1..ecfc4f518 100644 --- a/core/src/main/java/com/volmit/iris/util/misc/ServerProperties.java +++ b/core/src/main/java/com/volmit/iris/util/misc/ServerProperties.java @@ -10,7 +10,7 @@ public class ServerProperties { public static final File SERVER_PROPERTIES; public static final File BUKKIT_YML; - public static final String LEVEL_NAME = DATA.getProperty("level-name", "world"); + public static final String LEVEL_NAME; static { String[] args = ProcessHandle.current() @@ -20,11 +20,13 @@ public class ServerProperties { String propertiesPath = "server.properties"; String bukkitYml = "bukkit.yml"; + String levelName = null; for (int i = 0; i < args.length - 1; i++) { switch (args[i]) { case "-c", "--config" -> propertiesPath = args[i + 1]; case "-b", "--bukkit-settings" -> bukkitYml = args[i + 1]; + case "-w", "--level-name", "--world" -> levelName = args[i + 1]; } } @@ -35,5 +37,8 @@ public class ServerProperties { } catch (IOException e) { throw new RuntimeException(e); } + + if (levelName != null) LEVEL_NAME = levelName; + else LEVEL_NAME = DATA.getProperty("level-name", "world"); } } 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 04dee2073..66723b82a 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 @@ -678,6 +678,15 @@ public class NMSBinding implements INMSBinding { })); } + @Override + public boolean missingDimensionTypes(boolean overworld, boolean nether, boolean end) { + var registry = registry().registryOrThrow(Registries.DIMENSION_TYPE); + if (overworld) overworld = !registry.containsKey(createIrisKey(LevelStem.OVERWORLD)); + if (nether) nether = !registry.containsKey(createIrisKey(LevelStem.NETHER)); + if (end) end = !registry.containsKey(createIrisKey(LevelStem.END)); + return overworld || nether || end; + } + private WorldLoader.DataLoadContext supplier(WorldLoader.DataLoadContext old) { return dataLoadContext.aquire(() -> new WorldLoader.DataLoadContext( old.resources(), @@ -730,7 +739,7 @@ public class NMSBinding implements INMSBinding { } private void register(MappedRegistry target, Registry dimensions, FlatLevelSource source, ResourceKey key) { - var loc = new ResourceLocation("iris", key.location().getPath()); + var loc = createIrisKey(key); target.register(key, new LevelStem( dimensions.getHolder(ResourceKey.create(Registries.DIMENSION_TYPE, loc)).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())), source @@ -746,4 +755,8 @@ public class NMSBinding implements INMSBinding { target.register(key, value, info); }); } + + private ResourceLocation createIrisKey(ResourceKey key) { + return new ResourceLocation("iris", key.location().getPath()); + } } 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 89b22cfd5..6ef8bd4a8 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 @@ -679,6 +679,15 @@ public class NMSBinding implements INMSBinding { })); } + @Override + public boolean missingDimensionTypes(boolean overworld, boolean nether, boolean end) { + var registry = registry().registryOrThrow(Registries.DIMENSION_TYPE); + if (overworld) overworld = !registry.containsKey(createIrisKey(LevelStem.OVERWORLD)); + if (nether) nether = !registry.containsKey(createIrisKey(LevelStem.NETHER)); + if (end) end = !registry.containsKey(createIrisKey(LevelStem.END)); + return overworld || nether || end; + } + private WorldLoader.DataLoadContext supplier(WorldLoader.DataLoadContext old) { return dataLoadContext.aquire(() -> new WorldLoader.DataLoadContext( old.resources(), @@ -731,7 +740,7 @@ public class NMSBinding implements INMSBinding { } private void register(MappedRegistry target, Registry dimensions, FlatLevelSource source, ResourceKey key) { - var loc = new ResourceLocation("iris", key.location().getPath()); + var loc = createIrisKey(key); target.register(key, new LevelStem( dimensions.getHolder(ResourceKey.create(Registries.DIMENSION_TYPE, loc)).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())), source @@ -747,4 +756,8 @@ public class NMSBinding implements INMSBinding { target.register(key, value, info); }); } + + private ResourceLocation createIrisKey(ResourceKey key) { + return new ResourceLocation("iris", key.location().getPath()); + } } 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 20319a3ed..84eec1ff5 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 @@ -680,6 +680,15 @@ public class NMSBinding implements INMSBinding { })); } + @Override + public boolean missingDimensionTypes(boolean overworld, boolean nether, boolean end) { + var registry = registry().registryOrThrow(Registries.DIMENSION_TYPE); + if (overworld) overworld = !registry.containsKey(createIrisKey(LevelStem.OVERWORLD)); + if (nether) nether = !registry.containsKey(createIrisKey(LevelStem.NETHER)); + if (end) end = !registry.containsKey(createIrisKey(LevelStem.END)); + return overworld || nether || end; + } + private WorldLoader.DataLoadContext supplier(WorldLoader.DataLoadContext old) { return dataLoadContext.aquire(() -> new WorldLoader.DataLoadContext( old.resources(), @@ -732,7 +741,7 @@ public class NMSBinding implements INMSBinding { } private void register(MappedRegistry target, Registry dimensions, FlatLevelSource source, ResourceKey key) { - var loc = new ResourceLocation("iris", key.location().getPath()); + var loc = createIrisKey(key); target.register(key, new LevelStem( dimensions.getHolder(ResourceKey.create(Registries.DIMENSION_TYPE, loc)).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())), source @@ -748,4 +757,8 @@ public class NMSBinding implements INMSBinding { target.register(key, value, info); }); } + + private ResourceLocation createIrisKey(ResourceKey key) { + return new ResourceLocation("iris", key.location().getPath()); + } } diff --git a/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java b/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java index 29d66b026..0dffeb195 100644 --- a/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java +++ b/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java @@ -705,6 +705,15 @@ public class NMSBinding implements INMSBinding { })); } + @Override + public boolean missingDimensionTypes(boolean overworld, boolean nether, boolean end) { + var registry = registry().registryOrThrow(Registries.DIMENSION_TYPE); + if (overworld) overworld = !registry.containsKey(createIrisKey(LevelStem.OVERWORLD)); + if (nether) nether = !registry.containsKey(createIrisKey(LevelStem.NETHER)); + if (end) end = !registry.containsKey(createIrisKey(LevelStem.END)); + return overworld || nether || end; + } + private WorldLoader.DataLoadContext supplier(WorldLoader.DataLoadContext old) { return dataLoadContext.aquire(() -> new WorldLoader.DataLoadContext( old.resources(), @@ -757,7 +766,7 @@ public class NMSBinding implements INMSBinding { } private void register(MappedRegistry target, Registry dimensions, FlatLevelSource source, ResourceKey key) { - var loc = new ResourceLocation("iris", key.location().getPath()); + var loc = createIrisKey(key); target.register(key, new LevelStem( dimensions.getHolder(ResourceKey.create(Registries.DIMENSION_TYPE, loc)).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())), source @@ -773,4 +782,8 @@ public class NMSBinding implements INMSBinding { target.register(key, value, info); }); } + + private ResourceLocation createIrisKey(ResourceKey key) { + return new ResourceLocation("iris", key.location().getPath()); + } } diff --git a/nms/v1_21_R1/src/main/java/com/volmit/iris/core/nms/v1_21_R1/NMSBinding.java b/nms/v1_21_R1/src/main/java/com/volmit/iris/core/nms/v1_21_R1/NMSBinding.java index edf76e919..71b59e65a 100644 --- a/nms/v1_21_R1/src/main/java/com/volmit/iris/core/nms/v1_21_R1/NMSBinding.java +++ b/nms/v1_21_R1/src/main/java/com/volmit/iris/core/nms/v1_21_R1/NMSBinding.java @@ -709,6 +709,15 @@ public class NMSBinding implements INMSBinding { })); } + @Override + public boolean missingDimensionTypes(boolean overworld, boolean nether, boolean end) { + var registry = registry().registryOrThrow(Registries.DIMENSION_TYPE); + if (overworld) overworld = !registry.containsKey(createIrisKey(LevelStem.OVERWORLD)); + if (nether) nether = !registry.containsKey(createIrisKey(LevelStem.NETHER)); + if (end) end = !registry.containsKey(createIrisKey(LevelStem.END)); + return overworld || nether || end; + } + private WorldLoader.DataLoadContext supplier(WorldLoader.DataLoadContext old) { return dataLoadContext.aquire(() -> new WorldLoader.DataLoadContext( old.resources(), @@ -761,7 +770,7 @@ public class NMSBinding implements INMSBinding { } private void register(MappedRegistry target, Registry dimensions, FlatLevelSource source, ResourceKey key) { - var loc = ResourceLocation.fromNamespaceAndPath("iris", key.location().getPath()); + var loc = createIrisKey(key); target.register(key, new LevelStem( dimensions.getHolder(ResourceKey.create(Registries.DIMENSION_TYPE, loc)).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())), source @@ -777,4 +786,8 @@ public class NMSBinding implements INMSBinding { target.register(key, value, info); }); } + + private ResourceLocation createIrisKey(ResourceKey key) { + return ResourceLocation.fromNamespaceAndPath("iris", key.location().getPath()); + } } diff --git a/nms/v1_21_R2/src/main/java/com/volmit/iris/core/nms/v1_21_R2/NMSBinding.java b/nms/v1_21_R2/src/main/java/com/volmit/iris/core/nms/v1_21_R2/NMSBinding.java index fd2a60574..27a379228 100644 --- a/nms/v1_21_R2/src/main/java/com/volmit/iris/core/nms/v1_21_R2/NMSBinding.java +++ b/nms/v1_21_R2/src/main/java/com/volmit/iris/core/nms/v1_21_R2/NMSBinding.java @@ -699,6 +699,15 @@ public class NMSBinding implements INMSBinding { })); } + @Override + public boolean missingDimensionTypes(boolean overworld, boolean nether, boolean end) { + var registry = registry().lookupOrThrow(Registries.DIMENSION_TYPE); + if (overworld) overworld = !registry.containsKey(createIrisKey(LevelStem.OVERWORLD)); + if (nether) nether = !registry.containsKey(createIrisKey(LevelStem.NETHER)); + if (end) end = !registry.containsKey(createIrisKey(LevelStem.END)); + return overworld || nether || end; + } + private WorldLoader.DataLoadContext supplier(WorldLoader.DataLoadContext old) { return dataLoadContext.aquire(() -> new WorldLoader.DataLoadContext( old.resources(), @@ -751,7 +760,7 @@ public class NMSBinding implements INMSBinding { } private void register(MappedRegistry target, Registry dimensions, FlatLevelSource source, ResourceKey key) { - var loc = ResourceLocation.fromNamespaceAndPath("iris", key.location().getPath()); + var loc = createIrisKey(key); target.register(key, new LevelStem( dimensions.get(loc).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())), source @@ -767,4 +776,8 @@ public class NMSBinding implements INMSBinding { target.register(key, value, info); }); } + + private ResourceLocation createIrisKey(ResourceKey key) { + return ResourceLocation.fromNamespaceAndPath("iris", key.location().getPath()); + } } diff --git a/nms/v1_21_R3/src/main/java/com/volmit/iris/core/nms/v1_21_R3/NMSBinding.java b/nms/v1_21_R3/src/main/java/com/volmit/iris/core/nms/v1_21_R3/NMSBinding.java index 011256342..efb282d86 100644 --- a/nms/v1_21_R3/src/main/java/com/volmit/iris/core/nms/v1_21_R3/NMSBinding.java +++ b/nms/v1_21_R3/src/main/java/com/volmit/iris/core/nms/v1_21_R3/NMSBinding.java @@ -698,6 +698,15 @@ public class NMSBinding implements INMSBinding { })); } + @Override + public boolean missingDimensionTypes(boolean overworld, boolean nether, boolean end) { + var registry = registry().lookupOrThrow(Registries.DIMENSION_TYPE); + if (overworld) overworld = !registry.containsKey(createIrisKey(LevelStem.OVERWORLD)); + if (nether) nether = !registry.containsKey(createIrisKey(LevelStem.NETHER)); + if (end) end = !registry.containsKey(createIrisKey(LevelStem.END)); + return overworld || nether || end; + } + private WorldLoader.DataLoadContext supplier(WorldLoader.DataLoadContext old) { return dataLoadContext.aquire(() -> new WorldLoader.DataLoadContext( old.resources(), @@ -750,7 +759,7 @@ public class NMSBinding implements INMSBinding { } private void register(MappedRegistry target, Registry dimensions, FlatLevelSource source, ResourceKey key) { - var loc = ResourceLocation.fromNamespaceAndPath("iris", key.location().getPath()); + var loc = createIrisKey(key); target.register(key, new LevelStem( dimensions.get(loc).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())), source @@ -766,4 +775,8 @@ public class NMSBinding implements INMSBinding { target.register(key, value, info); }); } + + private ResourceLocation createIrisKey(ResourceKey key) { + return ResourceLocation.fromNamespaceAndPath("iris", key.location().getPath()); + } } From 1b1b9d97b72c76a5af37ba9fdbc1a80bd7591c19 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Tue, 25 Mar 2025 19:15:47 +0100 Subject: [PATCH 3/3] update overworld pack to 31020 --- core/src/main/java/com/volmit/iris/core/nms/INMS.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/volmit/iris/core/nms/INMS.java b/core/src/main/java/com/volmit/iris/core/nms/INMS.java index d9a960341..3daefa900 100644 --- a/core/src/main/java/com/volmit/iris/core/nms/INMS.java +++ b/core/src/main/java/com/volmit/iris/core/nms/INMS.java @@ -37,7 +37,7 @@ public class INMS { "1.21.4", "v1_21_R3" ); private static final List PACKS = List.of( - new Version(21, 4, "31010"), + new Version(21, 4, "31020"), new Version(21, 2, "31000"), new Version(20, 1, "3910") );