diff --git a/src/main/java/net/krituximon/stalinium/datagen/ModItemModelProvider.java b/src/main/java/net/krituximon/stalinium/datagen/ModItemModelProvider.java index e6c4ec8..dc3347b 100644 --- a/src/main/java/net/krituximon/stalinium/datagen/ModItemModelProvider.java +++ b/src/main/java/net/krituximon/stalinium/datagen/ModItemModelProvider.java @@ -20,5 +20,6 @@ public class ModItemModelProvider extends ItemModelProvider { handheldItem(ModItems.STALINIUM_AXE.get()); handheldItem(ModItems.STALINIUM_SHOVEL.get()); handheldItem(ModItems.STALINIUM_HOE.get()); + handheldItem(ModItems.STALINIUM_PICKAXE.get()); } } diff --git a/src/main/java/net/krituximon/stalinium/datagen/ModItemTagProvider.java b/src/main/java/net/krituximon/stalinium/datagen/ModItemTagProvider.java index e17c277..dc4b33d 100644 --- a/src/main/java/net/krituximon/stalinium/datagen/ModItemTagProvider.java +++ b/src/main/java/net/krituximon/stalinium/datagen/ModItemTagProvider.java @@ -34,6 +34,8 @@ public class ModItemTagProvider extends ItemTagsProvider { .add(ModItems.STALINIUM_SHOVEL.get()); this.tag(ItemTags.HOES) .add(ModItems.STALINIUM_HOE.get()); + this.tag(ItemTags.PICKAXES) + .add(ModItems.STALINIUM_PICKAXE.get()); this.tag(ItemTags.TRIMMABLE_ARMOR) .add(ModItems.STALINIUM_HELMET.get()) .add(ModItems.STALINIUM_CHESTPLATE.get()) diff --git a/src/main/java/net/krituximon/stalinium/item/StaliniumHoeItem.java b/src/main/java/net/krituximon/stalinium/item/StaliniumHoeItem.java index 072a3b4..c1d77e7 100644 --- a/src/main/java/net/krituximon/stalinium/item/StaliniumHoeItem.java +++ b/src/main/java/net/krituximon/stalinium/item/StaliniumHoeItem.java @@ -1,10 +1,24 @@ package net.krituximon.stalinium.item; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.util.RandomSource; +import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.HoeItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Tier; +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; +import net.minecraft.world.level.block.CropBlock; +import net.minecraft.world.level.block.state.BlockState; + +import java.util.List; public class StaliniumHoeItem extends HoeItem { public StaliniumHoeItem(Tier tier, Item.Properties properties) { @@ -12,8 +26,55 @@ public class StaliniumHoeItem extends HoeItem { } @Override - public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { - return true; + public InteractionResult useOn(UseOnContext ctx) { + Level level = ctx.getLevel(); + BlockPos pos = ctx.getClickedPos(); + BlockState state = level.getBlockState(pos); + Player player = ctx.getPlayer(); + + // Only run on server side and if it's raining at this position + if (!level.isClientSide && + level.isRaining() && + level.isRainingAt(pos) && + state.getBlock() instanceof CropBlock) { + + // Get the block's drops + List drops = Block.getDrops( + state, + (ServerLevel) level, + pos, + null, // no block entity + ctx.getPlayer(), + ctx.getItemInHand() + ); + + // Multiply each drop's count by 2 and spawn them + for (ItemStack drop : drops) { + ItemStack doubled = drop.copy(); + doubled.setCount(drop.getCount() * 2); + Block.popResource(level, pos, doubled); + } + + // Destroy the block + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 3); + + return InteractionResult.SUCCESS; + } + List comrades = level.getEntitiesOfClass( + Player.class, + player.getBoundingBox().inflate(8), + p -> p instanceof ServerPlayer && player.isAlliedTo(p) + ); + RandomSource rand = level.getRandom(); + if (rand.nextFloat() < 0.5f) { + for (ItemStack drop : Block.getDrops(state, (ServerLevel) level, pos, null)) { + for (Player buddy : comrades) { + buddy.addItem(drop.copy()); + } + } + } + + return super.useOn(ctx); // fallback to normal hoe behavior } @Override