From d4654623f4538c67e40d22e67fa43135ce90aedf Mon Sep 17 00:00:00 2001 From: Jottyfan Date: Sat, 29 Nov 2025 16:02:50 +0100 Subject: [PATCH] added christmas tree as bush example --- .../de/jottyfan/minecraft/GtamfmdClient.java | 4 ++ .../minecraft/block/ChristmasTree.java | 39 ++++++++++++++++++ .../jottyfan/minecraft/block/ModBlocks.java | 15 ++++++- .../de/jottyfan/minecraft/item/StubItem.java | 14 +++++++ .../gtamfmd/blockstates/christmastree.json | 9 ++++ .../resources/assets/gtamfmd/lang/de_de.json | 3 +- .../resources/assets/gtamfmd/lang/en_us.json | 3 +- .../gtamfmd/models/block/christmastree0.json | 6 +++ .../gtamfmd/models/block/christmastree1.json | 6 +++ .../gtamfmd/models/block/christmastree2.json | 6 +++ .../gtamfmd/models/block/christmastree3.json | 6 +++ .../gtamfmd/textures/block/christmastree0.png | Bin 0 -> 295 bytes .../gtamfmd/textures/block/christmastree1.png | Bin 0 -> 542 bytes .../gtamfmd/textures/block/christmastree2.png | Bin 0 -> 543 bytes .../gtamfmd/textures/block/christmastree3.png | Bin 0 -> 580 bytes 15 files changed, 108 insertions(+), 3 deletions(-) create mode 100644 src/main/java/de/jottyfan/minecraft/block/ChristmasTree.java create mode 100644 src/main/resources/assets/gtamfmd/blockstates/christmastree.json create mode 100644 src/main/resources/assets/gtamfmd/models/block/christmastree0.json create mode 100644 src/main/resources/assets/gtamfmd/models/block/christmastree1.json create mode 100644 src/main/resources/assets/gtamfmd/models/block/christmastree2.json create mode 100644 src/main/resources/assets/gtamfmd/models/block/christmastree3.json create mode 100644 src/main/resources/assets/gtamfmd/textures/block/christmastree0.png create mode 100644 src/main/resources/assets/gtamfmd/textures/block/christmastree1.png create mode 100644 src/main/resources/assets/gtamfmd/textures/block/christmastree2.png create mode 100644 src/main/resources/assets/gtamfmd/textures/block/christmastree3.png diff --git a/src/main/java/de/jottyfan/minecraft/GtamfmdClient.java b/src/main/java/de/jottyfan/minecraft/GtamfmdClient.java index 39941dd..45aed9c 100644 --- a/src/main/java/de/jottyfan/minecraft/GtamfmdClient.java +++ b/src/main/java/de/jottyfan/minecraft/GtamfmdClient.java @@ -1,9 +1,13 @@ package de.jottyfan.minecraft; +import de.jottyfan.minecraft.block.ModBlocks; import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.client.rendering.v1.BlockRenderLayerMap; +import net.minecraft.client.render.BlockRenderLayer; public class GtamfmdClient implements ClientModInitializer { @Override public void onInitializeClient() { + BlockRenderLayerMap.putBlock(ModBlocks.CHRISTMASTREE, BlockRenderLayer.CUTOUT); } } diff --git a/src/main/java/de/jottyfan/minecraft/block/ChristmasTree.java b/src/main/java/de/jottyfan/minecraft/block/ChristmasTree.java new file mode 100644 index 0000000..cb77df3 --- /dev/null +++ b/src/main/java/de/jottyfan/minecraft/block/ChristmasTree.java @@ -0,0 +1,39 @@ +package de.jottyfan.minecraft.block; + +import de.jottyfan.minecraft.item.ModItems; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.SweetBerryBushBlock; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldView; +import net.minecraft.world.event.GameEvent; + +public class ChristmasTree extends SweetBerryBushBlock { + + public ChristmasTree(Settings settings) { + super(settings); + } + + @Override + protected ItemStack getPickStack(WorldView world, BlockPos pos, BlockState state, boolean includeData) { + return new ItemStack(ModItems.GINGERBREAD); + } + + @Override + protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) { + if (state.get(AGE) > 1) { + dropStack(world, pos, new ItemStack(ModItems.GINGERBREAD)); + BlockState blockState = state.with(AGE, 1); + world.setBlockState(pos, blockState, Block.NOTIFY_LISTENERS); + world.emitGameEvent(GameEvent.BLOCK_CHANGE, pos, GameEvent.Emitter.of(player, blockState)); + return ActionResult.SUCCESS; + } else { + return super.onUse(state, world, pos, player, hit); + } + } +} diff --git a/src/main/java/de/jottyfan/minecraft/block/ModBlocks.java b/src/main/java/de/jottyfan/minecraft/block/ModBlocks.java index 12f7e6b..0d9d640 100644 --- a/src/main/java/de/jottyfan/minecraft/block/ModBlocks.java +++ b/src/main/java/de/jottyfan/minecraft/block/ModBlocks.java @@ -1,8 +1,11 @@ package de.jottyfan.minecraft.block; +import java.util.function.Function; + import de.jottyfan.minecraft.Gtamfmd; import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; import net.minecraft.block.AbstractBlock; +import net.minecraft.block.AbstractBlock.Settings; import net.minecraft.block.Block; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; @@ -20,10 +23,20 @@ public class ModBlocks { AbstractBlock.Settings.create().strength(4f).requiresTool().sounds(BlockSoundGroup.AMETHYST_BLOCK)); public static final Block RUBY_ORE = registerBlock(Identifier.of(Gtamfmd.MOD_ID, "ruby_ore"), AbstractBlock.Settings.create().strength(4f).requiresTool()); + public static final Block CHRISTMASTREE = registerSpecialBlock(Identifier.of(Gtamfmd.MOD_ID, "christmastree"), + AbstractBlock.Settings.create().ticksRandomly().noCollision().luminance(state -> 15), + x -> new ChristmasTree(x)); + + // functional interface + private static Block registerSpecialBlock(Identifier identifier, Settings settings, Function function) { + Block block = function.apply(settings.registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier))); + registerBlockItem(identifier, block, new Item.Settings()); + return Registry.register(Registries.BLOCK, identifier, block); + } private static Block registerBlock(Identifier identifier, Block.Settings settings) { Block block = new Block(settings.registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier))); - registerBlockItem(identifier, block, new Item.Settings()); + registerBlockItem(identifier, block, new Item.Settings()); return Registry.register(Registries.BLOCK, identifier, block); } diff --git a/src/main/java/de/jottyfan/minecraft/item/StubItem.java b/src/main/java/de/jottyfan/minecraft/item/StubItem.java index 92267df..aa01861 100644 --- a/src/main/java/de/jottyfan/minecraft/item/StubItem.java +++ b/src/main/java/de/jottyfan/minecraft/item/StubItem.java @@ -4,9 +4,11 @@ import java.util.Map; import org.joml.Random; +import de.jottyfan.minecraft.block.ModBlocks; import net.minecraft.block.Block; import net.minecraft.block.Blocks; import net.minecraft.entity.ItemEntity; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUsageContext; @@ -14,6 +16,7 @@ import net.minecraft.item.Items; import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvents; import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -45,6 +48,17 @@ public class StubItem extends Item { world.spawnEntity(entity); } } + } else if (Blocks.DIRT.equals(clickedBlock) && world.getBlockState(pos.up()).isAir()) { + if (!world.isClient()) { + world.setBlockState(pos.up(), ModBlocks.CHRISTMASTREE.getDefaultState()); + world.playSound(null, pos, SoundEvents.ITEM_CROP_PLANT, + SoundCategory.BLOCKS); + Hand hand = context.getHand(); + PlayerEntity player = context.getPlayer(); + ItemStack stack = player.getStackInHand(hand); + stack.increment(-1); + player.setStackInHand(hand, stack); + } } return ActionResult.SUCCESS; } diff --git a/src/main/resources/assets/gtamfmd/blockstates/christmastree.json b/src/main/resources/assets/gtamfmd/blockstates/christmastree.json new file mode 100644 index 0000000..beaf139 --- /dev/null +++ b/src/main/resources/assets/gtamfmd/blockstates/christmastree.json @@ -0,0 +1,9 @@ +{ + "variants": { + "age=0": { "model": "gtamfmd:block/christmastree0" }, + "age=1": { "model": "gtamfmd:block/christmastree1" }, + "age=2": { "model": "gtamfmd:block/christmastree2" }, + "age=3": { "model": "gtamfmd:block/christmastree3" } + } +} + diff --git a/src/main/resources/assets/gtamfmd/lang/de_de.json b/src/main/resources/assets/gtamfmd/lang/de_de.json index acbf700..34a75aa 100644 --- a/src/main/resources/assets/gtamfmd/lang/de_de.json +++ b/src/main/resources/assets/gtamfmd/lang/de_de.json @@ -3,5 +3,6 @@ "item.gtamfmd.stub": "Stummel", "item.gtamfmd.ruby": "Rubin", "item.gtamfmd.ruby_block": "Rubinblock", - "item.gtamfmd.ruby_ore": "Rubinerz" + "item.gtamfmd.ruby_ore": "Rubinerz", + "item.gtamfmd.christmastree": "Weihnachtsbaum" } diff --git a/src/main/resources/assets/gtamfmd/lang/en_us.json b/src/main/resources/assets/gtamfmd/lang/en_us.json index 9ede246..fcc82a6 100644 --- a/src/main/resources/assets/gtamfmd/lang/en_us.json +++ b/src/main/resources/assets/gtamfmd/lang/en_us.json @@ -3,5 +3,6 @@ "item.gtamfmd.stub": "Stub", "item.gtamfmd.ruby": "Ruby", "item.gtamfmd.ruby_block": "Ruby block", - "item.gtamfmd.ruby_ore": "Ruby ore" + "item.gtamfmd.ruby_ore": "Ruby ore", + "item.gtamfmd.christmastree": "Christmas tree" } diff --git a/src/main/resources/assets/gtamfmd/models/block/christmastree0.json b/src/main/resources/assets/gtamfmd/models/block/christmastree0.json new file mode 100644 index 0000000..0d4a8b7 --- /dev/null +++ b/src/main/resources/assets/gtamfmd/models/block/christmastree0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "gtamfmd:block/christmastree0" + } +} diff --git a/src/main/resources/assets/gtamfmd/models/block/christmastree1.json b/src/main/resources/assets/gtamfmd/models/block/christmastree1.json new file mode 100644 index 0000000..b2fda5c --- /dev/null +++ b/src/main/resources/assets/gtamfmd/models/block/christmastree1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "gtamfmd:block/christmastree1" + } +} diff --git a/src/main/resources/assets/gtamfmd/models/block/christmastree2.json b/src/main/resources/assets/gtamfmd/models/block/christmastree2.json new file mode 100644 index 0000000..fd1e25b --- /dev/null +++ b/src/main/resources/assets/gtamfmd/models/block/christmastree2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "gtamfmd:block/christmastree2" + } +} diff --git a/src/main/resources/assets/gtamfmd/models/block/christmastree3.json b/src/main/resources/assets/gtamfmd/models/block/christmastree3.json new file mode 100644 index 0000000..39f4293 --- /dev/null +++ b/src/main/resources/assets/gtamfmd/models/block/christmastree3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "gtamfmd:block/christmastree3" + } +} diff --git a/src/main/resources/assets/gtamfmd/textures/block/christmastree0.png b/src/main/resources/assets/gtamfmd/textures/block/christmastree0.png new file mode 100644 index 0000000000000000000000000000000000000000..71c805e923ac953f36730f2aee4fc62683d13275 GIT binary patch literal 295 zcmV+?0oeYDP)kTpJ7oAsZ8=^uka;0(s2tq%WXHMJO?01dLL*@s~eK`+dUw)>y7^blz- z0J-LPo5TNq|CkvRR81Kk-Z{x&RlOgpAsB+k+noOY|Mws0T!@CcAlLs*>vl69ZE^f> z4HZN7E@3Z3*#1viaTu)bSiAFotIEA7dhi-h8S1)`=|78K>zeJPg+Wb_%m2U3EDRhB t|L^=@`Fls6jpfVJFMmRs*Y3eE2mr*!RT25Xv=jgU002ovPDHLkV1i=`h6?}y literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gtamfmd/textures/block/christmastree1.png b/src/main/resources/assets/gtamfmd/textures/block/christmastree1.png new file mode 100644 index 0000000000000000000000000000000000000000..7e6778788ce46ecc90b8eacb9191b8ea1ac4d3cc GIT binary patch literal 542 zcmV+(0^$9MP)AuA4Yo>gb%R<2$WgICznFkf92w|4ar-g}tr6719o^ptFg z87vxaDdQLmnon`E)&T*AVl7z?`UBkhB59?szNSa9&1mn6{QoW7u5;@RG-I%E@@Be@g?WCDB$e51P*0*VUGXhGw9TaLT1B?ccrcgA!Hu3${X6JRw83Ci6O*GVS zhV92T=n4>$Kn>F={b>Q(CpQ5SL<(Xh3JM>g`t#1j`b_9{3X1z2dq3QdtcjBu15&(D zgtF&Li(7NyrmHqC6?k3VY~OodJlF4}KNWeP#SkP9q1nc>0;3~)=;|(jZG08GzHgUv zDHbX_3idZj9$I8k9+cw&kYfOBMsSW?0;R(X%bWg#`oAht0NHPz(#xqhx;$p!I1Xrn z$JmD53=xT=(!c*AIJV?X0Td3_evPy_>I9!e7XcC{FOx4V#$o=BfubissTtPg?O?d) zOHEP}m+5s2#me(Rs}aa53zS8J#+sF45O-+5big2>n-ZZ)-X~=39^s@TApWsncUf60 za9C%>Pj_vS&yu7_+y!7C_{ao_jd$V9AzrU{tJ002ovPDHLkV1jR$@&5n- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gtamfmd/textures/block/christmastree3.png b/src/main/resources/assets/gtamfmd/textures/block/christmastree3.png new file mode 100644 index 0000000000000000000000000000000000000000..2a18bf497d0d95b84fc7c09156073a585e5f8a82 GIT binary patch literal 580 zcmV-K0=xZ*P)bSp%@YUG4jct_p*nm2dNhydJB{udKe** zD-0|~DC>T^YUGsQqI=A>_qP8|@v;{~rOLK1yh)0nZ4Shwg8Tz!UOQ zVxJdeQz2BqGr1Ts!b@j<@1iPN_-qf2bP?jcE(ij+REqAYGJVB>mB>Y63P~e}w)Pa1 z&Y}I;awHZ_{TqS%d|T?}?qgd#+8Zb!5MyALiS1Wj&Ag2oy`^jXA_xX;7#+>m-|3@F ziye5Lkjw(SXDdjOgs&zs6l#Kd{56a*{im;Nh1P&`HLf*pX4~u#J_oQ#g^}+B2?m7| z_TRcTzcjVh`GcY?K%G2H*YAG8xd8`6_Nz2;NdUa3F1Q^F@J%Gf^zqqXS%B+u$6UJK zzsp!|la&`YhsV1JP6|Yhz}B~Fc(>Yt z7H}?k$sR{Mg5S$x4^Wlx8$@QaYz5r)k`c596r%^Pbg|&