From ab3d75abcf78e66cab68e2fad3688f58e4a4897d Mon Sep 17 00:00:00 2001 From: sillyangel Date: Sun, 15 Dec 2024 19:00:19 -0600 Subject: [PATCH] Add Nugget Mod items, blocks, and recipes --- .../java/xyz/sillyangel/nugget/NuggetMod.java | 11 ++-- .../sillyangel/nugget/block/ModBlocks.java | 14 +++- .../nugget/item/ModCreativeModeTabs.java | 39 +++++++++++ .../xyz/sillyangel/nugget/item/ModItems.java | 3 + .../blockstates/nugget_deepslate_ore.json | 5 ++ .../nuggetmod/blockstates/nugget_ore.json | 5 ++ .../assets/nuggetmod/lang/en_us.json | 9 ++- .../models/block/nugget_deepslate_ore.json | 6 ++ .../nuggetmod/models/block/nugget_ore.json | 6 ++ .../models/item/nugget_deepslate_ore.json | 3 + .../nuggetmod/models/item/nugget_ore.json | 3 + .../nuggetmod/models/item/raw_nugget.json | 6 ++ .../textures/block/nugget_deepslate_ore.png | Bin 0 -> 881 bytes .../nuggetmod/textures/block/nugget_ore.png | Bin 0 -> 683 bytes .../nuggetmod/textures/item/raw_nugget.png | Bin 0 -> 8538 bytes .../tags/block/mineable/pickaxe.json | 9 +++ .../tags/block/needs_diamond_tool.json | 6 ++ .../minecraft/tags/block/needs_iron_tool.json | 8 +++ .../loot_table/blocks/nugget_block.json | 21 ++++++ .../blocks/nugget_deepslate_ore.json | 61 ++++++++++++++++++ .../loot_table/blocks/nugget_ore.json | 52 +++++++++++++++ .../loot_table/blocks/raw_nugget_block.json | 21 ++++++ .../data/nuggetmod/recipe/nugget.json | 13 ++++ .../data/nuggetmod/recipe/nugget_block.json | 18 ++++++ .../nugget_from_blasting_raw_nugget.json | 12 ++++ .../nugget_from_smelting_raw_nugget.json | 12 ++++ .../data/nuggetmod/recipe/raw_nugget.json | 13 ++++ .../nuggetmod/recipe/raw_nugget_block.json | 18 ++++++ 28 files changed, 364 insertions(+), 10 deletions(-) create mode 100644 src/main/resources/assets/nuggetmod/blockstates/nugget_deepslate_ore.json create mode 100644 src/main/resources/assets/nuggetmod/blockstates/nugget_ore.json create mode 100644 src/main/resources/assets/nuggetmod/models/block/nugget_deepslate_ore.json create mode 100644 src/main/resources/assets/nuggetmod/models/block/nugget_ore.json create mode 100644 src/main/resources/assets/nuggetmod/models/item/nugget_deepslate_ore.json create mode 100644 src/main/resources/assets/nuggetmod/models/item/nugget_ore.json create mode 100644 src/main/resources/assets/nuggetmod/textures/block/nugget_deepslate_ore.png create mode 100644 src/main/resources/assets/nuggetmod/textures/block/nugget_ore.png create mode 100644 src/main/resources/assets/nuggetmod/textures/item/raw_nugget.png create mode 100644 src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json create mode 100644 src/main/resources/data/minecraft/tags/block/needs_diamond_tool.json create mode 100644 src/main/resources/data/minecraft/tags/block/needs_iron_tool.json create mode 100644 src/main/resources/data/nuggetmod/loot_table/blocks/nugget_block.json create mode 100644 src/main/resources/data/nuggetmod/loot_table/blocks/nugget_deepslate_ore.json create mode 100644 src/main/resources/data/nuggetmod/loot_table/blocks/nugget_ore.json create mode 100644 src/main/resources/data/nuggetmod/loot_table/blocks/raw_nugget_block.json create mode 100644 src/main/resources/data/nuggetmod/recipe/nugget_from_blasting_raw_nugget.json create mode 100644 src/main/resources/data/nuggetmod/recipe/nugget_from_smelting_raw_nugget.json create mode 100644 src/main/resources/data/nuggetmod/recipe/raw_nugget.json create mode 100644 src/main/resources/data/nuggetmod/recipe/raw_nugget_block.json diff --git a/src/main/java/xyz/sillyangel/nugget/NuggetMod.java b/src/main/java/xyz/sillyangel/nugget/NuggetMod.java index a69b99d..ba5c07d 100644 --- a/src/main/java/xyz/sillyangel/nugget/NuggetMod.java +++ b/src/main/java/xyz/sillyangel/nugget/NuggetMod.java @@ -15,6 +15,7 @@ import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import org.slf4j.Logger; +import xyz.sillyangel.nugget.item.ModCreativeModeTabs; import xyz.sillyangel.nugget.item.ModItems; import xyz.sillyangel.nugget.block.ModBlocks; @@ -33,6 +34,8 @@ public class NuggetMod { // Register ourselves for server and other game events we are interested in MinecraftForge.EVENT_BUS.register(this); + ModCreativeModeTabs.register(modEventBus); + ModItems.register(modEventBus); ModBlocks.register(modEventBus); @@ -48,13 +51,7 @@ public class NuggetMod { // Add the example block item to the building blocks tab private void addCreative(BuildCreativeModeTabContentsEvent event) { - if (event.getTabKey() == CreativeModeTabs.INGREDIENTS) { - event.accept(ModItems.NUGGET); - } - if (event.getTabKey() == CreativeModeTabs.BUILDING_BLOCKS) { - event.accept(ModBlocks.NUGGET_BLOCK); - event.accept(ModBlocks.RAW_NUGGET_BLOCK); - } + } // You can use SubscribeEvent and let the Event Bus discover methods to call diff --git a/src/main/java/xyz/sillyangel/nugget/block/ModBlocks.java b/src/main/java/xyz/sillyangel/nugget/block/ModBlocks.java index 80b5df0..af1da62 100644 --- a/src/main/java/xyz/sillyangel/nugget/block/ModBlocks.java +++ b/src/main/java/xyz/sillyangel/nugget/block/ModBlocks.java @@ -2,9 +2,11 @@ package xyz.sillyangel.nugget.block; import xyz.sillyangel.nugget.NuggetMod; import xyz.sillyangel.nugget.item.ModItems; +import net.minecraft.util.valueproviders.UniformInt; 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.DropExperienceBlock; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraftforge.eventbus.api.IEventBus; @@ -25,8 +27,16 @@ public class ModBlocks { public static final RegistryObject RAW_NUGGET_BLOCK = registerBlock("raw_nugget_block", () -> new Block(BlockBehaviour.Properties.of() .strength(3f).requiresCorrectToolForDrops())); - - private static RegistryObject registerBlock(String name, Supplier block) { + // ores + public static final RegistryObject NUGGET_ORE = registerBlock("nugget_ore", + () -> new DropExperienceBlock(UniformInt.of(2, 4), BlockBehaviour.Properties.of() + .strength(4f).requiresCorrectToolForDrops())); + + public static final RegistryObject NUGGET_DEEPSLATE_ORE = registerBlock("nugget_deepslate_ore", + () -> new DropExperienceBlock(UniformInt.of(2, 4), BlockBehaviour.Properties.of() + .strength(5f).requiresCorrectToolForDrops().sound(SoundType.DEEPSLATE))); + + private static RegistryObject registerBlock(String name, Supplier block) { RegistryObject toReturn = BLOCKS.register(name, block); registerBlockItem(name, toReturn); return toReturn; diff --git a/src/main/java/xyz/sillyangel/nugget/item/ModCreativeModeTabs.java b/src/main/java/xyz/sillyangel/nugget/item/ModCreativeModeTabs.java index 736d9f3..b3febf1 100644 --- a/src/main/java/xyz/sillyangel/nugget/item/ModCreativeModeTabs.java +++ b/src/main/java/xyz/sillyangel/nugget/item/ModCreativeModeTabs.java @@ -1,4 +1,43 @@ package xyz.sillyangel.nugget.item; +import net.minecraft.core.registries.Registries; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.RegistryObject; +import xyz.sillyangel.nugget.NuggetMod; +import xyz.sillyangel.nugget.block.ModBlocks; + public class ModCreativeModeTabs { + public static final DeferredRegister CREATIVE_MODE_TABS = + DeferredRegister.create(Registries.CREATIVE_MODE_TAB, NuggetMod.MOD_ID); + + public static final RegistryObject NUGGET_ITEMS_TAB = CREATIVE_MODE_TABS.register("nuggetmod_items_tab", + () -> CreativeModeTab.builder().icon(() -> new ItemStack(ModItems.NUGGET.get())) + .title(Component.translatable("creativetab.nuggetmod.nugget_items")) + .displayItems((itemDisplayParameters, output) -> { + output.accept(ModItems.NUGGET.get()); + output.accept(ModItems.RAW_NUGGET.get()); + + }).build()); + + public static final RegistryObject NUGGET_BLOCKS_TAB = CREATIVE_MODE_TABS.register("nuggetmod_blocks_tab", + () -> CreativeModeTab.builder().icon(() -> new ItemStack(ModBlocks.NUGGET_BLOCK.get())) + .withTabsBefore(NUGGET_ITEMS_TAB.getId()) + .title(Component.translatable("creativetab.nuggetmod.nugget_blocks")) + .displayItems((itemDisplayParameters, output) -> { + output.accept(ModBlocks.NUGGET_BLOCK.get()); + output.accept(ModBlocks.RAW_NUGGET_BLOCK.get()); + output.accept(ModBlocks.NUGGET_ORE.get()); + output.accept(ModBlocks.NUGGET_DEEPSLATE_ORE.get()); + }).build()); + + + + + public static void register(IEventBus eventBus) { + CREATIVE_MODE_TABS.register(eventBus); + } } diff --git a/src/main/java/xyz/sillyangel/nugget/item/ModItems.java b/src/main/java/xyz/sillyangel/nugget/item/ModItems.java index 0fe761b..600ebc4 100644 --- a/src/main/java/xyz/sillyangel/nugget/item/ModItems.java +++ b/src/main/java/xyz/sillyangel/nugget/item/ModItems.java @@ -14,6 +14,9 @@ public class ModItems { public static final RegistryObject NUGGET = ITEMS.register("nugget", () -> new Item(new Item.Properties())); + public static final RegistryObject RAW_NUGGET = ITEMS.register("raw_nugget", + () -> new Item(new Item.Properties())); + public static void register(IEventBus eventBus) { diff --git a/src/main/resources/assets/nuggetmod/blockstates/nugget_deepslate_ore.json b/src/main/resources/assets/nuggetmod/blockstates/nugget_deepslate_ore.json new file mode 100644 index 0000000..e4d9a13 --- /dev/null +++ b/src/main/resources/assets/nuggetmod/blockstates/nugget_deepslate_ore.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "nuggetmod:block/nugget_deepslate_ore" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/nuggetmod/blockstates/nugget_ore.json b/src/main/resources/assets/nuggetmod/blockstates/nugget_ore.json new file mode 100644 index 0000000..af332b5 --- /dev/null +++ b/src/main/resources/assets/nuggetmod/blockstates/nugget_ore.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "nuggetmod:block/nugget_ore" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/nuggetmod/lang/en_us.json b/src/main/resources/assets/nuggetmod/lang/en_us.json index 6615b6f..25d3e0d 100644 --- a/src/main/resources/assets/nuggetmod/lang/en_us.json +++ b/src/main/resources/assets/nuggetmod/lang/en_us.json @@ -1,5 +1,12 @@ { + "item.nuggetmod.raw_nugget": "Raw Nugget", "item.nuggetmod.nugget": "nugget", + "block.nuggetmod.nugget_block": "Nugget Block", - "block.nuggetmod.raw_nugget_block": "Raw Nugget Block" + "block.nuggetmod.raw_nugget_block": "Raw Nugget Block", + "block.nuggetmod.nugget_ore": "Nugget Ore", + "block.nuggetmod.nugget_deepslate_ore": "Nugget Deepslate Ore", + + "creativetab.nuggetmod.nugget_items": "Nugget Mod Items", + "creativetab.nuggetmod.nugget_blocks": "Nugget Mod Blocks" } \ No newline at end of file diff --git a/src/main/resources/assets/nuggetmod/models/block/nugget_deepslate_ore.json b/src/main/resources/assets/nuggetmod/models/block/nugget_deepslate_ore.json new file mode 100644 index 0000000..4b5dc97 --- /dev/null +++ b/src/main/resources/assets/nuggetmod/models/block/nugget_deepslate_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "nuggetmod:block/nugget_deepslate_ore" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/nuggetmod/models/block/nugget_ore.json b/src/main/resources/assets/nuggetmod/models/block/nugget_ore.json new file mode 100644 index 0000000..10d20f8 --- /dev/null +++ b/src/main/resources/assets/nuggetmod/models/block/nugget_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "nuggetmod:block/nugget_ore" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/nuggetmod/models/item/nugget_deepslate_ore.json b/src/main/resources/assets/nuggetmod/models/item/nugget_deepslate_ore.json new file mode 100644 index 0000000..c7d55b6 --- /dev/null +++ b/src/main/resources/assets/nuggetmod/models/item/nugget_deepslate_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "nuggetmod:block/nugget_deepslate_ore" +} \ No newline at end of file diff --git a/src/main/resources/assets/nuggetmod/models/item/nugget_ore.json b/src/main/resources/assets/nuggetmod/models/item/nugget_ore.json new file mode 100644 index 0000000..2d118a6 --- /dev/null +++ b/src/main/resources/assets/nuggetmod/models/item/nugget_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "nuggetmod:block/nugget_ore" +} \ No newline at end of file diff --git a/src/main/resources/assets/nuggetmod/models/item/raw_nugget.json b/src/main/resources/assets/nuggetmod/models/item/raw_nugget.json index e69de29..a902b58 100644 --- a/src/main/resources/assets/nuggetmod/models/item/raw_nugget.json +++ b/src/main/resources/assets/nuggetmod/models/item/raw_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "nuggetmod:item/raw_nugget" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/nuggetmod/textures/block/nugget_deepslate_ore.png b/src/main/resources/assets/nuggetmod/textures/block/nugget_deepslate_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..98878200d538e287f1b7214d9840af29dda7f675 GIT binary patch literal 881 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%GqP0X`wFm6eq#DJg-0fws2J`ugVP#%6Agj#U+973m?Xn_Rl`-E3{08q<9i zSJ)n(V6&;kHqgVdr!KQDFCr%`KG?;&FV*63x8<=(_I1hj9?niV=?VM#oVRy5FRJrs zPIvNjc4*HJpOdM(y4reirG06Fds(u_=2pjJ6KwW$SkEi6Xvp$!$nfdUwCu^SF*Y=F zuyaZYu$`7|vaHx(N}7Inu%Ex1eXzToy_rdlziD2CgPpCDv7vc@i$!XbPjFyBe1u<& zzhie<$eL!ynI-n!`L1P&?hUE->znMdVm!0c5*AiF9_zO`+;6+H(`i+M`_#&?gmABt z7`qh}X4x?w$&o&FiMC5Ct@m|U?rF1JS7qLx=bDuoXK&|}>}MSoMpu7*dzkmW4!h%9Dc;5!V$jK}j=qyPmaN?apK zg7ec#$`gxH83GbB^GfvmTtgI0^$hh4lePx&0M%?ujqptK^weVD0CHFvq!?Kl7=bJ= zAeM%*LGh}=$P5-|0#Br12APwU}s$Nv;eZ8x(p2rK(f*$m#19eXyXPluX(yShG+!K z_Fr{!cI0uHJo5t6(Ytr=%69GEz5CyPeuM3mw^GcXpP6MDvSc?O3s27;5lt>_W$K|NQv>4LZ%v zhm{W{mgLkV6?ujEoxi}!p8ouq@Y%Q~loCICaA8_)m% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/nuggetmod/textures/block/nugget_ore.png b/src/main/resources/assets/nuggetmod/textures/block/nugget_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..bed87cb2655c197698e991781aefb23ec13a2315 GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%Lg@0X`wF{r&y*_4OqsB^enRHCf?%y6g}1IW?7~FRTqY+G}-mqWzM#gr4g3 zeZ5WxCph=#`!6jpo?q@VzszNNWk^@1*Wx_G*+mYOxv_KVBd3>zFE27(RPC{-%414f z`I45fgMIc#CpxX|Pn_J{&`}t%s>SbUzwPmfcB?u<+scw=l=^RIayiy#y`?)~QEO6P zj@OcM$1U|1YwPV7R=Uh7_v*;-o|bL9w9sr}h1=XR*ZF16@7ZQ*16|Hp;1OBOz`%DH zgc*-t}1Vlw2(wtn#7!r{AjWB>g>?ooF7@HDf`&72F*O<~SDDg%HHvyo9xG!y&m7qj<^5`g5C^Z-gO3~1v@>TPVB9{TMda}%zV0o| zqMKvyU6EY9_g{jBk(B?k&6Z(Sc4y{9>x92PE4J|-$N#+gj(&BccZVwX#pHi)cb@Zq p)~(N9|JBs5sFh?eZQ1CZwW?mUoqe0X6Ne7S-JY&~F6*2UngB~R*fjtE literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/nuggetmod/textures/item/raw_nugget.png b/src/main/resources/assets/nuggetmod/textures/item/raw_nugget.png new file mode 100644 index 0000000000000000000000000000000000000000..683a31375899b8f4140bb68bad59c25e997e6ab7 GIT binary patch literal 8538 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