From 1997ad6d8e31a35875b56be69d5e841361eebefc Mon Sep 17 00:00:00 2001 From: Zepalesque <60141811+Zepalesque@users.noreply.github.com> Date: Mon, 27 May 2024 20:58:04 -0400 Subject: [PATCH] feat: Registry sets --- gradle.properties | 2 +- src/main/java/net/zepalesque/redux/Redux.java | 8 +++ .../redux/data/gen/ReduxRegistrySets.java | 37 ++++++++++ .../data/resource/ReduxFeatureConfig.java | 72 +++++++++++++++++++ .../redux/data/resource/ReduxPlacements.java | 31 ++++++++ 5 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 src/main/java/net/zepalesque/redux/data/gen/ReduxRegistrySets.java create mode 100644 src/main/java/net/zepalesque/redux/data/resource/ReduxFeatureConfig.java create mode 100644 src/main/java/net/zepalesque/redux/data/resource/ReduxPlacements.java diff --git a/gradle.properties b/gradle.properties index 1b3784c17..c5bd489f7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,7 +19,7 @@ aether_version=1.20.4-1.4.1-neoforge nitrogen_version=1.20.4-1.1.4-neoforge cumulus_version=1.20.4-1.0.1-neoforge curios_version=7.3.4 -zenith_version=1.0.31 +zenith_version=1.0.33 aeroblender_version=5271794 terrablender_version=1.20.4-3.3.0.12 terrablender_version_minimum=1.20.4-3.3.0.0 diff --git a/src/main/java/net/zepalesque/redux/Redux.java b/src/main/java/net/zepalesque/redux/Redux.java index d7c4927e0..aa509cdf6 100644 --- a/src/main/java/net/zepalesque/redux/Redux.java +++ b/src/main/java/net/zepalesque/redux/Redux.java @@ -1,5 +1,7 @@ package net.zepalesque.redux; +import com.aetherteam.aether.data.AetherData; +import com.aetherteam.aether.data.generators.AetherRegistrySets; import com.mojang.logging.LogUtils; import net.minecraft.DetectedVersion; import net.minecraft.core.HolderLookup; @@ -16,6 +18,7 @@ import net.neoforged.fml.common.Mod; import net.neoforged.fml.config.ModConfig; import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; +import net.neoforged.neoforge.common.data.DatapackBuiltinEntriesProvider; import net.neoforged.neoforge.common.data.ExistingFileHelper; import net.neoforged.neoforge.data.event.GatherDataEvent; import net.zepalesque.redux.block.ReduxBlocks; @@ -27,6 +30,7 @@ import net.zepalesque.redux.data.gen.ReduxLanguageGen; import net.zepalesque.redux.data.gen.ReduxLootGen; import net.zepalesque.redux.data.gen.ReduxRecipeGen; +import net.zepalesque.redux.data.gen.ReduxRegistrySets; import net.zepalesque.redux.data.gen.tags.ReduxBlockTagsGen; import net.zepalesque.redux.data.gen.tags.ReduxItemTagsGen; import net.zepalesque.redux.entity.ReduxEntities; @@ -89,6 +93,10 @@ private void dataSetup(GatherDataEvent event) { // Server Data generator.addProvider(event.includeServer(), new ReduxRecipeGen(packOutput, lookupProvider)); generator.addProvider(event.includeServer(), ReduxLootGen.create(packOutput)); + DatapackBuiltinEntriesProvider registrySets = new ReduxRegistrySets(packOutput, lookupProvider, MODID); + // Use for structure and damage type data + CompletableFuture registryProvider = registrySets.getRegistryProvider(); + generator.addProvider(event.includeServer(), registrySets); // Tags ReduxBlockTagsGen blockTags = new ReduxBlockTagsGen(packOutput, lookupProvider, fileHelper); diff --git a/src/main/java/net/zepalesque/redux/data/gen/ReduxRegistrySets.java b/src/main/java/net/zepalesque/redux/data/gen/ReduxRegistrySets.java new file mode 100644 index 000000000..249049e66 --- /dev/null +++ b/src/main/java/net/zepalesque/redux/data/gen/ReduxRegistrySets.java @@ -0,0 +1,37 @@ +package net.zepalesque.redux.data.gen; + +import com.aetherteam.aether.Aether; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.RegistryAccess; +import net.minecraft.core.RegistrySetBuilder; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.PackOutput; +import net.neoforged.neoforge.common.data.DatapackBuiltinEntriesProvider; +import net.zepalesque.redux.Redux; +import net.zepalesque.redux.data.resource.ReduxFeatureConfig; +import net.zepalesque.redux.data.resource.ReduxPlacements; +import net.zepalesque.zenith.Zenith; +import org.apache.commons.compress.utils.Lists; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import java.util.concurrent.CompletableFuture; + +public class ReduxRegistrySets extends DatapackBuiltinEntriesProvider { + public static final RegistrySetBuilder BUILDER = new RegistrySetBuilder() + .add(Registries.CONFIGURED_FEATURE, ReduxFeatureConfig::bootstrap); + + public ReduxRegistrySets(PackOutput output, CompletableFuture registries, String modid, String... otherIds) { + super(output, registries, BUILDER, buildModidList(modid, otherIds)); + } + public static Set buildModidList(String modid, String... otherIds) { + List list = Lists.newArrayList(); + list.add(Aether.MODID); + list.add(modid); + list.addAll(Arrays.stream(otherIds).toList()); + return Set.copyOf(list); + } +} \ No newline at end of file diff --git a/src/main/java/net/zepalesque/redux/data/resource/ReduxFeatureConfig.java b/src/main/java/net/zepalesque/redux/data/resource/ReduxFeatureConfig.java new file mode 100644 index 000000000..bff4234e6 --- /dev/null +++ b/src/main/java/net/zepalesque/redux/data/resource/ReduxFeatureConfig.java @@ -0,0 +1,72 @@ +package net.zepalesque.redux.data.resource; + +import com.aetherteam.aether.block.AetherBlockStateProperties; +import com.aetherteam.aether.data.resources.AetherFeatureStates; +import com.aetherteam.aether.data.resources.registries.AetherConfiguredFeatures; +import com.aetherteam.aether.world.foliageplacer.CrystalFoliagePlacer; +import com.aetherteam.aether.world.trunkplacer.CrystalTreeTrunkPlacer; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.resources.ResourceKey; +import net.minecraft.util.random.SimpleWeightedRandomList; +import net.minecraft.util.valueproviders.ConstantInt; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.TreeConfiguration; +import net.minecraft.world.level.levelgen.feature.featuresize.TwoLayersFeatureSize; +import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; +import net.minecraft.world.level.levelgen.feature.stateproviders.WeightedStateProvider; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.zepalesque.redux.block.state.ReduxStates; +import net.zepalesque.redux.blockset.wood.ReduxWoodSets; + +import java.util.function.Supplier; + +public class ReduxFeatureConfig { + + public static final ResourceKey> CRYSTAL_TREE_OVERRIDE = AetherConfiguredFeatures.CRYSTAL_TREE_CONFIGURATION; + + public static void bootstrap(BootstapContext> context) { + HolderGetter> configuredFeatures = context.lookup(Registries.CONFIGURED_FEATURE); + register(context, CRYSTAL_TREE_OVERRIDE, Feature.TREE, + new TreeConfiguration.TreeConfigurationBuilder( + prov(ReduxWoodSets.CRYSTAL.log()), + new CrystalTreeTrunkPlacer(7, 0, 0), + new WeightedStateProvider(new SimpleWeightedRandomList.Builder().add(AetherFeatureStates.CRYSTAL_LEAVES, 4).add(AetherFeatureStates.CRYSTAL_FRUIT_LEAVES, 1).build()), + new CrystalFoliagePlacer(ConstantInt.of(0), ConstantInt.of(0), ConstantInt.of(6)), + new TwoLayersFeatureSize(1, 0, 1)).ignoreVines().build()); + } + + private static > void register(BootstapContext> context, ResourceKey> key, F feature, FC configuration) { + context.register(key, new ConfiguredFeature<>(feature, configuration)); + } + + private static String name(DeferredHolder reg) { + return reg.getId().getPath(); + } + + private static BlockStateProvider prov(BlockState state) { + return BlockStateProvider.simple(drops(state)); + } + + private static BlockStateProvider prov(Supplier block) { + return prov(block.get().defaultBlockState()); + } + + private static BlockState drops(BlockState state) { + return state.hasProperty(AetherBlockStateProperties.DOUBLE_DROPS) ? state.setValue(AetherBlockStateProperties.DOUBLE_DROPS, true) : state; + } + + private static BlockState drops(Supplier block) { + return drops(block.get().defaultBlockState()); + } + + private static BlockState naturalDrops(Supplier block) { + BlockState b = block.get().defaultBlockState(); + return b.hasProperty(ReduxStates.NATURAL_GEN) ? drops(b.setValue(ReduxStates.NATURAL_GEN, true)) : drops(b); + } +} diff --git a/src/main/java/net/zepalesque/redux/data/resource/ReduxPlacements.java b/src/main/java/net/zepalesque/redux/data/resource/ReduxPlacements.java new file mode 100644 index 000000000..d28c294f4 --- /dev/null +++ b/src/main/java/net/zepalesque/redux/data/resource/ReduxPlacements.java @@ -0,0 +1,31 @@ +package net.zepalesque.redux.data.resource; + +import com.aetherteam.aether.block.AetherBlockStateProperties; +import com.aetherteam.aether.data.resources.AetherFeatureStates; +import com.aetherteam.aether.data.resources.registries.AetherConfiguredFeatures; +import com.aetherteam.aether.world.foliageplacer.CrystalFoliagePlacer; +import com.aetherteam.aether.world.trunkplacer.CrystalTreeTrunkPlacer; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.resources.ResourceKey; +import net.minecraft.util.random.SimpleWeightedRandomList; +import net.minecraft.util.valueproviders.ConstantInt; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.TreeConfiguration; +import net.minecraft.world.level.levelgen.feature.featuresize.TwoLayersFeatureSize; +import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; +import net.minecraft.world.level.levelgen.feature.stateproviders.WeightedStateProvider; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.zepalesque.redux.block.state.ReduxStates; +import net.zepalesque.redux.blockset.wood.ReduxWoodSets; + +import java.util.function.Supplier; + +public class ReduxPlacements { + +}