From f602648f8851e9a44008a76b7230a1c3b4be4b31 Mon Sep 17 00:00:00 2001 From: ChomeNS <95471003+chomens@users.noreply.github.com> Date: Sat, 18 Oct 2025 18:31:57 +0700 Subject: [PATCH] fix: deploy core block position getting changed by minecraft (prediction) --- .../chipmunkmod/mixin/ClientWorldAccessor.java | 12 ++++++++++++ .../chipmunkmod/modules/CommandCore.java | 16 ++++++++++++++++ src/main/resources/chipmunkmod.mixins.json | 1 + 3 files changed, 29 insertions(+) create mode 100644 src/main/java/land/chipmunk/chipmunkmod/mixin/ClientWorldAccessor.java diff --git a/src/main/java/land/chipmunk/chipmunkmod/mixin/ClientWorldAccessor.java b/src/main/java/land/chipmunk/chipmunkmod/mixin/ClientWorldAccessor.java new file mode 100644 index 0000000..c94b3a0 --- /dev/null +++ b/src/main/java/land/chipmunk/chipmunkmod/mixin/ClientWorldAccessor.java @@ -0,0 +1,12 @@ +package land.chipmunk.chipmunkmod.mixin; + +import net.minecraft.client.network.PendingUpdateManager; +import net.minecraft.client.world.ClientWorld; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(ClientWorld.class) +public interface ClientWorldAccessor { + @Accessor(value = "pendingUpdateManager") + PendingUpdateManager getPendingUpdateManager (); +} diff --git a/src/main/java/land/chipmunk/chipmunkmod/modules/CommandCore.java b/src/main/java/land/chipmunk/chipmunkmod/modules/CommandCore.java index ee36d16..f4f006c 100644 --- a/src/main/java/land/chipmunk/chipmunkmod/modules/CommandCore.java +++ b/src/main/java/land/chipmunk/chipmunkmod/modules/CommandCore.java @@ -4,6 +4,7 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; import land.chipmunk.chipmunkmod.ChipmunkMod; import land.chipmunk.chipmunkmod.listeners.Listener; import land.chipmunk.chipmunkmod.listeners.ListenerManager; +import land.chipmunk.chipmunkmod.mixin.ClientWorldAccessor; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.CommandBlock; @@ -14,6 +15,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.network.ClientPlayerInteractionManager; +import net.minecraft.client.network.PendingUpdateManager; import net.minecraft.client.world.ClientWorld; import net.minecraft.component.ComponentMap; import net.minecraft.component.DataComponentTypes; @@ -24,6 +26,7 @@ import net.minecraft.item.Items; import net.minecraft.nbt.NbtCompound; import net.minecraft.network.ClientConnection; import net.minecraft.network.packet.c2s.play.CreativeInventoryActionC2SPacket; +import net.minecraft.network.packet.c2s.play.PlayerInteractBlockC2SPacket; import net.minecraft.network.packet.c2s.play.UpdateCommandBlockC2SPacket; import net.minecraft.network.packet.c2s.play.UpdateSelectedSlotC2SPacket; import net.minecraft.registry.Registries; @@ -453,6 +456,19 @@ public class CommandCore implements Listener { } interactionManager.breakBlock(position); + try (final PendingUpdateManager pendingUpdateManager = ((ClientWorldAccessor) world).getPendingUpdateManager()) { + connection.send( + new PlayerInteractBlockC2SPacket( + Hand.MAIN_HAND, + BlockHitResult.createMissed( + new Vec3d(position), + Direction.UP, + position + ), + pendingUpdateManager.incrementSequence().getSequence() + ) + ); + } interactionManager.interactBlock( player, Hand.MAIN_HAND, diff --git a/src/main/resources/chipmunkmod.mixins.json b/src/main/resources/chipmunkmod.mixins.json index e2d09e8..e87c418 100644 --- a/src/main/resources/chipmunkmod.mixins.json +++ b/src/main/resources/chipmunkmod.mixins.json @@ -10,6 +10,7 @@ "ClientConnectionMixin", "ClientPlayerEntityMixin", "ClientPlayNetworkHandlerMixin", + "ClientWorldAccessor", "MinecraftClientAccessor", "StringHelperMixin", "ElderGuardianAppearanceParticleMixin",