From ddad8245afe257cf79b70b2e84b8ee68b86d23a6 Mon Sep 17 00:00:00 2001 From: IM23a-cernik Date: Sun, 11 May 2025 12:11:52 +0200 Subject: [PATCH] Added Stalinium items, blocks, tags, models, and data generation --- .../net/krituximon/stalinium/Stalinium.java | 5 ++- .../krituximon/stalinium/block/ModBlocks.java | 38 ++++++++++++++++ .../stalinium/datagen/DataGenerators.java | 40 +++++++++++++++++ .../datagen/ModBlockLootTableProvider.java | 43 +++++++++++++++++++ .../datagen/ModBlockStateProvider.java | 23 ++++++++++ .../datagen/ModBlockTagProvider.java | 30 +++++++++++++ .../datagen/ModItemModelProvider.java | 18 ++++++++ .../stalinium/datagen/ModItemTagProvider.java | 27 ++++++++++++ .../stalinium/datagen/ModRecipeProvider.java | 32 ++++++++++++++ .../krituximon/stalinium/item/ModItems.java | 19 ++++++++ .../krituximon/stalinium/util/ModTags.java | 24 +++++++++++ .../assets/stalinium/lang/en_us.json | 6 +-- 12 files changed, 301 insertions(+), 4 deletions(-) create mode 100644 src/main/java/net/krituximon/stalinium/block/ModBlocks.java create mode 100644 src/main/java/net/krituximon/stalinium/datagen/DataGenerators.java create mode 100644 src/main/java/net/krituximon/stalinium/datagen/ModBlockLootTableProvider.java create mode 100644 src/main/java/net/krituximon/stalinium/datagen/ModBlockStateProvider.java create mode 100644 src/main/java/net/krituximon/stalinium/datagen/ModBlockTagProvider.java create mode 100644 src/main/java/net/krituximon/stalinium/datagen/ModItemModelProvider.java create mode 100644 src/main/java/net/krituximon/stalinium/datagen/ModItemTagProvider.java create mode 100644 src/main/java/net/krituximon/stalinium/datagen/ModRecipeProvider.java create mode 100644 src/main/java/net/krituximon/stalinium/item/ModItems.java create mode 100644 src/main/java/net/krituximon/stalinium/util/ModTags.java diff --git a/src/main/java/net/krituximon/stalinium/Stalinium.java b/src/main/java/net/krituximon/stalinium/Stalinium.java index e3ca2d2..6fe1683 100644 --- a/src/main/java/net/krituximon/stalinium/Stalinium.java +++ b/src/main/java/net/krituximon/stalinium/Stalinium.java @@ -1,5 +1,7 @@ package net.krituximon.stalinium; +import net.krituximon.stalinium.block.ModBlocks; +import net.krituximon.stalinium.item.ModItems; import org.slf4j.Logger; import com.mojang.logging.LogUtils; @@ -37,7 +39,8 @@ public class Stalinium // Register the commonSetup method for modloading modEventBus.addListener(this::commonSetup); - // Register the Deferred Register to the mod event bus so blocks get registere + ModItems.register(modEventBus); + ModBlocks.register(modEventBus); // Register ourselves for server and other game events we are interested in. // Note that this is necessary if and only if we want *this* class (Stalinium) to respond directly to events. diff --git a/src/main/java/net/krituximon/stalinium/block/ModBlocks.java b/src/main/java/net/krituximon/stalinium/block/ModBlocks.java new file mode 100644 index 0000000..aa3952a --- /dev/null +++ b/src/main/java/net/krituximon/stalinium/block/ModBlocks.java @@ -0,0 +1,38 @@ +package net.krituximon.stalinium.block; + +import net.krituximon.stalinium.Stalinium; +import net.krituximon.stalinium.item.ModItems; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredBlock; +import net.neoforged.neoforge.registries.DeferredRegister; + +import java.util.function.Supplier; + +public class ModBlocks { + public static final DeferredRegister.Blocks BLOCKS = + DeferredRegister.createBlocks(Stalinium.MODID); + + public static final DeferredBlock STALINIUM_BLOCK = registerBlock("stalinium_block", + () -> new Block(BlockBehaviour.Properties.of() + .strength(5f).requiresCorrectToolForDrops().sound(SoundType.NETHERITE_BLOCK))); + + + private static DeferredBlock registerBlock(String name, Supplier block) { + DeferredBlock toReturn = BLOCKS.register(name, block); + registerBlockItem(name, toReturn); + return toReturn; + } + + private static void registerBlockItem(String name, DeferredBlock block) { + ModItems.ITEMS.register(name, () -> new BlockItem(block.get(), new Item.Properties())); + } + + public static void register(IEventBus eventBus) { + BLOCKS.register(eventBus); + } +} diff --git a/src/main/java/net/krituximon/stalinium/datagen/DataGenerators.java b/src/main/java/net/krituximon/stalinium/datagen/DataGenerators.java new file mode 100644 index 0000000..5394570 --- /dev/null +++ b/src/main/java/net/krituximon/stalinium/datagen/DataGenerators.java @@ -0,0 +1,40 @@ +package net.krituximon.stalinium.datagen; + +import net.krituximon.stalinium.Stalinium; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.minecraft.data.loot.LootTableProvider; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.common.data.BlockTagsProvider; +import net.neoforged.neoforge.common.data.ExistingFileHelper; +import net.neoforged.neoforge.data.event.GatherDataEvent; + +import java.util.Collections; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +@EventBusSubscriber(modid = Stalinium.MODID, bus = EventBusSubscriber.Bus.MOD) +public class DataGenerators { + @SubscribeEvent + public static void gatherData(GatherDataEvent event) { + DataGenerator generator = event.getGenerator(); + PackOutput packOutput = generator.getPackOutput(); + ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); + CompletableFuture lookupProvider = event.getLookupProvider(); + + generator.addProvider(event.includeServer(), new LootTableProvider(packOutput, Collections.emptySet(), + List.of(new LootTableProvider.SubProviderEntry(ModBlockLootTableProvider::new, LootContextParamSets.BLOCK)), lookupProvider)); + generator.addProvider(event.includeServer(), new ModRecipeProvider(packOutput, lookupProvider)); + + BlockTagsProvider blockTagsProvider = new ModBlockTagProvider(packOutput, lookupProvider, existingFileHelper); + generator.addProvider(event.includeServer(), blockTagsProvider); + generator.addProvider(event.includeServer(), new ModItemTagProvider(packOutput, lookupProvider, blockTagsProvider.contentsGetter(), existingFileHelper)); + + + generator.addProvider(event.includeClient(), new ModItemModelProvider(packOutput, existingFileHelper)); + generator.addProvider(event.includeClient(), new ModBlockStateProvider(packOutput, existingFileHelper)); + } +} diff --git a/src/main/java/net/krituximon/stalinium/datagen/ModBlockLootTableProvider.java b/src/main/java/net/krituximon/stalinium/datagen/ModBlockLootTableProvider.java new file mode 100644 index 0000000..e28ae32 --- /dev/null +++ b/src/main/java/net/krituximon/stalinium/datagen/ModBlockLootTableProvider.java @@ -0,0 +1,43 @@ +package net.krituximon.stalinium.datagen; + +import net.krituximon.stalinium.block.ModBlocks; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.loot.BlockLootSubProvider; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.entries.LootItem; +import net.minecraft.world.level.storage.loot.functions.ApplyBonusCount; +import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction; +import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; + +import java.util.Set; + +public class ModBlockLootTableProvider extends BlockLootSubProvider { + protected ModBlockLootTableProvider(HolderLookup.Provider registries) { + super(Set.of(), FeatureFlags.REGISTRY.allFlags(), registries); + } + + @Override + protected void generate() { + dropSelf(ModBlocks.STALINIUM_BLOCK.get()); + } + + protected LootTable.Builder createMultipleOreDrops(Block pBlock, Item item, float minDrops, float maxDrops) { + HolderLookup.RegistryLookup registrylookup = this.registries.lookupOrThrow(Registries.ENCHANTMENT); + return this.createSilkTouchDispatchTable(pBlock, + this.applyExplosionDecay(pBlock, LootItem.lootTableItem(item) + .apply(SetItemCountFunction.setCount(UniformGenerator.between(minDrops, maxDrops))) + .apply(ApplyBonusCount.addOreBonusCount(registrylookup.getOrThrow(Enchantments.FORTUNE))))); + } + + @Override + protected Iterable getKnownBlocks() { + return ModBlocks.BLOCKS.getEntries().stream().map(Holder::value)::iterator; + } +} diff --git a/src/main/java/net/krituximon/stalinium/datagen/ModBlockStateProvider.java b/src/main/java/net/krituximon/stalinium/datagen/ModBlockStateProvider.java new file mode 100644 index 0000000..09138d1 --- /dev/null +++ b/src/main/java/net/krituximon/stalinium/datagen/ModBlockStateProvider.java @@ -0,0 +1,23 @@ +package net.krituximon.stalinium.datagen; + +import net.krituximon.stalinium.block.ModBlocks; +import net.krituximon.stalinium.Stalinium; +import net.minecraft.data.PackOutput; +import net.neoforged.neoforge.client.model.generators.BlockStateProvider; +import net.neoforged.neoforge.common.data.ExistingFileHelper; +import net.neoforged.neoforge.registries.DeferredBlock; + +public class ModBlockStateProvider extends BlockStateProvider { + public ModBlockStateProvider(PackOutput output, ExistingFileHelper exFileHelper) { + super(output, Stalinium.MODID, exFileHelper); + } + + @Override + protected void registerStatesAndModels() { + blockWithItem(ModBlocks.STALINIUM_BLOCK); + } + + private void blockWithItem(DeferredBlock deferredBlock) { + simpleBlockWithItem(deferredBlock.get(), cubeAll(deferredBlock.get())); + } +} diff --git a/src/main/java/net/krituximon/stalinium/datagen/ModBlockTagProvider.java b/src/main/java/net/krituximon/stalinium/datagen/ModBlockTagProvider.java new file mode 100644 index 0000000..62329ef --- /dev/null +++ b/src/main/java/net/krituximon/stalinium/datagen/ModBlockTagProvider.java @@ -0,0 +1,30 @@ +package net.krituximon.stalinium.datagen; + +import net.krituximon.stalinium.block.ModBlocks; +import net.krituximon.stalinium.util.ModTags; +import net.krituximon.stalinium.Stalinium; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraft.tags.BlockTags; +import net.neoforged.neoforge.common.Tags; +import net.neoforged.neoforge.common.data.BlockTagsProvider; +import net.neoforged.neoforge.common.data.ExistingFileHelper; +import org.jetbrains.annotations.Nullable; + +import java.util.concurrent.CompletableFuture; + +public class ModBlockTagProvider extends BlockTagsProvider { + public ModBlockTagProvider(PackOutput output, CompletableFuture lookupProvider, @Nullable ExistingFileHelper existingFileHelper) { + super(output, lookupProvider, Stalinium.MODID, existingFileHelper); + } + + @Override + protected void addTags(HolderLookup.Provider provider) { + tag(Tags.Blocks.STORAGE_BLOCKS) + .add(ModBlocks.STALINIUM_BLOCK.get()); + + tag(BlockTags.MINEABLE_WITH_PICKAXE) + .add(ModBlocks.STALINIUM_BLOCK.get()); + + } +} diff --git a/src/main/java/net/krituximon/stalinium/datagen/ModItemModelProvider.java b/src/main/java/net/krituximon/stalinium/datagen/ModItemModelProvider.java new file mode 100644 index 0000000..532775e --- /dev/null +++ b/src/main/java/net/krituximon/stalinium/datagen/ModItemModelProvider.java @@ -0,0 +1,18 @@ +package net.krituximon.stalinium.datagen; + +import net.krituximon.stalinium.item.ModItems; +import net.krituximon.stalinium.Stalinium; +import net.minecraft.data.PackOutput; +import net.neoforged.neoforge.client.model.generators.ItemModelProvider; +import net.neoforged.neoforge.common.data.ExistingFileHelper; + +public class ModItemModelProvider extends ItemModelProvider { + public ModItemModelProvider(PackOutput output, ExistingFileHelper existingFileHelper) { + super(output, Stalinium.MODID, existingFileHelper); + } + + @Override + protected void registerModels() { + basicItem(ModItems.STALINIUM_INGOT.get()); + } +} diff --git a/src/main/java/net/krituximon/stalinium/datagen/ModItemTagProvider.java b/src/main/java/net/krituximon/stalinium/datagen/ModItemTagProvider.java new file mode 100644 index 0000000..cd90a8f --- /dev/null +++ b/src/main/java/net/krituximon/stalinium/datagen/ModItemTagProvider.java @@ -0,0 +1,27 @@ +package net.krituximon.stalinium.datagen; + +import net.krituximon.stalinium.item.ModItems; +import net.krituximon.stalinium.Stalinium; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraft.data.tags.ItemTagsProvider; +import net.minecraft.world.level.block.Block; +import net.neoforged.neoforge.common.Tags; +import net.neoforged.neoforge.common.data.ExistingFileHelper; +import org.jetbrains.annotations.Nullable; + +import java.util.concurrent.CompletableFuture; + +public class ModItemTagProvider extends ItemTagsProvider { + + public ModItemTagProvider(PackOutput output, CompletableFuture lookupProvider, CompletableFuture> blockTags, @Nullable ExistingFileHelper existingFileHelper) { + super(output, lookupProvider, blockTags, Stalinium.MODID, existingFileHelper); + } + + // Add your tag entries here. + @Override + protected void addTags(HolderLookup.Provider lookupProvider) { + this.tag(Tags.Items.INGOTS) + .add(ModItems.STALINIUM_INGOT.get()); + } +} diff --git a/src/main/java/net/krituximon/stalinium/datagen/ModRecipeProvider.java b/src/main/java/net/krituximon/stalinium/datagen/ModRecipeProvider.java new file mode 100644 index 0000000..0c9ad88 --- /dev/null +++ b/src/main/java/net/krituximon/stalinium/datagen/ModRecipeProvider.java @@ -0,0 +1,32 @@ +package net.krituximon.stalinium.datagen; + +import net.krituximon.stalinium.block.ModBlocks; +import net.krituximon.stalinium.item.ModItems; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.*; +import net.neoforged.neoforge.common.conditions.IConditionBuilder; + +import java.util.List; +import java.util.concurrent.CompletableFuture; + +public class ModRecipeProvider extends RecipeProvider implements IConditionBuilder { + public ModRecipeProvider(PackOutput output, CompletableFuture registries) { + super(output, registries); + } + + @Override + protected void buildRecipes(RecipeOutput recipeOutput) { + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModBlocks.STALINIUM_BLOCK.get()) + .pattern("BBB") + .pattern("BBB") + .pattern("BBB") + .define('B', ModItems.STALINIUM_INGOT.get()) + .unlockedBy("has_stalinium", has(ModItems.STALINIUM_INGOT)).save(recipeOutput); + + ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, ModItems.STALINIUM_INGOT.get(), 9) + .requires(ModBlocks.STALINIUM_BLOCK) + .unlockedBy("has_stalinium_block", has(ModBlocks.STALINIUM_BLOCK)).save(recipeOutput); + + } +} diff --git a/src/main/java/net/krituximon/stalinium/item/ModItems.java b/src/main/java/net/krituximon/stalinium/item/ModItems.java new file mode 100644 index 0000000..f74ee42 --- /dev/null +++ b/src/main/java/net/krituximon/stalinium/item/ModItems.java @@ -0,0 +1,19 @@ +package net.krituximon.stalinium.item; + +import net.krituximon.stalinium.Stalinium; +import net.minecraft.world.item.Item; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredItem; +import net.neoforged.neoforge.registries.DeferredRegister; + +public class ModItems { + public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(Stalinium.MODID); + + public static final DeferredItem STALINIUM_INGOT = ITEMS.register("stalinium_ingot", + () -> new Item(new Item.Properties())); + + + public static void register(IEventBus eventBus) { + ITEMS.register(eventBus); + } +} diff --git a/src/main/java/net/krituximon/stalinium/util/ModTags.java b/src/main/java/net/krituximon/stalinium/util/ModTags.java new file mode 100644 index 0000000..d1e901c --- /dev/null +++ b/src/main/java/net/krituximon/stalinium/util/ModTags.java @@ -0,0 +1,24 @@ +package net.krituximon.stalinium.util; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.ItemTags; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; + +public class ModTags { + public static class Blocks { + private static TagKey commonTag(String name) { + return BlockTags.create(ResourceLocation.fromNamespaceAndPath("c", name)); + } + public static final TagKey STALINIUM = commonTag("storage_blocks/stalinium"); + } + + public static class Items { + private static TagKey commonTag(String name) { + return ItemTags.create(ResourceLocation.fromNamespaceAndPath("c", name)); + } + public static final TagKey STALINIUM = commonTag("ingots/stalinium"); + } +} diff --git a/src/main/resources/assets/stalinium/lang/en_us.json b/src/main/resources/assets/stalinium/lang/en_us.json index d8e1450..96814a3 100644 --- a/src/main/resources/assets/stalinium/lang/en_us.json +++ b/src/main/resources/assets/stalinium/lang/en_us.json @@ -1,5 +1,5 @@ { - "itemGroup.stalinium": "Example Mod Tab", - "block.stalinium.example_block": "Example Block", - "item.stalinium.example_item": "Example Item" + "item.stalinium.uranium_ingot": "Stalinium Ingot", + + "block.stalinium.uranium_block": "Block of Stalinium" }