From 6b8cf2a56e1c75e8aff4ae56a05cd6492af1816a Mon Sep 17 00:00:00 2001 From: Jottyfan Date: Tue, 23 Dec 2025 10:22:15 +0100 Subject: [PATCH] added first item stub --- .../de/jottyfan/minecraft/QuicklyClient.java | 2 + .../jottyfan/minecraft/item/QuicklyItems.java | 36 ++++++++++++ .../java/de/jottyfan/minecraft/item/Stub.java | 52 ++++++++++++++++++ .../resources/assets/quickly/items/stub.json | 6 ++ .../resources/assets/quickly/lang/de_de.json | 3 + .../resources/assets/quickly/lang/en_us.json | 3 + .../assets/quickly/models/item/stub.json | 6 ++ .../assets/quickly/textures/item/stub.png | Bin 0 -> 5184 bytes .../data/quickly/recipe/campfire_torch.json | 9 +++ .../data/quickly/recipe/shapeless_stub.json | 10 ++++ 10 files changed, 127 insertions(+) create mode 100644 src/main/java/de/jottyfan/minecraft/item/QuicklyItems.java create mode 100644 src/main/java/de/jottyfan/minecraft/item/Stub.java create mode 100644 src/main/resources/assets/quickly/items/stub.json create mode 100644 src/main/resources/assets/quickly/lang/de_de.json create mode 100644 src/main/resources/assets/quickly/lang/en_us.json create mode 100644 src/main/resources/assets/quickly/models/item/stub.json create mode 100644 src/main/resources/assets/quickly/textures/item/stub.png create mode 100644 src/main/resources/data/quickly/recipe/campfire_torch.json create mode 100644 src/main/resources/data/quickly/recipe/shapeless_stub.json diff --git a/src/main/java/de/jottyfan/minecraft/QuicklyClient.java b/src/main/java/de/jottyfan/minecraft/QuicklyClient.java index 9326af5..40033bf 100644 --- a/src/main/java/de/jottyfan/minecraft/QuicklyClient.java +++ b/src/main/java/de/jottyfan/minecraft/QuicklyClient.java @@ -1,5 +1,6 @@ package de.jottyfan.minecraft; +import de.jottyfan.minecraft.item.QuicklyItems; import net.fabricmc.api.ClientModInitializer; /** @@ -11,5 +12,6 @@ public class QuicklyClient implements ClientModInitializer { @Override public void onInitializeClient() { + QuicklyItems.registerModItems(); } } diff --git a/src/main/java/de/jottyfan/minecraft/item/QuicklyItems.java b/src/main/java/de/jottyfan/minecraft/item/QuicklyItems.java new file mode 100644 index 0000000..c0bd224 --- /dev/null +++ b/src/main/java/de/jottyfan/minecraft/item/QuicklyItems.java @@ -0,0 +1,36 @@ +package de.jottyfan.minecraft.item; + +import java.util.function.Function; + +import de.jottyfan.minecraft.Quickly; +import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.Identifier; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.item.CreativeModeTabs; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Item.Properties; + +/** + * + * @author jotty + * + */ +public class QuicklyItems { + public static final Item MY_ITEM = registerItem("stub", new Item.Properties(), p -> new Stub(p)); + + private static final Item registerItem(String name, Item.Properties properties, Function function) { + Identifier identifier = Identifier.fromNamespaceAndPath(Quickly.MOD_ID, name); + ResourceKey rc = ResourceKey.create(Registries.ITEM, identifier); + Item i = function.apply(properties.setId(rc).modelId(identifier).useItemDescriptionPrefix()); + return Registry.register(BuiltInRegistries.ITEM, identifier, i); + } + + public static void registerModItems() { + ItemGroupEvents.modifyEntriesEvent(CreativeModeTabs.TOOLS_AND_UTILITIES).register(i -> { + i.accept(MY_ITEM); + }); + } +} diff --git a/src/main/java/de/jottyfan/minecraft/item/Stub.java b/src/main/java/de/jottyfan/minecraft/item/Stub.java new file mode 100644 index 0000000..904177f --- /dev/null +++ b/src/main/java/de/jottyfan/minecraft/item/Stub.java @@ -0,0 +1,52 @@ +package de.jottyfan.minecraft.item; + +import java.util.Map; +import java.util.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; + +public class Stub extends Item { + + public Stub(Properties properties) { + super(properties.stacksTo(64)); + } + + @Override + public InteractionResult useOn(UseOnContext context) { + Map SLASH_MAP = Map.of( + Blocks.HAY_BLOCK, Items.WHEAT, + Blocks.DRIED_KELP_BLOCK, Items.DRIED_KELP); +// , +// ModBlocks.BLOCK_KELPSTACK, Items.KELP); + + Level level = context.getLevel(); + BlockPos pos = context.getClickedPos(); + Block clickedBlock = level.getBlockState(pos).getBlock(); + if (SLASH_MAP.containsKey(clickedBlock)) { + if (!level.isClientSide()) { + level.setBlockAndUpdate(pos, Blocks.AIR.defaultBlockState()); + level.playSound(null, pos, SoundEvents.HOE_TILL, SoundSource.BLOCKS); + for (int i = 0; i < 9; i++) { + ItemStack stack = new ItemStack(SLASH_MAP.get(clickedBlock)); + float xScatter = new Random().nextFloat(); + float yScatter = new Random().nextFloat(); + ItemEntity entity = new ItemEntity(level, pos.getX(), pos.getY(), pos.getZ(), + stack, xScatter, yScatter, 0.2); + level.addFreshEntity(entity); + } + } + } + return InteractionResult.SUCCESS; + } +} diff --git a/src/main/resources/assets/quickly/items/stub.json b/src/main/resources/assets/quickly/items/stub.json new file mode 100644 index 0000000..353039b --- /dev/null +++ b/src/main/resources/assets/quickly/items/stub.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "quickly:item/stub" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickly/lang/de_de.json b/src/main/resources/assets/quickly/lang/de_de.json new file mode 100644 index 0000000..ed41b61 --- /dev/null +++ b/src/main/resources/assets/quickly/lang/de_de.json @@ -0,0 +1,3 @@ +{ + "item.quickly.stub": "Stummel" +} diff --git a/src/main/resources/assets/quickly/lang/en_us.json b/src/main/resources/assets/quickly/lang/en_us.json new file mode 100644 index 0000000..b32db46 --- /dev/null +++ b/src/main/resources/assets/quickly/lang/en_us.json @@ -0,0 +1,3 @@ +{ + "item.quickly.stub": "stub" +} diff --git a/src/main/resources/assets/quickly/models/item/stub.json b/src/main/resources/assets/quickly/models/item/stub.json new file mode 100644 index 0000000..342de04 --- /dev/null +++ b/src/main/resources/assets/quickly/models/item/stub.json @@ -0,0 +1,6 @@ +{ + "parent": "item/stick", + "textures": { + "layer0": "quickly:item/stub" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickly/textures/item/stub.png b/src/main/resources/assets/quickly/textures/item/stub.png new file mode 100644 index 0000000000000000000000000000000000000000..cd67920cb1109561a9dbe378c1bfae5c90361d8b GIT binary patch literal 5184 zcmeHKdsGu=79So0f*_(*6dz--D&i!Q$vY-iB>|#D5u*62IGIdffILV7Nf6KqqKJre zTdfG9MXN2jJv13KhW?RK#|h{SpxIwCC(`&-Ooa&P-6!`YFUmkAYKB?P=Ly*h5G{rJg6mEv~2A!HpB4LwN zPr{^yQbUmCM#s*TZwCeqliHTo&2*B9&KfMC4}H>ljn?Z#ZBz3dgDpbxdg1yZ))B%v zAINRJ#Cz-X6)6eD1>>STM(-PG*MBm7#tO|D&gc6iHv>=-rwCRy7k>CvdC zCR4G}iR)@Nw{eD-q2|dI=cG-kbM7Lc*o+Z^+>o%_7fzp(UjD_^$vXOA`^HRlL`?IQ zg=WPOPMVfiP&K}k-sO8+kCfiYSH1N@RIpwPjb#JE{n)|IwN>Vbz617 zwnJ#l4pNa@T-|VYlO(Hb3iUp`oR|8qaz<5-{AdxUNO?Q7t-+OfI*>7~`<@HYczBNL z(YW9zb)qb9-qd5e$^tfD;?I2)d~)YQi~NZ5hRjf_wlMqT4rH({yXftU`#}V2l^}Q7PotXu$R4 z_uk6hxn6t_e#hy8py1KS5~VlEXt6%XDp;M-B?#A_+T^QzZ(ne@&exPr`NT<>4Me3#J1$%B!W$o7gmK(?aX~$iu3JDyO_f`497LQnNX*6qHT?yyYI~VoVUn7@nNgY~#MSpbD zqMEpt;oZkCJ$~Tb(-`}{ZB^TM$5(&$>B{kWoKCm&S>Ikv7o{|RpFe35)!W=Pe4by= zzU!@d`;uE`|D)s0s*?ESvK!ww_4eefyt~movwhF8ZaYj&tFgVMY8NTGHS71n^d;9n zAO8EwHe28nmsol?qwNdl$KQ<0y|(2`2y)7zLP8>CAtBFN5j0?NMxi+T%$)IcvC#*j zKJrQRO+FV{a{qnWwog5!hkO$@E}alT|M!Ne-m)!uWw%!7e$BXfOq z4L_(RJlD3s6H$uzo%OYA3u?{lFMW)Cbx#HrX?O2ZL^a-tsk;(rX_C}`+@xPxuQxcptvWu?Bki`XIsyXociYWCxz`> z>UG5n=w2dLf|}KRcCoVJYTf)Xm7jb#V$sNYh5TUpou=>SGg~D@*tDge&fQ_&2%HkIX9i#C=sK zbY@XbQp1r^`-4X1o&0rdM)XAgnjxnXSL-@5if2R1@6E_?89(0n$JZNH_gKxbW}R&h z)zjnR)ojSfPfGbG1o?zhU@|U~M+ga>hK{RrN|J8T=)vTKAkiBZJx(N&CRjEfr|FVY)_Fz2mmys35PA3B&|_s5z`#F zLhx)CGib0w#gr(fEt5yWAvyyIv*~O)ibyR~Dn^^_35yIWwJ=H&+7AKV#I$&mNiSqD z%w{v)%%bZIaSWzFAYh;v1H%xYff%h?6K+AY#y~qnABKc95(Y|dqI6o=j)^OEDJC(E z2G-$c@oDsO`2f7u*v|ssgJHq-3??0AXf%w$7Dkga6@c^y^rsd^1^9tsM3F{aih&@d zsif8vI2b}j4A|>a3`vf3R0M-eA~itO2)r_1a2Y0(M-EunDTt#qdWRJt`vpxCrG8G< z3$fW(9O(=W1eg!tzM%aqcZV|2lFNk>9g$)WPbLx5?EZx+9YLvtjztJ zh-Va|ZbTD?k0U^;f!p;a5&xir-gsy`t--7<~+?S!j%m~u`a#h8(F?*=3vHUi936f)f~qqQ4dNY{%EES@WdeYu}Ho?th