From b3224538891757e0b65b770ae8a2c2cc7462513d Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 30 Nov 2022 20:23:29 +0100 Subject: [PATCH] Added more Registries to DataGen pass --- .../api/v2/generator/BCLChunkGenerator.java | 2 +- .../betterx/bclib/datagen/BCLibDatagen.java | 13 +- .../datagen/CustomRegistriesDataProvider.java | 137 ------------------ .../bclib/datagen/TestWorldgenProvider.java | 32 ++++ .../bclib/datagen/WorldgenProvider.java | 11 +- .../bclib/registry/PresetsRegistry.java | 70 +++++---- .../bclib/registry/PresetsRegistryClient.java | 12 +- .../together/worldPreset/WorldPresets.java | 23 +-- .../client/WorldPresetsClient.java | 4 +- 9 files changed, 102 insertions(+), 202 deletions(-) delete mode 100644 src/main/java/org/betterx/bclib/datagen/CustomRegistriesDataProvider.java create mode 100644 src/main/java/org/betterx/bclib/datagen/TestWorldgenProvider.java diff --git a/src/main/java/org/betterx/bclib/api/v2/generator/BCLChunkGenerator.java b/src/main/java/org/betterx/bclib/api/v2/generator/BCLChunkGenerator.java index 4c842ee9..1c522619 100644 --- a/src/main/java/org/betterx/bclib/api/v2/generator/BCLChunkGenerator.java +++ b/src/main/java/org/betterx/bclib/api/v2/generator/BCLChunkGenerator.java @@ -68,7 +68,7 @@ public class BCLChunkGenerator extends NoiseBasedChunkGenerator implements Resto ) { super(biomeSource, holder); initialBiomeSource = biomeSource; - if (biomeSource instanceof BiomeSourceWithNoiseRelatedSettings bcl) { + if (biomeSource instanceof BiomeSourceWithNoiseRelatedSettings bcl && holder.isBound()) { bcl.onLoadGeneratorSettings(holder.value()); } diff --git a/src/main/java/org/betterx/bclib/datagen/BCLibDatagen.java b/src/main/java/org/betterx/bclib/datagen/BCLibDatagen.java index 1c0b3a07..16d7b49c 100644 --- a/src/main/java/org/betterx/bclib/datagen/BCLibDatagen.java +++ b/src/main/java/org/betterx/bclib/datagen/BCLibDatagen.java @@ -16,18 +16,23 @@ public class BCLibDatagen implements DataGeneratorEntrypoint { BCLib.LOGGER.info("Bootstrap onInitializeDataGenerator"); final FabricDataGenerator.Pack pack = dataGenerator.createPack(); + if (ADD_TESTS) { + pack.addProvider(TestWorldgenProvider::new); + } pack.addProvider(WorldgenProvider::new); //pack.addProvider(BiomeProvider::new); //pack.addProvider(new BiomeProvider()); - // pack.addProvider(CustomRegistriesDataProvider::new); + //pack.addProvider(CustomRegistriesDataProvider::new); } @Override public void buildRegistry(RegistrySetBuilder registryBuilder) { BCLib.LOGGER.info("Datagen buildRegistry"); - registryBuilder.add(Registries.CONFIGURED_FEATURE, TestConfiguredFeatures::bootstrap); - registryBuilder.add(Registries.PLACED_FEATURE, TestPlacedFeatures::bootstrap); - registryBuilder.add(Registries.BIOME, TestBiomes::bootstrap); + if (ADD_TESTS) { + registryBuilder.add(Registries.CONFIGURED_FEATURE, TestConfiguredFeatures::bootstrap); + registryBuilder.add(Registries.PLACED_FEATURE, TestPlacedFeatures::bootstrap); + registryBuilder.add(Registries.BIOME, TestBiomes::bootstrap); + } registryBuilder.add(Registries.NOISE_SETTINGS, NoiseDatagen::bootstrap); } } diff --git a/src/main/java/org/betterx/bclib/datagen/CustomRegistriesDataProvider.java b/src/main/java/org/betterx/bclib/datagen/CustomRegistriesDataProvider.java deleted file mode 100644 index b255014a..00000000 --- a/src/main/java/org/betterx/bclib/datagen/CustomRegistriesDataProvider.java +++ /dev/null @@ -1,137 +0,0 @@ -package org.betterx.bclib.datagen; - -import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeRegistry; -import org.betterx.bclib.api.v2.levelgen.biomes.BiomeData; -import org.betterx.worlds.together.WorldsTogether; -import org.betterx.worlds.together.surfaceRules.AssignedSurfaceRule; -import org.betterx.worlds.together.surfaceRules.SurfaceRuleRegistry; - -import com.mojang.serialization.DynamicOps; -import com.mojang.serialization.Encoder; -import com.mojang.serialization.JsonOps; -import net.minecraft.core.HolderLookup; -import net.minecraft.core.Registry; -import net.minecraft.core.registries.Registries; -import net.minecraft.data.CachedOutput; -import net.minecraft.data.DataProvider; -import net.minecraft.data.PackOutput; -import net.minecraft.data.registries.VanillaRegistries; -import net.minecraft.resources.RegistryDataLoader; -import net.minecraft.resources.RegistryOps; -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; -import net.minecraft.world.level.levelgen.placement.PlacedFeature; -import net.minecraft.world.level.levelgen.structure.Structure; - -import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; - -import com.google.gson.JsonElement; - -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.concurrent.CompletableFuture; - -public class CustomRegistriesDataProvider implements DataProvider { - public static final List> REGISTRIES = List.of( - new RegistryDataLoader.RegistryData<>(BCLBiomeRegistry.BCL_BIOMES_REGISTRY, BiomeData.CODEC), - new RegistryDataLoader.RegistryData<>( - SurfaceRuleRegistry.SURFACE_RULES_REGISTRY, - AssignedSurfaceRule.CODEC - ), - new RegistryDataLoader.RegistryData<>(Registries.BIOME, Biome.DIRECT_CODEC), - new RegistryDataLoader.RegistryData<>(Registries.CONFIGURED_FEATURE, ConfiguredFeature.DIRECT_CODEC), - new RegistryDataLoader.RegistryData<>(Registries.PLACED_FEATURE, PlacedFeature.DIRECT_CODEC), - new RegistryDataLoader.RegistryData<>(Registries.STRUCTURE, Structure.DIRECT_CODEC) - ); - - - private final PackOutput output; - - public CustomRegistriesDataProvider(FabricDataOutput generator) { - this.output = generator; - } - - @Override - public CompletableFuture run(CachedOutput cachedOutput) { - HolderLookup.Provider registryAccess = VanillaRegistries.createLookup(); - RegistryOps dynamicOps = RegistryOps.create(JsonOps.INSTANCE, registryAccess); - final List> futures = new ArrayList<>(); - - for (RegistryDataLoader.RegistryData registryData : REGISTRIES) { - futures.add(this.dumpRegistryCapFuture( - cachedOutput, - registryAccess, - dynamicOps, - (RegistryDataLoader.RegistryData) registryData - )); - } - return CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new)); - } - - private CompletableFuture dumpRegistryCapFuture( - CachedOutput cachedOutput, - HolderLookup.Provider registryAccess, - DynamicOps dynamicOps, - RegistryDataLoader.RegistryData registryData - ) { - return CompletableFuture.runAsync(() -> dumpRegistryCap( - cachedOutput, - registryAccess, - dynamicOps, - registryData - )); - } - - private void dumpRegistryCap( - CachedOutput cachedOutput, - HolderLookup.Provider registryAccess, - DynamicOps dynamicOps, - RegistryDataLoader.RegistryData registryData - ) { - ResourceKey> resourceKey = registryData.key(); - - HolderLookup.RegistryLookup registry = registryAccess.lookupOrThrow(resourceKey); - PackOutput.PathProvider pathProvider = this.output.createPathProvider( - PackOutput.Target.DATA_PACK, - resourceKey.location().getPath() - ); - registry.listElementIds().forEach(entry -> - dumpValue( - pathProvider.json(entry.location()), - cachedOutput, - dynamicOps, - registryData.elementCodec(), - registry.get(entry).orElseThrow().value() - ) - ); - - } - - private static void dumpValue( - Path path, - CachedOutput cachedOutput, - DynamicOps dynamicOps, - Encoder encoder, - E object - ) { - - Optional optional = encoder.encodeStart(dynamicOps, object) - .resultOrPartial(string -> WorldsTogether.LOGGER.error( - "Couldn't serialize element {}: {}", - path, - string - )); - if (optional.isPresent()) { - DataProvider.saveStable(cachedOutput, optional.get(), path); - } - - } - - @Override - public String getName() { - return "BCL Registries"; - } -} diff --git a/src/main/java/org/betterx/bclib/datagen/TestWorldgenProvider.java b/src/main/java/org/betterx/bclib/datagen/TestWorldgenProvider.java new file mode 100644 index 00000000..88689e04 --- /dev/null +++ b/src/main/java/org/betterx/bclib/datagen/TestWorldgenProvider.java @@ -0,0 +1,32 @@ +package org.betterx.bclib.datagen; + +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.Registries; + +import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; +import net.fabricmc.fabric.api.datagen.v1.provider.FabricDynamicRegistryProvider; + +import java.util.concurrent.CompletableFuture; + +public class TestWorldgenProvider extends FabricDynamicRegistryProvider { + public TestWorldgenProvider( + FabricDataOutput output, + CompletableFuture registriesFuture + ) { + super(output, registriesFuture); + } + + @Override + protected void configure(HolderLookup.Provider registries, Entries entries) { + if (BCLibDatagen.ADD_TESTS) { + entries.addAll(registries.lookupOrThrow(Registries.CONFIGURED_FEATURE)); + entries.addAll(registries.lookupOrThrow(Registries.PLACED_FEATURE)); + entries.addAll(registries.lookupOrThrow(Registries.BIOME)); + } + } + + @Override + public String getName() { + return "Test WorldGen Provider"; + } +} diff --git a/src/main/java/org/betterx/bclib/datagen/WorldgenProvider.java b/src/main/java/org/betterx/bclib/datagen/WorldgenProvider.java index ff30eb02..f5e84e4d 100644 --- a/src/main/java/org/betterx/bclib/datagen/WorldgenProvider.java +++ b/src/main/java/org/betterx/bclib/datagen/WorldgenProvider.java @@ -1,5 +1,8 @@ package org.betterx.bclib.datagen; +import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeRegistry; +import org.betterx.worlds.together.surfaceRules.SurfaceRuleRegistry; + import net.minecraft.core.HolderLookup; import net.minecraft.core.registries.Registries; @@ -18,14 +21,14 @@ public class WorldgenProvider extends FabricDynamicRegistryProvider { @Override protected void configure(HolderLookup.Provider registries, Entries entries) { - entries.addAll(registries.lookupOrThrow(Registries.CONFIGURED_FEATURE)); - entries.addAll(registries.lookupOrThrow(Registries.PLACED_FEATURE)); - entries.addAll(registries.lookupOrThrow(Registries.BIOME)); entries.addAll(registries.lookupOrThrow(Registries.NOISE_SETTINGS)); + entries.addAll(registries.lookupOrThrow(Registries.WORLD_PRESET)); + entries.addAll(registries.lookupOrThrow(BCLBiomeRegistry.BCL_BIOMES_REGISTRY)); + entries.addAll(registries.lookupOrThrow(SurfaceRuleRegistry.SURFACE_RULES_REGISTRY)); } @Override public String getName() { - return "007 - BCLib Feature Provider"; + return "WorldGen Provider"; } } diff --git a/src/main/java/org/betterx/bclib/registry/PresetsRegistry.java b/src/main/java/org/betterx/bclib/registry/PresetsRegistry.java index 09a08be3..dfe78c55 100644 --- a/src/main/java/org/betterx/bclib/registry/PresetsRegistry.java +++ b/src/main/java/org/betterx/bclib/registry/PresetsRegistry.java @@ -21,44 +21,42 @@ import java.util.Map; public class PresetsRegistry implements WorldPresetBootstrap { - public static ResourceKey BCL_WORLD; - public static ResourceKey BCL_WORLD_LARGE; - public static ResourceKey BCL_WORLD_AMPLIFIED; - public static ResourceKey BCL_WORLD_17; + public static ResourceKey BCL_WORLD = WorldPresets.createKey(BCLib.makeID("normal")); + public static ResourceKey BCL_WORLD_LARGE = WorldPresets.createKey(BCLib.makeID("large")); + public static ResourceKey BCL_WORLD_AMPLIFIED = WorldPresets.createKey(BCLib.makeID("amplified")); + public static ResourceKey BCL_WORLD_17 = WorldPresets.createKey(BCLib.makeID("legacy_17")); public void bootstrapWorldPresets() { - BCL_WORLD = - WorldPresets.register( - BCLib.makeID("normal"), - (overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) -> - buildPreset( - overworldStem, - netherContext, BCLNetherBiomeSourceConfig.DEFAULT, - endContext, BCLEndBiomeSourceConfig.DEFAULT - ), - true - ); + WorldPresets.register( + BCL_WORLD, + (overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) -> + buildPreset( + overworldStem, + netherContext, BCLNetherBiomeSourceConfig.DEFAULT, + endContext, BCLEndBiomeSourceConfig.DEFAULT + ), + true + ); - BCL_WORLD_LARGE = - WorldPresets.register( - BCLib.makeID("large"), - (overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) -> { - Holder largeBiomeGenerator = noiseSettings - .getOrThrow(NoiseGeneratorSettings.LARGE_BIOMES); - return buildPreset( - noiseBasedOverworld.make( - overworldStem.generator().getBiomeSource(), - largeBiomeGenerator - ), - netherContext, BCLNetherBiomeSourceConfig.MINECRAFT_18_LARGE, - endContext, BCLEndBiomeSourceConfig.MINECRAFT_18_LARGE - ); - }, - true - ); + WorldPresets.register( + BCL_WORLD_LARGE, + (overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) -> { + Holder largeBiomeGenerator = noiseSettings + .getOrThrow(NoiseGeneratorSettings.LARGE_BIOMES); + return buildPreset( + noiseBasedOverworld.make( + overworldStem.generator().getBiomeSource(), + largeBiomeGenerator + ), + netherContext, BCLNetherBiomeSourceConfig.MINECRAFT_18_LARGE, + endContext, BCLEndBiomeSourceConfig.MINECRAFT_18_LARGE + ); + }, + true + ); - BCL_WORLD_AMPLIFIED = WorldPresets.register( - BCLib.makeID("amplified"), + WorldPresets.register( + BCL_WORLD_AMPLIFIED, (overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) -> { Holder amplifiedBiomeGenerator = noiseSettings .getOrThrow(NoiseGeneratorSettings.AMPLIFIED); @@ -82,8 +80,8 @@ public class PresetsRegistry implements WorldPresetBootstrap { true ); - BCL_WORLD_17 = WorldPresets.register( - BCLib.makeID("legacy_17"), + WorldPresets.register( + BCL_WORLD_17, (overworldStem, netherContext, endContext, noiseSettings, noiseBasedOverworld) -> buildPreset( overworldStem, diff --git a/src/main/java/org/betterx/bclib/registry/PresetsRegistryClient.java b/src/main/java/org/betterx/bclib/registry/PresetsRegistryClient.java index f2a9e9e3..71212c2f 100644 --- a/src/main/java/org/betterx/bclib/registry/PresetsRegistryClient.java +++ b/src/main/java/org/betterx/bclib/registry/PresetsRegistryClient.java @@ -9,22 +9,16 @@ import net.fabricmc.api.Environment; @Environment(EnvType.CLIENT) public class PresetsRegistryClient { public static void onLoad() { - WorldPresetsClient.registerCustomizeUI(PresetsRegistry.BCL_WORLD, (createWorldScreen, worldCreationContext) -> { - return new WorldSetupScreen(createWorldScreen, worldCreationContext); - }); + WorldPresetsClient.registerCustomizeUI(PresetsRegistry.BCL_WORLD, WorldSetupScreen::new); WorldPresetsClient.registerCustomizeUI( PresetsRegistry.BCL_WORLD_LARGE, - (createWorldScreen, worldCreationContext) -> { - return new WorldSetupScreen(createWorldScreen, worldCreationContext); - } + WorldSetupScreen::new ); WorldPresetsClient.registerCustomizeUI( PresetsRegistry.BCL_WORLD_AMPLIFIED, - (createWorldScreen, worldCreationContext) -> { - return new WorldSetupScreen(createWorldScreen, worldCreationContext); - } + WorldSetupScreen::new ); } } diff --git a/src/main/java/org/betterx/worlds/together/worldPreset/WorldPresets.java b/src/main/java/org/betterx/worlds/together/worldPreset/WorldPresets.java index aaac8776..c3b2dd11 100644 --- a/src/main/java/org/betterx/worlds/together/worldPreset/WorldPresets.java +++ b/src/main/java/org/betterx/worlds/together/worldPreset/WorldPresets.java @@ -53,8 +53,8 @@ public class WorldPresets { * @param visibleInUI if true, the preset will show up in the UI on world creataion * @return The key you may use to reference your new Preset */ - private static ResourceKey register(ResourceLocation loc, boolean visibleInUI) { - ResourceKey key = ResourceKey.create(Registries.WORLD_PRESET, loc); + private static ResourceKey register(ResourceKey key, boolean visibleInUI) { + //ResourceKey key = ResourceKey.create(Registries.WORLD_PRESET, loc); if (visibleInUI) { if (!didExplicitlySetDefault && DEFAULT == net.minecraft.world.level.levelgen.presets.WorldPresets.NORMAL) { DEFAULT = key; @@ -69,8 +69,12 @@ public class WorldPresets { } + public static ResourceKey createKey(ResourceLocation loc) { + return ResourceKey.create(Registries.WORLD_PRESET, loc); + } + public static ResourceKey register( - ResourceLocation loc, + ResourceKey loc, PresetBuilder builder, boolean visibleInUI ) { @@ -98,13 +102,12 @@ public class WorldPresets { .forEach(e -> e.bootstrapWorldPresets()); for (Map.Entry, PresetBuilder> e : BUILDERS.entrySet()) { - //TODO:1.19.3 called out of sync -// TogetherWorldPreset preset = e.getValue() -// .create( -// overworldStem, netherContext, endContext, -// noiseSettings, noiseBasedOverworld -// ); -// bootstrapContext.register(e.getKey(), preset); + TogetherWorldPreset preset = e.getValue() + .create( + overworldStem, netherContext, endContext, + noiseSettings, noiseBasedOverworld + ); + bootstrapContext.register(e.getKey(), preset); } BUILDERS = null; } diff --git a/src/main/java/org/betterx/worlds/together/worldPreset/client/WorldPresetsClient.java b/src/main/java/org/betterx/worlds/together/worldPreset/client/WorldPresetsClient.java index 71a7f278..692ae3b2 100644 --- a/src/main/java/org/betterx/worlds/together/worldPreset/client/WorldPresetsClient.java +++ b/src/main/java/org/betterx/worlds/together/worldPreset/client/WorldPresetsClient.java @@ -7,12 +7,14 @@ import net.minecraft.world.level.levelgen.presets.WorldPreset; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import java.util.Optional; + @Environment(EnvType.CLIENT) public class WorldPresetsClient { public static void registerCustomizeUI(ResourceKey key, PresetEditor setupScreen) { if (setupScreen != null) { //TODO: 1.19.3 this is called out of order - //PresetEditor.EDITORS.put(Optional.of(key), setupScreen); + PresetEditor.EDITORS.put(Optional.of(key), setupScreen); } }