From cda9741cc84b23ffebdb7cd1f86c64e05d9fe504 Mon Sep 17 00:00:00 2001 From: Chris Toph Date: Sun, 16 Feb 2025 22:12:25 -0500 Subject: [PATCH] Added Metal Detector --- .../tutorialmod/item/ModCreativeTabs.java | 1 + .../cc/toph/tutorialmod/item/ModItems.java | 4 ++ .../item/custom/MetalDetectorItem.java | 68 ++++++++++++++++++ .../assets/tutorialmod/lang/en_us.json | 1 + .../models/item/metal_detector.json | 6 ++ .../textures/item/metal_detector.png | Bin 0 -> 305 bytes 6 files changed, 80 insertions(+) create mode 100644 src/main/java/cc/toph/tutorialmod/item/custom/MetalDetectorItem.java create mode 100644 src/main/resources/assets/tutorialmod/models/item/metal_detector.json create mode 100644 src/main/resources/assets/tutorialmod/textures/item/metal_detector.png diff --git a/src/main/java/cc/toph/tutorialmod/item/ModCreativeTabs.java b/src/main/java/cc/toph/tutorialmod/item/ModCreativeTabs.java index 2e131e5..a369d26 100644 --- a/src/main/java/cc/toph/tutorialmod/item/ModCreativeTabs.java +++ b/src/main/java/cc/toph/tutorialmod/item/ModCreativeTabs.java @@ -23,6 +23,7 @@ public class ModCreativeTabs { .title(Component.translatable("creativetab.tutorial_tab")).displayItems((pParams, pOut) -> { pOut.accept(ModItems.SAPPHIRE.get()); pOut.accept(ModItems.RAW_SAPPHIRE.get()); + pOut.accept(ModItems.METAL_DETECTOR.get()); pOut.accept(ModBlocks.SAPPHIRE_BLOCK.get()); pOut.accept(ModBlocks.RAW_SAPPHIRE_BLOCK.get()); pOut.accept(ModBlocks.SAPPHIRE_ORE.get()); diff --git a/src/main/java/cc/toph/tutorialmod/item/ModItems.java b/src/main/java/cc/toph/tutorialmod/item/ModItems.java index 2da264a..e4272d4 100644 --- a/src/main/java/cc/toph/tutorialmod/item/ModItems.java +++ b/src/main/java/cc/toph/tutorialmod/item/ModItems.java @@ -1,6 +1,7 @@ package cc.toph.tutorialmod.item; import cc.toph.tutorialmod.TutorialMod; +import cc.toph.tutorialmod.item.custom.MetalDetectorItem; import net.minecraft.world.item.Item; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.registries.DeferredRegister; @@ -18,4 +19,7 @@ public class ModItems { public static final RegistryObject SAPPHIRE = ITEMS.register("sapphire", () -> new Item(new Item.Properties())); public static final RegistryObject RAW_SAPPHIRE = ITEMS.register("raw_sapphire", () -> new Item(new Item.Properties())); + + public static final RegistryObject METAL_DETECTOR = ITEMS.register("metal_detector", + () -> new MetalDetectorItem(new Item.Properties().durability(100))); } diff --git a/src/main/java/cc/toph/tutorialmod/item/custom/MetalDetectorItem.java b/src/main/java/cc/toph/tutorialmod/item/custom/MetalDetectorItem.java new file mode 100644 index 0000000..8c6d4b0 --- /dev/null +++ b/src/main/java/cc/toph/tutorialmod/item/custom/MetalDetectorItem.java @@ -0,0 +1,68 @@ +package cc.toph.tutorialmod.item.custom; + +import java.util.ArrayList; + +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; + +public class MetalDetectorItem extends Item { + + public MetalDetectorItem(Properties pProperties) { + super(pProperties); + // TODO Auto-generated constructor stub + } + + @Override + public InteractionResult useOn(UseOnContext pContext) { + + if (!pContext.getLevel().isClientSide()) { + BlockPos positionClicked = pContext.getClickedPos(); + Player player = pContext.getPlayer(); + var foundBlock = false; + + for (int i = 0; i <= positionClicked.getY() + 64; i++) { + var state = pContext.getLevel().getBlockState(positionClicked.below(i)); + if (isValuableBlock(state)) { + notifyCords(positionClicked.below(i), player, state); + } + } + + if (!foundBlock) { + player.sendSystemMessage(Component.literal("Loser Loser")); + } + } + + pContext.getItemInHand().hurtAndBreak(1, pContext.getPlayer(), + (player) -> player.broadcastBreakEvent(player.getUsedItemHand())); + + return InteractionResult.SUCCESS; + } + + private boolean isValuableBlock(BlockState state) { + + final var valuables = new ArrayList(); + + valuables.add(Blocks.COAL_ORE); + valuables.add(Blocks.IRON_ORE); + valuables.add(Blocks.GOLD_ORE); + valuables.add(Blocks.DIAMOND_ORE); + valuables.add(Blocks.LAPIS_ORE); + valuables.add(Blocks.REDSTONE_ORE); + valuables.add(Blocks.EMERALD_ORE); + + return valuables.contains(state.getBlock()); + } + + private void notifyCords(BlockPos below, Player player, BlockState state) { + var messg = Component.literal("Found " + state.getBlock().getName().getString() + " at " + below.getX() + " " + + below.getY() + " " + below.getZ()); + player.sendSystemMessage(messg); + } +} diff --git a/src/main/resources/assets/tutorialmod/lang/en_us.json b/src/main/resources/assets/tutorialmod/lang/en_us.json index 9000c7f..107d885 100644 --- a/src/main/resources/assets/tutorialmod/lang/en_us.json +++ b/src/main/resources/assets/tutorialmod/lang/en_us.json @@ -1,6 +1,7 @@ { "item.tutorialmod.sapphire": "Sapphire", "item.tutorialmod.raw_sapphire": "Raw Sapphire", + "item.tutorialmod.metal_detector": "Metal Detector", "block.tutorialmod.sapphire_block": "Block of Sapphire", "block.tutorialmod.raw_sapphire_block": "Block of Raw Sapphire", diff --git a/src/main/resources/assets/tutorialmod/models/item/metal_detector.json b/src/main/resources/assets/tutorialmod/models/item/metal_detector.json new file mode 100644 index 0000000..ae5e60f --- /dev/null +++ b/src/main/resources/assets/tutorialmod/models/item/metal_detector.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "tutorialmod:item/metal_detector" + } +} diff --git a/src/main/resources/assets/tutorialmod/textures/item/metal_detector.png b/src/main/resources/assets/tutorialmod/textures/item/metal_detector.png new file mode 100644 index 0000000000000000000000000000000000000000..8a6b14bc6f62a38e83c64359099fd3efb0c2abf8 GIT binary patch literal 305 zcmV-10nYx3P)gqQ9;6YGPr&+jIj4U>@IcIih$vw2cTD;FFwgh12fT zIY^Sk_8&)@i2