diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinClientPlayerInteractionManager.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinClientPlayerInteractionManager.java index 621d5d7e..2dbb164e 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinClientPlayerInteractionManager.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinClientPlayerInteractionManager.java @@ -17,6 +17,7 @@ */ package de.florianmichael.viafabricplus.injection.mixin.fixes.minecraft; +import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import com.viaversion.viaversion.api.type.Type; @@ -99,35 +100,36 @@ public abstract class MixinClientPlayerInteractionManager { @Redirect(method = "clickSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayNetworkHandler;sendPacket(Lnet/minecraft/network/packet/Packet;)V")) private void modifySlotClickPacket(ClientPlayNetworkHandler instance, Packet packet) { - try { - if (ProtocolHack.getTargetVersion().isOlderThanOrEqualTo(ProtocolVersion.v1_16_4) && packet instanceof ClickSlotC2SPacket clickSlot) { - ItemStack slotItemBeforeModification; + if (ProtocolHack.getTargetVersion().isOlderThanOrEqualTo(ProtocolVersion.v1_16_4) && packet instanceof ClickSlotC2SPacket clickSlot) { + ItemStack slotItemBeforeModification; - if (this.viafabricplus_shouldEmpty(clickSlot.getActionType(), clickSlot.getSlot())) - slotItemBeforeModification = ItemStack.EMPTY; - else if (clickSlot.getSlot() < 0 || clickSlot.getSlot() >= viafabricplus_oldItems.size()) - slotItemBeforeModification = viafabricplus_oldCursorStack; - else - slotItemBeforeModification = viafabricplus_oldItems.get(clickSlot.getSlot()); + if (this.viafabricplus_shouldEmpty(clickSlot.getActionType(), clickSlot.getSlot())) + slotItemBeforeModification = ItemStack.EMPTY; + else if (clickSlot.getSlot() < 0 || clickSlot.getSlot() >= viafabricplus_oldItems.size()) + slotItemBeforeModification = viafabricplus_oldCursorStack; + else + slotItemBeforeModification = viafabricplus_oldItems.get(clickSlot.getSlot()); - final PacketWrapper clickSlotPacket = PacketWrapper.create(ServerboundPackets1_16_2.CLICK_WINDOW, networkHandler.getConnection().channel.attr(ProtocolHack.LOCAL_VIA_CONNECTION).get()); + final UserConnection viaConnection = networkHandler.getConnection().channel.attr(ProtocolHack.LOCAL_VIA_CONNECTION).get(); + viaConnection.getChannel().eventLoop().submit(() -> { + final PacketWrapper clickSlotPacket = PacketWrapper.create(ServerboundPackets1_16_2.CLICK_WINDOW, viaConnection); clickSlotPacket.write(Type.UNSIGNED_BYTE, (short) clickSlot.getSyncId()); clickSlotPacket.write(Type.SHORT, (short) clickSlot.getSlot()); clickSlotPacket.write(Type.BYTE, (byte) clickSlot.getButton()); - assert client.player != null; clickSlotPacket.write(Type.SHORT, ((IScreenHandler) client.player.currentScreenHandler).viafabricplus_getAndIncrementLastActionId()); clickSlotPacket.write(Type.VAR_INT, clickSlot.getActionType().ordinal()); clickSlotPacket.write(Type.FLAT_VAR_INT_ITEM, ItemTranslator.minecraftToViaVersion(clickSlotPacket.user(), slotItemBeforeModification, ProtocolVersion.v1_16.getVersion())); - clickSlotPacket.sendToServer(Protocol1_17To1_16_4.class); + try { + clickSlotPacket.sendToServer(Protocol1_17To1_16_4.class); + } catch (Exception ignored) {} + }); - viafabricplus_oldCursorStack = null; - viafabricplus_oldItems = null; + viafabricplus_oldCursorStack = null; + viafabricplus_oldItems = null; - return; - } - } catch (Exception ignored) { + return; } instance.sendPacket(packet); diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinMinecraftClient.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinMinecraftClient.java index 5470130f..3fd4f149 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinMinecraftClient.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinMinecraftClient.java @@ -76,9 +76,6 @@ public abstract class MixinMinecraftClient implements IMinecraftClient { return instance.isAccepted(); } - /** - * This code removes the cooldown if - */ @Redirect(method = "tick", at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;attackCooldown:I", ordinal = 1)) public int unwrapOperation(MinecraftClient instance) { if (ProtocolHack.getTargetVersion().isOlderThanOrEqualTo(ProtocolVersion.v1_8)) { @@ -117,15 +114,19 @@ public abstract class MixinMinecraftClient implements IMinecraftClient { } @Inject(method = "handleInputEvents", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerInteractionManager;hasRidingInventory()Z")) - private void onInventoryKeyPressed(CallbackInfo ci) throws Exception { + private void onInventoryKeyPressed(CallbackInfo ci) { if (getNetworkHandler() != null && DebugSettings.INSTANCE.sendOpenInventoryPacket.getValue()) { final UserConnection viaConnection = MinecraftClient.getInstance().getNetworkHandler().getConnection().channel.attr(ProtocolHack.LOCAL_VIA_CONNECTION).get(); if (viaConnection != null && viaConnection.getProtocolInfo().getPipeline().contains(Protocol1_12To1_11_1.class)) { - final PacketWrapper clientStatus = PacketWrapper.create(ServerboundPackets1_9_3.CLIENT_STATUS, viaConnection); - clientStatus.write(Type.VAR_INT, 2); // Open Inventory Achievement + viaConnection.getChannel().eventLoop().submit(() -> { + final PacketWrapper clientStatus = PacketWrapper.create(ServerboundPackets1_9_3.CLIENT_STATUS, viaConnection); + clientStatus.write(Type.VAR_INT, 2); // Open Inventory Achievement - clientStatus.sendToServer(Protocol1_12To1_11_1.class); + try { + clientStatus.sendToServer(Protocol1_12To1_11_1.class); + } catch (Exception ignored) {} + }); } } }