From 78c7890cc4573308498f74db33281986dd40a2f4 Mon Sep 17 00:00:00 2001 From: rfresh2 <89827146+rfresh2@users.noreply.github.com> Date: Mon, 10 Jul 2023 23:10:21 -0700 Subject: [PATCH 1/4] PacketLogger Revamp Adds the ability to select individual packets from both client and server. Also added this to packet canceller Complete packet support with fields, using accessors when necessary Adds a HUD element to view packets. --- .../AccessorCPacketClientSettings.java | 12 + .../AccessorCPacketConfirmTransaction.java | 11 + .../AccessorCPacketPlayerAbilities.java | 13 + .../AccessorCPacketResourcePackStatus.java | 11 + .../network/AccessorCPacketSpectate.java | 13 + .../network/AccessorCPacketVehicleMove.java | 23 + .../network/AccessorNetHandlerPlayClient.java | 15 + .../network/AccessorSPacketCloseWindow.java | 11 + .../accessor/network/AccessorSPacketMaps.java | 26 + .../network/AccessorSPacketWorldBorder.java | 27 + .../hudgui/elements/misc/PacketLogViewer.kt | 57 + .../lambda/client/mixin/extension/Network.kt | 62 +- .../module/modules/player/PacketCancel.kt | 359 +++-- .../module/modules/player/PacketLogger.kt | 1310 ++++++++++++++--- src/main/resources/mixins.lambda.json | 8 + 15 files changed, 1608 insertions(+), 350 deletions(-) create mode 100644 src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketClientSettings.java create mode 100644 src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketConfirmTransaction.java create mode 100644 src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketPlayerAbilities.java create mode 100644 src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketResourcePackStatus.java create mode 100644 src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketSpectate.java create mode 100644 src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketVehicleMove.java create mode 100644 src/main/java/com/lambda/mixin/accessor/network/AccessorNetHandlerPlayClient.java create mode 100644 src/main/java/com/lambda/mixin/accessor/network/AccessorSPacketCloseWindow.java create mode 100644 src/main/java/com/lambda/mixin/accessor/network/AccessorSPacketMaps.java create mode 100644 src/main/java/com/lambda/mixin/accessor/network/AccessorSPacketWorldBorder.java create mode 100644 src/main/kotlin/com/lambda/client/gui/hudgui/elements/misc/PacketLogViewer.kt diff --git a/src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketClientSettings.java b/src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketClientSettings.java new file mode 100644 index 000000000..cee6f6cf6 --- /dev/null +++ b/src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketClientSettings.java @@ -0,0 +1,12 @@ +package com.lambda.mixin.accessor.network; + +import net.minecraft.network.play.client.CPacketClientSettings; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(value = CPacketClientSettings.class) +public interface AccessorCPacketClientSettings { + @Accessor(value = "view") + int getView(); + +} diff --git a/src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketConfirmTransaction.java b/src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketConfirmTransaction.java new file mode 100644 index 000000000..931f3d0a9 --- /dev/null +++ b/src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketConfirmTransaction.java @@ -0,0 +1,11 @@ +package com.lambda.mixin.accessor.network; + +import net.minecraft.network.play.client.CPacketConfirmTransaction; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(value = CPacketConfirmTransaction.class) +public interface AccessorCPacketConfirmTransaction { + @Accessor(value = "accepted") + boolean getAccepted(); +} diff --git a/src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketPlayerAbilities.java b/src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketPlayerAbilities.java new file mode 100644 index 000000000..e76bafd1f --- /dev/null +++ b/src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketPlayerAbilities.java @@ -0,0 +1,13 @@ +package com.lambda.mixin.accessor.network; + +import net.minecraft.network.play.client.CPacketPlayerAbilities; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(value = CPacketPlayerAbilities.class) +public interface AccessorCPacketPlayerAbilities { + @Accessor(value = "flySpeed") + float getFlySpeed(); + @Accessor(value = "walkSpeed") + float getWalkSpeed(); +} diff --git a/src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketResourcePackStatus.java b/src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketResourcePackStatus.java new file mode 100644 index 000000000..f02723eec --- /dev/null +++ b/src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketResourcePackStatus.java @@ -0,0 +1,11 @@ +package com.lambda.mixin.accessor.network; + +import net.minecraft.network.play.client.CPacketResourcePackStatus; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(value = CPacketResourcePackStatus.class) +public interface AccessorCPacketResourcePackStatus { + @Accessor(value = "action") + CPacketResourcePackStatus.Action getAction(); +} diff --git a/src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketSpectate.java b/src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketSpectate.java new file mode 100644 index 000000000..44bcf0a3c --- /dev/null +++ b/src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketSpectate.java @@ -0,0 +1,13 @@ +package com.lambda.mixin.accessor.network; + +import net.minecraft.network.play.client.CPacketSpectate; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.UUID; + +@Mixin(value = CPacketSpectate.class) +public interface AccessorCPacketSpectate { + @Accessor(value = "id") + UUID getId(); +} diff --git a/src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketVehicleMove.java b/src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketVehicleMove.java new file mode 100644 index 000000000..4a384219b --- /dev/null +++ b/src/main/java/com/lambda/mixin/accessor/network/AccessorCPacketVehicleMove.java @@ -0,0 +1,23 @@ +package com.lambda.mixin.accessor.network; + +import net.minecraft.network.play.client.CPacketVehicleMove; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(value = CPacketVehicleMove.class) +public interface AccessorCPacketVehicleMove { + @Accessor(value = "x") + void setX(double x); + + @Accessor(value = "y") + void setY(double y); + + @Accessor(value = "z") + void setZ(double z); + + @Accessor(value = "yaw") + void setYaw(float yaw); + + @Accessor(value = "pitch") + void setPitch(float pitch); +} diff --git a/src/main/java/com/lambda/mixin/accessor/network/AccessorNetHandlerPlayClient.java b/src/main/java/com/lambda/mixin/accessor/network/AccessorNetHandlerPlayClient.java new file mode 100644 index 000000000..a389283c8 --- /dev/null +++ b/src/main/java/com/lambda/mixin/accessor/network/AccessorNetHandlerPlayClient.java @@ -0,0 +1,15 @@ +package com.lambda.mixin.accessor.network; + +import net.minecraft.client.network.NetHandlerPlayClient; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(value = NetHandlerPlayClient.class) +public interface AccessorNetHandlerPlayClient { + + @Accessor(value = "doneLoadingTerrain") + boolean isDoneLoadingTerrain(); + + @Accessor(value = "doneLoadingTerrain") + void setDoneLoadingTerrain(boolean loaded); +} diff --git a/src/main/java/com/lambda/mixin/accessor/network/AccessorSPacketCloseWindow.java b/src/main/java/com/lambda/mixin/accessor/network/AccessorSPacketCloseWindow.java new file mode 100644 index 000000000..d19288b44 --- /dev/null +++ b/src/main/java/com/lambda/mixin/accessor/network/AccessorSPacketCloseWindow.java @@ -0,0 +1,11 @@ +package com.lambda.mixin.accessor.network; + +import net.minecraft.network.play.server.SPacketCloseWindow; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(value = SPacketCloseWindow.class) +public interface AccessorSPacketCloseWindow { + @Accessor(value = "windowId") + int getWindowId(); +} diff --git a/src/main/java/com/lambda/mixin/accessor/network/AccessorSPacketMaps.java b/src/main/java/com/lambda/mixin/accessor/network/AccessorSPacketMaps.java new file mode 100644 index 000000000..09c198d7e --- /dev/null +++ b/src/main/java/com/lambda/mixin/accessor/network/AccessorSPacketMaps.java @@ -0,0 +1,26 @@ +package com.lambda.mixin.accessor.network; + +import net.minecraft.network.play.server.SPacketMaps; +import net.minecraft.world.storage.MapDecoration; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(value = SPacketMaps.class) +public interface AccessorSPacketMaps { + @Accessor(value = "mapScale") + byte getMapScale(); + @Accessor(value = "trackingPosition") + boolean getTrackingPosition(); + @Accessor(value = "icons") + MapDecoration[] getIcons(); + @Accessor(value = "minX") + int getMinX(); + @Accessor(value = "minZ") + int getMinZ(); + @Accessor(value = "columns") + int getColumns(); + @Accessor(value = "rows") + int getRows(); + @Accessor(value = "mapDataBytes") + byte[] getMapDataBytes(); +} diff --git a/src/main/java/com/lambda/mixin/accessor/network/AccessorSPacketWorldBorder.java b/src/main/java/com/lambda/mixin/accessor/network/AccessorSPacketWorldBorder.java new file mode 100644 index 000000000..3e4125898 --- /dev/null +++ b/src/main/java/com/lambda/mixin/accessor/network/AccessorSPacketWorldBorder.java @@ -0,0 +1,27 @@ +package com.lambda.mixin.accessor.network; + +import net.minecraft.network.play.server.SPacketWorldBorder; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(value = SPacketWorldBorder.class) +public interface AccessorSPacketWorldBorder { + @Accessor(value = "action") + SPacketWorldBorder.Action getAction(); + @Accessor(value = "size") + int getSize(); + @Accessor(value = "centerX") + double getCenterX(); + @Accessor(value = "centerZ") + double getCenterZ(); + @Accessor(value = "targetSize") + double getTargetSize(); + @Accessor(value = "diameter") + double getDiameter(); + @Accessor(value = "timeUntilTarget") + long getTimeUntilTarget(); + @Accessor(value = "warningTime") + int getWarningTime(); + @Accessor(value = "warningDistance") + int getWarningDistance(); +} diff --git a/src/main/kotlin/com/lambda/client/gui/hudgui/elements/misc/PacketLogViewer.kt b/src/main/kotlin/com/lambda/client/gui/hudgui/elements/misc/PacketLogViewer.kt new file mode 100644 index 000000000..ac5749762 --- /dev/null +++ b/src/main/kotlin/com/lambda/client/gui/hudgui/elements/misc/PacketLogViewer.kt @@ -0,0 +1,57 @@ +package com.lambda.client.gui.hudgui.elements.misc + +import com.lambda.client.event.SafeClientEvent +import com.lambda.client.gui.hudgui.LabelHud +import com.lambda.client.module.modules.player.PacketLogger +import java.util.* + +internal object PacketLogViewer: LabelHud( + name = "PacketLogViewer", + category = Category.MISC, + description = "Displays the packet log" +) { + + private val maxLines by setting("Max Lines", 50, 1..200, 1) + private val logs: MutableList = Collections.synchronizedList(mutableListOf()) + private val onlyWhenLoggerEnabled by setting("Only When Logger Enabled", true) + private val clearButton by setting("Clear", false, consumer = { _, _ -> + clear() + false + }) + + init { + visibleSetting.valueListeners.add { _, it -> + if (!it) { + clear() + } + } + } + + override fun SafeClientEvent.updateText() { + displayText.clear() + if (onlyWhenLoggerEnabled && PacketLogger.isDisabled) return + if (logs.isNotEmpty() && (PacketLogger.logMode == PacketLogger.LogMode.ALL || PacketLogger.logMode == PacketLogger.LogMode.ONLY_HUD)) { + displayText.addLine("PacketLog Viewer", secondaryColor) + synchronized(logs) { + logs.forEach { log -> + displayText.addLine(log, primaryColor) + } + } + } + } + + fun addPacketLog(log: String) { + synchronized(logs) { + logs.add(log) + if (logs.size > maxLines) { + logs.removeAt(0) + } + } + } + + fun clear() { + synchronized(logs) { + logs.clear() + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/lambda/client/mixin/extension/Network.kt b/src/main/kotlin/com/lambda/client/mixin/extension/Network.kt index bc3b843a5..5f62bea90 100644 --- a/src/main/kotlin/com/lambda/client/mixin/extension/Network.kt +++ b/src/main/kotlin/com/lambda/client/mixin/extension/Network.kt @@ -1,22 +1,24 @@ package com.lambda.client.mixin.extension import com.lambda.mixin.accessor.network.* -import net.minecraft.network.play.client.CPacketChatMessage -import net.minecraft.network.play.client.CPacketCloseWindow -import net.minecraft.network.play.client.CPacketPlayer -import net.minecraft.network.play.client.CPacketUseEntity +import net.minecraft.network.play.client.* import net.minecraft.network.play.server.* import net.minecraft.util.text.ITextComponent +import net.minecraft.world.storage.MapDecoration +import java.util.* var CPacketChatMessage.chatMessage: String get() = this.message set(value) { (this as AccessorCPacketChatMessage).setMessage(value) } +val CPacketClientSettings.view: Int + get() = (this as AccessorCPacketClientSettings).view val CPacketCloseWindow.windowID: Int get() = (this as AccessorCPacketCloseWindow).kbGetWindowID() - +val CPacketConfirmTransaction.accepted: Boolean + get() = (this as AccessorCPacketConfirmTransaction).accepted var CPacketPlayer.playerX: Double get() = this.getX(0.0) @@ -66,6 +68,15 @@ var CPacketPlayer.playerRotating: Boolean (this as AccessorCPacketPlayer).rotating = value } +val CPacketPlayerAbilities.flySpeed: Float + get() = (this as AccessorCPacketPlayerAbilities).flySpeed +val CPacketPlayerAbilities.walkSpeed: Float + get() = (this as AccessorCPacketPlayerAbilities).walkSpeed +val CPacketResourcePackStatus.action: CPacketResourcePackStatus.Action + get() = (this as AccessorCPacketResourcePackStatus).action +val CPacketSpectate.uuid: UUID + get() = (this as AccessorCPacketSpectate).id + var CPacketUseEntity.useEntityId: Int get() = (this as AccessorCPacketUseEntity).id set(value) { @@ -84,6 +95,9 @@ var SPacketChat.textComponent: ITextComponent (this as AccessorSPacketChat).setChatComponent(value) } +val SPacketCloseWindow.windowId: Int + get() = (this as AccessorSPacketCloseWindow).windowId + var SPacketEntityVelocity.entityVelocityMotionX: Int get() = this.motionX set(value) { @@ -120,6 +134,23 @@ var SPacketExplosion.explosionMotionZ: Float (this as AccessorSPacketExplosion).setMotionZ(value) } +val SPacketMaps.mapScale: Byte + get() = (this as AccessorSPacketMaps).mapScale +val SPacketMaps.trackingPosition: Boolean + get() = (this as AccessorSPacketMaps).trackingPosition +val SPacketMaps.icons: Array + get() = (this as AccessorSPacketMaps).icons +val SPacketMaps.minX: Int + get() = (this as AccessorSPacketMaps).minX +val SPacketMaps.minZ: Int + get() = (this as AccessorSPacketMaps).minZ +val SPacketMaps.columns: Int + get() = (this as AccessorSPacketMaps).columns +val SPacketMaps.rows: Int + get() = (this as AccessorSPacketMaps).rows +val SPacketMaps.mapDataBytes: ByteArray + get() = (this as AccessorSPacketMaps).mapDataBytes + var SPacketPlayerPosLook.playerPosLookYaw: Float get() = this.yaw set(value) { @@ -142,4 +173,23 @@ var SPacketEntityHeadLook.entityHeadLookEntityId: Int get() = (this as AccessorSPacketEntityHeadLook).entityId set(value) { (this as AccessorSPacketEntityHeadLook).entityId = value - } \ No newline at end of file + } + +val SPacketWorldBorder.action: SPacketWorldBorder.Action + get() = (this as AccessorSPacketWorldBorder).action +val SPacketWorldBorder.size: Int + get() = (this as AccessorSPacketWorldBorder).size +val SPacketWorldBorder.centerX: Double + get() = (this as AccessorSPacketWorldBorder).centerX +val SPacketWorldBorder.centerZ: Double + get() = (this as AccessorSPacketWorldBorder).centerZ +val SPacketWorldBorder.targetSize: Double + get() = (this as AccessorSPacketWorldBorder).targetSize +val SPacketWorldBorder.diameter: Double + get() = (this as AccessorSPacketWorldBorder).diameter +val SPacketWorldBorder.timeUntilTarget: Long + get() = (this as AccessorSPacketWorldBorder).timeUntilTarget +val SPacketWorldBorder.warningTime: Int + get() = (this as AccessorSPacketWorldBorder).warningTime +val SPacketWorldBorder.warningDistance: Int + get() = (this as AccessorSPacketWorldBorder).warningDistance \ No newline at end of file diff --git a/src/main/kotlin/com/lambda/client/module/modules/player/PacketCancel.kt b/src/main/kotlin/com/lambda/client/module/modules/player/PacketCancel.kt index c490fc3b5..893b1ca0e 100644 --- a/src/main/kotlin/com/lambda/client/module/modules/player/PacketCancel.kt +++ b/src/main/kotlin/com/lambda/client/module/modules/player/PacketCancel.kt @@ -32,125 +32,250 @@ object PacketCancel : Module( private val side by setting("Side", Side.CLIENT) private val categorySetting by setting("Category", CategorySlider.PLAYER) + private val disableAllClient by setting("Disable All Client", false, { side == Side.CLIENT }, { _, _ -> + CPacketAnimationSetting = false + CPacketUseEntitySetting = false + CPacketChatMessageSetting = false + CPacketClickWindowSetting = false + CPacketClientSettingsSetting = false + CPacketClientStatusSetting = false + CPacketCloseWindowSetting = false + CPacketConfirmTeleportSetting = false + CPacketConfirmTransactionSetting = false + CPacketCreativeInventoryActionSetting = false + CPacketCustomPayloadSetting = false + CPacketEnchantItemSetting = false + CPacketEntityActionSetting = false + CPacketPlayerPositionSetting = false + CPacketPlayerPositionRotationSetting = false + CPacketHeldItemChangeSetting = false + CPacketInputSetting = false + CPacketPlaceRecipeSetting = false + CPacketPlayerAbilitiesSetting = false + CPacketPlayerTryUseItemSetting = false + CPacketPlayerTryUseItemOnBlockSetting = false + CPacketServerQuerySetting = false + CPacketLoginStartSetting = false + CPacketPingSetting = false + CPacketEncryptionResponseSetting = false + CPacketVehicleMoveSetting = false + CPacketUpdateSignSetting = false + CPacketTabCompleteSetting = false + CPacketSteerBoatSetting = false + CPacketSpectateSetting = false + CPacketSeenAdvancementsSetting = false + CPacketResourcePackStatusSetting = false + CPacketRecipeInfoSetting = false + CPacketPlayerDiggingSetting = false + CPacketKeepAliveSetting = false + false + }) - private val CPacketAnimationSetting by setting("CPacketAnimation", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private val CPacketUseEntitySetting by setting("CPacketUseEntity", false, { side == Side.CLIENT && categorySetting == CategorySlider.ENTITY }) - private val CPacketChatMessageSetting by setting("CPacketChatMessage", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private val CPacketClickWindowSetting by setting("CPacketClickWindow", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private val CPacketClientSettingsSetting by setting("CPacketClient", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private val CPacketClientStatusSetting by setting("CPacketClientStatus", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private val CPacketCloseWindowSetting by setting("CPacketCloseWindow", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) - private val CPacketConfirmTeleportSetting by setting("CPacketConfirmTeleport", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private val CPacketConfirmTransactionSetting by setting("CPacketConfirmTransaction", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) - private val CPacketCreativeInventoryActionSetting by setting("CPacketCreativeInventoryAction", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) - private val CPacketCustomPayloadSetting by setting("CPacketCustomPayload", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private val CPacketEnchantItemSetting by setting("CPacketEnchantItem", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) - private val CPacketEntityActionSetting by setting("CPacketEntityAction", false, { side == Side.CLIENT && categorySetting == CategorySlider.ENTITY }) - private val CPacketPlayerPositionSetting by setting("CPacketPlayerPosition", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private val CPacketPlayerRotationSetting by setting("CPacketPlayerRotation", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private val CPacketPlayerPositionRotationSetting by setting("CPacketPlayerPositionRotation", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private val CPacketHeldItemChangeSetting by setting("CPacketHeldItemChange", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) - private val CPacketInputSetting by setting("CPacketInput", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private val CPacketPlaceRecipeSetting by setting("CPacketPlaceRecipe", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) - private val CPacketPlayerAbilitiesSetting by setting("CPacketPlayerAbilities", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private val CPacketPlayerTryUseItemSetting by setting("CPacketPlayerTryUseItem", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private val CPacketPlayerTryUseItemOnBlockSetting by setting("CPacketPlayerTryUseItemOnBlock", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private val CPacketServerQuerySetting by setting("CPacketServerQuery", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private val CPacketLoginStartSetting by setting("CPacketLoginStart", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private val CPacketPingSetting by setting("CPacketPing", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private val CPacketEncryptionResponseSetting by setting("CPacketEncryptionResponse", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private val CPacketVehicleMoveSetting by setting("CPacketVehicleMove", false, { side == Side.CLIENT && categorySetting == CategorySlider.ENTITY }) - private val CPacketUpdateSignSetting by setting("CPacketUpdateSign", false, { side == Side.CLIENT && categorySetting == CategorySlider.WORLD }) - private val CPacketTabCompleteSetting by setting("CPacketTabComplete", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private val CPacketSteerBoatSetting by setting("CPacketSteerBoat", false, { side == Side.CLIENT && categorySetting == CategorySlider.ENTITY }) - private val CPacketSpectateSetting by setting("CPacketSpectate", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private val CPacketSeenAdvancementsSetting by setting("CPacketSeenAdvancements", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private val CPacketResourcePackStatusSetting by setting("CPacketResourcePackStatus", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private val CPacketRecipeInfoSetting by setting("CPacketRecipeInfo", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) - private val CPacketPlayerDiggingSetting by setting("CPacketPlayerDigging", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private val CPacketKeepAliveSetting by setting("CPacketKeepAlive", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var CPacketAnimationSetting by setting("CPacketAnimation", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var CPacketUseEntitySetting by setting("CPacketUseEntity", false, { side == Side.CLIENT && categorySetting == CategorySlider.ENTITY }) + private var CPacketChatMessageSetting by setting("CPacketChatMessage", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var CPacketClickWindowSetting by setting("CPacketClickWindow", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var CPacketClientSettingsSetting by setting("CPacketClient", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var CPacketClientStatusSetting by setting("CPacketClientStatus", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var CPacketCloseWindowSetting by setting("CPacketCloseWindow", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var CPacketConfirmTeleportSetting by setting("CPacketConfirmTeleport", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var CPacketConfirmTransactionSetting by setting("CPacketConfirmTransaction", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var CPacketCreativeInventoryActionSetting by setting("CPacketCreativeInventoryAction", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var CPacketCustomPayloadSetting by setting("CPacketCustomPayload", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var CPacketEnchantItemSetting by setting("CPacketEnchantItem", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var CPacketEntityActionSetting by setting("CPacketEntityAction", false, { side == Side.CLIENT && categorySetting == CategorySlider.ENTITY }) + private var CPacketPlayerPositionSetting by setting("CPacketPlayerPosition", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var CPacketPlayerRotationSetting by setting("CPacketPlayerRotation", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var CPacketPlayerPositionRotationSetting by setting("CPacketPlayerPositionRotation", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var CPacketHeldItemChangeSetting by setting("CPacketHeldItemChange", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var CPacketInputSetting by setting("CPacketInput", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var CPacketPlaceRecipeSetting by setting("CPacketPlaceRecipe", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var CPacketPlayerAbilitiesSetting by setting("CPacketPlayerAbilities", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var CPacketPlayerTryUseItemSetting by setting("CPacketPlayerTryUseItem", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var CPacketPlayerTryUseItemOnBlockSetting by setting("CPacketPlayerTryUseItemOnBlock", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var CPacketServerQuerySetting by setting("CPacketServerQuery", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var CPacketLoginStartSetting by setting("CPacketLoginStart", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var CPacketPingSetting by setting("CPacketPing", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var CPacketEncryptionResponseSetting by setting("CPacketEncryptionResponse", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var CPacketVehicleMoveSetting by setting("CPacketVehicleMove", false, { side == Side.CLIENT && categorySetting == CategorySlider.ENTITY }) + private var CPacketUpdateSignSetting by setting("CPacketUpdateSign", false, { side == Side.CLIENT && categorySetting == CategorySlider.WORLD }) + private var CPacketTabCompleteSetting by setting("CPacketTabComplete", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var CPacketSteerBoatSetting by setting("CPacketSteerBoat", false, { side == Side.CLIENT && categorySetting == CategorySlider.ENTITY }) + private var CPacketSpectateSetting by setting("CPacketSpectate", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var CPacketSeenAdvancementsSetting by setting("CPacketSeenAdvancements", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var CPacketResourcePackStatusSetting by setting("CPacketResourcePackStatus", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var CPacketRecipeInfoSetting by setting("CPacketRecipeInfo", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var CPacketPlayerDiggingSetting by setting("CPacketPlayerDigging", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var CPacketKeepAliveSetting by setting("CPacketKeepAlive", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private val SPacketEntityS17PacketEntityLookMoveSetting by setting("SPacketEntity.S17PacketEntityLookMove", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) - private val SPacketEntityS16PacketEntityLookSetting by setting("SPacketEntity.S16PacketEntityLook", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) - private val SPacketEntityS15PacketEntityRelMoveSetting by setting("SPacketEntity.S15PacketEntityRelMove", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) - private val SPacketServerInfoSetting by setting("SPacketServerInfo", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) - private val SPacketLoginSuccessSetting by setting("SPacketLoginSuccess", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) - private val SPacketWorldBorderSetting by setting("SPacketWorldBorder", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) - private val SPacketWindowPropertySetting by setting("SPacketWindowProperty", false, { side == Side.SERVER && categorySetting == CategorySlider.INVENTORY }) - private val SPacketWindowItemsSetting by setting("SPacketWindowItems", false, { side == Side.SERVER && categorySetting == CategorySlider.INVENTORY }) - private val SPacketPongSetting by setting("SPacketPong", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) - private val SPacketEncryptionRequestSetting by setting("SPacketEncryptionRequest", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) - private val SPacketEnableCompressionSetting by setting("SPacketEnableCompression", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) - private val SPacketDisconnectSetting by setting("SPacketDisconnect", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) - private val SPacketUseBedSetting by setting("SPacketUseBed", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) - private val SPacketUpdateTileEntitySetting by setting("SPacketUpdateTileEntity", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) - private val SPacketUpdateScoreSetting by setting("SPacketUpdateScore", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) - private val SPacketUpdateHealthSetting by setting("SPacketUpdateHealth", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) - private val SPacketUpdateBossInfoSetting by setting("SPacketUpdateBossInfo", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) - private val SPacketUnloadChunkSetting by setting("SPacketUnloadChunk", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) - private val SPacketTitleSetting by setting("SPacketTitle", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) - private val SPacketTimeUpdateSetting by setting("SPacketTimeUpdate", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) - private val SPacketTeamsSetting by setting("SPacketTeams", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) - private val SPacketTabCompleteSetting by setting("SPacketTabComplete", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) - private val SPacketStatisticsSetting by setting("SPacketStatistics", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) - private val SPacketSpawnPositionSetting by setting("SPacketSpawnPosition", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) - private val SPacketSpawnPaintingSetting by setting("SPacketSpawnPainting", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) - private val SPacketSpawnObjectSetting by setting("SPacketSpawnObject", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) - private val SPacketSpawnPlayerSetting by setting("SPacketSpawnPlayer", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) - private val SPacketSpawnMobSetting by setting("SPacketSpawnMob", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) - private val SPacketSpawnGlobalEntitySetting by setting("SPacketSpawnGlobalEntity", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) - private val SPacketSpawnExperienceOrbSetting by setting("SPacketSpawnExperienceOrb", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) - private val SPacketSoundEffectSetting by setting("SPacketSoundEffect", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) - private val SPacketSignEditorOpenSetting by setting("SPacketSignEditorOpen", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) - private val SPacketSetSlotSetting by setting("SPacketSetSlot", false, { side == Side.SERVER && categorySetting == CategorySlider.INVENTORY }) - private val SPacketSetExperienceSetting by setting("SPacketSetExperience", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) - private val SPacketServerDifficultySetting by setting("SPacketServerDifficulty", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) - private val SPacketSelectAdvancementsTabSetting by setting("SPacketSelectAdvancementsTab", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) - private val SPacketScoreboardObjectiveSetting by setting("SPacketScoreboardObjective", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) - private val SPacketRespawnSetting by setting("SPacketRespawn", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) - private val SPacketResourcePackSendSetting by setting("SPacketResourcePackSend", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) - private val SPacketRemoveEntityEffectSetting by setting("SPacketRemoveEntityEffect", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) - private val SPacketRecipeBookSetting by setting("SPacketRecipeBook", false, { side == Side.SERVER && categorySetting == CategorySlider.INVENTORY }) - private val SPacketPlayerListItemSetting by setting("SPacketPlayerListItem", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) - private val SPacketPlayerListHeaderFooterSetting by setting("SPacketPlayerListHeaderFooter", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) - private val SPacketPlayerAbilitiesSetting by setting("SPacketPlayerAbilities", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) - private val SPacketPlaceGhostRecipeSetting by setting("SPacketPlaceGhostRecipe", false, { side == Side.SERVER && categorySetting == CategorySlider.INVENTORY }) - private val SPacketParticlesSetting by setting("SPacketParticles", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) - private val SPacketOpenWindowSetting by setting("SPacketOpenWindow", false, { side == Side.SERVER && categorySetting == CategorySlider.INVENTORY }) - private val SPacketMultiBlockChangeSetting by setting("SPacketMultiBlockChange", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) - private val SPacketMapsSetting by setting("SPacketMaps", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) - private val SPacketKeepAliveSetting by setting("SPacketKeepAlive", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) - private val SPacketJoinGameSetting by setting("SPacketJoinGame", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) - private val SPacketHeldItemChangeSetting by setting("SPacketHeldItemChange", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) - private val SPacketExplosionSetting by setting("SPacketExplosion", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) - private val SPacketEntityVelocitySetting by setting("SPacketEntityVelocity", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) - private val SPacketEntityTeleportSetting by setting("SPacketEntityTeleport", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) - private val SPacketEntityStatusSetting by setting("SPacketEntityStatus", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) - private val SPacketEntityPropertiesSetting by setting("SPacketEntityProperties", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) - private val SPacketEntityMetadataSetting by setting("SPacketEntityMetadata", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) - private val SPacketEntityHeadLookSetting by setting("SPacketEntityHeadLook", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) - private val SPacketEntityEquipmentSetting by setting("SPacketEntityEquipment", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) - private val SPacketEntityEffectSetting by setting("SPacketEntityEffect", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) - private val SPacketEntityAttachSetting by setting("SPacketEntityAttach", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) - private val SPacketEffectSetting by setting("SPacketEffect", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) - private val SPacketDisplayObjectiveSetting by setting("SPacketDisplayObjective", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) - private val SPacketDestroyEntitiesSetting by setting("SPacketDestroyEntities", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) - private val SPacketCustomSoundSetting by setting("SPacketCustomSound", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) - private val SPacketCustomPayloadSetting by setting("SPacketCustomPayload", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) - private val SPacketCooldownSetting by setting("SPacketCooldown", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) - private val SPacketConfirmTransactionSetting by setting("SPacketConfirmTransaction", false, { side == Side.SERVER && categorySetting == CategorySlider.INVENTORY }) - private val SPacketCombatEventSetting by setting("SPacketCombatEvent", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) - private val SPacketCollectItemSetting by setting("SPacketCollectItem", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) - private val SPacketCloseWindowSetting by setting("SPacketCloseWindow", false, { side == Side.SERVER && categorySetting == CategorySlider.INVENTORY }) - private val SPacketChunkDataSetting by setting("SPacketChunkData", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) - private val SPacketChatSetting by setting("SPacketChat", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) - private val SPacketChangeGameStateSetting by setting("SPacketChangeGameState", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) - private val SPacketCameraSetting by setting("SPacketCamera", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) - private val SPacketBlockChangeSetting by setting("SPacketBlockChange", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) - private val SPacketBlockBreakAnimSetting by setting("SPacketBlockBreakAnim", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) - private val SPacketBlockActionSetting by setting("SPacketBlockAction", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) - private val SPacketAnimationSetting by setting("SPacketAnimation", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) - private val SPacketAdvancementInfoSetting by setting("SPacketAdvancementInfo", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) + private val disableAllServer by setting("Disable All Server", false, { side == Side.SERVER }, { _, _ -> + SPacketEntityS17PacketEntityLookMoveSetting = false + SPacketEntityS16PacketEntityLookSetting = false + SPacketEntityS15PacketEntityRelMoveSetting = false + SPacketServerInfoSetting = false + SPacketLoginSuccessSetting = false + SPacketWorldBorderSetting = false + SPacketWindowPropertySetting = false + SPacketWindowItemsSetting = false + SPacketPongSetting = false + SPacketEncryptionRequestSetting = false + SPacketEnableCompressionSetting = false + SPacketDisconnectSetting = false + SPacketUseBedSetting = false + SPacketUpdateTileEntitySetting = false + SPacketUpdateScoreSetting = false + SPacketUpdateHealthSetting = false + SPacketUpdateBossInfoSetting = false + SPacketUnloadChunkSetting = false + SPacketTitleSetting = false + SPacketTimeUpdateSetting = false + SPacketTeamsSetting = false + SPacketTabCompleteSetting = false + SPacketStatisticsSetting = false + SPacketSpawnPositionSetting = false + SPacketSpawnPaintingSetting = false + SPacketSpawnObjectSetting = false + SPacketSpawnPlayerSetting = false + SPacketSpawnMobSetting = false + SPacketSpawnGlobalEntitySetting = false + SPacketSpawnExperienceOrbSetting = false + SPacketSoundEffectSetting = false + SPacketSignEditorOpenSetting = false + SPacketSetSlotSetting = false + SPacketSetExperienceSetting = false + SPacketServerDifficultySetting = false + SPacketSelectAdvancementsTabSetting = false + SPacketScoreboardObjectiveSetting = false + SPacketRespawnSetting = false + SPacketResourcePackSendSetting = false + SPacketRemoveEntityEffectSetting = false + SPacketRecipeBookSetting = false + SPacketPlayerListItemSetting = false + SPacketPlayerListHeaderFooterSetting = false + SPacketPlayerAbilitiesSetting = false + SPacketPlaceGhostRecipeSetting = false + SPacketParticlesSetting = false + SPacketOpenWindowSetting = false + SPacketMultiBlockChangeSetting = false + SPacketMapsSetting = false + SPacketKeepAliveSetting = false + SPacketJoinGameSetting = false + SPacketHeldItemChangeSetting = false + SPacketExplosionSetting = false + SPacketEntityVelocitySetting = false + SPacketEntityTeleportSetting = false + SPacketEntityStatusSetting = false + SPacketEntityPropertiesSetting = false + SPacketEntityMetadataSetting = false + SPacketEntityHeadLookSetting = false + SPacketEntityEquipmentSetting = false + SPacketEntityEffectSetting = false + SPacketEntityAttachSetting = false + SPacketEntityEffectSetting = false + SPacketEntityAttachSetting = false + SPacketEffectSetting = false + SPacketDisplayObjectiveSetting = false + SPacketDestroyEntitiesSetting = false + SPacketCustomSoundSetting = false + SPacketCustomPayloadSetting = false + SPacketCooldownSetting = false + SPacketConfirmTransactionSetting = false + SPacketCombatEventSetting = false + SPacketCollectItemSetting = false + SPacketCloseWindowSetting = false + SPacketChunkDataSetting = false + SPacketChatSetting = false + SPacketChangeGameStateSetting = false + SPacketCameraSetting = false + SPacketBlockChangeSetting = false + SPacketBlockBreakAnimSetting = false + SPacketBlockActionSetting = false + SPacketAnimationSetting = false + SPacketAdvancementInfoSetting = false + false + }) + + private var SPacketEntityS17PacketEntityLookMoveSetting by setting("SPacketEntity.S17PacketEntityLookMove", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) + private var SPacketEntityS16PacketEntityLookSetting by setting("SPacketEntity.S16PacketEntityLook", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) + private var SPacketEntityS15PacketEntityRelMoveSetting by setting("SPacketEntity.S15PacketEntityRelMove", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) + private var SPacketServerInfoSetting by setting("SPacketServerInfo", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var SPacketLoginSuccessSetting by setting("SPacketLoginSuccess", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var SPacketWorldBorderSetting by setting("SPacketWorldBorder", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) + private var SPacketWindowPropertySetting by setting("SPacketWindowProperty", false, { side == Side.SERVER && categorySetting == CategorySlider.INVENTORY }) + private var SPacketWindowItemsSetting by setting("SPacketWindowItems", false, { side == Side.SERVER && categorySetting == CategorySlider.INVENTORY }) + private var SPacketPongSetting by setting("SPacketPong", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var SPacketEncryptionRequestSetting by setting("SPacketEncryptionRequest", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var SPacketEnableCompressionSetting by setting("SPacketEnableCompression", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var SPacketDisconnectSetting by setting("SPacketDisconnect", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var SPacketUseBedSetting by setting("SPacketUseBed", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) + private var SPacketUpdateTileEntitySetting by setting("SPacketUpdateTileEntity", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) + private var SPacketUpdateScoreSetting by setting("SPacketUpdateScore", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) + private var SPacketUpdateHealthSetting by setting("SPacketUpdateHealth", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) + private var SPacketUpdateBossInfoSetting by setting("SPacketUpdateBossInfo", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) + private var SPacketUnloadChunkSetting by setting("SPacketUnloadChunk", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) + private var SPacketTitleSetting by setting("SPacketTitle", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var SPacketTimeUpdateSetting by setting("SPacketTimeUpdate", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) + private var SPacketTeamsSetting by setting("SPacketTeams", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) + private var SPacketTabCompleteSetting by setting("SPacketTabComplete", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var SPacketStatisticsSetting by setting("SPacketStatistics", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var SPacketSpawnPositionSetting by setting("SPacketSpawnPosition", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) + private var SPacketSpawnPaintingSetting by setting("SPacketSpawnPainting", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) + private var SPacketSpawnObjectSetting by setting("SPacketSpawnObject", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var SPacketSpawnPlayerSetting by setting("SPacketSpawnPlayer", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) + private var SPacketSpawnMobSetting by setting("SPacketSpawnMob", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) + private var SPacketSpawnGlobalEntitySetting by setting("SPacketSpawnGlobalEntity", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) + private var SPacketSpawnExperienceOrbSetting by setting("SPacketSpawnExperienceOrb", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) + private var SPacketSoundEffectSetting by setting("SPacketSoundEffect", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) + private var SPacketSignEditorOpenSetting by setting("SPacketSignEditorOpen", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) + private var SPacketSetSlotSetting by setting("SPacketSetSlot", false, { side == Side.SERVER && categorySetting == CategorySlider.INVENTORY }) + private var SPacketSetExperienceSetting by setting("SPacketSetExperience", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) + private var SPacketServerDifficultySetting by setting("SPacketServerDifficulty", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) + private var SPacketSelectAdvancementsTabSetting by setting("SPacketSelectAdvancementsTab", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var SPacketScoreboardObjectiveSetting by setting("SPacketScoreboardObjective", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var SPacketRespawnSetting by setting("SPacketRespawn", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) + private var SPacketResourcePackSendSetting by setting("SPacketResourcePackSend", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var SPacketRemoveEntityEffectSetting by setting("SPacketRemoveEntityEffect", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) + private var SPacketRecipeBookSetting by setting("SPacketRecipeBook", false, { side == Side.SERVER && categorySetting == CategorySlider.INVENTORY }) + private var SPacketPlayerListItemSetting by setting("SPacketPlayerListItem", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) + private var SPacketPlayerListHeaderFooterSetting by setting("SPacketPlayerListHeaderFooter", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) + private var SPacketPlayerAbilitiesSetting by setting("SPacketPlayerAbilities", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) + private var SPacketPlaceGhostRecipeSetting by setting("SPacketPlaceGhostRecipe", false, { side == Side.SERVER && categorySetting == CategorySlider.INVENTORY }) + private var SPacketParticlesSetting by setting("SPacketParticles", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) + private var SPacketOpenWindowSetting by setting("SPacketOpenWindow", false, { side == Side.SERVER && categorySetting == CategorySlider.INVENTORY }) + private var SPacketMultiBlockChangeSetting by setting("SPacketMultiBlockChange", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) + private var SPacketMapsSetting by setting("SPacketMaps", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) + private var SPacketKeepAliveSetting by setting("SPacketKeepAlive", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var SPacketJoinGameSetting by setting("SPacketJoinGame", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var SPacketHeldItemChangeSetting by setting("SPacketHeldItemChange", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) + private var SPacketExplosionSetting by setting("SPacketExplosion", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) + private var SPacketEntityVelocitySetting by setting("SPacketEntityVelocity", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) + private var SPacketEntityTeleportSetting by setting("SPacketEntityTeleport", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) + private var SPacketEntityStatusSetting by setting("SPacketEntityStatus", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) + private var SPacketEntityPropertiesSetting by setting("SPacketEntityProperties", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) + private var SPacketEntityMetadataSetting by setting("SPacketEntityMetadata", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) + private var SPacketEntityHeadLookSetting by setting("SPacketEntityHeadLook", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) + private var SPacketEntityEquipmentSetting by setting("SPacketEntityEquipment", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) + private var SPacketEntityEffectSetting by setting("SPacketEntityEffect", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) + private var SPacketEntityAttachSetting by setting("SPacketEntityAttach", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) + private var SPacketEffectSetting by setting("SPacketEffect", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) + private var SPacketDisplayObjectiveSetting by setting("SPacketDisplayObjective", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var SPacketDestroyEntitiesSetting by setting("SPacketDestroyEntities", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) + private var SPacketCustomSoundSetting by setting("SPacketCustomSound", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var SPacketCustomPayloadSetting by setting("SPacketCustomPayload", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var SPacketCooldownSetting by setting("SPacketCooldown", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) + private var SPacketConfirmTransactionSetting by setting("SPacketConfirmTransaction", false, { side == Side.SERVER && categorySetting == CategorySlider.INVENTORY }) + private var SPacketCombatEventSetting by setting("SPacketCombatEvent", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) + private var SPacketCollectItemSetting by setting("SPacketCollectItem", false, { side == Side.SERVER && categorySetting == CategorySlider.ENTITY }) + private var SPacketCloseWindowSetting by setting("SPacketCloseWindow", false, { side == Side.SERVER && categorySetting == CategorySlider.INVENTORY }) + private var SPacketChunkDataSetting by setting("SPacketChunkData", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) + private var SPacketChatSetting by setting("SPacketChat", false, { side == Side.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var SPacketChangeGameStateSetting by setting("SPacketChangeGameState", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) + private var SPacketCameraSetting by setting("SPacketCamera", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) + private var SPacketBlockChangeSetting by setting("SPacketBlockChange", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) + private var SPacketBlockBreakAnimSetting by setting("SPacketBlockBreakAnim", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) + private var SPacketBlockActionSetting by setting("SPacketBlockAction", false, { side == Side.SERVER && categorySetting == CategorySlider.WORLD }) + private var SPacketAnimationSetting by setting("SPacketAnimation", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) + private var SPacketAdvancementInfoSetting by setting("SPacketAdvancementInfo", false, { side == Side.SERVER && categorySetting == CategorySlider.PLAYER }) private var numPackets = 0 diff --git a/src/main/kotlin/com/lambda/client/module/modules/player/PacketLogger.kt b/src/main/kotlin/com/lambda/client/module/modules/player/PacketLogger.kt index 2a3d15395..7eed88e96 100644 --- a/src/main/kotlin/com/lambda/client/module/modules/player/PacketLogger.kt +++ b/src/main/kotlin/com/lambda/client/module/modules/player/PacketLogger.kt @@ -5,6 +5,7 @@ import com.lambda.client.commons.interfaces.DisplayEnum import com.lambda.client.event.events.ConnectionEvent import com.lambda.client.event.events.PacketEvent import com.lambda.client.event.listener.listener +import com.lambda.client.gui.hudgui.elements.misc.PacketLogViewer import com.lambda.client.mixin.extension.* import com.lambda.client.module.Category import com.lambda.client.module.Module @@ -17,10 +18,14 @@ import com.lambda.client.util.threads.runSafe import com.lambda.client.util.threads.safeListener import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import net.minecraft.block.Block +import net.minecraft.item.crafting.CraftingManager import net.minecraft.network.Packet import net.minecraft.network.play.client.* import net.minecraft.network.play.server.* +import net.minecraft.potion.Potion import net.minecraft.util.math.BlockPos +import net.minecraft.util.text.ITextComponent import net.minecraft.util.text.TextFormatting import net.minecraftforge.fml.common.gameevent.TickEvent import java.io.File @@ -33,22 +38,314 @@ object PacketLogger : Module( description = "Logs sent packets to a file or chat", category = Category.PLAYER ) { - private val showClientTicks by setting("Show Client Ticks", true, description = "Show timestamps of client ticks.") - private val logInChat by setting("Log In Chat", false, description = "Print packets in the chat.") - private val captureTiming by setting("Capture Timing", CaptureTiming.POST, description = "Sets point of time for scan event.") - private val packetSide by setting("Packet Side", PacketSide.BOTH, description = "Log packets from the server, from the client, or both.") - private val ignoreKeepAlive by setting("Ignore Keep Alive", true, description = "Ignore both incoming and outgoing KeepAlive packets.") - private val ignoreChunkLoading by setting("Ignore Chunk Loading", true, description = "Ignore chunk loading and unloading packets.") - private val ignoreUnknown by setting("Ignore Unknown Packets", false, description = "Ignore packets that aren't explicitly handled.") - private val ignoreChat by setting("Ignore Chat", true, description = "Ignore chat packets.") - private val ignoreCancelled by setting("Ignore Cancelled", true, description = "Ignore cancelled packets.") - private val ignorePlayerPosition by setting("Ignore Player Position", false, description = "Ignore sent position & rotation packets.") - private val ignoreTimeUpdates by setting("Ignore Time Updates", false, description = "Ignore time update packets.") + private val page by setting("Page", Page.GENERAL) + private val categorySetting by setting("Category", CategorySlider.PLAYER, { page == Page.CLIENT || page == Page.SERVER }) + private val packetSide by setting("Packet Side", PacketSide.BOTH, description = "Log packets from the server, from the client, or both.", visibility = { page == Page.GENERAL }) + private val absoluteTime by setting("Absolute Time", true, description = "Show absolute time.", visibility = { page == Page.GENERAL }) + private val startDelta by setting("Start Time Delta", false, visibility = { page == Page.GENERAL }) + private val lastDelta by setting("Last Time Delta", false, visibility = { page == Page.GENERAL }) + private val showClientTicks by setting("Show Client Ticks", false, description = "Show timestamps of client ticks.", visibility = { page == Page.GENERAL }) + private val ignoreCancelled by setting("Ignore Cancelled", true, description = "Ignore cancelled packets.", visibility = { page == Page.GENERAL }) + val logMode by setting("Log Mode", LogMode.ALL, description = "Log to chat, to a file, HUD, or both.", visibility = { page == Page.GENERAL }) + private val captureTiming by setting("Capture Timing", CaptureTiming.POST, description = "Sets point of time for scan event.", visibility = { page == Page.GENERAL }) private val openLogFolder by setting("Open Log Folder...", false, consumer = { _, _ -> FolderUtils.openFolder(FolderUtils.packetLogFolder) false + }, visibility = { page == Page.GENERAL }) + + /** + * Client Packets + */ + private val toggleAllClientPackets by setting("Toggle All Client Packets", false, visibility = { page == Page.CLIENT }, consumer = { _, _ -> + val toggleValue = anyClientPacketDisabled() + cPacketAnimation = toggleValue + cPacketChatMessage = toggleValue + cPacketClickWindow = toggleValue + cPacketClientSettings = toggleValue + cPacketClientStatus = toggleValue + cPacketCloseWindow = toggleValue + cPacketConfirmTeleport = toggleValue + cPacketConfirmTransaction = toggleValue + cPacketCreativeInventoryAction = toggleValue + cPacketCustomPayload = toggleValue + cPacketEnchantItem = toggleValue + cPacketEntityAction = toggleValue + cPacketHeldItemChange = toggleValue + cPacketInput = toggleValue + cPacketKeepAlive = toggleValue + cPacketPlaceRecipe = toggleValue + cPacketPlayerRotation = toggleValue + cPacketPlayerPosition = toggleValue + cPacketPlayerPositionRotation = toggleValue + cPacketPlayer = toggleValue + cPacketPlayerAbilities = toggleValue + cPacketPlayerDigging = toggleValue + cPacketPlayerTryUseItem = toggleValue + cPacketPlayerTryUseItemOnBlock = toggleValue + cPacketRecipeInfo = toggleValue + cPacketResourcePackStatus = toggleValue + cPacketSeenAdvancements = toggleValue + cPacketSpectate = toggleValue + cPacketSteerBoat = toggleValue + cPacketTabComplete = toggleValue + cPacketUpdateSign = toggleValue + cPacketUseEntity = toggleValue + cPacketVehicleMove = toggleValue + false + }) + + private fun anyClientPacketDisabled(): Boolean { + return !cPacketAnimation || !cPacketChatMessage || !cPacketClickWindow || !cPacketClientSettings || !cPacketClientStatus || !cPacketCloseWindow + || !cPacketConfirmTeleport || !cPacketConfirmTransaction || !cPacketCreativeInventoryAction || !cPacketCustomPayload || !cPacketEnchantItem + || !cPacketEntityAction || !cPacketHeldItemChange || !cPacketInput || !cPacketKeepAlive || !cPacketPlaceRecipe + || !cPacketPlayerRotation || !cPacketPlayerPosition || !cPacketPlayerPositionRotation || !cPacketPlayer + || !cPacketPlayerAbilities || !cPacketPlayerDigging || !cPacketPlayerTryUseItem || !cPacketPlayerTryUseItemOnBlock || !cPacketRecipeInfo + || !cPacketResourcePackStatus || !cPacketSeenAdvancements || !cPacketSpectate || !cPacketSteerBoat || !cPacketTabComplete + || !cPacketUpdateSign || !cPacketUseEntity || !cPacketVehicleMove + } + + /** Player **/ + private var cPacketAnimation by setting("CPacketAnimation", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketConfirmTeleport by setting("CPacketConfirmTeleport", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketInput by setting("CPacketInput", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketPlayerRotation by setting("CPacketPlayer.Rotation", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketPlayerPosition by setting("CPacketPlayer.Position", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketPlayerPositionRotation by setting("CPacketPlayer.PositionRotation", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketPlayer by setting("CPacketPlayer", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketPlayerAbilities by setting("CPacketPlayerAbilities", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketPlayerDigging by setting("CPacketPlayerDigging", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketPlayerTryUseItem by setting("CPacketPlayerTryUseItem", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketPlayerTryUseItemOnBlock by setting("CPacketPlayerTryUseItemOnBlock", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketSpectate by setting("CPacketSpectate", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.PLAYER }) + + /** Inventory **/ + private var cPacketClickWindow by setting("CPacketClickWindow", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var cPacketCloseWindow by setting("CPacketCloseWindow", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var cPacketConfirmTransaction by setting("CPacketConfirmTransaction", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var cPacketCreativeInventoryAction by setting("CPacketCreativeInventoryAction", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var cPacketEnchantItem by setting("CPacketEnchantItem", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var cPacketHeldItemChange by setting("CPacketHeldItemChange", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var cPacketPlaceRecipe by setting("CPacketPlaceRecipe", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var cPacketRecipeInfo by setting("CPacketRecipeInfo", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.INVENTORY }) + + /** System **/ + private var cPacketChatMessage by setting("CPacketChatMessage", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var cPacketClientSettings by setting("CPacketClientSettings", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var cPacketClientStatus by setting("CPacketClientStatus", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var cPacketCustomPayload by setting("CPacketCustomPayload", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var cPacketKeepAlive by setting("CPacketKeepAlive", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var cPacketResourcePackStatus by setting("CPacketResourcePackStatus", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var cPacketSeenAdvancements by setting("CPacketSeenAdvancements", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var cPacketTabComplete by setting("CPacketTabComplete", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.SYSTEM }) + + /** World **/ + private var cPacketUpdateSign by setting("CPacketUpdateSign", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.WORLD }) + + /** Entity **/ + private var cPacketEntityAction by setting("CPacketEntityAction", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.ENTITY }) + private var cPacketSteerBoat by setting("CPacketSteerBoat", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.ENTITY }) + private var cPacketUseEntity by setting("CPacketUseEntity", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.ENTITY }) + private var cPacketVehicleMove by setting("CPacketVehicleMove", true, visibility = { page == Page.CLIENT && categorySetting == CategorySlider.ENTITY }) + + + /** + * Server Packets + */ + + private val toggleAllServerPackets by setting("Toggle All Server Packets", false, visibility = { page == Page.SERVER }, consumer = { _, _ -> + val toggleValue = anyServerPacketDisabled() + sPacketAdvancementInfo = toggleValue + sPacketAnimation = toggleValue + sPacketBlockAction = toggleValue + sPacketBlockBreakAnim = toggleValue + sPacketBlockChange = toggleValue + sPacketCamera = toggleValue + sPacketChangeGameState = toggleValue + sPacketChat = toggleValue + sPacketChunkData = toggleValue + sPacketCloseWindow = toggleValue + sPacketCollectItem = toggleValue + sPacketCombatEvent = toggleValue + sPacketConfirmTransaction = toggleValue + sPacketCooldown = toggleValue + sPacketCustomPayload = toggleValue + sPacketCustomSound = toggleValue + sPacketDestroyEntities = toggleValue + sPacketDisconnect = toggleValue + sPacketDisplayObjective = toggleValue + sPacketEffect = toggleValue + s15PacketEntityRelMove = toggleValue + s16PacketEntityLook = toggleValue + s17PacketEntityLookMove = toggleValue + sPacketEntity = toggleValue + sPacketEntityAttach = toggleValue + sPacketEntityEffect = toggleValue + sPacketEntityEquipment = toggleValue + sPacketEntityHeadLook = toggleValue + sPacketEntityMetadata = toggleValue + sPacketEntityProperties = toggleValue + sPacketEntityStatus = toggleValue + sPacketEntityTeleport = toggleValue + sPacketEntityVelocity = toggleValue + sPacketExplosion = toggleValue + sPacketHeldItemChange = toggleValue + sPacketJoinGame = toggleValue + sPacketKeepAlive = toggleValue + sPacketMaps = toggleValue + sPacketMoveVehicle = toggleValue + sPacketMultiBlockChange = toggleValue + sPacketOpenWindow = toggleValue + sPacketParticles = toggleValue + sPacketPlaceGhostRecipe = toggleValue + sPacketPlayerAbilities = toggleValue + sPacketPlayerListHeaderFooter = toggleValue + sPacketPlayerListItem = toggleValue + sPacketPlayerPosLook = toggleValue + sPacketRecipeBook = toggleValue + sPacketRemoveEntityEffect = toggleValue + sPacketResourcePackSend = toggleValue + sPacketRespawn = toggleValue + sPacketScoreboardObjective = toggleValue + sPacketSelectAdvancementsTab = toggleValue + sPacketServerDifficulty = toggleValue + sPacketSetExperience = toggleValue + sPacketSetPassengers = toggleValue + sPacketSetSlot = toggleValue + sPacketSignEditorOpen = toggleValue + sPacketSoundEffect = toggleValue + sPacketSpawnExperienceOrb = toggleValue + sPacketSpawnGlobalEntity = toggleValue + sPacketSpawnMob = toggleValue + sPacketSpawnObject = toggleValue + sPacketSpawnPainting = toggleValue + sPacketSpawnPlayer = toggleValue + sPacketSpawnPosition = toggleValue + sPacketStatistics = toggleValue + sPacketTabComplete = toggleValue + sPacketTeams = toggleValue + sPacketTimeUpdate = toggleValue + sPacketTitle = toggleValue + sPacketUnloadChunk = toggleValue + sPacketUpdateBossInfo = toggleValue + sPacketUpdateHealth = toggleValue + sPacketUpdateScore = toggleValue + sPacketUpdateTileEntity = toggleValue + sPacketUseBed = toggleValue + sPacketWindowItems = toggleValue + sPacketWindowProperty = toggleValue + sPacketWorldBorder = toggleValue + false }) + private fun anyServerPacketDisabled() : Boolean { + return !sPacketAdvancementInfo || !sPacketAnimation || !sPacketBlockAction || !sPacketBlockBreakAnim || !sPacketBlockChange + || !sPacketCamera || !sPacketChangeGameState || !sPacketChat || !sPacketChunkData || !sPacketCloseWindow || !sPacketCollectItem + || !sPacketCombatEvent || !sPacketConfirmTransaction || !sPacketCooldown || !sPacketCustomPayload || !sPacketCustomSound + || !sPacketDestroyEntities || !sPacketDisconnect || !sPacketDisplayObjective || !sPacketEffect + || !s15PacketEntityRelMove || !s16PacketEntityLook || !s17PacketEntityLookMove || !sPacketEntity || !sPacketEntityAttach + || !sPacketEntityEffect || !sPacketEntityEquipment || !sPacketEntityHeadLook || !sPacketEntityMetadata || !sPacketEntityProperties + || !sPacketEntityStatus || !sPacketEntityTeleport || !sPacketEntityVelocity || !sPacketExplosion || !sPacketHeldItemChange + || !sPacketJoinGame || !sPacketKeepAlive || !sPacketMaps || !sPacketMoveVehicle || !sPacketMultiBlockChange || !sPacketOpenWindow + || !sPacketParticles || !sPacketPlaceGhostRecipe || !sPacketPlayerAbilities || !sPacketPlayerListHeaderFooter || !sPacketPlayerListItem + || !sPacketPlayerPosLook || !sPacketRecipeBook || !sPacketRemoveEntityEffect || !sPacketResourcePackSend || !sPacketRespawn + || !sPacketScoreboardObjective || !sPacketSelectAdvancementsTab || !sPacketServerDifficulty || !sPacketSetExperience || !sPacketSetPassengers + || !sPacketSetSlot || !sPacketSignEditorOpen || !sPacketSoundEffect || !sPacketSpawnExperienceOrb || !sPacketSpawnGlobalEntity + || !sPacketSpawnMob || !sPacketSpawnObject || !sPacketSpawnPainting || !sPacketSpawnPlayer || !sPacketSpawnPosition || !sPacketStatistics + || !sPacketTabComplete || !sPacketTeams || !sPacketTimeUpdate || !sPacketTitle || !sPacketUnloadChunk || !sPacketUpdateBossInfo + || !sPacketUpdateHealth || !sPacketUpdateScore || !sPacketUpdateTileEntity || !sPacketUseBed || !sPacketWindowItems || !sPacketWindowProperty + || !sPacketWorldBorder + } + + /** Player **/ + private var sPacketAdvancementInfo by setting("SPacketAdvancementInfo", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.PLAYER }) + private var sPacketAnimation by setting("SPacketAnimation", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.PLAYER }) + private var sPacketBlockAction by setting("SPacketBlockAction", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.PLAYER }) + private var sPacketBlockBreakAnim by setting("SPacketBlockBreakAnim", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.PLAYER }) + private var sPacketCamera by setting("SPacketCamera", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.PLAYER }) + private var sPacketChangeGameState by setting("SPacketChangeGameState", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.PLAYER }) + private var sPacketCombatEvent by setting("SPacketCombatEvent", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.PLAYER }) + private var sPacketCooldown by setting("SPacketCooldown", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.PLAYER }) + private var sPacketPlayerAbilities by setting("SPacketPlayerAbilities", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.PLAYER }) + private var sPacketPlayerPosLook by setting("SPacketPlayerPosLook", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.PLAYER }) + private var sPacketRespawn by setting("SPacketRespawn", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.PLAYER }) + private var sPacketSetExperience by setting("SPacketSetExperience", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.PLAYER }) + private var sPacketUpdateHealth by setting("SPacketUpdateHealth", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.PLAYER }) + private var sPacketUpdateScore by setting("SPacketUpdateScore", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.PLAYER }) + private var sPacketUseBed by setting("SPacketUseBed", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.PLAYER }) + + /** Inventory **/ + private var sPacketCloseWindow by setting("SPacketCloseWindow", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.INVENTORY }) + private var sPacketConfirmTransaction by setting("SPacketConfirmTransaction", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.INVENTORY }) + private var sPacketHeldItemChange by setting("SPacketHeldItemChange", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.INVENTORY }) + private var sPacketOpenWindow by setting("SPacketOpenWindow", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.INVENTORY }) + private var sPacketPlaceGhostRecipe by setting("SPacketPlaceGhostRecipe", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.INVENTORY }) + private var sPacketRecipeBook by setting("SPacketRecipeBook", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.INVENTORY }) + private var sPacketSetSlot by setting("SPacketSetSlot", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.INVENTORY }) + private var sPacketWindowItems by setting("SPacketWindowItems", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.INVENTORY }) + private var sPacketWindowProperty by setting("SPacketWindowProperty", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.INVENTORY }) + + /** System **/ + private var sPacketChat by setting("SPacketChat", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var sPacketCustomPayload by setting("SPacketCustomPayload", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var sPacketCustomSound by setting("SPacketCustomSound", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var sPacketDisconnect by setting("SPacketDisconnect", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var sPacketDisplayObjective by setting("SPacketDisplayObjective", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var sPacketJoinGame by setting("SPacketJoinGame", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var sPacketKeepAlive by setting("SPacketKeepAlive", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var sPacketPlayerListHeaderFooter by setting("SPacketPlayerListHeaderFooter", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var sPacketPlayerListItem by setting("SPacketPlayerListItem", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var sPacketResourcePackSend by setting("SPacketResourcePackSend", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var sPacketScoreboardObjective by setting("SPacketScoreboardObjective", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var sPacketSelectAdvancementsTab by setting("SPacketSelectAdvancementsTab", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var sPacketStatistics by setting("SPacketStatistics", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var sPacketTabComplete by setting("SPacketTabComplete", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var sPacketTeams by setting("SPacketTeams", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.SYSTEM }) + private var sPacketTitle by setting("SPacketTitle", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.SYSTEM }) + + /** World **/ + private var sPacketBlockChange by setting("SPacketBlockChange", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.WORLD }) + private var sPacketChunkData by setting("SPacketChunkData", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.WORLD }) + private var sPacketEffect by setting("SPacketEffect", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.WORLD }) + private var sPacketExplosion by setting("SPacketExplosion", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.WORLD }) + private var sPacketMaps by setting("SPacketMaps", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.WORLD }) + private var sPacketMultiBlockChange by setting("SPacketMultiBlockChange", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.WORLD }) + private var sPacketParticles by setting("SPacketParticles", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.WORLD }) + private var sPacketServerDifficulty by setting("SPacketServerDifficulty", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.WORLD }) + private var sPacketSignEditorOpen by setting("SPacketSignEditorOpen", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.WORLD }) + private var sPacketSoundEffect by setting("SPacketSoundEffect", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.WORLD }) + private var sPacketSpawnPosition by setting("SPacketSpawnPosition", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.WORLD }) + private var sPacketTimeUpdate by setting("SPacketTimeUpdate", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.WORLD }) + private var sPacketUnloadChunk by setting("SPacketUnloadChunk", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.WORLD }) + private var sPacketUpdateBossInfo by setting("SPacketUpdateBossInfo", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.WORLD }) + private var sPacketUpdateTileEntity by setting("SPacketUpdateTileEntity", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.WORLD }) + private var sPacketWorldBorder by setting("SPacketWorldBorder", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.WORLD }) + + /** Entity **/ + private var sPacketCollectItem by setting("SPacketCollectItem", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var sPacketDestroyEntities by setting("SPacketDestroyEntities", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var s15PacketEntityRelMove by setting("S15PacketEntityRelMove", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var s16PacketEntityLook by setting("S16PacketEntityLook", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var s17PacketEntityLookMove by setting("S17PacketEntityLookMove", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var sPacketEntity by setting("SPacketEntity", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var sPacketEntityAttach by setting("SPacketEntityAttach", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var sPacketEntityEffect by setting("SPacketEntityEffect", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var sPacketEntityEquipment by setting("SPacketEntityEquipment", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var sPacketEntityHeadLook by setting("SPacketEntityHeadLook", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var sPacketEntityMetadata by setting("SPacketEntityMetadata", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var sPacketEntityProperties by setting("SPacketEntityProperties", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var sPacketEntityStatus by setting("SPacketEntityStatus", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var sPacketEntityTeleport by setting("SPacketEntityTeleport", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var sPacketEntityVelocity by setting("SPacketEntityVelocity", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var sPacketMoveVehicle by setting("SPacketMoveVehicle", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var sPacketRemoveEntityEffect by setting("SPacketRemoveEntityEffect", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var sPacketSetPassengers by setting("SPacketSetPassengers", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var sPacketSpawnExperienceOrb by setting("SPacketSpawnExperienceOrb", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var sPacketSpawnGlobalEntity by setting("SPacketSpawnGlobalEntity", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var sPacketSpawnMob by setting("SPacketSpawnMob", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var sPacketSpawnObject by setting("SPacketSpawnObject", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var sPacketSpawnPainting by setting("SPacketSpawnPainting", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private var sPacketSpawnPlayer by setting("SPacketSpawnPlayer", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) + private val fileTimeFormatter = DateTimeFormatter.ofPattern("HH-mm-ss_SSS") private var start = 0L @@ -59,18 +356,34 @@ object PacketLogger : Module( private var filename = "" private var lines = ArrayList() + private enum class Page { + GENERAL, CLIENT, SERVER + } + enum class CategorySlider { + PLAYER, INVENTORY, SYSTEM, WORLD, ENTITY + } + private enum class PacketSide(override val displayName: String) : DisplayEnum { CLIENT("Client"), SERVER("Server"), BOTH("Both") } + enum class LogMode(override val displayName: String) : DisplayEnum { + CHAT("Chat"), + FILE("File"), + CHAT_AND_FILE("Chat+File"), + ONLY_HUD("Only HUD"), + ALL("All") + } + private enum class CaptureTiming { PRE, POST } init { onEnable { + PacketLogViewer.clear() start = System.currentTimeMillis() filename = "${fileTimeFormatter.format(LocalTime.now())}.csv" @@ -81,10 +394,6 @@ object PacketLogger : Module( onDisable { write() - - runSafe { - MessageSendHelper.sendChatMessage("$chatName Log saved at ${TextFormatting.GREEN}${FolderUtils.packetLogFolder}${filename}") - } } safeListener { @@ -93,58 +402,348 @@ object PacketLogger : Module( if (showClientTicks) { synchronized(this@PacketLogger) { val current = System.currentTimeMillis() - lines.add("Tick Pulse,,${current - start},${current - lastTick}\n") + val line = "Tick Pulse: Start Delta: ${current - start}, Last Tick Delta: ${current - lastTick}\n" + if (logMode == LogMode.CHAT_AND_FILE || logMode == LogMode.FILE || logMode == LogMode.ALL) { + lines.add(line) + } + if (logMode == LogMode.CHAT_AND_FILE || logMode == LogMode.CHAT || logMode == LogMode.ALL) { + MessageSendHelper.sendChatMessage(line) + } + if (logMode == LogMode.ONLY_HUD || logMode == LogMode.ALL) { + if (PacketLogViewer.visible) { + PacketLogViewer.addPacketLog(line.replace("\n", "")) + } + } lastTick = current } } /* Don't let lines get too big, write periodically to the file */ - if (lines.size >= 500 || timer.tick(15L)) { + if (lines.size >= 500) { write() } } - safeListener { + listener { disable() + PacketLogViewer.clear() } listener(Int.MAX_VALUE) { - if (captureTiming != CaptureTiming.PRE || ignoreCancelled && it.cancelled) { - return@listener - } + if (captureTiming != CaptureTiming.PRE || ignoreCancelled && it.cancelled) return@listener + if (mc.isIntegratedServerRunning && it.packet.javaClass.name.startsWith("net.minecraft.network.play.client")) return@listener receivePacket(it.packet) } listener(Int.MIN_VALUE) { - if (captureTiming != CaptureTiming.POST || ignoreCancelled && it.cancelled) { - return@listener - } + if (captureTiming != CaptureTiming.POST || ignoreCancelled && it.cancelled) return@listener + if (mc.isIntegratedServerRunning && it.packet.javaClass.name.startsWith("net.minecraft.network.play.client")) return@listener receivePacket(it.packet) } listener(Int.MAX_VALUE) { - if (captureTiming != CaptureTiming.PRE || ignoreCancelled && it.cancelled) { - return@listener - } - + if (captureTiming != CaptureTiming.PRE || ignoreCancelled && it.cancelled) return@listener + if (mc.isIntegratedServerRunning && it.packet.javaClass.name.startsWith("net.minecraft.network.play.server")) return@listener sendPacket(it.packet) } listener(Int.MIN_VALUE) { - if (captureTiming != CaptureTiming.POST || ignoreCancelled && it.cancelled) { - return@listener - } + if (captureTiming != CaptureTiming.POST || ignoreCancelled && it.cancelled) return@listener + if (mc.isIntegratedServerRunning && it.packet.javaClass.name.startsWith("net.minecraft.network.play.server")) return@listener sendPacket(it.packet) } } + private fun sendPacket(packet: Packet<*>) { + if (packetSide == PacketSide.CLIENT || packetSide == PacketSide.BOTH) { + when (packet) { + is CPacketAnimation -> { + if (!cPacketAnimation) return + logClient(packet) { + "hand" to packet.hand + } + } + is CPacketChatMessage -> { + if (!cPacketChatMessage) return + logClient(packet) { + "message" to packet.message + } + } + is CPacketClickWindow -> { + if (!cPacketClickWindow) return + logClient(packet) { + "windowId" to packet.windowId + "slotID" to packet.slotId + "mouseButton" to packet.usedButton + "clickType" to packet.clickType + "transactionID" to packet.actionNumber + "clickedItem" to packet.clickedItem + } + } + is CPacketClientSettings -> { + if (!cPacketClientSettings) return + logClient(packet) { + "lang" to packet.lang + "view" to packet.view + "chatVisibility" to packet.chatVisibility + "enableColors" to packet.isColorsEnabled + "modelPartFlags" to packet.modelPartFlags + "mainHand" to packet.mainHand.name + } + } + is CPacketClientStatus -> { + if (!cPacketClientStatus) return + logClient(packet) { + "action" to packet.status.name + } + } + is CPacketCloseWindow -> { + logClient(packet) { + "windowID" to packet.windowID + } + } + is CPacketConfirmTeleport -> { + logClient(packet) { + "teleportID" to packet.teleportId + } + } + is CPacketConfirmTransaction -> { + if (!cPacketConfirmTransaction) return + logClient(packet) { + "windowID" to packet.windowId + "actionNumber" to packet.uid + "accepted" to packet.accepted + } + } + is CPacketCreativeInventoryAction -> { + if (!cPacketCreativeInventoryAction) return + logClient(packet) { + "slotID" to packet.slotId + "clickedItem" to packet.stack + } + } + is CPacketCustomPayload -> { + if (!cPacketCustomPayload) return + logClient(packet) { + "channel" to packet.channelName + "data" to packet.bufferData + } + } + is CPacketEnchantItem -> { + if (!cPacketEnchantItem) return + logClient(packet) { + "windowID" to packet.windowId + "button" to packet.button + } + } + is CPacketEntityAction -> { + if (!cPacketEntityAction) return + logClient(packet) { + "action" to packet.action.name + "auxData" to packet.auxData + } + } + is CPacketHeldItemChange -> { + if (!cPacketHeldItemChange) return + logClient(packet) { + "slotID" to packet.slotId + } + } + is CPacketInput -> { + if (!cPacketInput) return + logClient(packet) { + "forward" to packet.forwardSpeed + "strafe" to packet.strafeSpeed + "jump" to packet.isJumping + "sneak" to packet.isSneaking + } + } + is CPacketKeepAlive -> { + if (!cPacketKeepAlive) return + logClient(packet) { + "key" to packet.key + } + } + is CPacketPlaceRecipe -> { + if (!cPacketPlaceRecipe) return + logClient(packet) { + "windowID" to packet.func_194318_a() + @Suppress("DEPRECATION") + "recipe" to CraftingManager.getIDForRecipe(packet.func_194317_b()) + "shift" to packet.func_194319_c() + } + } + + is CPacketPlayer.Rotation -> { + if (!cPacketPlayerRotation) return + logClient(packet) { + "yaw" to packet.playerYaw + "pitch" to packet.playerPitch + "onGround" to packet.isOnGround + } + } + is CPacketPlayer.Position -> { + if (!cPacketPlayerPosition) return + logClient(packet) { + "x" to packet.playerX + "y" to packet.playerY + "z" to packet.playerZ + "onGround" to packet.isOnGround + } + } + is CPacketPlayer.PositionRotation -> { + if (!cPacketPlayerPositionRotation) return + logClient(packet) { + "x" to packet.playerX + "y" to packet.playerY + "z" to packet.playerZ + "yaw" to packet.playerYaw + "pitch" to packet.playerPitch + "onGround" to packet.isOnGround + } + } + is CPacketPlayer -> { + if (!cPacketPlayer) return + logClient(packet) { + "onGround" to packet.isOnGround + } + } + is CPacketPlayerAbilities -> { + if (!cPacketPlayerAbilities) return + logClient(packet) { + "invulnerable" to packet.isInvulnerable + "flying" to packet.isFlying + "allowFlying" to packet.isAllowFlying + "creativeMode" to packet.isCreativeMode + "flySpeed" to packet.flySpeed + "walkSpeed" to packet.walkSpeed + } + } + is CPacketPlayerDigging -> { + if (!cPacketPlayerDigging) return + logClient(packet) { + "pos" to packet.position + "facing" to packet.facing.name + "action" to packet.action.name + } + } + is CPacketPlayerTryUseItem -> { + if (!cPacketPlayerTryUseItem) return + logClient(packet) { + "hand" to packet.hand + } + } + is CPacketPlayerTryUseItemOnBlock -> { + if (!cPacketPlayerTryUseItemOnBlock) return + logClient(packet) { + "pos" to packet.pos + "side" to packet.direction.name + "hitVecX" to packet.facingX + "hitVecY" to packet.facingY + "hitVecZ" to packet.facingZ + } + } + is CPacketRecipeInfo -> { + if (!cPacketRecipeInfo) return + logClient(packet) { + "purpose" to packet.purpose.name + @Suppress("DEPRECATION") + "recipe" to CraftingManager.getIDForRecipe(packet.recipe) + "guiOpen" to packet.isGuiOpen + "filteringCraftable" to packet.isFilteringCraftable + } + } + is CPacketResourcePackStatus -> { + if (!cPacketResourcePackStatus) return + logClient(packet) { + "action" to packet.action.name + } + } + is CPacketSeenAdvancements -> { + if (!cPacketSeenAdvancements) return + logClient(packet) { + "action" to packet.action.name + @Suppress("UNNECESSARY_SAFE_CALL") + packet.tab?.let { + "tabName" to it.namespace + "tabPath" to it.path + } + } + } + is CPacketSpectate -> { + if (!cPacketSpectate) return + logClient(packet) { + "uuid" to packet.uuid + } + } + is CPacketSteerBoat -> { + if (!cPacketSteerBoat) return + logClient(packet) { + "left" to packet.left + "right" to packet.right + } + } + is CPacketTabComplete -> { + if (!cPacketTabComplete) return + logClient(packet) { + "text" to packet.message + "hasTarget" to packet.hasTargetBlock() + packet.targetBlock?.let { + "targetBlockPos" to it + } + } + } + is CPacketUpdateSign -> { + if (!cPacketUpdateSign) return + logClient(packet) { + "x" to packet.position.x + "y" to packet.position.y + "z" to packet.position.z + "line1" to packet.lines[0] + "line2" to packet.lines[1] + "line3" to packet.lines[2] + "line4" to packet.lines[3] + } + } + is CPacketUseEntity -> { + if (!cPacketUseEntity) return + @Suppress("UNNECESSARY_SAFE_CALL") + logClient(packet) { + "entityId" to packet.useEntityId + "action" to packet.action.name + "hitVecX" to packet.hitVec?.x + "hitVecX" to packet.hitVec?.y + "hitVecX" to packet.hitVec?.z + "hand" to packet.hand?.name + } + } + is CPacketVehicleMove -> { + if (!cPacketVehicleMove) return + logClient(packet) { + "x" to packet.x + "y" to packet.y + "z" to packet.z + "yaw" to packet.yaw + "pitch" to packet.pitch + } + } + else -> { + logClient(packet) { + +"Not Registered in PacketLogger" + } + } + } + } + } + private fun receivePacket(packet: Packet<*>) { if (packetSide == PacketSide.SERVER || packetSide == PacketSide.BOTH) { when (packet) { is SPacketAdvancementInfo -> { + if (!sPacketAdvancementInfo) return logServer(packet) { "isFirstSync" to packet.isFirstSync "advancementsToAdd" to buildString { @@ -185,43 +784,59 @@ object PacketLogger : Module( } } is SPacketAnimation -> { - "entityID" to packet.entityID - "animationType" to packet.animationType + if (!sPacketAnimation) return + logServer(packet) { + "entityId" to packet.entityID + "animationType" to packet.animationType + } } is SPacketBlockAction -> { - "blockPosition" to packet.blockPosition - "instrument" to packet.data1 - "pitch" to packet.data2 - "blockType" to packet.blockType + if (!sPacketBlockAction) return + logServer(packet) { + "blockPosition" to packet.blockPosition + "instrument" to packet.data1 + "pitch" to packet.data2 + "blockType" to packet.blockType + } } is SPacketBlockBreakAnim -> { - "breakerId" to packet.breakerId - "position" to packet.position - "progress" to packet.progress + if (!sPacketBlockBreakAnim) return + logServer(packet) { + "breakerId" to packet.breakerId + "position" to packet.position + "progress" to packet.progress + } } is SPacketBlockChange -> { + if (!sPacketBlockChange) return logServer(packet) { "blockPosition" to packet.blockPosition "block" to packet.blockState.block.localizedName } } is SPacketCamera -> { - "entityId" to packet.entityId + if (!sPacketCamera) return + logServer(packet) { + "entityId" to packet.entityId + } } is SPacketChangeGameState -> { - "value" to packet.value - "gameState" to packet.gameState + if (!sPacketChangeGameState) return + logServer(packet) { + "value" to packet.value + "gameState" to packet.gameState + } } is SPacketChat -> { - if (!ignoreChat) { - logServer(packet) { - "unformattedText" to packet.chatComponent.unformattedText - "type" to packet.type - "itSystem" to packet.isSystem - } + if (!sPacketChat) return + logServer(packet) { + "unformattedText" to packet.chatComponent.unformattedText + "type" to packet.type + "itSystem" to packet.isSystem } } is SPacketChunkData -> { + if (!sPacketChunkData) return logServer(packet) { "chunkX" to packet.chunkX "chunkZ" to packet.chunkZ @@ -229,11 +844,13 @@ object PacketLogger : Module( } } is SPacketCloseWindow -> { + if (!sPacketCloseWindow) return logServer(packet) { - +"Close current window." + "windowId" to packet.windowId } } is SPacketCollectItem -> { + if (!sPacketCollectItem) return logServer(packet) { "amount" to packet.amount "collectedItemEntityID" to packet.collectedItemEntityID @@ -241,6 +858,7 @@ object PacketLogger : Module( } } is SPacketCombatEvent -> { + if (!sPacketCombatEvent) return logServer(packet) { "eventType" to packet.eventType.name "playerId" to packet.playerId @@ -250,6 +868,7 @@ object PacketLogger : Module( } } is SPacketConfirmTransaction -> { + if (!sPacketConfirmTransaction) return logServer(packet) { "windowId" to packet.windowId "transactionID" to packet.actionNumber @@ -257,18 +876,21 @@ object PacketLogger : Module( } } is SPacketCooldown -> { + if (!sPacketCooldown) return logServer(packet) { "item" to packet.item.registryName "ticks" to packet.ticks } } is SPacketCustomPayload -> { + if (!sPacketCustomPayload) return logServer(packet) { "channelName" to packet.channelName "bufferData" to packet.bufferData } } is SPacketCustomSound -> { + if (!sPacketCustomSound) return logServer(packet) { "x" to packet.x "y" to packet.y @@ -280,6 +902,7 @@ object PacketLogger : Module( } } is SPacketDestroyEntities -> { + if (!sPacketDestroyEntities) return logServer(packet) { "entityIDs" to buildString { for (entry in packet.entityIDs) { @@ -291,17 +914,20 @@ object PacketLogger : Module( } } is SPacketDisconnect -> { + if (!sPacketDisconnect) return logServer(packet) { "reason" to packet.reason.unformattedText } } is SPacketDisplayObjective -> { + if (!sPacketDisplayObjective) return logServer(packet) { "position" to packet.position "name" to packet.name } } is SPacketEffect -> { + if (!sPacketEffect) return logServer(packet) { "soundData" to packet.soundData "soundPos" to packet.soundPos @@ -310,6 +936,7 @@ object PacketLogger : Module( } } is SPacketEntity.S15PacketEntityRelMove -> { + if (!s15PacketEntityRelMove) return logServer(packet) { "entityId" to packet.entityId "x" to packet.x @@ -319,6 +946,7 @@ object PacketLogger : Module( } } is SPacketEntity.S16PacketEntityLook -> { + if (!s16PacketEntityLook) return logServer(packet) { "entityId" to packet.entityId "yaw" to packet.yaw @@ -328,6 +956,7 @@ object PacketLogger : Module( } } is SPacketEntity.S17PacketEntityLookMove -> { + if(!s17PacketEntityLookMove) return logServer(packet) { "entityId" to packet.entityId "x" to packet.x @@ -340,6 +969,7 @@ object PacketLogger : Module( } } is SPacketEntity -> { + if (!sPacketEntity) return logServer(packet) { "entityId" to packet.entityId "x" to packet.x @@ -352,12 +982,14 @@ object PacketLogger : Module( } } is SPacketEntityAttach -> { + if (!sPacketEntityAttach) return logServer(packet) { "entityId" to packet.entityId "vehicleEntityId" to packet.vehicleEntityId } } is SPacketEntityEffect -> { + if (!sPacketEntityEffect) return logServer(packet) { "entityId" to packet.entityId "duration" to packet.duration @@ -368,19 +1000,22 @@ object PacketLogger : Module( } } is SPacketEntityEquipment -> { + if (!sPacketEntityEquipment) return logServer(packet) { "entityId" to packet.entityID - "duration" to packet.equipmentSlot - "amplifier" to packet.itemStack.displayName + "slot" to packet.equipmentSlot.name + "stack" to packet.itemStack.displayName } } is SPacketEntityHeadLook -> { + if (!sPacketEntityHeadLook) return logServer(packet) { "entityId" to packet.entityHeadLookEntityId "yaw" to packet.yaw } } is SPacketEntityMetadata -> { + if (!sPacketEntityMetadata) return logServer(packet) { "dataEntries" to buildString { for (entry in packet.dataManagerEntries) { @@ -399,17 +1034,20 @@ object PacketLogger : Module( } } is SPacketEntityProperties -> { + if (!sPacketEntityProperties) return logServer(packet) { "entityId" to packet.entityId "snapshots" to packet.snapshots } } is SPacketEntityStatus -> { + if (!sPacketEntityStatus) return logServer(packet) { "opCode" to packet.opCode } } is SPacketEntityTeleport -> { + if (!sPacketEntityTeleport) return logServer(packet) { "entityID" to packet.entityId "x" to packet.x @@ -420,6 +1058,7 @@ object PacketLogger : Module( } } is SPacketEntityVelocity -> { + if (!sPacketEntityVelocity) return logServer(packet) { "entityID" to packet.entityID "motionX" to packet.motionX @@ -428,6 +1067,7 @@ object PacketLogger : Module( } } is SPacketExplosion -> { + if (!sPacketExplosion) return logServer(packet) { "strength" to packet.strength "x" to packet.x @@ -453,11 +1093,13 @@ object PacketLogger : Module( } } is SPacketHeldItemChange -> { + if (!sPacketHeldItemChange) return logServer(packet) { "heldItemHotbarIndex" to packet.heldItemHotbarIndex } } is SPacketJoinGame -> { + if (!sPacketJoinGame) return logServer(packet) { "playerId" to packet.playerId "difficulty" to packet.difficulty.name @@ -470,18 +1112,27 @@ object PacketLogger : Module( } } is SPacketKeepAlive -> { - if (!ignoreKeepAlive) { - logServer(packet) { - "id" to packet.id - } + if (!sPacketKeepAlive) return + logServer(packet) { + "id" to packet.id } } is SPacketMaps -> { + if (!sPacketMaps) return logServer(packet) { "mapId" to packet.mapId + "mapScale" to packet.mapScale + "trackingPosition" to packet.trackingPosition + "icons" to packet.icons + "minX" to packet.minX + "minZ" to packet.minZ + "columns" to packet.columns + "rows" to packet.rows + "data" to packet.mapDataBytes } } is SPacketMoveVehicle -> { + if (!sPacketMoveVehicle) return logServer(packet) { "x" to packet.x "y" to packet.y @@ -491,6 +1142,7 @@ object PacketLogger : Module( } } is SPacketMultiBlockChange -> { + if (!sPacketMultiBlockChange) return logServer(packet) { "changedBlocks" to buildString { for (changedBlock in packet.changedBlocks) { @@ -503,12 +1155,20 @@ object PacketLogger : Module( append("z: ") append(changedBlock.pos.z) + append("offset: ") + append(changedBlock.offset) + + append("blockState: ") + @Suppress("DEPRECATION") + append(Block.BLOCK_STATE_IDS.get(changedBlock.blockState)) + append(' ') } } } } is SPacketOpenWindow -> { + if (!sPacketOpenWindow) return logServer(packet) { "entityId" to packet.entityId "windowTitle" to packet.windowTitle @@ -518,6 +1178,7 @@ object PacketLogger : Module( } } is SPacketParticles -> { + if (!sPacketParticles) return logServer(packet) { "particleType" to packet.particleType.name "isLongDistance" to packet.isLongDistance @@ -533,27 +1194,38 @@ object PacketLogger : Module( "particleArgs" to packet.particleArgs } } - is SPacketPlayerPosLook -> { + is SPacketPlaceGhostRecipe -> { + if (!sPacketPlaceGhostRecipe) return logServer(packet) { - "x" to packet.x - "y" to packet.y - "z" to packet.z - "yaw" to packet.yaw - "pitch" to packet.pitch - "teleportID" to packet.teleportId - "flags" to buildString { - for (entry in packet.flags) { - append("> ") - append(entry.name) - append(' ') - } - } + "windowId" to packet.func_194313_b() + @Suppress("DEPRECATION") + "recipeId" to CraftingManager.getIDForRecipe(packet.func_194311_a()) + } + } + is SPacketPlayerAbilities -> { + if (!sPacketPlayerAbilities) return + logServer(packet) { + "isInvulnerable" to packet.isInvulnerable + "isFlying" to packet.isFlying + "allowFlying" to packet.isAllowFlying + "isCreativeMode" to packet.isCreativeMode + "flySpeed" to packet.flySpeed + "walkSpeed" to packet.walkSpeed + } + } + is SPacketPlayerListHeaderFooter -> { + if (!sPacketPlayerListHeaderFooter) return + logServer(packet) { + "header" to ITextComponent.Serializer.componentToJson(packet.header) + "footer" to ITextComponent.Serializer.componentToJson(packet.footer) } } is SPacketPlayerListItem -> { + if (!sPacketPlayerListItem) return logServer(packet) { "action" to packet.action.name "entries" to buildString { + @Suppress("UNNECESSARY_SAFE_CALL") for (entry in packet.entries) { append("> displayName: ") append(entry.displayName) @@ -572,232 +1244,399 @@ object PacketLogger : Module( } } } - is SPacketSoundEffect -> { + is SPacketPlayerPosLook -> { + if (!sPacketPlayerPosLook) return logServer(packet) { - "sound" to packet.sound.soundName - "category" to packet.category - "posX" to packet.x - "posY" to packet.y - "posZ" to packet.z - "volume" to packet.volume + "x" to packet.x + "y" to packet.y + "z" to packet.z + "yaw" to packet.yaw "pitch" to packet.pitch + "teleportID" to packet.teleportId + "flags" to buildString { + for (entry in packet.flags) { + append("> ") + append(entry.name) + append(' ') + } + } } } - is SPacketSpawnObject -> { + is SPacketRecipeBook -> { + if (!sPacketRecipeBook) return + @Suppress("DEPRECATION") logServer(packet) { - "entityID" to packet.entityID - "data" to packet.data + "state" to packet.state.name + "recipes" to buildString { + for (recipe in packet.recipes) { + append("> ") + append(CraftingManager.getIDForRecipe(recipe)) + append(' ') + } + } + "displayedRecipes" to buildString { + for (recipe in packet.displayedRecipes) { + append("> ") + append(CraftingManager.getIDForRecipe(recipe)) + append(' ') + } + } + "guiOpen" to packet.isGuiOpen + "filteringCraftable" to packet.isFilteringCraftable } } - is SPacketSpawnPlayer -> { + is SPacketRemoveEntityEffect -> { + if (!sPacketRemoveEntityEffect) return logServer(packet) { - "entityID" to packet.entityID - "uniqueID" to packet.uniqueId - "x" to packet.x - "y" to packet.y - "z" to packet.z - "yaw" to packet.yaw - "pitch" to packet.pitch + mc.world?.let { world -> + packet.getEntity(world)?.let { + "entityID" to it.entityId + } + } + packet.potion?.let { "effectID" to Potion.getIdFromPotion(it) } } } - is SPacketTeams -> { + is SPacketResourcePackSend -> { + if (!sPacketResourcePackSend) return logServer(packet) { + "url" to packet.url + "hash" to packet.hash + } + } + is SPacketRespawn -> { + if (!sPacketRespawn) return + logServer(packet) { + "dimensionID" to packet.dimensionID + "difficulty" to packet.difficulty.name + "gameType" to packet.gameType.name + "worldType" to packet.worldType.name + } + } + is SPacketScoreboardObjective -> { + if (!sPacketScoreboardObjective) return + logServer(packet) { + "name" to packet.objectiveName + "value" to packet.objectiveValue + "type" to packet.renderType.renderType "action" to packet.action - "type" to packet.displayName - "itSystem" to packet.color } } - is SPacketTimeUpdate -> { - if (!ignoreTimeUpdates) { - logServer(packet) { - "totalWorldTime" to packet.totalWorldTime - "worldTime" to packet.worldTime + is SPacketSelectAdvancementsTab -> { + if (!sPacketSelectAdvancementsTab) return + logServer(packet) { + packet.tab?.let { + "name" to it.namespace + "path" to it.path + }?.run { + "name" to "" + "path" to "" } } } - is SPacketUnloadChunk -> { - if (!ignoreChunkLoading) { - logServer(packet) { - "x" to packet.x - "z" to packet.z - } + is SPacketServerDifficulty -> { + if (!sPacketServerDifficulty) return + logServer(packet) { + "difficulty" to packet.difficulty.name + "difficultyLocked" to packet.isDifficultyLocked } } - is SPacketUpdateTileEntity -> { + is SPacketSetExperience -> { + if (!sPacketSetExperience) return logServer(packet) { - "x" to packet.pos.x - "y" to packet.pos.y - "z" to packet.pos.z + "experienceBar" to packet.experienceBar + "totalExperience" to packet.totalExperience + "level" to packet.level } } - is SPacketWindowItems -> { + is SPacketSetPassengers -> { + if (!sPacketSetPassengers) return logServer(packet) { - "windowId" to packet.windowId - "itemStacks" to buildString { - for (entry in packet.itemStacks) { + "entityID" to packet.entityId + "passengers" to buildString { + for (passenger in packet.passengerIds) { append("> ") - append(entry.displayName) + append(passenger) append(' ') } } } } is SPacketSetSlot -> { + if (!sPacketSetSlot) return logServer(packet) { "slot" to packet.slot "stack" to packet.stack.displayName "windowId" to packet.windowId } } - else -> { - if (!ignoreUnknown) { - logServer(packet) { - +"Not Registered in PacketLogger" - } + is SPacketSignEditorOpen -> { + if (!sPacketSignEditorOpen) return + logServer(packet) { + "posX" to packet.signPosition.x + "posY" to packet.signPosition.y + "posZ" to packet.signPosition.z } } - } - } - } - - private fun sendPacket(packet: Packet<*>) { - if (packetSide == PacketSide.CLIENT || packetSide == PacketSide.BOTH) { - when (packet) { - is CPacketAnimation -> { - logClient(packet) { - "hand" to packet.hand + is SPacketSoundEffect -> { + if (!sPacketSoundEffect) return + logServer(packet) { + "sound" to packet.sound.soundName + "category" to packet.category + "posX" to packet.x + "posY" to packet.y + "posZ" to packet.z + "volume" to packet.volume + "pitch" to packet.pitch } } - is CPacketChatMessage -> { - if (!ignoreChat) { - logClient(packet) { - "message" to packet.message - } + is SPacketSpawnExperienceOrb -> { + if (!sPacketSpawnExperienceOrb) return + logServer(packet) { + "entityID" to packet.entityID + "x" to packet.x + "y" to packet.y + "z" to packet.z + "count" to packet.xpValue } } - is CPacketClickWindow -> { - logClient(packet) { - "windowId" to packet.windowId - "slotID" to packet.slotId - "mouseButton" to packet.usedButton - "clickType" to packet.clickType - "transactionID" to packet.actionNumber - "clickedItem" to packet.clickedItem + is SPacketSpawnGlobalEntity -> { + if (!sPacketSpawnGlobalEntity) return + logServer(packet) { + "entityID" to packet.entityId + "type" to packet.type + "x" to packet.x + "y" to packet.y + "z" to packet.z } } - is CPacketConfirmTeleport -> { - logClient(packet) { - "teleportID" to packet.teleportId + is SPacketSpawnMob -> { + if (!sPacketSpawnMob) return + logServer(packet) { + "entityID" to packet.entityID + "uuid" to packet.uniqueId + "type" to packet.entityType + "x" to packet.x + "y" to packet.y + "z" to packet.z + "yaw" to packet.yaw + "pitch" to packet.pitch + "headPitch" to packet.headPitch + "velocityX" to packet.velocityX + "velocityY" to packet.velocityY + "velocityZ" to packet.velocityZ + packet.dataManagerEntries?.let { metadata -> + "metadata" to buildString { + for (entry in metadata) { + append("> ") + append(entry.key.id) + append(": ") + append(entry.value) + append(' ') + } + } + } } } - is CPacketEntityAction -> { - logClient(packet) { - "action" to packet.action.name - "auxData" to packet.auxData + is SPacketSpawnObject -> { + if (!sPacketSpawnObject) return + logServer(packet) { + "entityID" to packet.entityID + "uuid" to packet.uniqueId + "x" to packet.x + "y" to packet.y + "z" to packet.z + "speedX" to packet.speedX + "speedY" to packet.speedY + "speedZ" to packet.speedZ + "pitch" to packet.pitch + "yaw" to packet.yaw + "type" to packet.type + "data" to packet.data } } - is CPacketHeldItemChange -> { - logClient(packet) { - "slotID" to packet.slotId + is SPacketSpawnPainting -> { + if (!sPacketSpawnPainting) return + logServer(packet) { + "entityID" to packet.entityID + "uuid" to packet.uniqueId + "title" to packet.title + "x" to packet.position.x + "y" to packet.position.y + "z" to packet.position.z + "facing" to packet.facing.name } } - is CPacketKeepAlive -> { - if (!ignoreKeepAlive) { - logClient(packet) { - "ket" to packet.key + is SPacketSpawnPlayer -> { + if (!sPacketSpawnPlayer) return + logServer(packet) { + "entityID" to packet.entityID + "uniqueID" to packet.uniqueId + "x" to packet.x + "y" to packet.y + "z" to packet.z + "yaw" to packet.yaw + "pitch" to packet.pitch + "dataManagerEntries" to buildString { + packet.dataManagerEntries?.forEach { + append("> ") + append(it.key) + append(": ") + append(it.value) + append(' ') + } } } } - is CPacketPlayer.Rotation -> { - if (!ignorePlayerPosition) { - logClient(packet) { - "yaw" to packet.playerYaw - "pitch" to packet.playerPitch - "onGround" to packet.isOnGround - } + is SPacketSpawnPosition -> { + if (!sPacketSpawnPosition) return + logServer(packet) { + "pos" to packet.spawnPos } } - is CPacketPlayer.Position -> { - if (!ignorePlayerPosition) { - logClient(packet) { - "x" to packet.playerX - "y" to packet.playerY - "z" to packet.playerZ - "onGround" to packet.isOnGround - } + is SPacketStatistics -> { + if (!sPacketStatistics) return + logServer(packet) { + "statistics" to packet.statisticMap } } - is CPacketPlayer.PositionRotation -> { - if (!ignorePlayerPosition) { - logClient(packet) { - "x" to packet.playerX - "y" to packet.playerY - "z" to packet.playerZ - "yaw" to packet.playerYaw - "pitch" to packet.playerPitch - "onGround" to packet.isOnGround - } + is SPacketTabComplete -> { + if (!sPacketTabComplete) return + logServer(packet) { + "matches" to packet.matches } } - is CPacketPlayer -> { - if (!ignorePlayerPosition) { - logClient(packet) { - "onGround" to packet.isOnGround - } + is SPacketTeams -> { + if (!sPacketTeams) return + logServer(packet) { + "action" to packet.action + "type" to packet.displayName + "itSystem" to packet.color } } - is CPacketPlayerDigging -> { - logClient(packet) { - "x" to packet.position.x - "y" to packet.position.y - "z" to packet.position.z - "facing" to packet.facing - "action" to packet.action + is SPacketTimeUpdate -> { + if (!sPacketTimeUpdate) return + logServer(packet) { + "totalWorldTime" to packet.totalWorldTime + "worldTime" to packet.worldTime } } - is CPacketPlayerTryUseItem -> { - logClient(packet) { - "hand" to packet.hand + is SPacketTitle -> { + if (!sPacketTitle) return + logServer(packet) { + "action" to packet.type + "text" to packet.message + "fadeIn" to packet.fadeInTime + "stay" to packet.displayTime + "fadeOut" to packet.fadeOutTime } } - is CPacketPlayerTryUseItemOnBlock -> { - logClient(packet) { - "x" to packet.pos.x - "y" to packet.pos.y - "z" to packet.pos.z - "side" to packet.direction - "hitVecX" to packet.facingX - "hitVecY" to packet.facingY - "hitVecZ" to packet.facingZ + is SPacketUnloadChunk -> { + if (!sPacketUnloadChunk) return + logServer(packet) { + "x" to packet.x + "z" to packet.z } } - is CPacketUseEntity -> { + is SPacketUpdateBossInfo -> { + if (!sPacketUpdateBossInfo) return + logServer(packet) { + "uuid" to packet.uniqueId + "operation" to packet.operation.name + "name" to ITextComponent.Serializer.componentToJson(packet.name) + "percent" to packet.percent + "color" to packet.color + "overlay" to packet.overlay.name + "darkenSky" to packet.shouldDarkenSky() + "playEndBossMusic" to packet.shouldPlayEndBossMusic() + "createFog" to packet.shouldCreateFog() + } + } + is SPacketUpdateHealth -> { + if (!sPacketUpdateHealth) return + logServer(packet) { + "health" to packet.health + "foodLevel" to packet.foodLevel + "saturationLevel" to packet.saturationLevel + } + } + is SPacketUpdateScore -> { + if (!sPacketUpdateScore) return + logServer(packet) { + "playerName" to packet.playerName + "objective" to packet.objectiveName + "value" to packet.scoreValue + "action" to packet.scoreAction.name + } + } + is SPacketUpdateTileEntity -> { + if (!sPacketUpdateTileEntity) return + logServer(packet) { + "pos" to packet.pos + "type" to packet.tileEntityType + "nbt" to packet.nbtCompound.toString() + } + } + is SPacketUseBed -> { + if (!sPacketUseBed) return @Suppress("UNNECESSARY_SAFE_CALL") - logClient(packet) { - "action" to packet.action - "action" to packet.hand - "hitVecX" to packet.hitVec?.x - "hitVecX" to packet.hitVec?.y - "hitVecX" to packet.hitVec?.z + logServer(packet) { + mc.world?.let { world -> + "player" to packet.getPlayer(world)?.name + } + "pos" to packet.bedPosition } } - is CPacketCloseWindow -> { - logClient(packet) { - "windowID" to packet.windowID + is SPacketWindowItems -> { + if (!sPacketWindowItems) return + logServer(packet) { + "windowId" to packet.windowId + "itemStacks" to buildString { + for (entry in packet.itemStacks) { + append("> ") + append(entry.displayName) + append(' ') + } + } + } + } + is SPacketWindowProperty -> { + if (!sPacketWindowProperty) return + logServer(packet) { + "windowId" to packet.windowId + "property" to packet.property + "value" to packet.value + } + } + is SPacketWorldBorder -> { + if (!sPacketWorldBorder) return + logServer(packet) { + "action" to packet.action.name + "size" to packet.size + "centerX" to packet.centerX + "centerZ" to packet.centerZ + "targetSize" to packet.targetSize + "diameter" to packet.diameter + "timeUntilTarget" to packet.timeUntilTarget + "warningTime" to packet.warningTime + "warningDistance" to packet.warningDistance } } else -> { - if (!ignoreUnknown) { - logClient(packet) { - +"Not Registered in PacketLogger" - } + logServer(packet) { + +"Not Registered in PacketLogger" } } } } } + private fun write() { + if (logMode != LogMode.FILE && logMode != LogMode.CHAT_AND_FILE && logMode != LogMode.ALL) { + lines.clear() + return + } + val lines = synchronized(this) { val cache = lines lines = ArrayList() @@ -813,6 +1652,9 @@ object PacketLogger : Module( FileWriter("${FolderUtils.packetLogFolder}${filename}", true).buffered().use { for (line in lines) it.write(line) } + runSafe { + MessageSendHelper.sendChatMessage("$chatName Log saved at ${TextFormatting.GREEN}${FolderUtils.packetLogFolder}${filename}") + } } catch (e: Exception) { LambdaMod.LOG.warn("$chatName Failed saving packet log!", e) } @@ -836,13 +1678,19 @@ object PacketLogger : Module( append(',') append(packet.javaClass.simpleName) - append(',') - - append(System.currentTimeMillis() - start) - append(',') - - append(System.currentTimeMillis() - last) - append(',') + if (absoluteTime) { + append(',') + append(System.currentTimeMillis()) + } + if (startDelta) { + append(',') + append(System.currentTimeMillis() - start) + } + if (lastDelta) { + append(',') + append(System.currentTimeMillis() - last) + } + append(": ") } } @@ -885,14 +1733,22 @@ object PacketLogger : Module( toString() } - synchronized(PacketLogger) { - lines.add(string) - last = System.currentTimeMillis() + if (logMode == LogMode.CHAT_AND_FILE || logMode == LogMode.FILE || logMode == LogMode.ALL) { + synchronized(PacketLogger) { + lines.add(string) + last = System.currentTimeMillis() + } } - if (logInChat) { + if (logMode == LogMode.CHAT_AND_FILE || logMode == LogMode.CHAT || logMode == LogMode.ALL) { MessageSendHelper.sendChatMessage(string) } + + if (logMode == LogMode.ONLY_HUD || logMode == LogMode.ALL) { + if (PacketLogViewer.visible) { + PacketLogViewer.addPacketLog(string.replace("\n", "")) + } + } } } } diff --git a/src/main/resources/mixins.lambda.json b/src/main/resources/mixins.lambda.json index 464f846b0..a5e5d0ade 100644 --- a/src/main/resources/mixins.lambda.json +++ b/src/main/resources/mixins.lambda.json @@ -20,15 +20,23 @@ "accessor.gui.AccessorGuiEditSign", "accessor.gui.AccessorGuiScreen", "accessor.network.AccessorCPacketChatMessage", + "accessor.network.AccessorCPacketClientSettings", "accessor.network.AccessorCPacketCloseWindow", + "accessor.network.AccessorCPacketConfirmTransaction", "accessor.network.AccessorCPacketPlayer", + "accessor.network.AccessorCPacketPlayerAbilities", + "accessor.network.AccessorCPacketResourcePackStatus", + "accessor.network.AccessorCPacketSpectate", "accessor.network.AccessorCPacketUseEntity", "accessor.network.AccessorSPacketChat", + "accessor.network.AccessorSPacketCloseWindow", "accessor.network.AccessorSPacketEntity", "accessor.network.AccessorSPacketEntityHeadLook", "accessor.network.AccessorSPacketEntityVelocity", "accessor.network.AccessorSPacketExplosion", + "accessor.network.AccessorSPacketMaps", "accessor.network.AccessorSPacketPosLook", + "accessor.network.AccessorSPacketWorldBorder", "accessor.player.AccessorEntityPlayerSP", "accessor.player.AccessorPlayerControllerMP", "accessor.render.AccessorRenderGlobal", From 2d68336cf1b9462ab0ec46a733a9dd1267a9f6b3 Mon Sep 17 00:00:00 2001 From: Constructor Date: Wed, 12 Jul 2023 21:46:34 +0200 Subject: [PATCH 2/4] Fix broken csv format --- .../com/lambda/client/module/modules/player/PacketLogger.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/com/lambda/client/module/modules/player/PacketLogger.kt b/src/main/kotlin/com/lambda/client/module/modules/player/PacketLogger.kt index 7eed88e96..b416b5b1d 100644 --- a/src/main/kotlin/com/lambda/client/module/modules/player/PacketLogger.kt +++ b/src/main/kotlin/com/lambda/client/module/modules/player/PacketLogger.kt @@ -402,7 +402,7 @@ object PacketLogger : Module( if (showClientTicks) { synchronized(this@PacketLogger) { val current = System.currentTimeMillis() - val line = "Tick Pulse: Start Delta: ${current - start}, Last Tick Delta: ${current - lastTick}\n" + val line = "Tick Pulse,,${current - start},${current - lastTick}\n" if (logMode == LogMode.CHAT_AND_FILE || logMode == LogMode.FILE || logMode == LogMode.ALL) { lines.add(line) } From 4b33733e1172ae69ffbd7e87ec42cf561c38c67d Mon Sep 17 00:00:00 2001 From: Constructor Date: Tue, 8 Aug 2023 02:03:01 +0200 Subject: [PATCH 3/4] Small refactor --- .../lambda/client/mixin/extension/Network.kt | 34 +-- .../module/modules/player/PacketCancel.kt | 214 +++++++++--------- .../module/modules/player/PacketLogger.kt | 3 - 3 files changed, 124 insertions(+), 127 deletions(-) diff --git a/src/main/kotlin/com/lambda/client/mixin/extension/Network.kt b/src/main/kotlin/com/lambda/client/mixin/extension/Network.kt index 5f62bea90..f79ef302c 100644 --- a/src/main/kotlin/com/lambda/client/mixin/extension/Network.kt +++ b/src/main/kotlin/com/lambda/client/mixin/extension/Network.kt @@ -8,7 +8,7 @@ import net.minecraft.world.storage.MapDecoration import java.util.* var CPacketChatMessage.chatMessage: String - get() = this.message + get() = message set(value) { (this as AccessorCPacketChatMessage).setMessage(value) } @@ -21,37 +21,37 @@ val CPacketConfirmTransaction.accepted: Boolean get() = (this as AccessorCPacketConfirmTransaction).accepted var CPacketPlayer.playerX: Double - get() = this.getX(0.0) + get() = getX(0.0) set(value) { (this as AccessorCPacketPlayer).setX(value) } var CPacketPlayer.playerY: Double - get() = this.getY(0.0) + get() = getY(0.0) set(value) { (this as AccessorCPacketPlayer).setY(value) } var CPacketPlayer.playerZ: Double - get() = this.getZ(0.0) + get() = getZ(0.0) set(value) { (this as AccessorCPacketPlayer).setZ(value) } var CPacketPlayer.playerYaw: Float - get() = this.getYaw(0.0f) + get() = getYaw(0.0f) set(value) { (this as AccessorCPacketPlayer).setYaw(value) } var CPacketPlayer.playerPitch: Float - get() = this.getPitch(0.0f) + get() = getPitch(0.0f) set(value) { (this as AccessorCPacketPlayer).setPitch(value) } var CPacketPlayer.playerIsOnGround: Boolean - get() = this.isOnGround + get() = isOnGround set(value) { (this as AccessorCPacketPlayer).setOnGround(value) } @@ -84,13 +84,13 @@ var CPacketUseEntity.useEntityId: Int } var CPacketUseEntity.useEntityAction: CPacketUseEntity.Action - get() = this.action + get() = action set(value) { (this as AccessorCPacketUseEntity).setAction(value) } var SPacketChat.textComponent: ITextComponent - get() = this.chatComponent + get() = chatComponent set(value) { (this as AccessorSPacketChat).setChatComponent(value) } @@ -99,37 +99,37 @@ val SPacketCloseWindow.windowId: Int get() = (this as AccessorSPacketCloseWindow).windowId var SPacketEntityVelocity.entityVelocityMotionX: Int - get() = this.motionX + get() = motionX set(value) { (this as AccessorSPacketEntityVelocity).setMotionX(value) } var SPacketEntityVelocity.entityVelocityMotionY: Int - get() = this.motionY + get() = motionY set(value) { (this as AccessorSPacketEntityVelocity).setMotionY(value) } var SPacketEntityVelocity.entityVelocityMotionZ: Int - get() = this.motionZ + get() = motionZ set(value) { (this as AccessorSPacketEntityVelocity).setMotionZ(value) } var SPacketExplosion.explosionMotionX: Float - get() = this.motionX + get() = motionX set(value) { (this as AccessorSPacketExplosion).setMotionX(value) } var SPacketExplosion.explosionMotionY: Float - get() = this.motionY + get() = motionY set(value) { (this as AccessorSPacketExplosion).setMotionY(value) } var SPacketExplosion.explosionMotionZ: Float - get() = this.motionZ + get() = motionZ set(value) { (this as AccessorSPacketExplosion).setMotionZ(value) } @@ -152,13 +152,13 @@ val SPacketMaps.mapDataBytes: ByteArray get() = (this as AccessorSPacketMaps).mapDataBytes var SPacketPlayerPosLook.playerPosLookYaw: Float - get() = this.yaw + get() = yaw set(value) { (this as AccessorSPacketPosLook).setYaw(value) } var SPacketPlayerPosLook.playerPosLookPitch: Float - get() = this.pitch + get() = pitch set(value) { (this as AccessorSPacketPosLook).setPitch(value) } diff --git a/src/main/kotlin/com/lambda/client/module/modules/player/PacketCancel.kt b/src/main/kotlin/com/lambda/client/module/modules/player/PacketCancel.kt index 893b1ca0e..b58b5144c 100644 --- a/src/main/kotlin/com/lambda/client/module/modules/player/PacketCancel.kt +++ b/src/main/kotlin/com/lambda/client/module/modules/player/PacketCancel.kt @@ -33,80 +33,80 @@ object PacketCancel : Module( private val categorySetting by setting("Category", CategorySlider.PLAYER) private val disableAllClient by setting("Disable All Client", false, { side == Side.CLIENT }, { _, _ -> - CPacketAnimationSetting = false - CPacketUseEntitySetting = false - CPacketChatMessageSetting = false - CPacketClickWindowSetting = false - CPacketClientSettingsSetting = false - CPacketClientStatusSetting = false - CPacketCloseWindowSetting = false - CPacketConfirmTeleportSetting = false - CPacketConfirmTransactionSetting = false - CPacketCreativeInventoryActionSetting = false - CPacketCustomPayloadSetting = false - CPacketEnchantItemSetting = false - CPacketEntityActionSetting = false - CPacketPlayerPositionSetting = false - CPacketPlayerPositionRotationSetting = false - CPacketHeldItemChangeSetting = false - CPacketInputSetting = false - CPacketPlaceRecipeSetting = false - CPacketPlayerAbilitiesSetting = false - CPacketPlayerTryUseItemSetting = false - CPacketPlayerTryUseItemOnBlockSetting = false - CPacketServerQuerySetting = false - CPacketLoginStartSetting = false - CPacketPingSetting = false - CPacketEncryptionResponseSetting = false - CPacketVehicleMoveSetting = false - CPacketUpdateSignSetting = false - CPacketTabCompleteSetting = false - CPacketSteerBoatSetting = false - CPacketSpectateSetting = false - CPacketSeenAdvancementsSetting = false - CPacketResourcePackStatusSetting = false - CPacketRecipeInfoSetting = false - CPacketPlayerDiggingSetting = false - CPacketKeepAliveSetting = false + cPacketAnimationSetting = false + cPacketUseEntitySetting = false + cPacketChatMessageSetting = false + cPacketClickWindowSetting = false + cPacketClientSettingsSetting = false + cPacketClientStatusSetting = false + cPacketCloseWindowSetting = false + cPacketConfirmTeleportSetting = false + cPacketConfirmTransactionSetting = false + cPacketCreativeInventoryActionSetting = false + cPacketCustomPayloadSetting = false + cPacketEnchantItemSetting = false + cPacketEntityActionSetting = false + cPacketPlayerPositionSetting = false + cPacketPlayerPositionRotationSetting = false + cPacketHeldItemChangeSetting = false + cPacketInputSetting = false + cPacketPlaceRecipeSetting = false + cPacketPlayerAbilitiesSetting = false + cPacketPlayerTryUseItemSetting = false + cPacketPlayerTryUseItemOnBlockSetting = false + cPacketServerQuerySetting = false + cPacketLoginStartSetting = false + cPacketPingSetting = false + cPacketEncryptionResponseSetting = false + cPacketVehicleMoveSetting = false + cPacketUpdateSignSetting = false + cPacketTabCompleteSetting = false + cPacketSteerBoatSetting = false + cPacketSpectateSetting = false + cPacketSeenAdvancementsSetting = false + cPacketResourcePackStatusSetting = false + cPacketRecipeInfoSetting = false + cPacketPlayerDiggingSetting = false + cPacketKeepAliveSetting = false false }) - private var CPacketAnimationSetting by setting("CPacketAnimation", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private var CPacketUseEntitySetting by setting("CPacketUseEntity", false, { side == Side.CLIENT && categorySetting == CategorySlider.ENTITY }) - private var CPacketChatMessageSetting by setting("CPacketChatMessage", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private var CPacketClickWindowSetting by setting("CPacketClickWindow", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) - private var CPacketClientSettingsSetting by setting("CPacketClient", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private var CPacketClientStatusSetting by setting("CPacketClientStatus", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private var CPacketCloseWindowSetting by setting("CPacketCloseWindow", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) - private var CPacketConfirmTeleportSetting by setting("CPacketConfirmTeleport", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private var CPacketConfirmTransactionSetting by setting("CPacketConfirmTransaction", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) - private var CPacketCreativeInventoryActionSetting by setting("CPacketCreativeInventoryAction", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) - private var CPacketCustomPayloadSetting by setting("CPacketCustomPayload", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private var CPacketEnchantItemSetting by setting("CPacketEnchantItem", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) - private var CPacketEntityActionSetting by setting("CPacketEntityAction", false, { side == Side.CLIENT && categorySetting == CategorySlider.ENTITY }) - private var CPacketPlayerPositionSetting by setting("CPacketPlayerPosition", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private var CPacketPlayerRotationSetting by setting("CPacketPlayerRotation", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private var CPacketPlayerPositionRotationSetting by setting("CPacketPlayerPositionRotation", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private var CPacketHeldItemChangeSetting by setting("CPacketHeldItemChange", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) - private var CPacketInputSetting by setting("CPacketInput", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private var CPacketPlaceRecipeSetting by setting("CPacketPlaceRecipe", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) - private var CPacketPlayerAbilitiesSetting by setting("CPacketPlayerAbilities", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private var CPacketPlayerTryUseItemSetting by setting("CPacketPlayerTryUseItem", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private var CPacketPlayerTryUseItemOnBlockSetting by setting("CPacketPlayerTryUseItemOnBlock", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private var CPacketServerQuerySetting by setting("CPacketServerQuery", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private var CPacketLoginStartSetting by setting("CPacketLoginStart", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private var CPacketPingSetting by setting("CPacketPing", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private var CPacketEncryptionResponseSetting by setting("CPacketEncryptionResponse", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private var CPacketVehicleMoveSetting by setting("CPacketVehicleMove", false, { side == Side.CLIENT && categorySetting == CategorySlider.ENTITY }) - private var CPacketUpdateSignSetting by setting("CPacketUpdateSign", false, { side == Side.CLIENT && categorySetting == CategorySlider.WORLD }) - private var CPacketTabCompleteSetting by setting("CPacketTabComplete", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private var CPacketSteerBoatSetting by setting("CPacketSteerBoat", false, { side == Side.CLIENT && categorySetting == CategorySlider.ENTITY }) - private var CPacketSpectateSetting by setting("CPacketSpectate", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private var CPacketSeenAdvancementsSetting by setting("CPacketSeenAdvancements", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private var CPacketResourcePackStatusSetting by setting("CPacketResourcePackStatus", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) - private var CPacketRecipeInfoSetting by setting("CPacketRecipeInfo", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) - private var CPacketPlayerDiggingSetting by setting("CPacketPlayerDigging", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) - private var CPacketKeepAliveSetting by setting("CPacketKeepAlive", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var cPacketAnimationSetting by setting("CPacketAnimation", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketUseEntitySetting by setting("CPacketUseEntity", false, { side == Side.CLIENT && categorySetting == CategorySlider.ENTITY }) + private var cPacketChatMessageSetting by setting("CPacketChatMessage", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var cPacketClickWindowSetting by setting("CPacketClickWindow", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var cPacketClientSettingsSetting by setting("CPacketClient", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var cPacketClientStatusSetting by setting("CPacketClientStatus", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var cPacketCloseWindowSetting by setting("CPacketCloseWindow", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var cPacketConfirmTeleportSetting by setting("CPacketConfirmTeleport", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketConfirmTransactionSetting by setting("CPacketConfirmTransaction", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var cPacketCreativeInventoryActionSetting by setting("CPacketCreativeInventoryAction", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var cPacketCustomPayloadSetting by setting("CPacketCustomPayload", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var cPacketEnchantItemSetting by setting("CPacketEnchantItem", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var cPacketEntityActionSetting by setting("CPacketEntityAction", false, { side == Side.CLIENT && categorySetting == CategorySlider.ENTITY }) + private var cPacketPlayerPositionSetting by setting("CPacketPlayerPosition", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketPlayerRotationSetting by setting("CPacketPlayerRotation", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketPlayerPositionRotationSetting by setting("CPacketPlayerPositionRotation", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketHeldItemChangeSetting by setting("CPacketHeldItemChange", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var cPacketInputSetting by setting("CPacketInput", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketPlaceRecipeSetting by setting("CPacketPlaceRecipe", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var cPacketPlayerAbilitiesSetting by setting("CPacketPlayerAbilities", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketPlayerTryUseItemSetting by setting("CPacketPlayerTryUseItem", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketPlayerTryUseItemOnBlockSetting by setting("CPacketPlayerTryUseItemOnBlock", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketServerQuerySetting by setting("CPacketServerQuery", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var cPacketLoginStartSetting by setting("CPacketLoginStart", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var cPacketPingSetting by setting("CPacketPing", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var cPacketEncryptionResponseSetting by setting("CPacketEncryptionResponse", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var cPacketVehicleMoveSetting by setting("CPacketVehicleMove", false, { side == Side.CLIENT && categorySetting == CategorySlider.ENTITY }) + private var cPacketUpdateSignSetting by setting("CPacketUpdateSign", false, { side == Side.CLIENT && categorySetting == CategorySlider.WORLD }) + private var cPacketTabCompleteSetting by setting("CPacketTabComplete", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var cPacketSteerBoatSetting by setting("CPacketSteerBoat", false, { side == Side.CLIENT && categorySetting == CategorySlider.ENTITY }) + private var cPacketSpectateSetting by setting("CPacketSpectate", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketSeenAdvancementsSetting by setting("CPacketSeenAdvancements", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var cPacketResourcePackStatusSetting by setting("CPacketResourcePackStatus", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) + private var cPacketRecipeInfoSetting by setting("CPacketRecipeInfo", false, { side == Side.CLIENT && categorySetting == CategorySlider.INVENTORY }) + private var cPacketPlayerDiggingSetting by setting("CPacketPlayerDigging", false, { side == Side.CLIENT && categorySetting == CategorySlider.PLAYER }) + private var cPacketKeepAliveSetting by setting("CPacketKeepAlive", false, { side == Side.CLIENT && categorySetting == CategorySlider.SYSTEM }) private val disableAllServer by setting("Disable All Server", false, { side == Side.SERVER }, { _, _ -> SPacketEntityS17PacketEntityLookMoveSetting = false @@ -290,42 +290,42 @@ object PacketCancel : Module( listener { when (it.packet) { - is CPacketAnimation -> if (CPacketAnimationSetting) it.cancel().also { numPackets++ } - is CPacketUseEntity -> if (CPacketUseEntitySetting) it.cancel().also { numPackets++ } - is CPacketChatMessage -> if (CPacketChatMessageSetting) it.cancel().also { numPackets++ } - is CPacketClickWindow -> if (CPacketClickWindowSetting) it.cancel().also { numPackets++ } - is CPacketClientSettings -> if (CPacketClientSettingsSetting) it.cancel().also { numPackets++ } - is CPacketClientStatus -> if (CPacketClientStatusSetting) it.cancel().also { numPackets++ } - is CPacketCloseWindow -> if (CPacketCloseWindowSetting) it.cancel().also { numPackets++ } - is CPacketConfirmTeleport -> if (CPacketConfirmTeleportSetting) it.cancel().also { numPackets++ } - is CPacketConfirmTransaction -> if (CPacketConfirmTransactionSetting) it.cancel().also { numPackets++ } - is CPacketCreativeInventoryAction -> if (CPacketCreativeInventoryActionSetting) it.cancel().also { numPackets++ } - is CPacketCustomPayload -> if (CPacketCustomPayloadSetting) it.cancel().also { numPackets++ } - is CPacketEnchantItem -> if (CPacketEnchantItemSetting) it.cancel().also { numPackets++ } - is CPacketEntityAction -> if (CPacketEntityActionSetting) it.cancel().also { numPackets++ } - is CPacketPlayer.Position -> if (CPacketPlayerPositionSetting) it.cancel().also { numPackets++ } - is CPacketPlayer.Rotation -> if (CPacketPlayerRotationSetting) it.cancel().also { numPackets++ } - is CPacketPlayer.PositionRotation -> if (CPacketPlayerPositionRotationSetting) it.cancel().also { numPackets++ } - is CPacketHeldItemChange -> if (CPacketHeldItemChangeSetting) it.cancel().also { numPackets++ } - is CPacketInput -> if (CPacketInputSetting) it.cancel().also { numPackets++ } - is CPacketPlaceRecipe -> if (CPacketPlaceRecipeSetting) it.cancel().also { numPackets++ } - is CPacketPlayerAbilities -> if (CPacketPlayerAbilitiesSetting) it.cancel().also { numPackets++ } - is CPacketPlayerTryUseItem -> if (CPacketPlayerTryUseItemSetting) it.cancel().also { numPackets++ } - is CPacketPlayerTryUseItemOnBlock -> if (CPacketPlayerTryUseItemOnBlockSetting) it.cancel().also { numPackets++ } - is CPacketServerQuery -> if (CPacketServerQuerySetting) it.cancel().also { numPackets++ } - is CPacketLoginStart -> if (CPacketLoginStartSetting) it.cancel().also { numPackets++ } - is CPacketPing -> if (CPacketPingSetting) it.cancel().also { numPackets++ } - is CPacketEncryptionResponse -> if (CPacketEncryptionResponseSetting) it.cancel().also { numPackets++ } - is CPacketVehicleMove -> if (CPacketVehicleMoveSetting) it.cancel().also { numPackets++ } - is CPacketUpdateSign -> if (CPacketUpdateSignSetting) it.cancel().also { numPackets++ } - is CPacketTabComplete -> if (CPacketTabCompleteSetting) it.cancel().also { numPackets++ } - is CPacketSteerBoat -> if (CPacketSteerBoatSetting) it.cancel().also { numPackets++ } - is CPacketSpectate -> if (CPacketSpectateSetting) it.cancel().also { numPackets++ } - is CPacketSeenAdvancements -> if (CPacketSeenAdvancementsSetting) it.cancel().also { numPackets++ } - is CPacketResourcePackStatus -> if (CPacketResourcePackStatusSetting) it.cancel().also { numPackets++ } - is CPacketRecipeInfo -> if (CPacketRecipeInfoSetting) it.cancel().also { numPackets++ } - is CPacketPlayerDigging -> if (CPacketPlayerDiggingSetting) it.cancel().also { numPackets++ } - is CPacketKeepAlive -> if (CPacketKeepAliveSetting) it.cancel().also { numPackets++ } + is CPacketAnimation -> if (cPacketAnimationSetting) it.cancel().also { numPackets++ } + is CPacketUseEntity -> if (cPacketUseEntitySetting) it.cancel().also { numPackets++ } + is CPacketChatMessage -> if (cPacketChatMessageSetting) it.cancel().also { numPackets++ } + is CPacketClickWindow -> if (cPacketClickWindowSetting) it.cancel().also { numPackets++ } + is CPacketClientSettings -> if (cPacketClientSettingsSetting) it.cancel().also { numPackets++ } + is CPacketClientStatus -> if (cPacketClientStatusSetting) it.cancel().also { numPackets++ } + is CPacketCloseWindow -> if (cPacketCloseWindowSetting) it.cancel().also { numPackets++ } + is CPacketConfirmTeleport -> if (cPacketConfirmTeleportSetting) it.cancel().also { numPackets++ } + is CPacketConfirmTransaction -> if (cPacketConfirmTransactionSetting) it.cancel().also { numPackets++ } + is CPacketCreativeInventoryAction -> if (cPacketCreativeInventoryActionSetting) it.cancel().also { numPackets++ } + is CPacketCustomPayload -> if (cPacketCustomPayloadSetting) it.cancel().also { numPackets++ } + is CPacketEnchantItem -> if (cPacketEnchantItemSetting) it.cancel().also { numPackets++ } + is CPacketEntityAction -> if (cPacketEntityActionSetting) it.cancel().also { numPackets++ } + is CPacketPlayer.Position -> if (cPacketPlayerPositionSetting) it.cancel().also { numPackets++ } + is CPacketPlayer.Rotation -> if (cPacketPlayerRotationSetting) it.cancel().also { numPackets++ } + is CPacketPlayer.PositionRotation -> if (cPacketPlayerPositionRotationSetting) it.cancel().also { numPackets++ } + is CPacketHeldItemChange -> if (cPacketHeldItemChangeSetting) it.cancel().also { numPackets++ } + is CPacketInput -> if (cPacketInputSetting) it.cancel().also { numPackets++ } + is CPacketPlaceRecipe -> if (cPacketPlaceRecipeSetting) it.cancel().also { numPackets++ } + is CPacketPlayerAbilities -> if (cPacketPlayerAbilitiesSetting) it.cancel().also { numPackets++ } + is CPacketPlayerTryUseItem -> if (cPacketPlayerTryUseItemSetting) it.cancel().also { numPackets++ } + is CPacketPlayerTryUseItemOnBlock -> if (cPacketPlayerTryUseItemOnBlockSetting) it.cancel().also { numPackets++ } + is CPacketServerQuery -> if (cPacketServerQuerySetting) it.cancel().also { numPackets++ } + is CPacketLoginStart -> if (cPacketLoginStartSetting) it.cancel().also { numPackets++ } + is CPacketPing -> if (cPacketPingSetting) it.cancel().also { numPackets++ } + is CPacketEncryptionResponse -> if (cPacketEncryptionResponseSetting) it.cancel().also { numPackets++ } + is CPacketVehicleMove -> if (cPacketVehicleMoveSetting) it.cancel().also { numPackets++ } + is CPacketUpdateSign -> if (cPacketUpdateSignSetting) it.cancel().also { numPackets++ } + is CPacketTabComplete -> if (cPacketTabCompleteSetting) it.cancel().also { numPackets++ } + is CPacketSteerBoat -> if (cPacketSteerBoatSetting) it.cancel().also { numPackets++ } + is CPacketSpectate -> if (cPacketSpectateSetting) it.cancel().also { numPackets++ } + is CPacketSeenAdvancements -> if (cPacketSeenAdvancementsSetting) it.cancel().also { numPackets++ } + is CPacketResourcePackStatus -> if (cPacketResourcePackStatusSetting) it.cancel().also { numPackets++ } + is CPacketRecipeInfo -> if (cPacketRecipeInfoSetting) it.cancel().also { numPackets++ } + is CPacketPlayerDigging -> if (cPacketPlayerDiggingSetting) it.cancel().also { numPackets++ } + is CPacketKeepAlive -> if (cPacketKeepAliveSetting) it.cancel().also { numPackets++ } } } listener { diff --git a/src/main/kotlin/com/lambda/client/module/modules/player/PacketLogger.kt b/src/main/kotlin/com/lambda/client/module/modules/player/PacketLogger.kt index b416b5b1d..cb07f150e 100644 --- a/src/main/kotlin/com/lambda/client/module/modules/player/PacketLogger.kt +++ b/src/main/kotlin/com/lambda/client/module/modules/player/PacketLogger.kt @@ -10,8 +10,6 @@ import com.lambda.client.mixin.extension.* import com.lambda.client.module.Category import com.lambda.client.module.Module import com.lambda.client.util.FolderUtils -import com.lambda.client.util.TickTimer -import com.lambda.client.util.TimeUnit import com.lambda.client.util.text.MessageSendHelper import com.lambda.client.util.threads.defaultScope import com.lambda.client.util.threads.runSafe @@ -351,7 +349,6 @@ object PacketLogger : Module( private var start = 0L private var last = 0L private var lastTick = 0L - private val timer = TickTimer(TimeUnit.SECONDS) private var filename = "" private var lines = ArrayList() From 52cffa8a19fe5f39cfaaf879fa02ada1b36acf96 Mon Sep 17 00:00:00 2001 From: Constructor Date: Tue, 8 Aug 2023 02:55:18 +0200 Subject: [PATCH 4/4] Fix column inconsistencies --- .../hudgui/elements/misc/PacketLogViewer.kt | 5 +- .../module/modules/player/PacketLogger.kt | 280 ++++++++++-------- 2 files changed, 153 insertions(+), 132 deletions(-) diff --git a/src/main/kotlin/com/lambda/client/gui/hudgui/elements/misc/PacketLogViewer.kt b/src/main/kotlin/com/lambda/client/gui/hudgui/elements/misc/PacketLogViewer.kt index ac5749762..a2a86b5c2 100644 --- a/src/main/kotlin/com/lambda/client/gui/hudgui/elements/misc/PacketLogViewer.kt +++ b/src/main/kotlin/com/lambda/client/gui/hudgui/elements/misc/PacketLogViewer.kt @@ -34,7 +34,10 @@ internal object PacketLogViewer: LabelHud( displayText.addLine("PacketLog Viewer", secondaryColor) synchronized(logs) { logs.forEach { log -> - displayText.addLine(log, primaryColor) + log.split(",").forEachIndexed { i, s -> + displayText.add(s, if (i % 2 == 0) secondaryColor else primaryColor) + } + displayText.addLine("") } } } diff --git a/src/main/kotlin/com/lambda/client/module/modules/player/PacketLogger.kt b/src/main/kotlin/com/lambda/client/module/modules/player/PacketLogger.kt index cb07f150e..e4fb6b800 100644 --- a/src/main/kotlin/com/lambda/client/module/modules/player/PacketLogger.kt +++ b/src/main/kotlin/com/lambda/client/module/modules/player/PacketLogger.kt @@ -28,8 +28,12 @@ import net.minecraft.util.text.TextFormatting import net.minecraftforge.fml.common.gameevent.TickEvent import java.io.File import java.io.FileWriter +import java.text.SimpleDateFormat import java.time.LocalTime -import java.time.format.DateTimeFormatter +import java.util.* +import kotlin.collections.ArrayList +import kotlin.time.DurationUnit +import kotlin.time.toDuration object PacketLogger : Module( name = "PacketLogger", @@ -39,7 +43,7 @@ object PacketLogger : Module( private val page by setting("Page", Page.GENERAL) private val categorySetting by setting("Category", CategorySlider.PLAYER, { page == Page.CLIENT || page == Page.SERVER }) private val packetSide by setting("Packet Side", PacketSide.BOTH, description = "Log packets from the server, from the client, or both.", visibility = { page == Page.GENERAL }) - private val absoluteTime by setting("Absolute Time", true, description = "Show absolute time.", visibility = { page == Page.GENERAL }) + private val timestamp by setting("Timestamp", true, description = "Show absolute time.", visibility = { page == Page.GENERAL }) private val startDelta by setting("Start Time Delta", false, visibility = { page == Page.GENERAL }) private val lastDelta by setting("Last Time Delta", false, visibility = { page == Page.GENERAL }) private val showClientTicks by setting("Show Client Ticks", false, description = "Show timestamps of client ticks.", visibility = { page == Page.GENERAL }) @@ -344,7 +348,7 @@ object PacketLogger : Module( private var sPacketSpawnPainting by setting("SPacketSpawnPainting", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) private var sPacketSpawnPlayer by setting("SPacketSpawnPlayer", true, visibility = { page == Page.SERVER && categorySetting == CategorySlider.ENTITY }) - private val fileTimeFormatter = DateTimeFormatter.ofPattern("HH-mm-ss_SSS") + private val dateFormat = SimpleDateFormat("yyyyMMdd_HHmmss") private var start = 0L private var last = 0L @@ -382,10 +386,16 @@ object PacketLogger : Module( onEnable { PacketLogViewer.clear() start = System.currentTimeMillis() - filename = "${fileTimeFormatter.format(LocalTime.now())}.csv" + filename = "${dateFormat.format(Date())}.csv" synchronized(this) { - lines.add("From,Packet Name,Time Since Start (ms),Time Since Last (ms),Data\n") + lines.add(buildString { + append("Source,Packet") + if (timestamp) append(",Timestamp") + if (startDelta) append(",Time Since Start") + if (lastDelta) append(",Time Since Last") + append(",Data\n") + }) } } @@ -399,7 +409,21 @@ object PacketLogger : Module( if (showClientTicks) { synchronized(this@PacketLogger) { val current = System.currentTimeMillis() - val line = "Tick Pulse,,${current - start},${current - lastTick}\n" + + val line = buildString { + append("Tick Pulse,") + if (timestamp) { + append(",${LocalTime.now()}") + } + if (startDelta) { + append(",${(System.currentTimeMillis() - start).toDuration(DurationUnit.MILLISECONDS)}") + } + if (lastDelta) { + append(",${(System.currentTimeMillis() - last).toDuration(DurationUnit.MILLISECONDS)}") + } + append(",Client Tick\n") + } + if (logMode == LogMode.CHAT_AND_FILE || logMode == LogMode.FILE || logMode == LogMode.ALL) { lines.add(line) } @@ -416,9 +440,7 @@ object PacketLogger : Module( } /* Don't let lines get too big, write periodically to the file */ - if (lines.size >= 500) { - write() - } + if (lines.size >= 500) write() } listener { @@ -454,6 +476,124 @@ object PacketLogger : Module( } } + private fun write() { + if (logMode != LogMode.FILE && logMode != LogMode.CHAT_AND_FILE && logMode != LogMode.ALL) { + lines.clear() + return + } + + val lines = synchronized(this) { + val cache = lines + lines = ArrayList() + cache + } + + defaultScope.launch(Dispatchers.IO) { + try { + with(File(FolderUtils.packetLogFolder)) { + if (!exists()) mkdir() + } + + FileWriter("${FolderUtils.packetLogFolder}${filename}", true).buffered().use { + for (line in lines) it.write(line) + } + runSafe { + MessageSendHelper.sendChatMessage("$chatName Log saved at ${TextFormatting.GREEN}${FolderUtils.packetLogFolder}${filename}") + } + } catch (e: Exception) { + LambdaMod.LOG.warn("$chatName Failed saving packet log!", e) + } + } + } + + private inline fun logClient(packet: Packet<*>, block: PacketLogBuilder.() -> Unit) { + PacketLogBuilder(PacketSide.CLIENT, packet).apply(block).build() + } + + private inline fun logServer(packet: Packet<*>, block: PacketLogBuilder.() -> Unit) { + PacketLogBuilder(PacketSide.SERVER, packet).apply(block).build() + } + + private class PacketLogBuilder(val side: PacketSide, val packet: Packet<*>) { + private val stringBuilder = StringBuilder() + + init { + stringBuilder.apply { + append(side.displayName) + append(',') + + append(packet.javaClass.simpleName) + if (timestamp) { + append(",${LocalTime.now()}") + } + if (startDelta) { + append(",${(System.currentTimeMillis() - start).toDuration(DurationUnit.MILLISECONDS)}") + } + if (lastDelta) { + append(",${(System.currentTimeMillis() - last).toDuration(DurationUnit.MILLISECONDS)}") + } + append(',') + } + } + + operator fun String.unaryPlus() { + stringBuilder.append(this) + } + + infix fun String.to(value: Any?) { + if (value != null) { + add(this, value.toString()) + } + } + + infix fun String.to(value: String?) { + if (value != null) { + add(this, value) + } + } + + infix fun String.to(value: BlockPos?) { + if (value != null) { + add("x", value.x.toString()) + add("y", value.y.toString()) + add("z", value.z.toString()) + } + } + + fun add(key: String, value: String) { + stringBuilder.apply { + append(key) + append(": ") + append(value) + append(' ') + } + } + + fun build() { + val string = stringBuilder.run { + append('\n') + toString() + } + + if (logMode == LogMode.CHAT_AND_FILE || logMode == LogMode.FILE || logMode == LogMode.ALL) { + synchronized(PacketLogger) { + lines.add(string) + last = System.currentTimeMillis() + } + } + + if (logMode == LogMode.CHAT_AND_FILE || logMode == LogMode.CHAT || logMode == LogMode.ALL) { + MessageSendHelper.sendChatMessage(string) + } + + if (logMode == LogMode.ONLY_HUD || logMode == LogMode.ALL) { + if (PacketLogViewer.visible) { + PacketLogViewer.addPacketLog(string.replace("\n", "")) + } + } + } + } + private fun sendPacket(packet: Packet<*>) { if (packetSide == PacketSide.CLIENT || packetSide == PacketSide.BOTH) { when (packet) { @@ -1626,126 +1766,4 @@ object PacketLogger : Module( } } } - - - private fun write() { - if (logMode != LogMode.FILE && logMode != LogMode.CHAT_AND_FILE && logMode != LogMode.ALL) { - lines.clear() - return - } - - val lines = synchronized(this) { - val cache = lines - lines = ArrayList() - cache - } - - defaultScope.launch(Dispatchers.IO) { - try { - with(File(FolderUtils.packetLogFolder)) { - if (!exists()) mkdir() - } - - FileWriter("${FolderUtils.packetLogFolder}${filename}", true).buffered().use { - for (line in lines) it.write(line) - } - runSafe { - MessageSendHelper.sendChatMessage("$chatName Log saved at ${TextFormatting.GREEN}${FolderUtils.packetLogFolder}${filename}") - } - } catch (e: Exception) { - LambdaMod.LOG.warn("$chatName Failed saving packet log!", e) - } - } - } - - private inline fun logClient(packet: Packet<*>, block: PacketLogBuilder.() -> Unit) { - PacketLogBuilder(PacketSide.CLIENT, packet).apply(block).build() - } - - private inline fun logServer(packet: Packet<*>, block: PacketLogBuilder.() -> Unit) { - PacketLogBuilder(PacketSide.SERVER, packet).apply(block).build() - } - - private class PacketLogBuilder(val side: PacketSide, val packet: Packet<*>) { - private val stringBuilder = StringBuilder() - - init { - stringBuilder.apply { - append(side.displayName) - append(',') - - append(packet.javaClass.simpleName) - if (absoluteTime) { - append(',') - append(System.currentTimeMillis()) - } - if (startDelta) { - append(',') - append(System.currentTimeMillis() - start) - } - if (lastDelta) { - append(',') - append(System.currentTimeMillis() - last) - } - append(": ") - } - } - - operator fun String.unaryPlus() { - stringBuilder.append(this) - } - - infix fun String.to(value: Any?) { - if (value != null) { - add(this, value.toString()) - } - } - - infix fun String.to(value: String?) { - if (value != null) { - add(this, value) - } - } - - infix fun String.to(value: BlockPos?) { - if (value != null) { - add("x", value.x.toString()) - add("y", value.y.toString()) - add("z", value.z.toString()) - } - } - - fun add(key: String, value: String) { - stringBuilder.apply { - append(key) - append(": ") - append(value) - append(' ') - } - } - - fun build() { - val string = stringBuilder.run { - append('\n') - toString() - } - - if (logMode == LogMode.CHAT_AND_FILE || logMode == LogMode.FILE || logMode == LogMode.ALL) { - synchronized(PacketLogger) { - lines.add(string) - last = System.currentTimeMillis() - } - } - - if (logMode == LogMode.CHAT_AND_FILE || logMode == LogMode.CHAT || logMode == LogMode.ALL) { - MessageSendHelper.sendChatMessage(string) - } - - if (logMode == LogMode.ONLY_HUD || logMode == LogMode.ALL) { - if (PacketLogViewer.visible) { - PacketLogViewer.addPacketLog(string.replace("\n", "")) - } - } - } - } }