Skip to content

Commit

Permalink
feat: Registry sets
Browse files Browse the repository at this point in the history
  • Loading branch information
Zepalesque committed May 28, 2024
1 parent 56e4ec9 commit 1997ad6
Show file tree
Hide file tree
Showing 5 changed files with 149 additions and 1 deletion.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/net/zepalesque/redux/Redux.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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<HolderLookup.Provider> registryProvider = registrySets.getRegistryProvider();
generator.addProvider(event.includeServer(), registrySets);

// Tags
ReduxBlockTagsGen blockTags = new ReduxBlockTagsGen(packOutput, lookupProvider, fileHelper);
Expand Down
37 changes: 37 additions & 0 deletions src/main/java/net/zepalesque/redux/data/gen/ReduxRegistrySets.java
Original file line number Diff line number Diff line change
@@ -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<HolderLookup.Provider> registries, String modid, String... otherIds) {
super(output, registries, BUILDER, buildModidList(modid, otherIds));
}
public static Set<String> buildModidList(String modid, String... otherIds) {
List<String> list = Lists.newArrayList();
list.add(Aether.MODID);
list.add(modid);
list.addAll(Arrays.stream(otherIds).toList());
return Set.copyOf(list);
}
}
Original file line number Diff line number Diff line change
@@ -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<ConfiguredFeature<?, ?>> CRYSTAL_TREE_OVERRIDE = AetherConfiguredFeatures.CRYSTAL_TREE_CONFIGURATION;

public static void bootstrap(BootstapContext<ConfiguredFeature<?, ?>> context) {
HolderGetter<ConfiguredFeature<?, ?>> 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<BlockState>().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 <FC extends FeatureConfiguration, F extends Feature<FC>> void register(BootstapContext<ConfiguredFeature<?, ?>> context, ResourceKey<ConfiguredFeature<?, ?>> 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<? extends Block> 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<? extends Block> block) {
return drops(block.get().defaultBlockState());
}

private static BlockState naturalDrops(Supplier<? extends Block> block) {
BlockState b = block.get().defaultBlockState();
return b.hasProperty(ReduxStates.NATURAL_GEN) ? drops(b.setValue(ReduxStates.NATURAL_GEN, true)) : drops(b);
}
}
Original file line number Diff line number Diff line change
@@ -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 {

}

0 comments on commit 1997ad6

Please sign in to comment.