From d67ee42b27b4fd56b2d4ac608998c07f66ac7752 Mon Sep 17 00:00:00 2001 From: FlorianMichael <60033407+FlorianMichael@users.noreply.github.com> Date: Fri, 24 Feb 2023 22:46:48 +0100 Subject: [PATCH] added more API for Fixes --- gradle.properties | 2 +- .../definition/v1_12_2/SyncInputExecutor.java | 25 ++++++++++ .../definition/v1_8_x/IdlePacketExecutor.java | 13 ++++++ .../v1_8_x/InventoryPacketSender.java | 24 ++++++++++ .../injection/access/IMinecraftClient.java | 7 --- .../mixin/fixes/MixinMinecraftClient.java | 46 ++----------------- .../fixes/entity/MixinClientPlayerEntity.java | 3 ++ .../mixin/fixes/input/MixinKeyboard.java | 6 +-- .../mixin/fixes/input/MixinMouse.java | 6 +-- 9 files changed, 75 insertions(+), 57 deletions(-) create mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/v1_12_2/SyncInputExecutor.java create mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/v1_8_x/IdlePacketExecutor.java create mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/v1_8_x/InventoryPacketSender.java delete mode 100644 src/main/java/de/florianmichael/viafabricplus/injection/access/IMinecraftClient.java diff --git a/gradle.properties b/gradle.properties index 3c1ecd05..9eaa4583 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ minecraft_version=1.19.3 yarn_mappings=1.19.3+build.5 loader_version=0.14.14 -mod_version=1.2.5 +mod_version=1.3.5 maven_group=de.florianmichael archives_base_name=viafabricplus diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/v1_12_2/SyncInputExecutor.java b/src/main/java/de/florianmichael/viafabricplus/definition/v1_12_2/SyncInputExecutor.java new file mode 100644 index 00000000..7a2017b3 --- /dev/null +++ b/src/main/java/de/florianmichael/viafabricplus/definition/v1_12_2/SyncInputExecutor.java @@ -0,0 +1,25 @@ +package de.florianmichael.viafabricplus.definition.v1_12_2; + +import java.util.concurrent.ConcurrentLinkedDeque; + +public class SyncInputExecutor { + private final static ConcurrentLinkedDeque keyboardInteractions = new ConcurrentLinkedDeque<>(); + private final static ConcurrentLinkedDeque mouseInteractions = new ConcurrentLinkedDeque<>(); + + public static void callback() { + while (!mouseInteractions.isEmpty()) { + mouseInteractions.poll().run(); + } + while (!keyboardInteractions.isEmpty()) { + keyboardInteractions.poll().run(); + } + } + + public static void trackKeyboardInteraction(Runnable interaction) { + keyboardInteractions.add(interaction); + } + + public static void trackMouseInteraction(Runnable interaction) { + mouseInteractions.add(interaction); + } +} diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/v1_8_x/IdlePacketExecutor.java b/src/main/java/de/florianmichael/viafabricplus/definition/v1_8_x/IdlePacketExecutor.java new file mode 100644 index 00000000..b7d42404 --- /dev/null +++ b/src/main/java/de/florianmichael/viafabricplus/definition/v1_8_x/IdlePacketExecutor.java @@ -0,0 +1,13 @@ +package de.florianmichael.viafabricplus.definition.v1_8_x; + +public class IdlePacketExecutor { + private static Runnable skipIdlePacketExecute; + + public static void skipIdlePacket() { + skipIdlePacketExecute.run(); + } + + public static void registerIdlePacketSkipExecute(final Runnable runnable) { + skipIdlePacketExecute = runnable; + } +} diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/v1_8_x/InventoryPacketSender.java b/src/main/java/de/florianmichael/viafabricplus/definition/v1_8_x/InventoryPacketSender.java new file mode 100644 index 00000000..ae4193b3 --- /dev/null +++ b/src/main/java/de/florianmichael/viafabricplus/definition/v1_8_x/InventoryPacketSender.java @@ -0,0 +1,24 @@ +package de.florianmichael.viafabricplus.definition.v1_8_x; + +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; +import com.viaversion.viaversion.protocols.protocol1_12to1_11_1.Protocol1_12To1_11_1; +import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ServerboundPackets1_9_3; +import de.florianmichael.viafabricplus.ViaFabricPlus; +import de.florianmichael.vialoadingbase.ViaLoadingBase; +import net.minecraft.client.network.ClientPlayNetworkHandler; + +public class InventoryPacketSender { + public static void sendOpenInventoryAchievement(final ClientPlayNetworkHandler clientPlayNetworkHandler) throws Exception { + final UserConnection viaConnection = clientPlayNetworkHandler.getConnection().channel.attr(ViaFabricPlus.LOCAL_VIA_CONNECTION).get(); + + if (viaConnection != null && ViaLoadingBase.getTargetVersion().isOlderThanOrEqualTo(ProtocolVersion.v1_11_1)) { + 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); + } + } +} diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/access/IMinecraftClient.java b/src/main/java/de/florianmichael/viafabricplus/injection/access/IMinecraftClient.java deleted file mode 100644 index a4ca4a51..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/injection/access/IMinecraftClient.java +++ /dev/null @@ -1,7 +0,0 @@ -package de.florianmichael.viafabricplus.injection.access; - -public interface IMinecraftClient { - - void viafabricplus_trackKeyboardInteraction(final Runnable interaction); - void viafabricplus_trackMouseInteraction(final Runnable interaction); -} diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/MixinMinecraftClient.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/MixinMinecraftClient.java index 5264de87..b9f9a177 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/MixinMinecraftClient.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/MixinMinecraftClient.java @@ -1,12 +1,7 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes; -import com.viaversion.viaversion.api.connection.UserConnection; -import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; -import com.viaversion.viaversion.api.type.Type; -import com.viaversion.viaversion.protocols.protocol1_12to1_11_1.Protocol1_12To1_11_1; -import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ServerboundPackets1_9_3; -import de.florianmichael.viafabricplus.ViaFabricPlus; -import de.florianmichael.viafabricplus.injection.access.IMinecraftClient; +import de.florianmichael.viafabricplus.definition.v1_12_2.SyncInputExecutor; +import de.florianmichael.viafabricplus.definition.v1_8_x.InventoryPacketSender; import de.florianmichael.viafabricplus.value.ValueHolder; import de.florianmichael.vialoadingbase.ViaLoadingBase; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; @@ -20,17 +15,14 @@ import net.minecraft.util.Hand; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.Slice; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import java.util.concurrent.ConcurrentLinkedDeque; - @Mixin(MinecraftClient.class) -public abstract class MixinMinecraftClient implements IMinecraftClient { +public abstract class MixinMinecraftClient { @Shadow @Nullable @@ -80,45 +72,17 @@ public abstract class MixinMinecraftClient implements IMinecraftClient { } } - @Unique - private final ConcurrentLinkedDeque protocolhack_keyboardInteractions = new ConcurrentLinkedDeque<>(); - - @Unique - private final ConcurrentLinkedDeque protocolhack_mouseInteractions = new ConcurrentLinkedDeque<>(); - @SuppressWarnings("ConstantConditions") @Inject(method = "tick", at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;currentScreen:Lnet/minecraft/client/gui/screen/Screen;", ordinal = 4, shift = At.Shift.BEFORE)) public void injectTick(CallbackInfo ci) { if (!ValueHolder.executeInputsInSync.getValue()) return; - while (!protocolhack_mouseInteractions.isEmpty()) { - protocolhack_mouseInteractions.poll().run(); - } - while (!protocolhack_keyboardInteractions.isEmpty()) { - protocolhack_keyboardInteractions.poll().run(); - } + SyncInputExecutor.callback(); } @Inject(method = "handleInputEvents", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerInteractionManager;hasRidingInventory()Z")) private void onInventoryKeyPressed(CallbackInfo ci) throws Exception { - final UserConnection viaConnection = getNetworkHandler().getConnection().channel.attr(ViaFabricPlus.LOCAL_VIA_CONNECTION).get(); - - if (viaConnection != null && ViaLoadingBase.getTargetVersion().isOlderThanOrEqualTo(ProtocolVersion.v1_11_1)) { - 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); - } - } - - @Override - public void viafabricplus_trackKeyboardInteraction(Runnable interaction) { - this.protocolhack_keyboardInteractions.add(interaction); - } - - @Override - public void viafabricplus_trackMouseInteraction(Runnable interaction) { - this.protocolhack_mouseInteractions.add(interaction); + if (getNetworkHandler() != null) InventoryPacketSender.sendOpenInventoryAchievement(getNetworkHandler()); } } diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/entity/MixinClientPlayerEntity.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/entity/MixinClientPlayerEntity.java index 12e25cdf..163974a1 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/entity/MixinClientPlayerEntity.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/entity/MixinClientPlayerEntity.java @@ -2,6 +2,7 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes.entity; import com.mojang.authlib.GameProfile; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; +import de.florianmichael.viafabricplus.definition.v1_8_x.IdlePacketExecutor; import de.florianmichael.viafabricplus.injection.access.IClientPlayerEntity; import de.florianmichael.viafabricplus.value.ValueHolder; import de.florianmichael.vialoadingbase.ViaLoadingBase; @@ -95,6 +96,8 @@ public abstract class MixinClientPlayerEntity extends AbstractClientPlayerEntity this.networkHandler.sendPacket(new PlayerMoveC2SPacket.LookAndOnGround(this.getYaw(), this.getPitch(), this.onGround)); } else if (this.lastOnGround != this.onGround || ValueHolder.sendIdlePacket.getValue()) { this.networkHandler.sendPacket(new PlayerMoveC2SPacket.OnGroundOnly(this.onGround)); + } else { + IdlePacketExecutor.skipIdlePacket(); } if (ViaLoadingBase.getTargetVersion().isOlderThanOrEqualTo(ProtocolVersion.v1_8)) { ++this.ticksSinceLastPositionPacketSent; diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/input/MixinKeyboard.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/input/MixinKeyboard.java index 4039fc74..9368808b 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/input/MixinKeyboard.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/input/MixinKeyboard.java @@ -1,7 +1,7 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes.input; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import de.florianmichael.viafabricplus.injection.access.IMinecraftClient; +import de.florianmichael.viafabricplus.definition.v1_12_2.SyncInputExecutor; import de.florianmichael.viafabricplus.value.ValueHolder; import de.florianmichael.vialoadingbase.ViaLoadingBase; import net.minecraft.client.Keyboard; @@ -16,12 +16,10 @@ import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(Keyboard.class) public class MixinKeyboard { - @Shadow @Final private MinecraftClient client; - @Redirect(method = "*", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;execute(Ljava/lang/Runnable;)V")) public void redirectSync(MinecraftClient instance, Runnable runnable) { if (ValueHolder.executeInputsInSync.getValue()) { - ((IMinecraftClient) client).viafabricplus_trackKeyboardInteraction(runnable); + SyncInputExecutor.trackKeyboardInteraction(runnable); return; } diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/input/MixinMouse.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/input/MixinMouse.java index e9eadb69..4f1f2823 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/input/MixinMouse.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/input/MixinMouse.java @@ -1,6 +1,6 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes.input; -import de.florianmichael.viafabricplus.injection.access.IMinecraftClient; +import de.florianmichael.viafabricplus.definition.v1_12_2.SyncInputExecutor; import de.florianmichael.viafabricplus.value.ValueHolder; import net.minecraft.client.MinecraftClient; import net.minecraft.client.Mouse; @@ -13,12 +13,10 @@ import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(value = Mouse.class, priority = 1001) public class MixinMouse { - @Shadow @Final private MinecraftClient client; - @Redirect(method = { "method_29615", "method_22685", "method_22684" }, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;execute(Ljava/lang/Runnable;)V")) public void redirectSync(MinecraftClient instance, Runnable runnable) { if (ValueHolder.executeInputsInSync.getValue()) { - ((IMinecraftClient) client).viafabricplus_trackMouseInteraction(runnable); + SyncInputExecutor.trackMouseInteraction(runnable); return; }