From aeac09a2362bf6548654ab51a4b7561c55f9267b Mon Sep 17 00:00:00 2001 From: DAQEM Date: Thu, 25 Sep 2025 16:31:06 +0200 Subject: [PATCH 1/2] Added support for buckets and added #100 --- .../grieflogger/mixin/MixinBucketItem.java | 52 +++++++++++++++++++ .../model/history/BlockHistory.java | 37 +++++++++---- .../model/history/ItemHistory.java | 5 +- .../resources/grieflogger-common.mixins.json | 1 + 4 files changed, 83 insertions(+), 12 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..4937ca3 --- /dev/null +++ b/common/src/main/java/com/daqem/grieflogger/mixin/MixinBucketItem.java @@ -0,0 +1,52 @@ +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.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(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/phys/BlockHitResult;)Z", + 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(Player player, Level level, BlockPos blockPos, BlockHitResult blockHitResult, CallbackInfoReturnable cir) { + if (player 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 9ac0fed..775f4c1 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,16 @@ 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 net.minecraft.world.level.block.Blocks; import java.util.UUID; @@ -37,17 +42,27 @@ 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( - HoverEvent.Action.SHOW_ITEM, - new HoverEvent.ItemStackInfo( - BuiltInRegistries.BLOCK.getValue( - ResourceLocation.parse(material) - ).asItem() - .getDefaultInstance())))); + if (item != Items.AIR) { + return mutableComponent + .withStyle(mutableComponent + .getStyle() + .withHoverEvent( + new HoverEvent( + HoverEvent.Action.SHOW_ITEM, + new HoverEvent.ItemStackInfo( + item.getDefaultInstance() + )))); + } else { + return mutableComponent + .withStyle(mutableComponent + .getStyle() + .withHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, + 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 e84d293..90bed78 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,6 +44,9 @@ 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 @@ -51,7 +54,7 @@ public Component getMaterialComponent() { .withHoverEvent( new HoverEvent( HoverEvent.Action.SHOW_ITEM, - new HoverEvent.ItemStackInfo(itemStack.toItemStack())))); + new HoverEvent.ItemStackInfo(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" From 3d73d8a500923db35db932ba1871d55ccede6454 Mon Sep 17 00:00:00 2001 From: DAQEM Date: Thu, 25 Sep 2025 16:34:26 +0200 Subject: [PATCH 2/2] Changed version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index b25330f..20f9b6a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ minecraft_version=1.21.4 enabled_platforms=fabric,neoforge archives_base_name=grieflogger -mod_version=1.2.6-1.21.4 +mod_version=1.2.7-1.21.4 maven_group=com.daqem.grieflogger architectury_version=15.0.1