mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-02 07:56:48 +00:00
use flat level source instead of trying to get the levelstems
This commit is contained in:
parent
dfe4894be7
commit
06a45056d9
@ -38,7 +38,9 @@ import net.minecraft.tags.TagKey;
|
|||||||
import net.minecraft.world.entity.EntityDimensions;
|
import net.minecraft.world.entity.EntityDimensions;
|
||||||
import net.minecraft.world.level.LevelReader;
|
import net.minecraft.world.level.LevelReader;
|
||||||
import net.minecraft.world.level.biome.BiomeSource;
|
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.Block;
|
||||||
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.block.EntityBlock;
|
import net.minecraft.world.level.block.EntityBlock;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
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.chunk.LevelChunk;
|
||||||
import net.minecraft.world.level.dimension.DimensionType;
|
import net.minecraft.world.level.dimension.DimensionType;
|
||||||
import net.minecraft.world.level.dimension.LevelStem;
|
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.*;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.block.data.BlockData;
|
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) {
|
private RegistryAccess.Frozen createRegistryAccess(RegistryAccess.Frozen datapack, boolean copy, boolean overworld, boolean nether, boolean end) {
|
||||||
var access = registry();
|
var access = registry();
|
||||||
var dimensions = access.registryOrThrow(Registries.DIMENSION_TYPE);
|
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());
|
var fake = new MappedRegistry<>(Registries.LEVEL_STEM, Lifecycle.experimental());
|
||||||
if (overworld) register(fake, levelStems, dimensions, LevelStem.OVERWORLD);
|
if (overworld) register(fake, dimensions, source, LevelStem.OVERWORLD);
|
||||||
if (nether) register(fake, levelStems, dimensions, LevelStem.NETHER);
|
if (nether) register(fake, dimensions, source, LevelStem.NETHER);
|
||||||
if (end) register(fake, levelStems, dimensions, LevelStem.END);
|
if (end) register(fake, dimensions, source, LevelStem.END);
|
||||||
copy(fake, datapack.registry(Registries.LEVEL_STEM).orElse(null));
|
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();
|
return new RegistryAccess.Frozen.ImmutableRegistryAccess(List.of(fake.freeze())).freeze();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void register(MappedRegistry<LevelStem> target, Registry<LevelStem> levelStems, Registry<DimensionType> dimensions, ResourceKey<LevelStem> key) {
|
private void register(MappedRegistry<LevelStem> target, Registry<DimensionType> dimensions, FlatLevelSource source, ResourceKey<LevelStem> key) {
|
||||||
|
var loc = new ResourceLocation("iris", key.location().getPath());
|
||||||
target.register(key, new LevelStem(
|
target.register(key, new LevelStem(
|
||||||
dimensions.getHolderOrThrow(ResourceKey.create(Registries.DIMENSION_TYPE, new ResourceLocation("iris", key.location().getPath()))),
|
dimensions.getHolder(ResourceKey.create(Registries.DIMENSION_TYPE, loc)).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())),
|
||||||
levelStems.getOrThrow(key).generator()
|
source
|
||||||
), Lifecycle.stable());
|
), Lifecycle.stable());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,9 +28,14 @@ import net.minecraft.server.WorldLoader;
|
|||||||
import net.minecraft.server.commands.data.BlockDataAccessor;
|
import net.minecraft.server.commands.data.BlockDataAccessor;
|
||||||
import net.minecraft.tags.TagKey;
|
import net.minecraft.tags.TagKey;
|
||||||
import net.minecraft.world.level.LevelReader;
|
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.EntityBlock;
|
||||||
import net.minecraft.world.level.dimension.DimensionType;
|
import net.minecraft.world.level.dimension.DimensionType;
|
||||||
import net.minecraft.world.level.dimension.LevelStem;
|
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.*;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.block.data.BlockData;
|
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) {
|
private RegistryAccess.Frozen createRegistryAccess(RegistryAccess.Frozen datapack, boolean copy, boolean overworld, boolean nether, boolean end) {
|
||||||
var access = registry();
|
var access = registry();
|
||||||
var dimensions = access.registryOrThrow(Registries.DIMENSION_TYPE);
|
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());
|
var fake = new MappedRegistry<>(Registries.LEVEL_STEM, Lifecycle.experimental());
|
||||||
if (overworld) register(fake, levelStems, dimensions, LevelStem.OVERWORLD);
|
if (overworld) register(fake, dimensions, source, LevelStem.OVERWORLD);
|
||||||
if (nether) register(fake, levelStems, dimensions, LevelStem.NETHER);
|
if (nether) register(fake, dimensions, source, LevelStem.NETHER);
|
||||||
if (end) register(fake, levelStems, dimensions, LevelStem.END);
|
if (end) register(fake, dimensions, source, LevelStem.END);
|
||||||
copy(fake, datapack.registry(Registries.LEVEL_STEM).orElse(null));
|
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();
|
return new RegistryAccess.Frozen.ImmutableRegistryAccess(List.of(fake.freeze())).freeze();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void register(MappedRegistry<LevelStem> target, Registry<LevelStem> levelStems, Registry<DimensionType> dimensions, ResourceKey<LevelStem> key) {
|
private void register(MappedRegistry<LevelStem> target, Registry<DimensionType> dimensions, FlatLevelSource source, ResourceKey<LevelStem> key) {
|
||||||
|
var loc = new ResourceLocation("iris", key.location().getPath());
|
||||||
target.register(key, new LevelStem(
|
target.register(key, new LevelStem(
|
||||||
dimensions.getHolderOrThrow(ResourceKey.create(Registries.DIMENSION_TYPE, new ResourceLocation("iris", key.location().getPath()))),
|
dimensions.getHolder(ResourceKey.create(Registries.DIMENSION_TYPE, loc)).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())),
|
||||||
levelStems.getOrThrow(key).generator()
|
source
|
||||||
), Lifecycle.stable());
|
), Lifecycle.stable());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,9 +28,14 @@ import net.minecraft.server.WorldLoader;
|
|||||||
import net.minecraft.server.commands.data.BlockDataAccessor;
|
import net.minecraft.server.commands.data.BlockDataAccessor;
|
||||||
import net.minecraft.tags.TagKey;
|
import net.minecraft.tags.TagKey;
|
||||||
import net.minecraft.world.level.LevelReader;
|
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.EntityBlock;
|
||||||
import net.minecraft.world.level.dimension.DimensionType;
|
import net.minecraft.world.level.dimension.DimensionType;
|
||||||
import net.minecraft.world.level.dimension.LevelStem;
|
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.*;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.block.data.BlockData;
|
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) {
|
private RegistryAccess.Frozen createRegistryAccess(RegistryAccess.Frozen datapack, boolean copy, boolean overworld, boolean nether, boolean end) {
|
||||||
var access = registry();
|
var access = registry();
|
||||||
var dimensions = access.registryOrThrow(Registries.DIMENSION_TYPE);
|
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());
|
var fake = new MappedRegistry<>(Registries.LEVEL_STEM, Lifecycle.experimental());
|
||||||
if (overworld) register(fake, levelStems, dimensions, LevelStem.OVERWORLD);
|
if (overworld) register(fake, dimensions, source, LevelStem.OVERWORLD);
|
||||||
if (nether) register(fake, levelStems, dimensions, LevelStem.NETHER);
|
if (nether) register(fake, dimensions, source, LevelStem.NETHER);
|
||||||
if (end) register(fake, levelStems, dimensions, LevelStem.END);
|
if (end) register(fake, dimensions, source, LevelStem.END);
|
||||||
copy(fake, datapack.registry(Registries.LEVEL_STEM).orElse(null));
|
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();
|
return new RegistryAccess.Frozen.ImmutableRegistryAccess(List.of(fake.freeze())).freeze();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void register(MappedRegistry<LevelStem> target, Registry<LevelStem> levelStems, Registry<DimensionType> dimensions, ResourceKey<LevelStem> key) {
|
private void register(MappedRegistry<LevelStem> target, Registry<DimensionType> dimensions, FlatLevelSource source, ResourceKey<LevelStem> key) {
|
||||||
|
var loc = new ResourceLocation("iris", key.location().getPath());
|
||||||
target.register(key, new LevelStem(
|
target.register(key, new LevelStem(
|
||||||
dimensions.getHolderOrThrow(ResourceKey.create(Registries.DIMENSION_TYPE, new ResourceLocation("iris", key.location().getPath()))),
|
dimensions.getHolder(ResourceKey.create(Registries.DIMENSION_TYPE, loc)).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())),
|
||||||
levelStems.getOrThrow(key).generator()
|
source
|
||||||
), Lifecycle.stable());
|
), Lifecycle.stable());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,11 +38,16 @@ import net.minecraft.server.level.ServerLevel;
|
|||||||
import net.minecraft.tags.TagKey;
|
import net.minecraft.tags.TagKey;
|
||||||
import net.minecraft.world.item.component.CustomData;
|
import net.minecraft.world.item.component.CustomData;
|
||||||
import net.minecraft.world.level.LevelReader;
|
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.EntityBlock;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||||
import net.minecraft.world.level.chunk.status.ChunkStatus;
|
import net.minecraft.world.level.chunk.status.ChunkStatus;
|
||||||
import net.minecraft.world.level.dimension.DimensionType;
|
import net.minecraft.world.level.dimension.DimensionType;
|
||||||
import net.minecraft.world.level.dimension.LevelStem;
|
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.*;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.block.data.BlockData;
|
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) {
|
private RegistryAccess.Frozen createRegistryAccess(RegistryAccess.Frozen datapack, boolean copy, boolean overworld, boolean nether, boolean end) {
|
||||||
var access = registry();
|
var access = registry();
|
||||||
var dimensions = access.registryOrThrow(Registries.DIMENSION_TYPE);
|
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());
|
var fake = new MappedRegistry<>(Registries.LEVEL_STEM, Lifecycle.experimental());
|
||||||
if (overworld) register(fake, levelStems, dimensions, LevelStem.OVERWORLD);
|
if (overworld) register(fake, dimensions, source, LevelStem.OVERWORLD);
|
||||||
if (nether) register(fake, levelStems, dimensions, LevelStem.NETHER);
|
if (nether) register(fake, dimensions, source, LevelStem.NETHER);
|
||||||
if (end) register(fake, levelStems, dimensions, LevelStem.END);
|
if (end) register(fake, dimensions, source, LevelStem.END);
|
||||||
copy(fake, datapack.registry(Registries.LEVEL_STEM).orElse(null));
|
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();
|
return new RegistryAccess.Frozen.ImmutableRegistryAccess(List.of(fake.freeze())).freeze();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void register(MappedRegistry<LevelStem> target, Registry<LevelStem> levelStems, Registry<DimensionType> dimensions, ResourceKey<LevelStem> key) {
|
private void register(MappedRegistry<LevelStem> target, Registry<DimensionType> dimensions, FlatLevelSource source, ResourceKey<LevelStem> key) {
|
||||||
|
var loc = new ResourceLocation("iris", key.location().getPath());
|
||||||
target.register(key, new LevelStem(
|
target.register(key, new LevelStem(
|
||||||
dimensions.getHolder(new ResourceLocation("iris", key.location().getPath())).orElseThrow(),
|
dimensions.getHolder(ResourceKey.create(Registries.DIMENSION_TYPE, loc)).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())),
|
||||||
levelStems.getOrThrow(key).generator()
|
source
|
||||||
), RegistrationInfo.BUILT_IN);
|
), RegistrationInfo.BUILT_IN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,11 +32,16 @@ import net.minecraft.server.level.ChunkMap;
|
|||||||
import net.minecraft.tags.TagKey;
|
import net.minecraft.tags.TagKey;
|
||||||
import net.minecraft.world.item.component.CustomData;
|
import net.minecraft.world.item.component.CustomData;
|
||||||
import net.minecraft.world.level.LevelReader;
|
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.EntityBlock;
|
||||||
import net.minecraft.world.level.chunk.status.ChunkStatus;
|
import net.minecraft.world.level.chunk.status.ChunkStatus;
|
||||||
import net.minecraft.world.level.chunk.status.WorldGenContext;
|
import net.minecraft.world.level.chunk.status.WorldGenContext;
|
||||||
import net.minecraft.world.level.dimension.DimensionType;
|
import net.minecraft.world.level.dimension.DimensionType;
|
||||||
import net.minecraft.world.level.dimension.LevelStem;
|
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.*;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.block.data.BlockData;
|
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) {
|
private RegistryAccess.Frozen createRegistryAccess(RegistryAccess.Frozen datapack, boolean copy, boolean overworld, boolean nether, boolean end) {
|
||||||
var access = registry();
|
var access = registry();
|
||||||
var dimensions = access.registryOrThrow(Registries.DIMENSION_TYPE);
|
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());
|
var fake = new MappedRegistry<>(Registries.LEVEL_STEM, Lifecycle.experimental());
|
||||||
if (overworld) register(fake, levelStems, dimensions, LevelStem.OVERWORLD);
|
if (overworld) register(fake, dimensions, source, LevelStem.OVERWORLD);
|
||||||
if (nether) register(fake, levelStems, dimensions, LevelStem.NETHER);
|
if (nether) register(fake, dimensions, source, LevelStem.NETHER);
|
||||||
if (end) register(fake, levelStems, dimensions, LevelStem.END);
|
if (end) register(fake, dimensions, source, LevelStem.END);
|
||||||
copy(fake, datapack.registry(Registries.LEVEL_STEM).orElse(null));
|
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();
|
return new RegistryAccess.Frozen.ImmutableRegistryAccess(List.of(fake.freeze())).freeze();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void register(MappedRegistry<LevelStem> target, Registry<LevelStem> levelStems, Registry<DimensionType> dimensions, ResourceKey<LevelStem> key) {
|
private void register(MappedRegistry<LevelStem> target, Registry<DimensionType> dimensions, FlatLevelSource source, ResourceKey<LevelStem> key) {
|
||||||
|
var loc = ResourceLocation.fromNamespaceAndPath("iris", key.location().getPath());
|
||||||
target.register(key, new LevelStem(
|
target.register(key, new LevelStem(
|
||||||
dimensions.getHolder(ResourceLocation.fromNamespaceAndPath("iris", key.location().getPath())).orElseThrow(),
|
dimensions.getHolder(ResourceKey.create(Registries.DIMENSION_TYPE, loc)).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())),
|
||||||
levelStems.getOrThrow(key).generator()
|
source
|
||||||
), RegistrationInfo.BUILT_IN);
|
), RegistrationInfo.BUILT_IN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,11 +27,16 @@ import net.minecraft.server.commands.data.BlockDataAccessor;
|
|||||||
import net.minecraft.tags.TagKey;
|
import net.minecraft.tags.TagKey;
|
||||||
import net.minecraft.world.item.component.CustomData;
|
import net.minecraft.world.item.component.CustomData;
|
||||||
import net.minecraft.world.level.LevelReader;
|
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.EntityBlock;
|
||||||
import net.minecraft.world.level.chunk.status.ChunkStatus;
|
import net.minecraft.world.level.chunk.status.ChunkStatus;
|
||||||
import net.minecraft.world.level.chunk.status.WorldGenContext;
|
import net.minecraft.world.level.chunk.status.WorldGenContext;
|
||||||
import net.minecraft.world.level.dimension.DimensionType;
|
import net.minecraft.world.level.dimension.DimensionType;
|
||||||
import net.minecraft.world.level.dimension.LevelStem;
|
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.*;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.block.data.BlockData;
|
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) {
|
private RegistryAccess.Frozen createRegistryAccess(RegistryAccess.Frozen datapack, boolean copy, boolean overworld, boolean nether, boolean end) {
|
||||||
var access = registry();
|
var access = registry();
|
||||||
var dimensions = access.lookupOrThrow(Registries.DIMENSION_TYPE);
|
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());
|
var fake = new MappedRegistry<>(Registries.LEVEL_STEM, Lifecycle.experimental());
|
||||||
if (overworld) register(fake, levelStems, dimensions, LevelStem.OVERWORLD);
|
if (overworld) register(fake, dimensions, source, LevelStem.OVERWORLD);
|
||||||
if (nether) register(fake, levelStems, dimensions, LevelStem.NETHER);
|
if (nether) register(fake, dimensions, source, LevelStem.NETHER);
|
||||||
if (end) register(fake, levelStems, dimensions, LevelStem.END);
|
if (end) register(fake, dimensions, source, LevelStem.END);
|
||||||
copy(fake, datapack.lookup(Registries.LEVEL_STEM).orElse(null));
|
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();
|
return new RegistryAccess.Frozen.ImmutableRegistryAccess(List.of(fake.freeze())).freeze();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void register(MappedRegistry<LevelStem> target, Registry<LevelStem> levelStems, Registry<DimensionType> dimensions, ResourceKey<LevelStem> key) {
|
private void register(MappedRegistry<LevelStem> target, Registry<DimensionType> dimensions, FlatLevelSource source, ResourceKey<LevelStem> key) {
|
||||||
|
var loc = ResourceLocation.fromNamespaceAndPath("iris", key.location().getPath());
|
||||||
target.register(key, new LevelStem(
|
target.register(key, new LevelStem(
|
||||||
dimensions.get(ResourceLocation.fromNamespaceAndPath("iris", key.location().getPath())).orElseThrow(),
|
dimensions.get(loc).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())),
|
||||||
levelStems.getValueOrThrow(key).generator()
|
source
|
||||||
), RegistrationInfo.BUILT_IN);
|
), RegistrationInfo.BUILT_IN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,7 +39,9 @@ import net.minecraft.tags.TagKey;
|
|||||||
import net.minecraft.world.entity.EntityType;
|
import net.minecraft.world.entity.EntityType;
|
||||||
import net.minecraft.world.item.component.CustomData;
|
import net.minecraft.world.item.component.CustomData;
|
||||||
import net.minecraft.world.level.LevelReader;
|
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.Block;
|
||||||
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.block.EntityBlock;
|
import net.minecraft.world.level.block.EntityBlock;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
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.chunk.status.WorldGenContext;
|
||||||
import net.minecraft.world.level.dimension.DimensionType;
|
import net.minecraft.world.level.dimension.DimensionType;
|
||||||
import net.minecraft.world.level.dimension.LevelStem;
|
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.*;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.block.data.BlockData;
|
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) {
|
private RegistryAccess.Frozen createRegistryAccess(RegistryAccess.Frozen datapack, boolean copy, boolean overworld, boolean nether, boolean end) {
|
||||||
var access = registry();
|
var access = registry();
|
||||||
var dimensions = access.lookupOrThrow(Registries.DIMENSION_TYPE);
|
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());
|
var fake = new MappedRegistry<>(Registries.LEVEL_STEM, Lifecycle.experimental());
|
||||||
if (overworld) register(fake, levelStems, dimensions, LevelStem.OVERWORLD);
|
if (overworld) register(fake, dimensions, source, LevelStem.OVERWORLD);
|
||||||
if (nether) register(fake, levelStems, dimensions, LevelStem.NETHER);
|
if (nether) register(fake, dimensions, source, LevelStem.NETHER);
|
||||||
if (end) register(fake, levelStems, dimensions, LevelStem.END);
|
if (end) register(fake, dimensions, source, LevelStem.END);
|
||||||
copy(fake, datapack.lookup(Registries.LEVEL_STEM).orElse(null));
|
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();
|
return new RegistryAccess.Frozen.ImmutableRegistryAccess(List.of(fake.freeze())).freeze();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void register(MappedRegistry<LevelStem> target, Registry<LevelStem> levelStems, Registry<DimensionType> dimensions, ResourceKey<LevelStem> key) {
|
private void register(MappedRegistry<LevelStem> target, Registry<DimensionType> dimensions, FlatLevelSource source, ResourceKey<LevelStem> key) {
|
||||||
|
var loc = ResourceLocation.fromNamespaceAndPath("iris", key.location().getPath());
|
||||||
target.register(key, new LevelStem(
|
target.register(key, new LevelStem(
|
||||||
dimensions.get(ResourceLocation.fromNamespaceAndPath("iris", key.location().getPath())).orElseThrow(),
|
dimensions.get(loc).orElseThrow(() -> new IllegalStateException("Missing dimension type " + loc + " in " + dimensions.keySet())),
|
||||||
levelStems.getValueOrThrow(key).generator()
|
source
|
||||||
), RegistrationInfo.BUILT_IN);
|
), RegistrationInfo.BUILT_IN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user