From 614f4197705869e37dd327a78d8e3ced42ed774a Mon Sep 17 00:00:00 2001 From: UnRealDinnerbone Date: Thu, 17 Aug 2023 12:32:40 -0500 Subject: [PATCH] Start Config work --- .../java/com/unrealdinnerbone/jamd/JAMD.java | 30 +++++++++ .../com/unrealdinnerbone/jamd/JamdConfig.java | 6 ++ .../jamd/world/CustomFlatLevelSource.java | 2 + ...trenzalore.api.platform.services.IRegistry | 0 .../jamd/forge/biome_modifier/add_self.json | 3 + .../unrealdinnerbone/jamd/JAMDDataForge.java | 52 +++++++++++++++ .../com/unrealdinnerbone/jamd/JAMDForge.java | 2 + .../jamd/JAMDForgeRegistry.java | 28 +++++++++ .../jamd/biome/JAMDBiomeModifier.java | 63 +++++++++++++++++++ ...trenzalore.api.platform.services.IRegistry | 2 + gradle.properties | 4 +- 11 files changed, 190 insertions(+), 2 deletions(-) create mode 100644 common/src/main/java/com/unrealdinnerbone/jamd/JamdConfig.java rename {common => fabric}/src/main/resources/META-INF/services/com.unrealdinnerbone.trenzalore.api.platform.services.IRegistry (100%) create mode 100644 forge/src/generated/resources/data/jamd/forge/biome_modifier/add_self.json create mode 100644 forge/src/main/java/com/unrealdinnerbone/jamd/JAMDDataForge.java create mode 100644 forge/src/main/java/com/unrealdinnerbone/jamd/JAMDForgeRegistry.java create mode 100644 forge/src/main/java/com/unrealdinnerbone/jamd/biome/JAMDBiomeModifier.java create mode 100644 forge/src/main/resources/META-INF/services/com.unrealdinnerbone.trenzalore.api.platform.services.IRegistry diff --git a/common/src/main/java/com/unrealdinnerbone/jamd/JAMD.java b/common/src/main/java/com/unrealdinnerbone/jamd/JAMD.java index 6c5bd65..2b33bd0 100644 --- a/common/src/main/java/com/unrealdinnerbone/jamd/JAMD.java +++ b/common/src/main/java/com/unrealdinnerbone/jamd/JAMD.java @@ -1,8 +1,38 @@ package com.unrealdinnerbone.jamd; +import com.google.common.base.Suppliers; +import com.unrealdinnerbone.trenzalore.api.config.ConfigManger; + +import java.util.List; +import java.util.function.Supplier; + public class JAMD { public static final String MOD_ID = "jamd"; + private static final List DEFAULT_BLACKLIST = List.of( + "minecraft:ore_gold_deltas", + "minecraft:ore_infested", + "minecraft:ore_andesite_lower", + "minecraft:ore_magma", + "minecraft:ore_gravel", + "minecraft:ore_granite_lower", + "minecraft:ore_diorite_lower", + "minecraft:ore_diorite_upper", + "minecraft:ore_soul_sand", + "minecraft:ore_granite_upper", + "minecraft:ore_gold_extra", + "minecraft:ore_quartz_nether", + "minecraft:ore_gold_nether", + "minecraft:ore_quartz_deltas", + "minecraft:ore_gravel_nether", + "minecraft:ore_dirt", + "minecraft:ore_blackstone", + "minecraft:ore_andesite_upper", + "minecraft:ore_clay" + + ); + public static final Supplier CONFIG = Suppliers.memoize(() -> ConfigManger.getOrCreateConfig(JAMD.MOD_ID, JamdConfig.class, () -> new JamdConfig(true, DEFAULT_BLACKLIST, List.of())))::get; + public static void init() { diff --git a/common/src/main/java/com/unrealdinnerbone/jamd/JamdConfig.java b/common/src/main/java/com/unrealdinnerbone/jamd/JamdConfig.java new file mode 100644 index 0000000..3b13cb9 --- /dev/null +++ b/common/src/main/java/com/unrealdinnerbone/jamd/JamdConfig.java @@ -0,0 +1,6 @@ +package com.unrealdinnerbone.jamd; + +import java.util.List; + +public record JamdConfig(boolean dynamicOreAddition, List blackListedOres, List addValues) { +} diff --git a/common/src/main/java/com/unrealdinnerbone/jamd/world/CustomFlatLevelSource.java b/common/src/main/java/com/unrealdinnerbone/jamd/world/CustomFlatLevelSource.java index a4450db..6a4bed7 100644 --- a/common/src/main/java/com/unrealdinnerbone/jamd/world/CustomFlatLevelSource.java +++ b/common/src/main/java/com/unrealdinnerbone/jamd/world/CustomFlatLevelSource.java @@ -26,4 +26,6 @@ protected Codec codec() { public int getMinY() { return -64; } + + } diff --git a/common/src/main/resources/META-INF/services/com.unrealdinnerbone.trenzalore.api.platform.services.IRegistry b/fabric/src/main/resources/META-INF/services/com.unrealdinnerbone.trenzalore.api.platform.services.IRegistry similarity index 100% rename from common/src/main/resources/META-INF/services/com.unrealdinnerbone.trenzalore.api.platform.services.IRegistry rename to fabric/src/main/resources/META-INF/services/com.unrealdinnerbone.trenzalore.api.platform.services.IRegistry diff --git a/forge/src/generated/resources/data/jamd/forge/biome_modifier/add_self.json b/forge/src/generated/resources/data/jamd/forge/biome_modifier/add_self.json new file mode 100644 index 0000000..0ad39a9 --- /dev/null +++ b/forge/src/generated/resources/data/jamd/forge/biome_modifier/add_self.json @@ -0,0 +1,3 @@ +{ + "type": "jamd:jamd" +} \ No newline at end of file diff --git a/forge/src/main/java/com/unrealdinnerbone/jamd/JAMDDataForge.java b/forge/src/main/java/com/unrealdinnerbone/jamd/JAMDDataForge.java new file mode 100644 index 0000000..a7b79ff --- /dev/null +++ b/forge/src/main/java/com/unrealdinnerbone/jamd/JAMDDataForge.java @@ -0,0 +1,52 @@ +package com.unrealdinnerbone.jamd; + +import com.unrealdinnerbone.jamd.biome.JAMDBiomeModifier; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.RegistrySetBuilder; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.DataProvider; +import net.minecraft.data.PackOutput; +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.biome.Biome; +import net.minecraftforge.common.data.DatapackBuiltinEntriesProvider; +import net.minecraftforge.common.world.BiomeModifier; +import net.minecraftforge.common.world.ForgeBiomeModifiers; +import net.minecraftforge.data.event.GatherDataEvent; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.Set; +import java.util.concurrent.CompletableFuture; + +public class JAMDDataForge +{ + + private static final ResourceKey ADD_SELF = ResourceKey.create(ForgeRegistries.Keys.BIOME_MODIFIERS, new ResourceLocation(JAMD.MOD_ID, "add_mekenism")); + + private static final RegistrySetBuilder builder = new RegistrySetBuilder() + .add(ForgeRegistries.Keys.BIOME_MODIFIERS, JAMDDataForge::createBiomeModifiers); + + public static void onData(GatherDataEvent event) { + event.getGenerator().addProvider(event.includeServer(), (DataProvider.Factory) output -> new BiomeModifiers(output, event.getLookupProvider())); + + } + + private static void createBiomeModifiers(BootstapContext bootstapContext) { + bootstapContext.register(ADD_SELF, JAMDBiomeModifier.INSTANCE); + } + + private static class BiomeModifiers extends DatapackBuiltinEntriesProvider + { + + public BiomeModifiers(PackOutput output, CompletableFuture registries) + { + super(output, registries, builder, Set.of(JAMD.MOD_ID)); + } + } + + + +} diff --git a/forge/src/main/java/com/unrealdinnerbone/jamd/JAMDForge.java b/forge/src/main/java/com/unrealdinnerbone/jamd/JAMDForge.java index 2a90c37..77a22f6 100644 --- a/forge/src/main/java/com/unrealdinnerbone/jamd/JAMDForge.java +++ b/forge/src/main/java/com/unrealdinnerbone/jamd/JAMDForge.java @@ -1,11 +1,13 @@ package com.unrealdinnerbone.jamd; import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; @Mod(JAMD.MOD_ID) public class JAMDForge { public JAMDForge() { JAMD.init(); + FMLJavaModLoadingContext.get().getModEventBus().addListener(JAMDDataForge::onData); } } \ No newline at end of file diff --git a/forge/src/main/java/com/unrealdinnerbone/jamd/JAMDForgeRegistry.java b/forge/src/main/java/com/unrealdinnerbone/jamd/JAMDForgeRegistry.java new file mode 100644 index 0000000..34fa36c --- /dev/null +++ b/forge/src/main/java/com/unrealdinnerbone/jamd/JAMDForgeRegistry.java @@ -0,0 +1,28 @@ +package com.unrealdinnerbone.jamd; + +import com.mojang.serialization.Codec; +import com.unrealdinnerbone.jamd.biome.JAMDBiomeModifier; +import com.unrealdinnerbone.trenzalore.api.platform.services.IRegistry; +import com.unrealdinnerbone.trenzalore.api.registry.RegistryEntry; +import com.unrealdinnerbone.trenzalore.api.registry.RegistryFactory; +import com.unrealdinnerbone.trenzalore.api.registry.RegistryObjects; +import net.minecraftforge.common.world.BiomeModifier; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.List; + +public class JAMDForgeRegistry implements IRegistry { + private static final RegistryObjects> BIOME_MODIFERS = RegistryFactory.create(ForgeRegistries.Keys.BIOME_MODIFIER_SERIALIZERS); + + public static final RegistryEntry> BIOME_MODIFER = BIOME_MODIFERS.register(JAMD.MOD_ID, () -> Codec.unit(JAMDBiomeModifier.INSTANCE)); + + @Override + public List> getRegistryObjects() { + return List.of(BIOME_MODIFERS); + } + + @Override + public String getModID() { + return JAMD.MOD_ID; + } +} diff --git a/forge/src/main/java/com/unrealdinnerbone/jamd/biome/JAMDBiomeModifier.java b/forge/src/main/java/com/unrealdinnerbone/jamd/biome/JAMDBiomeModifier.java new file mode 100644 index 0000000..56bf611 --- /dev/null +++ b/forge/src/main/java/com/unrealdinnerbone/jamd/biome/JAMDBiomeModifier.java @@ -0,0 +1,63 @@ +package com.unrealdinnerbone.jamd.biome; + +import com.mojang.logging.LogUtils; +import com.mojang.serialization.Codec; +import com.unrealdinnerbone.jamd.JAMD; +import com.unrealdinnerbone.jamd.JAMDForgeRegistry; +import com.unrealdinnerbone.jamd.JAMDRegistry; +import com.unrealdinnerbone.jamd.JamdConfig; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.registries.VanillaRegistries; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.levelgen.GenerationStep; +import net.minecraft.world.level.levelgen.feature.OreFeature; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import net.minecraftforge.common.world.BiomeModifier; +import net.minecraftforge.common.world.ModifiableBiomeInfo; +import org.slf4j.Logger; + +import java.util.List; + +public class JAMDBiomeModifier implements BiomeModifier +{ + public static final JAMDBiomeModifier INSTANCE = new JAMDBiomeModifier(); + + private static final Logger LOGGER = LogUtils.getLogger(); + + @Override + public void modify(Holder biome, Phase phase, ModifiableBiomeInfo.BiomeInfo.Builder builder) { + if (phase == Phase.MODIFY && biome.is(JAMDRegistry.Keys.BIOME)) { + JamdConfig config = JAMD.CONFIG.get(); + if(config.dynamicOreAddition()) { + HolderLookup.RegistryLookup placedFeatureRegistryLookup = VanillaRegistries.createLookup().lookup(Registries.PLACED_FEATURE).orElseThrow(); + placedFeatureRegistryLookup.listElements().forEach(placedFeature -> { + PlacedFeature s = placedFeature.get(); + boolean isOreFeature = s.feature().get().feature() instanceof OreFeature; + boolean isBlacklisted = config.blackListedOres().contains(placedFeature.key().location().toString()); + boolean isWhiteListed = config.addValues().contains(placedFeature.key().location().toString()); + if(isBlacklisted && isWhiteListed) { + LOGGER.warn("Ore Feature: " + placedFeature.key() + " is both blacklisted and whitelisted. This is not allowed"); + }else { + if (isWhiteListed || (isOreFeature && !isBlacklisted)) { + List> features = builder.getGenerationSettings().getFeatures(GenerationStep.Decoration.UNDERGROUND_ORES); + if (features.stream().noneMatch(holder -> holder.is(placedFeature.key()))) { + LOGGER.debug("Adding Ore Feature: " + placedFeature.key()); + builder.getGenerationSettings().addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, placedFeature); + } else { + LOGGER.debug("Skipping ore feature as it already exists: " + placedFeature.key()); + } + } + + } + }); + } + } + } + + @Override + public Codec codec() { + return JAMDForgeRegistry.BIOME_MODIFER.get(); + } +} \ No newline at end of file diff --git a/forge/src/main/resources/META-INF/services/com.unrealdinnerbone.trenzalore.api.platform.services.IRegistry b/forge/src/main/resources/META-INF/services/com.unrealdinnerbone.trenzalore.api.platform.services.IRegistry new file mode 100644 index 0000000..f35df00 --- /dev/null +++ b/forge/src/main/resources/META-INF/services/com.unrealdinnerbone.trenzalore.api.platform.services.IRegistry @@ -0,0 +1,2 @@ +com.unrealdinnerbone.jamd.JAMDRegistry +com.unrealdinnerbone.jamd.JAMDForgeRegistry \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 4af46bb..77cb865 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ # Project -mod_version=3.0.2 +mod_version=3.1.0 maven_group=com.unrealdinnerbone curse_id=422981 mod_name=JAMD @@ -10,7 +10,7 @@ mod_id=jamd #Project Settings mixinsEnabled=false fabricDataGen=true -forgeDataGen=false +forgeDataGen=true # Common