diff --git a/src/main/java/fi/dy/masa/tweakeroo/mixin/MixinSendPacket.java b/src/main/java/fi/dy/masa/tweakeroo/mixin/MixinSendPacket.java new file mode 100644 index 000000000..ebb03d8df --- /dev/null +++ b/src/main/java/fi/dy/masa/tweakeroo/mixin/MixinSendPacket.java @@ -0,0 +1,26 @@ +package fi.dy.masa.tweakeroo.mixin; + +import fi.dy.masa.tweakeroo.util.PendingPackets; +import net.minecraft.client.network.ClientCommonNetworkHandler; +import net.minecraft.network.ClientConnection; +import net.minecraft.network.packet.Packet; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.List; + +@Mixin(ClientCommonNetworkHandler.class) +public class MixinSendPacket { + @Shadow + protected ClientConnection connection; + + @Inject(method = "sendPacket(Lnet/minecraft/network/packet/Packet;)V", at = @At("TAIL")) + private void afterSendPacket(Packet packet, CallbackInfo ci) { + List> pendingPackets = PendingPackets.getPackets(packet.getClass()); + if (pendingPackets == null) return; + pendingPackets.forEach(p -> this.connection.send(p)); + } +} \ No newline at end of file diff --git a/src/main/java/fi/dy/masa/tweakeroo/util/InventoryUtils.java b/src/main/java/fi/dy/masa/tweakeroo/util/InventoryUtils.java index ea5598a18..2b089df7d 100644 --- a/src/main/java/fi/dy/masa/tweakeroo/util/InventoryUtils.java +++ b/src/main/java/fi/dy/masa/tweakeroo/util/InventoryUtils.java @@ -29,6 +29,7 @@ import net.minecraft.item.SwordItem; import net.minecraft.item.ToolItem; import net.minecraft.nbt.NbtCompound; +import net.minecraft.network.packet.c2s.play.PlayerInteractItemC2SPacket; import net.minecraft.network.packet.c2s.play.UpdateSelectedSlotC2SPacket; import net.minecraft.registry.Registries; import net.minecraft.screen.PlayerScreenHandler; @@ -806,7 +807,8 @@ private static void swapItemToHand(PlayerEntity player, Hand hand, int slotNumbe if (isHotbarSlot(slotNumber)) { inventory.selectedSlot = slotNumber - 36; - mc.getNetworkHandler().sendPacket(new UpdateSelectedSlotC2SPacket(inventory.selectedSlot)); + PendingPackets.addPacket(new UpdateSelectedSlotC2SPacket(inventory.selectedSlot), PlayerInteractItemC2SPacket.class); +// mc.getNetworkHandler().sendPacket(new UpdateSelectedSlotC2SPacket(inventory.selectedSlot)); } else { diff --git a/src/main/java/fi/dy/masa/tweakeroo/util/PendingPackets.java b/src/main/java/fi/dy/masa/tweakeroo/util/PendingPackets.java new file mode 100644 index 000000000..ebbc13f0e --- /dev/null +++ b/src/main/java/fi/dy/masa/tweakeroo/util/PendingPackets.java @@ -0,0 +1,29 @@ +package fi.dy.masa.tweakeroo.util; + +import net.minecraft.network.packet.Packet; +import org.jetbrains.annotations.Nullable; + +import java.util.*; + +public class PendingPackets { + private static final Map, List>> packets = new HashMap<>(); + + public static void addPacket(Packet packet, Class after) { + if (packets.containsKey(after)) { + packets.get(after).add(packet); + } else { + LinkedList> p = new LinkedList<>(); + p.add(packet); + packets.put(after, p); + } + } + + @Nullable + public static List> getPackets(Class currentPacketClass) { + if (packets.containsKey(currentPacketClass)) { + return packets.remove(currentPacketClass); + } else { + return null; + } + } +} diff --git a/src/main/resources/mixins.tweakeroo.json b/src/main/resources/mixins.tweakeroo.json index bcb63a693..fbdc9020d 100644 --- a/src/main/resources/mixins.tweakeroo.json +++ b/src/main/resources/mixins.tweakeroo.json @@ -73,7 +73,8 @@ "MixinUpdateStructureBlockC2SPacket", "MixinWindow", "MixinWorld", - "MixinWorldRenderer" + "MixinWorldRenderer", + "MixinSendPacket" ], "mixinPriority": 990, "injectors": {