From c800d7b91b48f4888cca0040ccf5b74825868f05 Mon Sep 17 00:00:00 2001 From: Salad Date: Fri, 14 Aug 2026 14:01:32 +0200 Subject: [PATCH] fixed the funniest crash ever (dispenser bucket) --- .../ledger/mixin/BucketItemMixin.java | 44 +++++++++++++------ 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/github/quiltservertools/ledger/mixin/BucketItemMixin.java b/src/main/java/com/github/quiltservertools/ledger/mixin/BucketItemMixin.java index bc07a125..fa52c53a 100644 --- a/src/main/java/com/github/quiltservertools/ledger/mixin/BucketItemMixin.java +++ b/src/main/java/com/github/quiltservertools/ledger/mixin/BucketItemMixin.java @@ -7,7 +7,6 @@ import com.llamalad7.mixinextras.sugar.Local; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.SimpleWaterloggedBlock; -import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.item.BucketItem; @@ -16,6 +15,7 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -30,7 +30,7 @@ public abstract class BucketItemMixin { private Fluid content; @Inject(method = "emptyContents", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;destroyBlock(Lnet/minecraft/core/BlockPos;Z)Z")) - private void logFluidBreak(Player player, Level world, BlockPos pos, BlockHitResult blockHitResult, CallbackInfoReturnable cir) { + private void logFluidBreak(@Nullable Player player, Level world, BlockPos pos, @Nullable BlockHitResult blockHitResult, CallbackInfoReturnable cir) { var blockstate = world.getBlockState(pos); if (!blockstate.isAir()) { BlockBreakCallback.EVENT.invoker().breakBlock(world, pos, world.getBlockState(pos), world.getBlockEntity(pos), Sources.FLUID, player); @@ -38,8 +38,12 @@ private void logFluidBreak(Player player, Level world, BlockPos pos, BlockHitRes } @Inject(method = "emptyContents", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/BucketItem;playEmptySound(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/level/LevelAccessor;Lnet/minecraft/core/BlockPos;)V")) - private void logFluidPlace(Player player, Level world, BlockPos pos, BlockHitResult blockHitResult, CallbackInfoReturnable cir) { - BlockPlaceCallback.EVENT.invoker().place(world, pos, this.content.defaultFluidState().createLegacyBlock(), null, player); + private void logFluidPlace(@Nullable Player player, Level world, BlockPos pos, @Nullable BlockHitResult blockHitResult, CallbackInfoReturnable cir) { + if (player != null) { + BlockPlaceCallback.EVENT.invoker().place(world, pos, this.content.defaultFluidState().createLegacyBlock(), null, player); + } else { + BlockPlaceCallback.EVENT.invoker().place(world, pos, this.content.defaultFluidState().createLegacyBlock(), null, Sources.REDSTONE); + } } @Inject( @@ -50,16 +54,28 @@ private void logFluidPlace(Player player, Level world, BlockPos pos, BlockHitRes ordinal = 0 ) ) - private void logWaterlog(Player player, Level world, BlockPos pos, BlockHitResult blockHitResult, CallbackInfoReturnable cir, @Local BlockState blockState) { - BlockChangeCallback.EVENT.invoker().changeBlock( - world, - pos, - blockState, - world.getBlockState(pos), - world.getBlockEntity(pos), - world.getBlockEntity(pos), - player - ); + private void logWaterlog(@Nullable Player player, Level world, BlockPos pos, @Nullable BlockHitResult blockHitResult, CallbackInfoReturnable cir, @Local BlockState blockState) { + if (player != null) { + BlockChangeCallback.EVENT.invoker().changeBlock( + world, + pos, + blockState, + world.getBlockState(pos), + world.getBlockEntity(pos), + world.getBlockEntity(pos), + player + ); + } else { + BlockChangeCallback.EVENT.invoker().changeBlock( + world, + pos, + blockState, + world.getBlockState(pos), + world.getBlockEntity(pos), + world.getBlockEntity(pos), + Sources.REDSTONE + ); + } } @Inject(method = "use", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;awardStat(Lnet/minecraft/stats/Stat;)V", ordinal = 0))