From cfeed04a0a8ef83f907f598277384d9a5bbb3918 Mon Sep 17 00:00:00 2001 From: Jenny Date: Tue, 31 Dec 2024 05:14:38 +0100 Subject: [PATCH] added UltraPickaxe --- .../compressedblocks/CompressedBlocks.java | 6 +- .../ModItemModelProvider.java | 67 ++++++++++++++++++ .../java/com/jenny/compressedblocks/Tags.java | 22 ++++++ .../com/jenny/compressedblocks/ToolTiers.java | 18 +++++ .../com/jenny/compressedblocks/Tools.java | 20 ++++++ .../assets/compressedblocks/lang/en_us.json | 3 +- .../models/item/ultra_pickaxe.json | 6 ++ .../textures/item/ultra_pickaxe.png | Bin 0 -> 1469 bytes .../textures/item/ultra_pickaxe.png.mcmeta | 7 ++ .../loot_tables/blocks/cblock_mining.json | 14 ++++ .../recipes/cblock_mining.json | 22 ++++++ .../tags/blocks/mineable/pickaxe.json | 15 +++- src/main/textures/pickaxe.pxo | Bin 10005 -> 10057 bytes 13 files changed, 197 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/jenny/compressedblocks/ModItemModelProvider.java create mode 100644 src/main/java/com/jenny/compressedblocks/Tags.java create mode 100644 src/main/java/com/jenny/compressedblocks/ToolTiers.java create mode 100644 src/main/java/com/jenny/compressedblocks/Tools.java create mode 100644 src/main/resources/assets/compressedblocks/models/item/ultra_pickaxe.json create mode 100644 src/main/resources/assets/compressedblocks/textures/item/ultra_pickaxe.png create mode 100644 src/main/resources/assets/compressedblocks/textures/item/ultra_pickaxe.png.mcmeta create mode 100755 src/main/resources/data/compressedblocks/loot_tables/blocks/cblock_mining.json create mode 100755 src/main/resources/data/compressedblocks/recipes/cblock_mining.json diff --git a/src/main/java/com/jenny/compressedblocks/CompressedBlocks.java b/src/main/java/com/jenny/compressedblocks/CompressedBlocks.java index 12504f4..a3363f5 100755 --- a/src/main/java/com/jenny/compressedblocks/CompressedBlocks.java +++ b/src/main/java/com/jenny/compressedblocks/CompressedBlocks.java @@ -1,5 +1,7 @@ package com.jenny.compressedblocks; + +import com.jenny.compressedblocks.Tools; import com.mojang.logging.LogUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.model.Material; @@ -103,7 +105,7 @@ public class CompressedBlocks public static final RegistryObject GRANITE_4X = BLOCKS.register("granite_4x", () -> new Block(BlockBehaviour.Properties.of().mapColor(MapColor.NONE).strength(5.0F, 11.0F).requiresCorrectToolForDrops())); public static final RegistryObject GRANITE_4X_ITEM = ITEMS.register("granite_4x", () -> new BlockItem(GRANITE_4X.get(), new Item.Properties())); - /* Combined blocks */ + /* COMBINED BLOCKS */ public static final RegistryObject CBLOCK_MINING = BLOCKS.register("cblock_mining", () -> new Block(BlockBehaviour.Properties.of().mapColor(MapColor.NONE).strength(5.0F, 11.0F).requiresCorrectToolForDrops())); public static final RegistryObject CBLOCK_MINING_ITEM = ITEMS.register("cblock_mining", () -> new BlockItem(CBLOCK_MINING.get(), new Item.Properties())); @@ -131,6 +133,7 @@ public class CompressedBlocks output.accept(GRANITE_3X.get()); output.accept(GRANITE_4X.get()); output.accept(CBLOCK_MINING.get()); + output.accept(Tools.ULTRA_PICKAXE.get()); }).build()); public CompressedBlocks() @@ -144,6 +147,7 @@ public class CompressedBlocks BLOCKS.register(modEventBus); // Register the Deferred Register to the mod event bus so items get registered ITEMS.register(modEventBus); + Tools.register(modEventBus); // Register the Deferred Register to the mod event bus so tabs get registered CREATIVE_MODE_TABS.register(modEventBus); diff --git a/src/main/java/com/jenny/compressedblocks/ModItemModelProvider.java b/src/main/java/com/jenny/compressedblocks/ModItemModelProvider.java new file mode 100644 index 0000000..5d926f3 --- /dev/null +++ b/src/main/java/com/jenny/compressedblocks/ModItemModelProvider.java @@ -0,0 +1,67 @@ +package com.jenny.compressedblocks; + +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.client.model.generators.ItemModelBuilder; +import net.minecraftforge.client.model.generators.ItemModelProvider; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class ModItemModelProvider extends ItemModelProvider { + public ModItemModelProvider(PackOutput output, ExistingFileHelper existingFileHelper) { + super(output, CompressedBlocks.MODID, existingFileHelper); + } + + @Override + protected void registerModels() { + handheldItem(Tools.ULTRA_PICKAXE); + } + + private ItemModelBuilder saplingItem(RegistryObject item) { + return withExistingParent(item.getId().getPath(), + new ResourceLocation("item/generated")).texture("layer0", + new ResourceLocation(CompressedBlocks.MODID,"block/" + item.getId().getPath())); + } + + private ItemModelBuilder complexBlock(Block block) { + return withExistingParent(ForgeRegistries.BLOCKS.getKey(block).getPath(), new ResourceLocation(CompressedBlocks.MODID, + "block/" + ForgeRegistries.BLOCKS.getKey(block).getPath())); + } + + public void fenceItem(RegistryObject block, RegistryObject baseBlock) { + this.withExistingParent(ForgeRegistries.BLOCKS.getKey(block.get()).getPath(), mcLoc("block/fence_inventory")) + .texture("texture", new ResourceLocation(CompressedBlocks.MODID, "block/" + ForgeRegistries.BLOCKS.getKey(baseBlock.get()).getPath())); + } + + public void wallItem(RegistryObject block, RegistryObject baseBlock) { + this.withExistingParent(ForgeRegistries.BLOCKS.getKey(block.get()).getPath(), mcLoc("block/wall_inventory")) + .texture("wall", new ResourceLocation(CompressedBlocks.MODID, "block/" + ForgeRegistries.BLOCKS.getKey(baseBlock.get()).getPath())); + } + + public void buttonItem(RegistryObject block, RegistryObject baseBlock) { + this.withExistingParent(ForgeRegistries.BLOCKS.getKey(block.get()).getPath(), mcLoc("block/button_inventory")) + .texture("texture", new ResourceLocation(CompressedBlocks.MODID, "block/" + ForgeRegistries.BLOCKS.getKey(baseBlock.get()).getPath())); + } + + + private ItemModelBuilder handheldItem(RegistryObject item) { + return withExistingParent(item.getId().getPath(), + new ResourceLocation("item/handheld")).texture("layer0", + new ResourceLocation(CompressedBlocks.MODID,"item/" + item.getId().getPath())); + } + + private ItemModelBuilder simpleBlockItem(RegistryObject item) { + return withExistingParent(item.getId().getPath(), + new ResourceLocation("item/generated")).texture("layer0", + new ResourceLocation(CompressedBlocks.MODID,"item/" + item.getId().getPath())); + } + + private ItemModelBuilder simpleItem(RegistryObject item) { + return withExistingParent(item.getId().getPath(), + new ResourceLocation("item/generated")).texture("layer0", + new ResourceLocation(CompressedBlocks.MODID,"item/" + item.getId().getPath())); + } +} diff --git a/src/main/java/com/jenny/compressedblocks/Tags.java b/src/main/java/com/jenny/compressedblocks/Tags.java new file mode 100644 index 0000000..d24ef98 --- /dev/null +++ b/src/main/java/com/jenny/compressedblocks/Tags.java @@ -0,0 +1,22 @@ +package com.jenny.compressedblocks; + +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 Tags { + public static class Blocks { + public static final TagKey NEEDS_ULTRA_TOOL = tag("needs_ultra_tool"); + + private static TagKey tag(String name) { + return BlockTags.create(new ResourceLocation(CompressedBlocks.MODID, name)); + } + } + + public static class Items { + + } +} diff --git a/src/main/java/com/jenny/compressedblocks/ToolTiers.java b/src/main/java/com/jenny/compressedblocks/ToolTiers.java new file mode 100644 index 0000000..6fcf64e --- /dev/null +++ b/src/main/java/com/jenny/compressedblocks/ToolTiers.java @@ -0,0 +1,18 @@ +package com.jenny.compressedblocks; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraftforge.common.ForgeTier; +import net.minecraftforge.common.TierSortingRegistry; + +import java.util.List; + +public class ToolTiers { + public static final Tier ULTRA = TierSortingRegistry.registerTier( + new ForgeTier(5, 2560, 20f, 4f, 25, + Tags.Blocks.NEEDS_ULTRA_TOOL, () -> Ingredient.of(CompressedBlocks.CBLOCK_MINING_ITEM.get())), + new ResourceLocation(CompressedBlocks.MODID, "ultra"), List.of(Tiers.NETHERITE), List.of() + ); +} diff --git a/src/main/java/com/jenny/compressedblocks/Tools.java b/src/main/java/com/jenny/compressedblocks/Tools.java new file mode 100644 index 0000000..406667c --- /dev/null +++ b/src/main/java/com/jenny/compressedblocks/Tools.java @@ -0,0 +1,20 @@ +package com.jenny.compressedblocks; + +import com.jenny.compressedblocks.ToolTiers; +import net.minecraft.world.item.*; +import net.minecraftforge.common.ForgeSpawnEggItem; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class Tools { + public static final DeferredRegister TOOLS = + DeferredRegister.create(ForgeRegistries.ITEMS, CompressedBlocks.MODID); + + public static final RegistryObject ULTRA_PICKAXE = TOOLS.register("ultra_pickaxe", () -> new PickaxeItem(ToolTiers.ULTRA, 1, -2.5f, new Item.Properties())); + + + + public static void register(IEventBus eventBus) {TOOLS.register(eventBus);}; +} diff --git a/src/main/resources/assets/compressedblocks/lang/en_us.json b/src/main/resources/assets/compressedblocks/lang/en_us.json index cde490b..04cfb15 100644 --- a/src/main/resources/assets/compressedblocks/lang/en_us.json +++ b/src/main/resources/assets/compressedblocks/lang/en_us.json @@ -15,5 +15,6 @@ "block.compressedblocks.granite_2x": "Granite²", "block.compressedblocks.granite_3x": "Granite³", "block.compressedblocks.granite_4x": "Granite⁴", - "block.compressedblocks.cblock_mining": "Mining Block" + "block.compressedblocks.cblock_mining": "Mining Block", + "item.compressedblocks.ultra_pickaxe": "Ultra Pickaxe" } \ No newline at end of file diff --git a/src/main/resources/assets/compressedblocks/models/item/ultra_pickaxe.json b/src/main/resources/assets/compressedblocks/models/item/ultra_pickaxe.json new file mode 100644 index 0000000..6474693 --- /dev/null +++ b/src/main/resources/assets/compressedblocks/models/item/ultra_pickaxe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "compressedblocks:item/ultra_pickaxe" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/compressedblocks/textures/item/ultra_pickaxe.png b/src/main/resources/assets/compressedblocks/textures/item/ultra_pickaxe.png new file mode 100644 index 0000000000000000000000000000000000000000..b2cceae458cd2b272e51b03f3d4d3c3db9571feb GIT binary patch literal 1469 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 Z*N%+@)X9PfOCXTI&j7g2489Tk^&iEFmc9T0 literal 10005 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