From 46472276a666e6cfff34139240f82028bac06707 Mon Sep 17 00:00:00 2001 From: DAQEM Date: Thu, 25 Sep 2025 16:50:49 +0200 Subject: [PATCH] Added support for buckets and added #100 --- .../grieflogger/mixin/MixinBucketItem.java | 53 +++++++++++++++++++ .../model/history/BlockHistory.java | 31 +++++++---- .../model/history/ItemHistory.java | 5 +- .../resources/grieflogger-common.mixins.json | 1 + gradle.properties | 2 +- 5 files changed, 81 insertions(+), 11 deletions(-) create mode 100644 common/src/main/java/com/daqem/grieflogger/mixin/MixinBucketItem.java diff --git a/common/src/main/java/com/daqem/grieflogger/mixin/MixinBucketItem.java b/common/src/main/java/com/daqem/grieflogger/mixin/MixinBucketItem.java new file mode 100644 index 0000000..333fb69 --- /dev/null +++ b/common/src/main/java/com/daqem/grieflogger/mixin/MixinBucketItem.java @@ -0,0 +1,53 @@ +package com.daqem.grieflogger.mixin; + +import com.daqem.grieflogger.GriefLogger; +import com.daqem.grieflogger.event.block.BreakBlockEvent; +import com.daqem.grieflogger.event.block.PlaceBlockEvent; +import com.llamalad7.mixinextras.sugar.Local; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.BucketItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.BlockHitResult; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(BucketItem.class) +public class MixinBucketItem { + + @Inject( + method = "emptyContents", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/level/Level;setBlock(Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;I)Z", + shift = At.Shift.AFTER + ) + ) + private void onLiquidPlaced(LivingEntity livingEntity, Level level, BlockPos blockPos, BlockHitResult blockHitResult, CallbackInfoReturnable cir) { + if (livingEntity instanceof ServerPlayer serverPlayer) { + PlaceBlockEvent.placeBlock(level, blockPos, level.getBlockState(blockPos), serverPlayer); + } + } + + @Inject( + method = "use", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/entity/player/Player;awardStat(Lnet/minecraft/stats/Stat;)V", + ordinal = 0 + ) + ) + private void onBucketFilled(Level level, Player player, InteractionHand interactionHand, CallbackInfoReturnable cir, @Local(ordinal = 1) ItemStack itemStack2, @Local BlockHitResult blockHitResult) { + if (player instanceof ServerPlayer serverPlayer && itemStack2.getItem() instanceof BucketItem bucketItem) { + GriefLogger.LOGGER.info("Bucket filled event triggered"); + BreakBlockEvent.breakBlock(level, blockHitResult.getBlockPos(), bucketItem.arch$getFluid().defaultFluidState().createLegacyBlock(), serverPlayer, null); + } + } +} \ No newline at end of file diff --git a/common/src/main/java/com/daqem/grieflogger/model/history/BlockHistory.java b/common/src/main/java/com/daqem/grieflogger/model/history/BlockHistory.java index 1cd3454..fa81b9e 100644 --- a/common/src/main/java/com/daqem/grieflogger/model/history/BlockHistory.java +++ b/common/src/main/java/com/daqem/grieflogger/model/history/BlockHistory.java @@ -5,11 +5,15 @@ import com.daqem.grieflogger.model.Time; import com.daqem.grieflogger.model.User; import com.daqem.grieflogger.model.action.BlockAction; +import net.minecraft.core.Holder; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.HoverEvent; import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.Block; import java.util.UUID; @@ -37,15 +41,24 @@ public Component getComponent() { } public Component getMaterialComponent() { + Holder.Reference blockReference = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(material)).orElse(null); + Item item = blockReference != null ? blockReference.value().asItem() : Items.AIR; MutableComponent mutableComponent = GriefLogger.themedLiteral(this.material.replace("minecraft:", "")); - return mutableComponent - .withStyle(mutableComponent - .getStyle() - .withHoverEvent( - new HoverEvent.ShowItem( - BuiltInRegistries.BLOCK.getValue( - ResourceLocation.parse(material) - ).asItem() - .getDefaultInstance()))); + if (item != Items.AIR) { + return mutableComponent + .withStyle(mutableComponent + .getStyle() + .withHoverEvent( + new HoverEvent.ShowItem( + item.getDefaultInstance() + ))); + } else { + return mutableComponent + .withStyle(mutableComponent + .getStyle() + .withHoverEvent(new HoverEvent.ShowText( + Component.literal(this.material) + ))); + } } } diff --git a/common/src/main/java/com/daqem/grieflogger/model/history/ItemHistory.java b/common/src/main/java/com/daqem/grieflogger/model/history/ItemHistory.java index 8ac8104..eb25ff4 100644 --- a/common/src/main/java/com/daqem/grieflogger/model/history/ItemHistory.java +++ b/common/src/main/java/com/daqem/grieflogger/model/history/ItemHistory.java @@ -44,11 +44,14 @@ public Component getComponent() { @Override public Component getMaterialComponent() { + int cappedCount = Math.min(itemStack.getCount(), 64); // It appears that the HoverEven.ItemStackInfo does not display the count at all either way. + var cappedItemStack = itemStack.toItemStack().copyWithCount(cappedCount); + MutableComponent mutableComponent = GriefLogger.themedLiteral(this.itemStack.getItem().arch$registryName().toString().replace("minecraft:", "")); return mutableComponent .withStyle(mutableComponent .getStyle() - .withHoverEvent(new HoverEvent.ShowItem(itemStack.toItemStack()))); + .withHoverEvent(new HoverEvent.ShowItem(cappedItemStack))); } } diff --git a/common/src/main/resources/grieflogger-common.mixins.json b/common/src/main/resources/grieflogger-common.mixins.json index dd8c68c..61471d6 100644 --- a/common/src/main/resources/grieflogger-common.mixins.json +++ b/common/src/main/resources/grieflogger-common.mixins.json @@ -7,6 +7,7 @@ ], "mixins": [ "ItemMixin", + "MixinBucketItem", "MixinItemStack", "MixinServerPlayer", "ProjectileMixin" diff --git a/gradle.properties b/gradle.properties index 51daf10..bc8ccd2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ maven_group=com.daqem archives_base_name=grieflogger # Project -mod_version=1.2.6-1.21.6 +mod_version=1.2.7-1.21.6 mod_id=grieflogger mod_name=GriefLogger mod_description=A mod that logs all player interactions with blocks and entities and stores them in a database.