mirror of
https://github.com/ViaVersion/ViaFabricPlus.git
synced 2024-10-08 06:07:26 +02:00
sync outgoing packets
This commit is contained in:
parent
597d57b50f
commit
929ab2f588
@ -17,6 +17,7 @@
|
|||||||
*/
|
*/
|
||||||
package de.florianmichael.viafabricplus.injection.mixin.fixes.minecraft;
|
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.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
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"))
|
@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) {
|
private void modifySlotClickPacket(ClientPlayNetworkHandler instance, Packet<?> packet) {
|
||||||
try {
|
if (ProtocolHack.getTargetVersion().isOlderThanOrEqualTo(ProtocolVersion.v1_16_4) && packet instanceof ClickSlotC2SPacket clickSlot) {
|
||||||
if (ProtocolHack.getTargetVersion().isOlderThanOrEqualTo(ProtocolVersion.v1_16_4) && packet instanceof ClickSlotC2SPacket clickSlot) {
|
ItemStack slotItemBeforeModification;
|
||||||
ItemStack slotItemBeforeModification;
|
|
||||||
|
|
||||||
if (this.viafabricplus_shouldEmpty(clickSlot.getActionType(), clickSlot.getSlot()))
|
if (this.viafabricplus_shouldEmpty(clickSlot.getActionType(), clickSlot.getSlot()))
|
||||||
slotItemBeforeModification = ItemStack.EMPTY;
|
slotItemBeforeModification = ItemStack.EMPTY;
|
||||||
else if (clickSlot.getSlot() < 0 || clickSlot.getSlot() >= viafabricplus_oldItems.size())
|
else if (clickSlot.getSlot() < 0 || clickSlot.getSlot() >= viafabricplus_oldItems.size())
|
||||||
slotItemBeforeModification = viafabricplus_oldCursorStack;
|
slotItemBeforeModification = viafabricplus_oldCursorStack;
|
||||||
else
|
else
|
||||||
slotItemBeforeModification = viafabricplus_oldItems.get(clickSlot.getSlot());
|
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.UNSIGNED_BYTE, (short) clickSlot.getSyncId());
|
||||||
clickSlotPacket.write(Type.SHORT, (short) clickSlot.getSlot());
|
clickSlotPacket.write(Type.SHORT, (short) clickSlot.getSlot());
|
||||||
clickSlotPacket.write(Type.BYTE, (byte) clickSlot.getButton());
|
clickSlotPacket.write(Type.BYTE, (byte) clickSlot.getButton());
|
||||||
assert client.player != null;
|
|
||||||
clickSlotPacket.write(Type.SHORT, ((IScreenHandler) client.player.currentScreenHandler).viafabricplus_getAndIncrementLastActionId());
|
clickSlotPacket.write(Type.SHORT, ((IScreenHandler) client.player.currentScreenHandler).viafabricplus_getAndIncrementLastActionId());
|
||||||
clickSlotPacket.write(Type.VAR_INT, clickSlot.getActionType().ordinal());
|
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.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_oldCursorStack = null;
|
||||||
viafabricplus_oldItems = null;
|
viafabricplus_oldItems = null;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
instance.sendPacket(packet);
|
instance.sendPacket(packet);
|
||||||
|
@ -76,9 +76,6 @@ public abstract class MixinMinecraftClient implements IMinecraftClient {
|
|||||||
return instance.isAccepted();
|
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))
|
@Redirect(method = "tick", at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;attackCooldown:I", ordinal = 1))
|
||||||
public int unwrapOperation(MinecraftClient instance) {
|
public int unwrapOperation(MinecraftClient instance) {
|
||||||
if (ProtocolHack.getTargetVersion().isOlderThanOrEqualTo(ProtocolVersion.v1_8)) {
|
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"))
|
@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()) {
|
if (getNetworkHandler() != null && DebugSettings.INSTANCE.sendOpenInventoryPacket.getValue()) {
|
||||||
final UserConnection viaConnection = MinecraftClient.getInstance().getNetworkHandler().getConnection().channel.attr(ProtocolHack.LOCAL_VIA_CONNECTION).get();
|
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)) {
|
if (viaConnection != null && viaConnection.getProtocolInfo().getPipeline().contains(Protocol1_12To1_11_1.class)) {
|
||||||
final PacketWrapper clientStatus = PacketWrapper.create(ServerboundPackets1_9_3.CLIENT_STATUS, viaConnection);
|
viaConnection.getChannel().eventLoop().submit(() -> {
|
||||||
clientStatus.write(Type.VAR_INT, 2); // Open Inventory Achievement
|
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) {}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user