diff --git a/README.md b/README.md index 4488625..32d55f1 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,6 @@ See Incoming and Outgoing Packets in Minecraft -![Image](https://github.com/user-attachments/assets/7fd39c6c-6bda-4eff-bcf7-0bedaa54b96c) \ No newline at end of file +![Image](https://github.com/user-attachments/assets/7fd39c6c-6bda-4eff-bcf7-0bedaa54b96c) + +### Keybindings + +- Stop/Start listening for Packets: (Default: K) \ No newline at end of file diff --git a/src/main/java/com/pumpkinmc/mixin/ClientConnectionMixin.java b/src/main/java/com/pumpkinmc/mixin/ClientConnectionMixin.java index af741ac..0f05149 100644 --- a/src/main/java/com/pumpkinmc/mixin/ClientConnectionMixin.java +++ b/src/main/java/com/pumpkinmc/mixin/ClientConnectionMixin.java @@ -1,5 +1,6 @@ package com.pumpkinmc.mixin; +import com.pumpkinmc.Packeto; import com.pumpkinmc.Screen; import net.minecraft.network.ClientConnection; import net.minecraft.network.PacketCallbacks; @@ -19,13 +20,17 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; public class ClientConnectionMixin { @Inject(at = @At("HEAD"), method = "handlePacket") private static void handlePacket(Packet packet, PacketListener listener, CallbackInfo ci) { - Screen.INSTANCE.getReceived_packets().add(packet); + if (!Packeto.INSTANCE.getStopped()) { + Screen.INSTANCE.getReceived_packets().add(packet); + } } @Inject(at = @At("HEAD"), method = "send(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/PacketCallbacks;Z)V") private void send(Packet packet, @Nullable PacketCallbacks callbacks, boolean flush, CallbackInfo ci) { - if (packet instanceof ClientTickEndC2SPacket || packet instanceof PlayerMoveC2SPacket || packet instanceof EntitySetHeadYawS2CPacket - || packet instanceof EntityS2CPacket) return; - Screen.INSTANCE.getSent_packets().add(packet); + if (!Packeto.INSTANCE.getStopped()) { + if (packet instanceof ClientTickEndC2SPacket || packet instanceof PlayerMoveC2SPacket || packet instanceof EntitySetHeadYawS2CPacket + || packet instanceof EntityS2CPacket) return; + Screen.INSTANCE.getSent_packets().add(packet); + } } } diff --git a/src/main/kotlin/com/pumpkinmc/Packeto.kt b/src/main/kotlin/com/pumpkinmc/Packeto.kt index 51714e1..6ab0b9a 100644 --- a/src/main/kotlin/com/pumpkinmc/Packeto.kt +++ b/src/main/kotlin/com/pumpkinmc/Packeto.kt @@ -1,17 +1,54 @@ package com.pumpkinmc import net.fabricmc.api.ModInitializer +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper import net.fabricmc.fabric.api.client.rendering.v1.HudLayerRegistrationCallback import net.fabricmc.fabric.api.client.rendering.v1.IdentifiedLayer +import net.minecraft.client.MinecraftClient +import net.minecraft.client.option.KeyBinding +import net.minecraft.client.util.InputUtil +import net.minecraft.text.Text +import net.minecraft.util.Colors import net.minecraft.util.Identifier +import org.lwjgl.glfw.GLFW import org.slf4j.LoggerFactory + object Packeto : ModInitializer { private val logger = LoggerFactory.getLogger("packeto") + private lateinit var key_bind: KeyBinding + var stopped = false + override fun onInitialize() { HudLayerRegistrationCallback.EVENT.register { layer -> layer.addLayer(IdentifiedLayer.of(Identifier.of("packeto", "packets"), Screen)) } + key_bind = KeyBindingHelper.registerKeyBinding( + KeyBinding( + "key.packeto.stop", + InputUtil.Type.KEYSYM, + GLFW.GLFW_KEY_K, + "category.packeto" + ) + ) + ClientTickEvents.END_CLIENT_TICK.register(ClientTickEvents.EndTick { client: MinecraftClient -> + while (key_bind.wasPressed()) { + stopped = !stopped + if (stopped) { + client.player!!.sendMessage( + Text.literal("Stopped listening for Packets").withColor(Colors.RED), + true + ) + } else { + client.player!!.sendMessage( + Text.literal("Started listening for Packets").withColor(Colors.GREEN), + true + ) + } + } + }) } + } \ No newline at end of file diff --git a/src/main/kotlin/com/pumpkinmc/Screen.kt b/src/main/kotlin/com/pumpkinmc/Screen.kt index 7a8de98..56d382a 100644 --- a/src/main/kotlin/com/pumpkinmc/Screen.kt +++ b/src/main/kotlin/com/pumpkinmc/Screen.kt @@ -9,8 +9,8 @@ import net.minecraft.util.Colors import java.util.concurrent.CopyOnWriteArrayList object Screen : LayeredDrawer.Layer { - var sent_packets: MutableList> = CopyOnWriteArrayList(); - var received_packets: MutableList> = CopyOnWriteArrayList(); + var sent_packets: MutableList> = CopyOnWriteArrayList() + var received_packets: MutableList> = CopyOnWriteArrayList() override fun render(context: DrawContext, tickCounter: RenderTickCounter) { context.drawText( @@ -20,11 +20,11 @@ object Screen : LayeredDrawer.Layer { 0, Colors.RED, false - ); - if (sent_packets.size >= 20) sent_packets.removeFirst(); - var i = 6; + ) + if (sent_packets.size >= 20) sent_packets.removeFirst() + var i = 6 for (packet in sent_packets) { - i += 10; + i += 10 context.drawText( MinecraftClient.getInstance().textRenderer, packet.packetType.id.path, @@ -32,7 +32,7 @@ object Screen : LayeredDrawer.Layer { i, Colors.WHITE, false - ); + ) } context.drawText( MinecraftClient.getInstance().textRenderer, @@ -41,11 +41,11 @@ object Screen : LayeredDrawer.Layer { 0, Colors.RED, false - ); - if (received_packets.size >= 20) received_packets.removeFirst(); - var x = 6; + ) + if (received_packets.size >= 20) received_packets.removeFirst() + var x = 6 for (packet in received_packets) { - x += 10; + x += 10 context.drawText( MinecraftClient.getInstance().textRenderer, packet.packetType.id.path, @@ -53,7 +53,7 @@ object Screen : LayeredDrawer.Layer { x, Colors.WHITE, false - ); + ) } } } \ No newline at end of file