From 7dc2dbda4f120555eb44e07a82768e455bdce926 Mon Sep 17 00:00:00 2001 From: Zontreck Date: Mon, 27 Jun 2022 00:49:47 -0700 Subject: [PATCH] Finish updating to 1.19, rename Aion to Eternium --- build.gradle | 4 +- src/main/java/dev/zontreck/otemod/OTEMod.java | 17 ++- .../dev/zontreck/otemod/blocks/ModBlocks.java | 10 +- .../zontreck/otemod/events/EventHandler.java | 12 +- .../dev/zontreck/otemod/integrations/JEI.java | 14 +-- .../dev/zontreck/otemod/items/ModItems.java | 6 +- .../otemod/ore/ModdedOrePlacement.java | 24 ---- .../dev/zontreck/otemod/ore/Modifier.java | 116 ++++++++++++++++++ .../dev/zontreck/otemod/ore/OreGenerator.java | 59 --------- src/main/resources/META-INF/mods.toml | 6 +- .../blockstates/aion_block.json | 0 .../deepslate_eternium_ore_block.json | 7 ++ .../blockstates/eternium_ore_block.json | 7 ++ .../{shapedaionresources => otemod}/icon.png | Bin .../resources/assets/otemod/lang/en_us.json | 17 +++ .../models/block/aion_block.json | 0 .../block/deepslate_eternium_ore_block.json | 6 + .../models/block/eternium_ore_block.json} | 2 +- .../models/item/aion_block.json | 0 .../item/deepslate_eternium_ore_block.json | 3 + .../models/item/eternium_fragment.json} | 2 +- .../models/item/eternium_ore.json} | 2 +- .../models/item/eternium_ore_block.json | 3 + .../models/item/ihan_crystal.json} | 2 +- .../textures/block/aion_block.png | Bin .../block/deepslate_eternium_ore_block.png} | Bin .../textures/block/eternium_ore_block.png} | Bin .../textures/item/eternium_fragment.png} | Bin .../textures/item/eternium_ore.png} | Bin .../textures/item/ihan_crystal.png} | Bin .../blockstates/aion_ore_block.json | 7 -- .../blockstates/deepslate_aion_ore_block.json | 7 -- .../shapedaionresources/lang/en_us.json | 17 --- .../block/deepslate_aion_ore_block.json | 6 - .../models/item/aion_ore_block.json | 3 - .../models/item/deepslate_aion_ore_block.json | 3 - .../textures/entity/elytra.png | Bin 3254 -> 0 bytes .../data/minecraft/biome/.TestPlaceholder | 3 + .../tags/blocks/mineable/pickaxe.json | 6 +- .../tags/blocks/needs_diamond_tool.json | 2 +- .../tags/blocks/needs_iron_tool.json | 4 +- .../minecraft/tags/blocks/wither_immune.json | 2 +- .../forge/biome_modifier/eternium_placer.json | 6 + .../otemod/loot_tables/blocks/aion_block.json | 2 +- ...json => deepslate_eternium_ore_block.json} | 4 +- ...ore_block.json => eternium_ore_block.json} | 4 +- .../data/otemod/recipes/aion_block.json | 2 +- .../data/otemod/recipes/aion_fragment.json | 17 --- .../otemod/recipes/eternium_fragment.json | 17 +++ .../{holosphere.json => holosphere.json.old} | 0 .../{aion_crystal.json => ihan_crystal.json} | 4 +- .../eternium_oregen_overworld.json | 27 ++++ .../eternium_oregen_overworld.json | 24 ++++ src/main/resources/pack.mcmeta | 2 +- src/main/resources/resources.zip | Bin 0 -> 180460 bytes 55 files changed, 298 insertions(+), 190 deletions(-) delete mode 100644 src/main/java/dev/zontreck/otemod/ore/ModdedOrePlacement.java create mode 100644 src/main/java/dev/zontreck/otemod/ore/Modifier.java delete mode 100644 src/main/java/dev/zontreck/otemod/ore/OreGenerator.java rename src/main/resources/assets/{shapedaionresources => otemod}/blockstates/aion_block.json (100%) create mode 100644 src/main/resources/assets/otemod/blockstates/deepslate_eternium_ore_block.json create mode 100644 src/main/resources/assets/otemod/blockstates/eternium_ore_block.json rename src/main/resources/assets/{shapedaionresources => otemod}/icon.png (100%) create mode 100644 src/main/resources/assets/otemod/lang/en_us.json rename src/main/resources/assets/{shapedaionresources => otemod}/models/block/aion_block.json (100%) create mode 100644 src/main/resources/assets/otemod/models/block/deepslate_eternium_ore_block.json rename src/main/resources/assets/{shapedaionresources/models/block/aion_ore_block.json => otemod/models/block/eternium_ore_block.json} (54%) rename src/main/resources/assets/{shapedaionresources => otemod}/models/item/aion_block.json (100%) create mode 100644 src/main/resources/assets/otemod/models/item/deepslate_eternium_ore_block.json rename src/main/resources/assets/{shapedaionresources/models/item/aion_fragment.json => otemod/models/item/eternium_fragment.json} (54%) rename src/main/resources/assets/{shapedaionresources/models/item/aion_ore.json => otemod/models/item/eternium_ore.json} (56%) create mode 100644 src/main/resources/assets/otemod/models/item/eternium_ore_block.json rename src/main/resources/assets/{shapedaionresources/models/item/aion_crystal.json => otemod/models/item/ihan_crystal.json} (56%) rename src/main/resources/assets/{shapedaionresources => otemod}/textures/block/aion_block.png (100%) rename src/main/resources/assets/{shapedaionresources/textures/block/deepslate_aion_ore_block.png => otemod/textures/block/deepslate_eternium_ore_block.png} (100%) rename src/main/resources/assets/{shapedaionresources/textures/block/aion_ore_block.png => otemod/textures/block/eternium_ore_block.png} (100%) rename src/main/resources/assets/{shapedaionresources/textures/item/aion_fragment.png => otemod/textures/item/eternium_fragment.png} (100%) rename src/main/resources/assets/{shapedaionresources/textures/item/aion_ore.png => otemod/textures/item/eternium_ore.png} (100%) rename src/main/resources/assets/{shapedaionresources/textures/item/aion_crystal.png => otemod/textures/item/ihan_crystal.png} (100%) delete mode 100644 src/main/resources/assets/shapedaionresources/blockstates/aion_ore_block.json delete mode 100644 src/main/resources/assets/shapedaionresources/blockstates/deepslate_aion_ore_block.json delete mode 100644 src/main/resources/assets/shapedaionresources/lang/en_us.json delete mode 100644 src/main/resources/assets/shapedaionresources/models/block/deepslate_aion_ore_block.json delete mode 100644 src/main/resources/assets/shapedaionresources/models/item/aion_ore_block.json delete mode 100644 src/main/resources/assets/shapedaionresources/models/item/deepslate_aion_ore_block.json delete mode 100644 src/main/resources/assets/shapedaionresources/textures/entity/elytra.png create mode 100644 src/main/resources/data/minecraft/biome/.TestPlaceholder create mode 100644 src/main/resources/data/otemod/forge/biome_modifier/eternium_placer.json rename src/main/resources/data/otemod/loot_tables/blocks/{aion_ore_block.json => deepslate_eternium_ore_block.json} (90%) rename src/main/resources/data/otemod/loot_tables/blocks/{deepslate_aion_ore_block.json => eternium_ore_block.json} (90%) delete mode 100644 src/main/resources/data/otemod/recipes/aion_fragment.json create mode 100644 src/main/resources/data/otemod/recipes/eternium_fragment.json rename src/main/resources/data/otemod/recipes/{holosphere.json => holosphere.json.old} (100%) rename src/main/resources/data/otemod/recipes/{aion_crystal.json => ihan_crystal.json} (71%) create mode 100644 src/main/resources/data/otemod/worldgen/configured_feature/eternium_oregen_overworld.json create mode 100644 src/main/resources/data/otemod/worldgen/placed_feature/eternium_oregen_overworld.json create mode 100644 src/main/resources/resources.zip diff --git a/build.gradle b/build.gradle index 9982004..662a897 100644 --- a/build.gradle +++ b/build.gradle @@ -127,9 +127,9 @@ dependencies { minecraft 'net.minecraftforge:forge:1.19-41.0.45' // compile against the JEI API but do not include it at runtime - compileOnly fg.deobf("mezz.jei:jei-${mc_version}-forge-api:${jei_version}") + //compileOnly fg.deobf("mezz.jei:jei-${mc_version}-forge-api:${jei_version}") // at runtime, use the full JEI jar - runtimeOnly fg.deobf("mezz.jei:jei-${mc_version}-forge:${jei_version}") + //runtimeOnly fg.deobf("mezz.jei:jei-${mc_version}-forge:${jei_version}") // Real mod deobf dependency examples - these get remapped to your current mappings // compileOnly fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}:api") // Adds JEI API as a compile dependency // runtimeOnly fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}") // Adds the full JEI mod as a runtime dependency diff --git a/src/main/java/dev/zontreck/otemod/OTEMod.java b/src/main/java/dev/zontreck/otemod/OTEMod.java index 894f351..b5ca00b 100644 --- a/src/main/java/dev/zontreck/otemod/OTEMod.java +++ b/src/main/java/dev/zontreck/otemod/OTEMod.java @@ -4,8 +4,10 @@ import java.util.Set; import java.util.Map.Entry; import com.mojang.logging.LogUtils; +import com.mojang.serialization.Codec; import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; @@ -13,6 +15,7 @@ import net.minecraft.world.item.Item; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.world.BiomeModifier; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.ModLoadingContext; @@ -22,13 +25,17 @@ import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.server.ServerStartingEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; + import org.slf4j.Logger; import dev.zontreck.otemod.blocks.ModBlocks; import dev.zontreck.otemod.configs.OTEServerConfig; import dev.zontreck.otemod.events.EventHandler; import dev.zontreck.otemod.items.ModItems; -import dev.zontreck.otemod.ore.OreGenerator; +import dev.zontreck.otemod.ore.Modifier; +import dev.zontreck.otemod.ore.Modifier.ModifierOfBiomes; // The value here should match an entry in the META-INF/mods.toml file @Mod(OTEMod.MOD_ID) @@ -38,6 +45,8 @@ public class OTEMod public static final Logger LOGGER = LogUtils.getLogger(); public static final String FIRST_JOIN_TAG = "dev.zontreck.otemod.firstjoin"; public static final String MOD_ID = "otemod"; + public static final String MODIFY_BIOMES = "modify_biomes"; + public static final ResourceLocation MODIFY_BIOMES_RL = new ResourceLocation(OTEMod.MOD_ID, MODIFY_BIOMES); public OTEMod() @@ -47,12 +56,14 @@ public class OTEMod bus.addListener(this::setup); - ModLoadingContext.get().registerConfig(ModConfig.Type.SERVER, OTEServerConfig.SPEC, "aion-rss-server.toml"); + ModLoadingContext.get().registerConfig(ModConfig.Type.SERVER, OTEServerConfig.SPEC, "otemod-rss-server.toml"); // Register ourselves for server and other game events we are interested in - + final DeferredRegister> serializers = DeferredRegister.create(ForgeRegistries.Keys.BIOME_MODIFIER_SERIALIZERS, OTEMod.MOD_ID); + serializers.register(bus); + serializers.register(MODIFY_BIOMES, ModifierOfBiomes::makeCodec); MinecraftForge.EVENT_BUS.register(this); diff --git a/src/main/java/dev/zontreck/otemod/blocks/ModBlocks.java b/src/main/java/dev/zontreck/otemod/blocks/ModBlocks.java index bfc9c09..9fa7976 100644 --- a/src/main/java/dev/zontreck/otemod/blocks/ModBlocks.java +++ b/src/main/java/dev/zontreck/otemod/blocks/ModBlocks.java @@ -27,16 +27,14 @@ public class ModBlocks { OTEMod.LOGGER.info("Registering all blocks..."); } + public static final RegistryObject ETERNIUM_ORE_BLOCK = BLOCKS.register("eternium_ore_block", () -> new Block(BlockBehaviour.Properties.of(Material.METAL).requiresCorrectToolForDrops().strength(9f).explosionResistance(1200).destroyTime(10))); - - public static final RegistryObject AION_ORE_BLOCK = BLOCKS.register("aion_ore_block", () -> new OreBlock(BlockBehaviour.Properties.of(Material.METAL).requiresCorrectToolForDrops().strength(9f).explosionResistance(1200).destroyTime(10))); - - public static final RegistryObject AION_ORE_BLOCK_I = ITEMS.register("aion_ore_block", () -> new BlockItem(AION_ORE_BLOCK.get(), new Item.Properties().tab(CreativeModeTab.TAB_MISC))); + public static final RegistryObject ETERNIUM_ORE_BLOCK_I = ITEMS.register("eternium_ore_block", () -> new BlockItem(ETERNIUM_ORE_BLOCK.get(), new Item.Properties().tab(CreativeModeTab.TAB_MISC))); - public static final RegistryObject DEEPSLATE_AION_ORE_BLOCK = BLOCKS.register("deepslate_aion_ore_block", () -> new OreBlock(BlockBehaviour.Properties.of(Material.METAL).requiresCorrectToolForDrops().strength(9f).explosionResistance(1200).destroyTime(10))); + public static final RegistryObject DEEPSLATE_ETERNIUM_ORE_BLOCK = BLOCKS.register("deepslate_eternium_ore_block", () -> new Block(BlockBehaviour.Properties.of(Material.METAL).requiresCorrectToolForDrops().strength(9f).explosionResistance(1200).destroyTime(10))); - public static final RegistryObject DEEPSLATE_AION_ORE_BLOCK_I = ITEMS.register("deepslate_aion_ore_block", () -> new BlockItem(DEEPSLATE_AION_ORE_BLOCK.get(), new Item.Properties().tab(CreativeModeTab.TAB_MISC))); + public static final RegistryObject DEEPSLATE_ETERNIUM_ORE_BLOCK_I = ITEMS.register("deepslate_eternium_ore_block", () -> new BlockItem(DEEPSLATE_ETERNIUM_ORE_BLOCK.get(), new Item.Properties().tab(CreativeModeTab.TAB_MISC))); public static final RegistryObject AION_BLOCK = BLOCKS.register("aion_block", () -> new Block(BlockBehaviour.Properties.of(Material.STONE).requiresCorrectToolForDrops().strength(9f).explosionResistance(100000f).destroyTime(10).sound(SoundType.NETHERITE_BLOCK))); diff --git a/src/main/java/dev/zontreck/otemod/events/EventHandler.java b/src/main/java/dev/zontreck/otemod/events/EventHandler.java index 10d5cb7..a3e16a3 100644 --- a/src/main/java/dev/zontreck/otemod/events/EventHandler.java +++ b/src/main/java/dev/zontreck/otemod/events/EventHandler.java @@ -1,20 +1,26 @@ package dev.zontreck.otemod.events; import dev.zontreck.otemod.OTEMod; -import dev.zontreck.otemod.ore.OreGenerator; -import net.minecraftforge.event.world.BiomeLoadingEvent; +import dev.zontreck.otemod.ore.Modifier; +//import dev.zontreck.otemod.ore.OreGenerator; import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.forge.event.lifecycle.GatherDataEvent; @EventBusSubscriber(modid=OTEMod.MOD_ID) public class EventHandler { - + /* @SubscribeEvent(priority = EventPriority.HIGH) public static void addOresToBiomes(final BiomeLoadingEvent ev){ //ShapedAionResources.LOGGER.info("Biome loading event called. Registering aion ores"); OreGenerator.generateOres(ev); + }*/ + + @SubscribeEvent + public void onGatherData(GatherDataEvent ev){ + Modifier.DoProcess(ev); } } diff --git a/src/main/java/dev/zontreck/otemod/integrations/JEI.java b/src/main/java/dev/zontreck/otemod/integrations/JEI.java index cb7b795..48694f6 100644 --- a/src/main/java/dev/zontreck/otemod/integrations/JEI.java +++ b/src/main/java/dev/zontreck/otemod/integrations/JEI.java @@ -1,17 +1,17 @@ package dev.zontreck.otemod.integrations; import dev.zontreck.otemod.OTEMod; -import mezz.jei.api.IModPlugin; -import mezz.jei.api.JeiPlugin; +//import mezz.jei.api.IModPlugin; +//import mezz.jei.api.JeiPlugin; import net.minecraft.resources.ResourceLocation; -@JeiPlugin -public class JEI implements IModPlugin +//@JeiPlugin +public class JEI { - @Override - public ResourceLocation getPluginUid() { + //@Override + /*public ResourceLocation getPluginUid() { return new ResourceLocation(OTEMod.MOD_ID, "jei_plugin"); - } + }*/ } diff --git a/src/main/java/dev/zontreck/otemod/items/ModItems.java b/src/main/java/dev/zontreck/otemod/items/ModItems.java index 881e233..9299784 100644 --- a/src/main/java/dev/zontreck/otemod/items/ModItems.java +++ b/src/main/java/dev/zontreck/otemod/items/ModItems.java @@ -11,12 +11,12 @@ import net.minecraftforge.registries.RegistryObject; public class ModItems { public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, OTEMod.MOD_ID); - public static final RegistryObject AION_FRAGMENT = ITEMS.register("aion_fragment", () -> new Item(new Item.Properties().tab(CreativeModeTab.TAB_MISC))); + public static final RegistryObject ETERNIUM_FRAGMENT = ITEMS.register("eternium_fragment", () -> new Item(new Item.Properties().tab(CreativeModeTab.TAB_MISC))); - public static final RegistryObject AION_CRYSTAL = ITEMS.register("aion_crystal", () -> new Item(new Item.Properties().tab(CreativeModeTab.TAB_MISC))); + public static final RegistryObject IHAN_CRYSTAL = ITEMS.register("ihan_crystal", () -> new Item(new Item.Properties().tab(CreativeModeTab.TAB_MISC))); - public static final RegistryObject AION_RAW_ORE = ITEMS.register("aion_ore", () -> new Item(new Item.Properties().tab(CreativeModeTab.TAB_MISC))); + public static final RegistryObject ETERNIUM_RAW_ORE = ITEMS.register("eternium_ore", () -> new Item(new Item.Properties().tab(CreativeModeTab.TAB_MISC))); public static void register(IEventBus bus){ diff --git a/src/main/java/dev/zontreck/otemod/ore/ModdedOrePlacement.java b/src/main/java/dev/zontreck/otemod/ore/ModdedOrePlacement.java deleted file mode 100644 index 4550b12..0000000 --- a/src/main/java/dev/zontreck/otemod/ore/ModdedOrePlacement.java +++ /dev/null @@ -1,24 +0,0 @@ -package dev.zontreck.otemod.ore; - -import java.util.List; - -import net.minecraft.world.level.levelgen.placement.BiomeFilter; -import net.minecraft.world.level.levelgen.placement.CountPlacement; -import net.minecraft.world.level.levelgen.placement.InSquarePlacement; -import net.minecraft.world.level.levelgen.placement.PlacementModifier; -import net.minecraft.world.level.levelgen.placement.RarityFilter; - -public class ModdedOrePlacement { - public static List orePlacement(PlacementModifier p_195347_, PlacementModifier p_195348_) { - return List.of(p_195347_, InSquarePlacement.spread(), p_195348_, BiomeFilter.biome()); - } - - public static List commonOrePlacement(int p_195344_, PlacementModifier p_195345_) { - return orePlacement(CountPlacement.of(p_195344_), p_195345_); - } - - public static List rareOrePlacement(int p_195350_, PlacementModifier p_195351_) { - return orePlacement(RarityFilter.onAverageOnceEvery(p_195350_), p_195351_); - } - -} diff --git a/src/main/java/dev/zontreck/otemod/ore/Modifier.java b/src/main/java/dev/zontreck/otemod/ore/Modifier.java new file mode 100644 index 0000000..0adca3b --- /dev/null +++ b/src/main/java/dev/zontreck/otemod/ore/Modifier.java @@ -0,0 +1,116 @@ +package dev.zontreck.otemod.ore; + +import java.util.List; +import java.util.Map; + +import com.google.gson.JsonElement; +import com.mojang.serialization.Codec; +import com.mojang.serialization.JsonOps; +import com.mojang.serialization.codecs.RecordCodecBuilder; + +import cpw.mods.modlauncher.api.ITransformationService.Resource; +import dev.zontreck.otemod.OTEMod; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderSet; +import net.minecraft.core.Registry; +import net.minecraft.core.RegistryAccess; +import net.minecraft.core.HolderSet.Named; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.worldgen.features.NetherFeatures; +import net.minecraft.data.worldgen.features.OreFeatures; +import net.minecraft.resources.RegistryOps; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BiomeTags; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.Biome.Precipitation; +import net.minecraft.world.level.levelgen.GenerationStep.Decoration; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +import net.minecraft.world.level.levelgen.placement.BiomeFilter; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.common.data.JsonCodecProvider; +import net.minecraftforge.common.world.BiomeModifier; +import net.minecraftforge.common.world.ModifiableBiomeInfo.BiomeInfo.Builder; +import net.minecraftforge.common.world.ForgeBiomeModifiers.AddFeaturesBiomeModifier; +import net.minecraftforge.forge.event.lifecycle.GatherDataEvent; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class Modifier +{ + private static final String ETERNIUM_ORE = "eternium_oregen_overworld"; + private static final ResourceLocation ETERNIUM_ORE_RL = new ResourceLocation(OTEMod.MOD_ID, ETERNIUM_ORE); + private static final ResourceKey ETERNIUM_ORE_KEY = ResourceKey.create(Registry.PLACED_FEATURE_REGISTRY, ETERNIUM_ORE_RL); + private static final ResourceKey> ETERNIUM_ORE_KEY_CFG = ResourceKey.create(Registry.CONFIGURED_FEATURE_REGISTRY, ETERNIUM_ORE_RL); + + + private static final String ADD_FEATURE_ETERNIUM_ORE_OVERWORLD = "add_eternium_ow"; + private static final ResourceLocation ADD_ETERNIUM_ORE_OW = new ResourceLocation(OTEMod.MOD_ID, ADD_FEATURE_ETERNIUM_ORE_OVERWORLD); + + + public static void DoProcess(GatherDataEvent ev) { + /* + final DataGenerator generator = ev.getGenerator(); + final ExistingFileHelper fExistingFileHelper = ev.getExistingFileHelper(); + final RegistryOps ops = RegistryOps.create(JsonOps.INSTANCE, RegistryAccess.builtinCopy()); + + // Create the placed ore feature + //final ResourceKey> configuredFeatKey = OreFeatures.ORE_DIAMOND_SMALL.unwrapKey().get().cast(Registry.CONFIGURED_FEATURE_REGISTRY).get(); + + final Holder> configuredFeatHolder = ops.registry(Registry.CONFIGURED_FEATURE_REGISTRY).get().getOrCreateHolderOrThrow(ETERNIUM_ORE_KEY_CFG); + + final PlacedFeature eternium_ore_place = new PlacedFeature(configuredFeatHolder, List.of( + BiomeFilter.biome() + )); + + final PlacedFeature pfeat = ops.registry(Registry.PLACED_FEATURE_REGISTRY).get().get(ETERNIUM_ORE_RL); + + final HolderSet.Named hfeatBiome = new Named<>(ops.registry(Registry.BIOME_REGISTRY).get(), BiomeTags.IS_OVERWORLD); + + + final BiomeModifier modif = new AddFeaturesBiomeModifier( + hfeatBiome, + HolderSet.direct(ops.registry(Registry.PLACED_FEATURE_REGISTRY).get().getOrCreateHolderOrThrow(ETERNIUM_ORE_KEY)), + Decoration.UNDERGROUND_ORES + ); + + + generator.addProvider(ev.includeServer(), JsonCodecProvider.forDatapackRegistry(generator, fExistingFileHelper, OTEMod.MOD_ID, ops, Registry.PLACED_FEATURE_REGISTRY, Map.of( + ETERNIUM_ORE_RL, pfeat + ))); + + generator.addProvider(ev.includeServer(), JsonCodecProvider.forDatapackRegistry(generator, fExistingFileHelper, OTEMod.MOD_ID, ops, ForgeRegistries.Keys.BIOME_MODIFIERS, Map.of( + ADD_ETERNIUM_ORE_OW, modif + ))); + */ + } + + + public record ModifierOfBiomes(HolderSet biomes, Holder feature) implements BiomeModifier + { + private static final RegistryObject> SERIALIZER = RegistryObject.create(OTEMod.MODIFY_BIOMES_RL, ForgeRegistries.Keys.BIOME_MODIFIER_SERIALIZERS, OTEMod.MOD_ID); + + @Override + public void modify(Holder biome, Phase phase, Builder builder) { + if(phase == Phase.ADD && biomes.contains(biome)){ + builder.getGenerationSettings().addFeature(Decoration.UNDERGROUND_ORES, feature); + } + } + + @Override + public Codec codec() { + return SERIALIZER.get(); + } + + public static Codec makeCodec() + { + return RecordCodecBuilder.create(builder->builder.group( + Biome.LIST_CODEC.fieldOf("biomes").forGetter(ModifierOfBiomes::biomes), + PlacedFeature.CODEC.fieldOf("feature").forGetter(ModifierOfBiomes::feature) + ).apply(builder, ModifierOfBiomes::new)); + } + + } + +} diff --git a/src/main/java/dev/zontreck/otemod/ore/OreGenerator.java b/src/main/java/dev/zontreck/otemod/ore/OreGenerator.java deleted file mode 100644 index 3b73522..0000000 --- a/src/main/java/dev/zontreck/otemod/ore/OreGenerator.java +++ /dev/null @@ -1,59 +0,0 @@ -package dev.zontreck.otemod.ore; - -import java.util.ArrayList; -import java.util.List; - -import dev.zontreck.otemod.OTEMod; -import dev.zontreck.otemod.blocks.ModBlocks; -import net.minecraft.core.Holder; -import net.minecraft.data.worldgen.features.FeatureUtils; -import net.minecraft.data.worldgen.features.OreFeatures; -import net.minecraft.data.worldgen.placement.PlacementUtils; -import net.minecraft.data.worldgen.placement.VegetationPlacements; -import net.minecraft.world.level.levelgen.GenerationStep; -import net.minecraft.world.level.levelgen.VerticalAnchor; -import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; -import net.minecraft.world.level.levelgen.feature.Feature; -import net.minecraft.world.level.levelgen.feature.OreFeature; -import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration; -import net.minecraft.world.level.levelgen.placement.HeightRangePlacement; -import net.minecraft.world.level.levelgen.placement.PlacedFeature; - -public class OreGenerator { - public static final List> OVERWORLD_ORES = new ArrayList(); - - - public static final List OVERWORLD_AION_ORE = List.of(OreConfiguration.target(OreFeatures.STONE_ORE_REPLACEABLES, ModBlocks.AION_ORE_BLOCK.get().defaultBlockState()), OreConfiguration.target(OreFeatures.DEEPSLATE_ORE_REPLACEABLES, ModBlocks.DEEPSLATE_AION_ORE_BLOCK.get().defaultBlockState())); - - public static final Holder> AION_ORE = FeatureUtils.register("aion_ore_block", Feature.ORE, new OreConfiguration(OVERWORLD_AION_ORE, 6)); - - public static final Holder> DEEPSLATE_AION_ORE = FeatureUtils.register("deepslate_aion_ore_block", Feature.ORE, new OreConfiguration(OVERWORLD_AION_ORE, 6)); - - - //public static final Holder EBONY_PLACED = PlacementUtils.register("ebony_placed", - //ModConfiguredFeatures.EBONY_SPAWN, VegetationPlacements.treePlacement( - //PlacementUtils.countExtra(3, 0.1f, 2))); - - //public static final Holder PINK_ROSE_PLACED = PlacementUtils.register("pink_rose_placed", - //ModConfiguredFeatures.PINK_ROSE, RarityFilter.onAverageOnceEvery(16), - //InSquarePlacement.spread(), PlacementUtils.HEIGHTMAP, BiomeFilter.biome()); - - public static final Holder AION_ORE_PLACED = PlacementUtils.register("aion_ore_placed", - AION_ORE, ModdedOrePlacement.commonOrePlacement(3, // VeinsPerChunk - HeightRangePlacement.triangle(VerticalAnchor.absolute(-20), VerticalAnchor.absolute(20)))); - - - //public static final Holder DEEPSLATE_AION_ORE_PLACED = PlacementUtils.register("deepslate_aion_ore_placed", - // DEEPSLATE_AION_ORE, ModdedOrePlacement.commonOrePlacement(3, // VeinsPerChunk - // HeightRangePlacement.triangle(VerticalAnchor.aboveBottom(-20), VerticalAnchor.aboveBottom(0)))); - - public static void generateOres(final BiomeLoadingEvent ev) - { - - List> base = ev.getGeneration().getFeatures(GenerationStep.Decoration.UNDERGROUND_ORES); - - //ShapedAionResources.LOGGER.info("Register: AION_ORE"); - base.add(AION_ORE_PLACED); - //base.add(DEEPSLATE_AION_ORE_PLACED); - } -} diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 16129f3..75f00d9 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -6,7 +6,7 @@ # The name of the mod loader type to load - for regular FML @Mod mods it should be javafml modLoader="javafml" #mandatory # A version range to match for said mod loader - for regular FML @Mod it will be the forge version -loaderVersion="[40,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +loaderVersion="[41,]" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. # The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties. # Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here. license="GPL 2.0" @@ -40,7 +40,7 @@ The entire purpose of this mod is to add datapack resources that will be present # Does this dependency have to exist - if not, ordering below must be specified mandatory=true #mandatory # The version range of the dependency - versionRange="[41,)" #mandatory + versionRange="[41,]" #mandatory # An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory ordering="NONE" # Side this dependency is applied on - BOTH, CLIENT or SERVER @@ -50,6 +50,6 @@ The entire purpose of this mod is to add datapack resources that will be present modId="minecraft" mandatory=true # This version range declares a minimum of the current minecraft version up to but not including the next major version - versionRange="[1.19)" + versionRange="[1.19,]" ordering="NONE" side="BOTH" diff --git a/src/main/resources/assets/shapedaionresources/blockstates/aion_block.json b/src/main/resources/assets/otemod/blockstates/aion_block.json similarity index 100% rename from src/main/resources/assets/shapedaionresources/blockstates/aion_block.json rename to src/main/resources/assets/otemod/blockstates/aion_block.json diff --git a/src/main/resources/assets/otemod/blockstates/deepslate_eternium_ore_block.json b/src/main/resources/assets/otemod/blockstates/deepslate_eternium_ore_block.json new file mode 100644 index 0000000..30b7777 --- /dev/null +++ b/src/main/resources/assets/otemod/blockstates/deepslate_eternium_ore_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "otemod:block/deepslate_eternium_ore_block" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/otemod/blockstates/eternium_ore_block.json b/src/main/resources/assets/otemod/blockstates/eternium_ore_block.json new file mode 100644 index 0000000..95bbbca --- /dev/null +++ b/src/main/resources/assets/otemod/blockstates/eternium_ore_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "otemod:block/eternium_ore_block" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/shapedaionresources/icon.png b/src/main/resources/assets/otemod/icon.png similarity index 100% rename from src/main/resources/assets/shapedaionresources/icon.png rename to src/main/resources/assets/otemod/icon.png diff --git a/src/main/resources/assets/otemod/lang/en_us.json b/src/main/resources/assets/otemod/lang/en_us.json new file mode 100644 index 0000000..a7ccfd8 --- /dev/null +++ b/src/main/resources/assets/otemod/lang/en_us.json @@ -0,0 +1,17 @@ +{ + "itemGroup.refinedfabric.materials": "RefinedFabric Materials", + "itemGroup.refinedfabric.tools": "RefinedFabric Utilities", + "itemGroup.refinedfabric.blocks": "RefinedFabric Blocks", + + "item.otemod.eternium_ore": "Raw Eternium Ore", + "item.otemod.ihan_crystal": "Ihan Crystal", + "item.otemod.ihan_crystal.levels": "Stored XP: ", + "item.otemod.ihan_crystal.empty": "* Crystal Is Empty *", + "item.otemod.ihan_crystal.need_repair": "Ihan Crystal must now be repaired", + "item.otemod.ihan_crystal.durability": "Durability: ", + "item.otemod.eternium_fragment": "Fragmented Eternium", + + "block.otemod.eternium_ore_block": "Eternium Ore", + "block.otemod.deepslate_eternium_ore_block": "Deepslate Eternium Ore", + "block.otemod.aion_block": "Aion Block" +} \ No newline at end of file diff --git a/src/main/resources/assets/shapedaionresources/models/block/aion_block.json b/src/main/resources/assets/otemod/models/block/aion_block.json similarity index 100% rename from src/main/resources/assets/shapedaionresources/models/block/aion_block.json rename to src/main/resources/assets/otemod/models/block/aion_block.json diff --git a/src/main/resources/assets/otemod/models/block/deepslate_eternium_ore_block.json b/src/main/resources/assets/otemod/models/block/deepslate_eternium_ore_block.json new file mode 100644 index 0000000..60fd21c --- /dev/null +++ b/src/main/resources/assets/otemod/models/block/deepslate_eternium_ore_block.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "otemod:block/deepslate_eternium_ore_block" + } +} diff --git a/src/main/resources/assets/shapedaionresources/models/block/aion_ore_block.json b/src/main/resources/assets/otemod/models/block/eternium_ore_block.json similarity index 54% rename from src/main/resources/assets/shapedaionresources/models/block/aion_ore_block.json rename to src/main/resources/assets/otemod/models/block/eternium_ore_block.json index e85b3a5..ac2cf9b 100644 --- a/src/main/resources/assets/shapedaionresources/models/block/aion_ore_block.json +++ b/src/main/resources/assets/otemod/models/block/eternium_ore_block.json @@ -1,6 +1,6 @@ { "parent": "block/cube_all", "textures": { - "all": "otemod:block/aion_ore_block" + "all": "otemod:block/eternium_ore_block" } } diff --git a/src/main/resources/assets/shapedaionresources/models/item/aion_block.json b/src/main/resources/assets/otemod/models/item/aion_block.json similarity index 100% rename from src/main/resources/assets/shapedaionresources/models/item/aion_block.json rename to src/main/resources/assets/otemod/models/item/aion_block.json diff --git a/src/main/resources/assets/otemod/models/item/deepslate_eternium_ore_block.json b/src/main/resources/assets/otemod/models/item/deepslate_eternium_ore_block.json new file mode 100644 index 0000000..dbbc826 --- /dev/null +++ b/src/main/resources/assets/otemod/models/item/deepslate_eternium_ore_block.json @@ -0,0 +1,3 @@ +{ + "parent": "otemod:block/deepslate_eternium_ore_block" +} \ No newline at end of file diff --git a/src/main/resources/assets/shapedaionresources/models/item/aion_fragment.json b/src/main/resources/assets/otemod/models/item/eternium_fragment.json similarity index 54% rename from src/main/resources/assets/shapedaionresources/models/item/aion_fragment.json rename to src/main/resources/assets/otemod/models/item/eternium_fragment.json index c2d5501..38bc7d2 100644 --- a/src/main/resources/assets/shapedaionresources/models/item/aion_fragment.json +++ b/src/main/resources/assets/otemod/models/item/eternium_fragment.json @@ -1,6 +1,6 @@ { "parent": "item/generated", "textures": { - "layer0": "otemod:item/aion_fragment" + "layer0": "otemod:item/eternium_fragment" } } diff --git a/src/main/resources/assets/shapedaionresources/models/item/aion_ore.json b/src/main/resources/assets/otemod/models/item/eternium_ore.json similarity index 56% rename from src/main/resources/assets/shapedaionresources/models/item/aion_ore.json rename to src/main/resources/assets/otemod/models/item/eternium_ore.json index 8d09d9e..09a92be 100644 --- a/src/main/resources/assets/shapedaionresources/models/item/aion_ore.json +++ b/src/main/resources/assets/otemod/models/item/eternium_ore.json @@ -1,6 +1,6 @@ { "parent": "item/generated", "textures": { - "layer0": "otemod:item/aion_ore" + "layer0": "otemod:item/eternium_ore" } } diff --git a/src/main/resources/assets/otemod/models/item/eternium_ore_block.json b/src/main/resources/assets/otemod/models/item/eternium_ore_block.json new file mode 100644 index 0000000..d77d57e --- /dev/null +++ b/src/main/resources/assets/otemod/models/item/eternium_ore_block.json @@ -0,0 +1,3 @@ +{ + "parent": "otemod:block/eternium_ore_block" +} \ No newline at end of file diff --git a/src/main/resources/assets/shapedaionresources/models/item/aion_crystal.json b/src/main/resources/assets/otemod/models/item/ihan_crystal.json similarity index 56% rename from src/main/resources/assets/shapedaionresources/models/item/aion_crystal.json rename to src/main/resources/assets/otemod/models/item/ihan_crystal.json index 50a93e4..7072ee4 100644 --- a/src/main/resources/assets/shapedaionresources/models/item/aion_crystal.json +++ b/src/main/resources/assets/otemod/models/item/ihan_crystal.json @@ -1,6 +1,6 @@ { "parent": "item/generated", "textures": { - "layer0": "otemod:item/aion_crystal" + "layer0": "otemod:item/ihan_crystal" } } diff --git a/src/main/resources/assets/shapedaionresources/textures/block/aion_block.png b/src/main/resources/assets/otemod/textures/block/aion_block.png similarity index 100% rename from src/main/resources/assets/shapedaionresources/textures/block/aion_block.png rename to src/main/resources/assets/otemod/textures/block/aion_block.png diff --git a/src/main/resources/assets/shapedaionresources/textures/block/deepslate_aion_ore_block.png b/src/main/resources/assets/otemod/textures/block/deepslate_eternium_ore_block.png similarity index 100% rename from src/main/resources/assets/shapedaionresources/textures/block/deepslate_aion_ore_block.png rename to src/main/resources/assets/otemod/textures/block/deepslate_eternium_ore_block.png diff --git a/src/main/resources/assets/shapedaionresources/textures/block/aion_ore_block.png b/src/main/resources/assets/otemod/textures/block/eternium_ore_block.png similarity index 100% rename from src/main/resources/assets/shapedaionresources/textures/block/aion_ore_block.png rename to src/main/resources/assets/otemod/textures/block/eternium_ore_block.png diff --git a/src/main/resources/assets/shapedaionresources/textures/item/aion_fragment.png b/src/main/resources/assets/otemod/textures/item/eternium_fragment.png similarity index 100% rename from src/main/resources/assets/shapedaionresources/textures/item/aion_fragment.png rename to src/main/resources/assets/otemod/textures/item/eternium_fragment.png diff --git a/src/main/resources/assets/shapedaionresources/textures/item/aion_ore.png b/src/main/resources/assets/otemod/textures/item/eternium_ore.png similarity index 100% rename from src/main/resources/assets/shapedaionresources/textures/item/aion_ore.png rename to src/main/resources/assets/otemod/textures/item/eternium_ore.png diff --git a/src/main/resources/assets/shapedaionresources/textures/item/aion_crystal.png b/src/main/resources/assets/otemod/textures/item/ihan_crystal.png similarity index 100% rename from src/main/resources/assets/shapedaionresources/textures/item/aion_crystal.png rename to src/main/resources/assets/otemod/textures/item/ihan_crystal.png diff --git a/src/main/resources/assets/shapedaionresources/blockstates/aion_ore_block.json b/src/main/resources/assets/shapedaionresources/blockstates/aion_ore_block.json deleted file mode 100644 index b2de5c8..0000000 --- a/src/main/resources/assets/shapedaionresources/blockstates/aion_ore_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "otemod:block/aion_ore_block" - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/shapedaionresources/blockstates/deepslate_aion_ore_block.json b/src/main/resources/assets/shapedaionresources/blockstates/deepslate_aion_ore_block.json deleted file mode 100644 index 2bd9b96..0000000 --- a/src/main/resources/assets/shapedaionresources/blockstates/deepslate_aion_ore_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "otemod:block/deepslate_aion_ore_block" - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/shapedaionresources/lang/en_us.json b/src/main/resources/assets/shapedaionresources/lang/en_us.json deleted file mode 100644 index 63bd56b..0000000 --- a/src/main/resources/assets/shapedaionresources/lang/en_us.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "itemGroup.refinedfabric.materials": "RefinedFabric Materials", - "itemGroup.refinedfabric.tools": "RefinedFabric Utilities", - "itemGroup.refinedfabric.blocks": "RefinedFabric Blocks", - - "item.otemod.aion_ore": "Raw Aion Ore", - "item.otemod.aion_crystal": "Aion Crystal", - "item.otemod.aion_crystal.levels": "Stored XP: ", - "item.otemod.aion_crystal.empty": "* Crystal Is Empty *", - "item.otemod.aion_crystal.need_repair": "Aion Crystal must now be repaired", - "item.otemod.aion_crystal.durability": "Durability: ", - "item.otemod.aion_fragment": "Fragmented Aion Crystal", - - "block.otemod.aion_ore_block": "Aion Ore", - "block.otemod.deepslate_aion_ore_block": "Deepslate Aion Ore", - "block.otemod.aion_block": "Aion Block" -} \ No newline at end of file diff --git a/src/main/resources/assets/shapedaionresources/models/block/deepslate_aion_ore_block.json b/src/main/resources/assets/shapedaionresources/models/block/deepslate_aion_ore_block.json deleted file mode 100644 index b4db7f4..0000000 --- a/src/main/resources/assets/shapedaionresources/models/block/deepslate_aion_ore_block.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "otemod:block/deepslate_aion_ore_block" - } -} diff --git a/src/main/resources/assets/shapedaionresources/models/item/aion_ore_block.json b/src/main/resources/assets/shapedaionresources/models/item/aion_ore_block.json deleted file mode 100644 index c181073..0000000 --- a/src/main/resources/assets/shapedaionresources/models/item/aion_ore_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "otemod:block/aion_ore_block" -} \ No newline at end of file diff --git a/src/main/resources/assets/shapedaionresources/models/item/deepslate_aion_ore_block.json b/src/main/resources/assets/shapedaionresources/models/item/deepslate_aion_ore_block.json deleted file mode 100644 index 466341d..0000000 --- a/src/main/resources/assets/shapedaionresources/models/item/deepslate_aion_ore_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "otemod:block/deepslate_aion_ore_block" -} \ No newline at end of file diff --git a/src/main/resources/assets/shapedaionresources/textures/entity/elytra.png b/src/main/resources/assets/shapedaionresources/textures/entity/elytra.png deleted file mode 100644 index 0390b25666fc74fb42eaba4e260aeb73e7cedba3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3254 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 diff --git a/src/main/resources/data/minecraft/biome/.TestPlaceholder b/src/main/resources/data/minecraft/biome/.TestPlaceholder new file mode 100644 index 0000000..343f0c3 --- /dev/null +++ b/src/main/resources/data/minecraft/biome/.TestPlaceholder @@ -0,0 +1,3 @@ +# Do not remove this file. +This file is here due to MC-241264 +https://bugs.mojang.com/browse/MC-241264 \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json index a18832a..e0c26db 100644 --- a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -1,8 +1,8 @@ { "replace": false, "values": [ - "shapedaionresources:aion_ore_block", - "shapedaionresources:deepslate_aion_ore_block", - "shapedaionresources:aion_block" + "otemod:eternium_ore_block", + "otemod:deepslate_eternium_ore_block", + "otemod:aion_block" ] } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/needs_diamond_tool.json b/src/main/resources/data/minecraft/tags/blocks/needs_diamond_tool.json index 6af289f..625eee2 100644 --- a/src/main/resources/data/minecraft/tags/blocks/needs_diamond_tool.json +++ b/src/main/resources/data/minecraft/tags/blocks/needs_diamond_tool.json @@ -1,6 +1,6 @@ { "replace": false, "values": [ - "shapedaionresources:aion_block" + "otemod:aion_block" ] } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/needs_iron_tool.json b/src/main/resources/data/minecraft/tags/blocks/needs_iron_tool.json index 853dbdb..5e9241b 100644 --- a/src/main/resources/data/minecraft/tags/blocks/needs_iron_tool.json +++ b/src/main/resources/data/minecraft/tags/blocks/needs_iron_tool.json @@ -1,7 +1,7 @@ { "replace": false, "values": [ - "shapedaionresources:aion_ore_block", - "shapedaionresources:deepslate_aion_ore_block" + "otemod:eternium_ore_block", + "otemod:deepslate_eternium_ore_block" ] } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/wither_immune.json b/src/main/resources/data/minecraft/tags/blocks/wither_immune.json index 6af289f..625eee2 100644 --- a/src/main/resources/data/minecraft/tags/blocks/wither_immune.json +++ b/src/main/resources/data/minecraft/tags/blocks/wither_immune.json @@ -1,6 +1,6 @@ { "replace": false, "values": [ - "shapedaionresources:aion_block" + "otemod:aion_block" ] } \ No newline at end of file diff --git a/src/main/resources/data/otemod/forge/biome_modifier/eternium_placer.json b/src/main/resources/data/otemod/forge/biome_modifier/eternium_placer.json new file mode 100644 index 0000000..a84bfab --- /dev/null +++ b/src/main/resources/data/otemod/forge/biome_modifier/eternium_placer.json @@ -0,0 +1,6 @@ +{ + "type": "forge:add_features", + "features": ["otemod:eternium_oregen_overworld"], + "biomes": "#is_overworld", + "step": "underground_ores" +} \ No newline at end of file diff --git a/src/main/resources/data/otemod/loot_tables/blocks/aion_block.json b/src/main/resources/data/otemod/loot_tables/blocks/aion_block.json index 1e1e550..27e5ee7 100644 --- a/src/main/resources/data/otemod/loot_tables/blocks/aion_block.json +++ b/src/main/resources/data/otemod/loot_tables/blocks/aion_block.json @@ -6,7 +6,7 @@ "entries": [ { "type": "minecraft:item", - "name": "shapedaionresources:aion_block" + "name": "otemod:aion_block" } ], "conditions": [ diff --git a/src/main/resources/data/otemod/loot_tables/blocks/aion_ore_block.json b/src/main/resources/data/otemod/loot_tables/blocks/deepslate_eternium_ore_block.json similarity index 90% rename from src/main/resources/data/otemod/loot_tables/blocks/aion_ore_block.json rename to src/main/resources/data/otemod/loot_tables/blocks/deepslate_eternium_ore_block.json index ecb975e..f98254a 100644 --- a/src/main/resources/data/otemod/loot_tables/blocks/aion_ore_block.json +++ b/src/main/resources/data/otemod/loot_tables/blocks/deepslate_eternium_ore_block.json @@ -26,7 +26,7 @@ } } ], - "name": "shapedaionresources:aion_ore_block" + "name": "otemod:deepslate_eternium_ore_block" }, { "type": "minecraft:item", @@ -40,7 +40,7 @@ "function": "minecraft:explosion_decay" } ], - "name": "shapedaionresources:aion_ore" + "name": "otemod:eternium_ore" } ] } diff --git a/src/main/resources/data/otemod/loot_tables/blocks/deepslate_aion_ore_block.json b/src/main/resources/data/otemod/loot_tables/blocks/eternium_ore_block.json similarity index 90% rename from src/main/resources/data/otemod/loot_tables/blocks/deepslate_aion_ore_block.json rename to src/main/resources/data/otemod/loot_tables/blocks/eternium_ore_block.json index 48ca2be..49ef5f6 100644 --- a/src/main/resources/data/otemod/loot_tables/blocks/deepslate_aion_ore_block.json +++ b/src/main/resources/data/otemod/loot_tables/blocks/eternium_ore_block.json @@ -26,7 +26,7 @@ } } ], - "name": "shapedaionresources:deepslate_aion_ore_block" + "name": "otemod:eternium_ore_block" }, { "type": "minecraft:item", @@ -40,7 +40,7 @@ "function": "minecraft:explosion_decay" } ], - "name": "shapedaionresources:aion_ore" + "name": "otemod:eternium_ore" } ] } diff --git a/src/main/resources/data/otemod/recipes/aion_block.json b/src/main/resources/data/otemod/recipes/aion_block.json index 1838dc9..266567f 100644 --- a/src/main/resources/data/otemod/recipes/aion_block.json +++ b/src/main/resources/data/otemod/recipes/aion_block.json @@ -7,7 +7,7 @@ ], "key": { "C": { - "item": "otemod:aion_crystal" + "item": "otemod:ihan_crystal" }, "N": { "item": "minecraft:nether_star" diff --git a/src/main/resources/data/otemod/recipes/aion_fragment.json b/src/main/resources/data/otemod/recipes/aion_fragment.json deleted file mode 100644 index b091935..0000000 --- a/src/main/resources/data/otemod/recipes/aion_fragment.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": [ - { - "item": "otemod:aion_ore" - }, - { - "item": "otemod:aion_ore_block" - }, - { - "item": "otemod:deepslate_aion_ore_block" - } - ], - "result": "otemod:aion_fragment", - "experience": 0.5, - "cookingtime": 25 -} diff --git a/src/main/resources/data/otemod/recipes/eternium_fragment.json b/src/main/resources/data/otemod/recipes/eternium_fragment.json new file mode 100644 index 0000000..c9d6697 --- /dev/null +++ b/src/main/resources/data/otemod/recipes/eternium_fragment.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:smelting", + "ingredient": [ + { + "item": "otemod:eternium_ore" + }, + { + "item": "otemod:eternium_ore_block" + }, + { + "item": "otemod:deepslate_eternium_ore_block" + } + ], + "result": "otemod:eternium_fragment", + "experience": 0.5, + "cookingtime": 25 +} diff --git a/src/main/resources/data/otemod/recipes/holosphere.json b/src/main/resources/data/otemod/recipes/holosphere.json.old similarity index 100% rename from src/main/resources/data/otemod/recipes/holosphere.json rename to src/main/resources/data/otemod/recipes/holosphere.json.old diff --git a/src/main/resources/data/otemod/recipes/aion_crystal.json b/src/main/resources/data/otemod/recipes/ihan_crystal.json similarity index 71% rename from src/main/resources/data/otemod/recipes/aion_crystal.json rename to src/main/resources/data/otemod/recipes/ihan_crystal.json index 2e64dbe..c6739b9 100644 --- a/src/main/resources/data/otemod/recipes/aion_crystal.json +++ b/src/main/resources/data/otemod/recipes/ihan_crystal.json @@ -7,14 +7,14 @@ ], "key": { "F": { - "item": "otemod:aion_fragment" + "item": "otemod:eternium_fragment" }, "G": { "item": "minecraft:emerald" } }, "result": { - "item": "otemod:aion_crystal", + "item": "otemod:ihan_crystal", "count": 1 } } \ No newline at end of file diff --git a/src/main/resources/data/otemod/worldgen/configured_feature/eternium_oregen_overworld.json b/src/main/resources/data/otemod/worldgen/configured_feature/eternium_oregen_overworld.json new file mode 100644 index 0000000..5a345bb --- /dev/null +++ b/src/main/resources/data/otemod/worldgen/configured_feature/eternium_oregen_overworld.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:ore", + "config": { + "size": 8, + "discard_chance_on_air_exposure": 0, + "targets": [ + { + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + }, + "state": { + "Name": "otemod:eternium_ore_block" + } + }, + { + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + }, + "state": { + "Name": "otemod:deepslate_eternium_ore_block" + } + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/otemod/worldgen/placed_feature/eternium_oregen_overworld.json b/src/main/resources/data/otemod/worldgen/placed_feature/eternium_oregen_overworld.json new file mode 100644 index 0000000..5352bf9 --- /dev/null +++ b/src/main/resources/data/otemod/worldgen/placed_feature/eternium_oregen_overworld.json @@ -0,0 +1,24 @@ +{ + "feature": "otemod:eternium_oregen_overworld", + "placement": [ + { + "type": "minecraft:count", + "count": 8 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:trapezoid", + "min_inclusive": { + "absolute": -20 + }, + "max_inclusive": { + "absolute": 25 + } + } + } + ] +} diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta index 5db534a..81ddd03 100644 --- a/src/main/resources/pack.mcmeta +++ b/src/main/resources/pack.mcmeta @@ -1,6 +1,6 @@ { "pack": { "description": "OTEMod Resources", - "pack_format": 9 + "pack_format": 10 } } diff --git a/src/main/resources/resources.zip b/src/main/resources/resources.zip new file mode 100644 index 0000000000000000000000000000000000000000..c636fdb05966c90b937f53a6eb2f05d350dd4b95 GIT binary patch literal 180460 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

|-pf-A!XT-*?Fm*5g;nR$~m_ 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