fix: deploy core block position getting changed by minecraft (prediction)

This commit is contained in:
Chayapak Supasakul 2025-10-18 18:31:57 +07:00
parent e8463ca018
commit f602648f88
Signed by: ChomeNS
SSH key fingerprint: SHA256:0YoxhdyXsgbc0nfeB2N6FYE60mxMU7DS4uCUMaw2mvA
3 changed files with 29 additions and 0 deletions

View file

@ -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 ();
}

View file

@ -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,

View file

@ -10,6 +10,7 @@
"ClientConnectionMixin",
"ClientPlayerEntityMixin",
"ClientPlayNetworkHandlerMixin",
"ClientWorldAccessor",
"MinecraftClientAccessor",
"StringHelperMixin",
"ElderGuardianAppearanceParticleMixin",