From 0b4936f47d22ce139ab81bf79255a80edee02cd2 Mon Sep 17 00:00:00 2001 From: Jottyfan Date: Thu, 15 Oct 2026 19:05:13 +0200 Subject: [PATCH] added tool (stub) --- .../de/jottyfan/minecraft/item/ModItems.java | 2 +- .../minecraft/item/ModItemsRegistrator.java | 11 +++++ .../de/jottyfan/minecraft/item/StubItem.java | 49 +++++++++++++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/jottyfan/minecraft/item/StubItem.java diff --git a/src/main/java/de/jottyfan/minecraft/item/ModItems.java b/src/main/java/de/jottyfan/minecraft/item/ModItems.java index 4e197cc..e5a489d 100644 --- a/src/main/java/de/jottyfan/minecraft/item/ModItems.java +++ b/src/main/java/de/jottyfan/minecraft/item/ModItems.java @@ -14,7 +14,7 @@ public class ModItems extends ModItemsRegistrator { public static final Item RAW_TIN = registerItem("raw_tin"); public static final Item RUBY = registerItem("ruby"); public static final Item CHILI = registerItem("chili"); - public static final Item STUB = registerItem("stub"); + public static final Item STUB = registerItem("stub", StubItem::new); public static final Item TIN_INGOT = registerItem("tin_ingot"); public static final Item TIN_DUST = registerItem("tin_dust"); diff --git a/src/main/java/de/jottyfan/minecraft/item/ModItemsRegistrator.java b/src/main/java/de/jottyfan/minecraft/item/ModItemsRegistrator.java index d24507b..e5455d8 100644 --- a/src/main/java/de/jottyfan/minecraft/item/ModItemsRegistrator.java +++ b/src/main/java/de/jottyfan/minecraft/item/ModItemsRegistrator.java @@ -28,6 +28,17 @@ public abstract class ModItemsRegistrator { return registerItem(name, new Item.Properties(), Item::new); } + /** + * register a new item with the name and its item class + * + * @param name the name + * @param function the item class + * @return the registered item + */ + public static final Item registerItem(String name, Function function) { + return registerItem(name, new Item.Properties(), function); + } + /** * register a new item with the name, the properties and the Item class reference * diff --git a/src/main/java/de/jottyfan/minecraft/item/StubItem.java b/src/main/java/de/jottyfan/minecraft/item/StubItem.java new file mode 100644 index 0000000..1b55ddd --- /dev/null +++ b/src/main/java/de/jottyfan/minecraft/item/StubItem.java @@ -0,0 +1,49 @@ +package de.jottyfan.minecraft.item; + +import java.util.Map; + +import org.joml.Random; + +import net.minecraft.core.BlockPos; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; + +/** + * the stub item definition; specifies, what the stub can do + */ +public class StubItem extends Item { + private static final Map SLASH_MAP = Map.of(Blocks.HAY_BLOCK, Items.WHEAT, Blocks.DRIED_KELP_BLOCK, + Items.DRIED_KELP); + + public StubItem(Properties properties) { + super(properties); + } + + @Override + public InteractionResult useOn(UseOnContext context) { + Level level = context.getLevel(); + BlockPos pos = context.getClickedPos(); + Block block = level.getBlockState(pos).getBlock(); + if (SLASH_MAP.containsKey(block) && !level.isClientSide()) { + level.setBlockAndUpdate(pos, Blocks.AIR.defaultBlockState()); + level.playSound(null, pos, SoundEvents.HOE_TILL.value(), SoundSource.BLOCKS); + for (int i = 0; i < 9; i++) { + ItemStack stack = new ItemStack(SLASH_MAP.get(block)); + float scatter = new Random().nextFloat(); + ItemEntity entity = new ItemEntity(level, pos.getX(), pos.getY(), pos.getZ(), + stack, scatter, scatter, 0.2); + level.addFreshEntity(entity); + } + } + return InteractionResult.SUCCESS; + } +}