From b6101ac540340245ff3a6c05f5613d0fd2f7f4b5 Mon Sep 17 00:00:00 2001 From: iceBear67 Date: Wed, 29 Jul 2026 22:55:20 +0800 Subject: [PATCH] also fix fertilizer --- .../java/io/ib67/sfcraft/mixin/common/EntityMixin.java | 4 +++- .../java/io/ib67/sfcraft/module/FartFertilizerModule.java | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/ib67/sfcraft/mixin/common/EntityMixin.java b/src/main/java/io/ib67/sfcraft/mixin/common/EntityMixin.java index 7ed3392..4d778c6 100644 --- a/src/main/java/io/ib67/sfcraft/mixin/common/EntityMixin.java +++ b/src/main/java/io/ib67/sfcraft/mixin/common/EntityMixin.java @@ -21,7 +21,9 @@ import net.minecraft.world.level.portal.TeleportTransition; public abstract class EntityMixin { @Inject(method = "setShiftKeyDown", at = @At("HEAD")) public void onSneaking(boolean sneaking, CallbackInfo ci) { - if ($this() instanceof Player pe) { + // the client resends its whole input state whenever any key changes, so this is + // called repeatedly while the player merely walks around sneaking. report edges only. + if ($this() instanceof Player pe && sneaking != pe.isShiftKeyDown()) { SFCallbacks.PLAYER_SNEAKING.invoker().onSneaking(pe, sneaking); } } diff --git a/src/main/java/io/ib67/sfcraft/module/FartFertilizerModule.java b/src/main/java/io/ib67/sfcraft/module/FartFertilizerModule.java index cfd054b..5a1fc22 100644 --- a/src/main/java/io/ib67/sfcraft/module/FartFertilizerModule.java +++ b/src/main/java/io/ib67/sfcraft/module/FartFertilizerModule.java @@ -6,9 +6,12 @@ import io.ib67.sfcraft.util.Helper; import it.unimi.dsi.fastutil.objects.Object2LongMap; import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap; import net.fabricmc.fabric.api.networking.v1.PlayerLookup; +import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerGamePacketListenerImpl; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.world.entity.player.Player; @@ -20,6 +23,11 @@ public class FartFertilizerModule extends ServerModule { @Override public void onInitialize() { SFCallbacks.PLAYER_SNEAKING.register(this::onSneaking); + ServerPlayConnectionEvents.DISCONNECT.register(this::onDisconnect); + } + + private void onDisconnect(ServerGamePacketListenerImpl serverPlayNetworkHandler, MinecraftServer minecraftServer) { + lastSneaked.removeLong(serverPlayNetworkHandler.getPlayer()); } private void onSneaking(Player player, boolean sneak) {