MCCTeam / Minecraft-Console-Client

Lightweight console for Minecraft chat and automated scripts
https://mccteam.github.io
Other
1.67k stars 402 forks source link

[BUG] Unhandled exception. System.IO.InvalidDataException: 无法处理传入的ProfilelessChatMessage类型的数据包。(数据包ID:28,协议:763,登陆阶段:False,内部异常:System.InvalidOperationException)。 #2704

Closed kevin126ckw closed 8 months ago

kevin126ckw commented 8 months ago

Prerequisites

Minecraft Version

1.19.4

Console Client Version

Latest

Expected Behavior

Joining a server normally does not pop up an error

Actual Behavior

The following error message is displayed: Unhandled exception. System.IO.InvalidDataException: 无法处理传入的ProfilelessChatMessage类型的数据包。(数据包ID:28,协议:763,登陆阶段:False,内部异常:System.InvalidOperationException)。 ---> System.InvalidOperationException: Queue empty. at System.Collections.Generic.Queue1.ThrowForEmptyQueue() at System.Collections.Generic.Queue1.Dequeue() at MinecraftClient.Protocol.Handlers.DataTypes.ReadNextChat(Queue1 cache) at MinecraftClient.Protocol.Handlers.Protocol18Handler.HandlePlayPackets(Int32 packetId, Queue1 packetData) at MinecraftClient.Protocol.Handlers.Protocol18Handler.HandlePacket(Int32 packetId, Queue1 packetData) --- End of inner exception stack trace --- at MinecraftClient.Protocol.Handlers.Protocol18Handler.HandlePacket(Int32 packetId, Queue1 packetData) at MinecraftClient.Protocol.Handlers.Protocol18Handler.Updater(Object o) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) --- End of stack trace from previous location --- at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)

Steps to Reproduce the bug

  1. Start the Minecraft Cosole Client
  2. Log in and connect to the server
  3. An error message is displayed

Attach screenshot here (If applicable)

image

Anythings that could help diagnosing the bug

Output:
Minecraft Console Client v1.20.4 - for MC 1.4.6 to 1.20.4 - Github.com/MCCTeam
GitHub build 253, built on 2024-03-05 from commit 86fb4fe
正在解析2b2t.xin...
解析2b2t.xin的SRV记录失败 DnsClient.DnsResponseException:Query 43379 => _minecraft._tcp.2b2t.xin IN SRV on 120.211.70.69:53 timed out or is a transient error.
[MCC] [ScriptScheduler] 已加载任务:
首次登录时触发: False
 登录时触发: False
 指定时刻触发: True
 指定时间间隔触发: True
 时刻触发配置: 14:00:00
 间隔触发配置: 53.4
 动作: send /hello
[MCC] [ScriptScheduler] 已加载任务:
首次登录时触发: False
 登录时触发: True
 指定时刻触发: False
 指定时间间隔触发: False
 时刻触发配置:
 间隔触发配置: 56
 动作: send /login pass
帮助我们翻译MCC:https://crwd.in/minecraft-console-client
颜色测试:终端应该显示:[0123456789ABCDEF]: (4bit)[0123456789ABCDEF]
颜色测试:终端应该显示:[0123456789]: (vt100 8bit)[0123456789]
颜色测试:终端应该显示:[0123456789]: (vt100 24bit)[0123456789]
[SessionCache] 正在为文件C:\Users\KevinChang\Downloads\Programs\SessionCache.ini初始化FileSystemWatcher
加载Minecraft配置文件:launcher_profiles.json
无法从磁盘加载缓存的会话数据。
您正在使用离线模式。
成功!(会话ID:)
正在获取服务器信息...
{"version":{"name":"BungeeCord 1.8.x-1.20.x","protocol":763},"players":{"max":1024,"online":63,"sample":[{"name":"§6当前排队人数: 3","id":"c3eeadfd-1c05-437f-8358-0283ce3454c6"}]},"description":{"text":"§c§l§o2B §6欢迎来到 1.19 我的小公主!\n§c§l§o2T §6前往 WWW.2B2T.XIN 查看官方公告"},"favicon":"data:image/png;base64,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\u003d\u003d","modinfo":{"type":"FML","modList":[]}}
服务器正在运行 Forge,但没有模组。
服务器的Minecraft版本:BungeeCord 1.8.x-1.20.x (协议v763)
已加载翻译文件。
[MCC] 该版本受到支持
正在登录...
[MCC] 服务器正处于离线模式。
[MCC] 已成功加入服务器。
输入 '/quit' 离开服务器。
> Unhandled exception. System.IO.InvalidDataException: 无法处理传入的ProfilelessChatMessage类型的数据包。(数据包ID:28,协议:763,登陆阶段:False,内部异常:System.InvalidOperationException)。
 ---> System.InvalidOperationException: Queue empty.
   at System.Collections.Generic.Queue`1.ThrowForEmptyQueue()
   at System.Collections.Generic.Queue`1.Dequeue()
   at MinecraftClient.Protocol.Handlers.DataTypes.ReadNextChat(Queue`1 cache)
   at MinecraftClient.Protocol.Handlers.Protocol18Handler.HandlePlayPackets(Int32 packetId, Queue`1 packetData)
   at MinecraftClient.Protocol.Handlers.Protocol18Handler.HandlePacket(Int32 packetId, Queue`1 packetData)
   --- End of inner exception stack trace ---
   at MinecraftClient.Protocol.Handlers.Protocol18Handler.HandlePacket(Int32 packetId, Queue`1 packetData)
   at MinecraftClient.Protocol.Handlers.Protocol18Handler.Updater(Object o)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
Config File:
# 启动配置文件
# 请不要在此文件中记录任何无关的东西,因为这个文件会被MCC覆盖写入。
# 
# 对 MCC(Minecraft 命令行客户端)不熟悉?请看这个文档:https://mccteam.github.io/g/conf.html
# 想升级到较新的版本吗?请访问 https://github.com/MCCTeam/Minecraft-Console-Client/#download
[Head]
"Current Version" = "GitHub build 253, built on 2024-03-05 from commit 86fb4fe"
"Latest Version" = "GitHub build 253, built on 2024-03-05"

[Main]
[Main.General]
Account = { Login = "卧槽这是服务器a", Password = "-" } # Login请填写邮箱或玩家名称。若要以离线模式登录请使用"-"作为密码。若留空则使用交互式登录。
Server = { Host = "2b2t.xin" }              # 游戏服务器的地址和端口,可填入域名或IP地址。(可删除端口字段,会自动解析SRV记录)
AccountType = "microsoft"                   # 帐户类型:mojang 或是 microsoft 或是 yggdrasil。此项设置也会影响交互式登录。
Method = "mcc"                              # 微软账户的登录方式:mcc 或是 browser(手动在网页上登录)。
AuthServer = { Host = "", Port = 443 }      # Yggdrasil API 认证服务器的域名与端口。

# 在更改这里的某项设置之前,请确保你理解了该选项的影响。
[Main.Advanced]
Language = "zh_cn"                          # 请使用Minecraft语言代码填写,详见 https://mccteam.github.io/r/l-code.html
LoadMccTranslation = true                   # 在可用时加载应用于MCC的翻译,关闭则仅使用英语。
ConsoleTitle = "%username%@%serverip% - Minecraft Console Client"
InternalCmdChar = "slash"                   # MCC内部命令的前缀,可使用 "none", "slash"(/) 或 "backslash"(\)。
MessageCooldown = 1.0                       # 控制向服务器发送消息的最小间隔时间(秒)。
BotOwners = [ "player1", "player2", ]       # 设置机器人的所有者。/!\服务器管理员可以伪装成任何玩家!
MinecraftVersion = "auto"                   # 游戏版本,可使用 "auto"(自动) 或类似 "1.X.X" 的值。设定具体版本将跳过从服务器解析的过程。
EnableForge = "auto"                          # 可使用 "auto"(自动),"no"(禁用) 或是 "force"(强制启用,仅在 1.13 及更高的版本中可用)。
BrandInfo = "mcc"                           # 客户端标识,可用 "mcc","vanilla"(原版客户端) 或 "none"(空标识)。这用于改变MCC向服务器发送的客户端标识内容。
ChatbotLogFile = ""                         # 留空将禁用 ChatBot 写入日志文件。
PrivateMsgsCmdName = "tell"                 # 远程控制功能将会使用它。
ShowSystemMessages = true                   # 显示游戏服务器的系统消息(来自管理员或命令方块等)。
ShowXPBarMessages = true                    # 显示经验条上方的消息,如果被此类消息刷屏请禁用此选项。
ShowChatLinks = true                        # 解码聊天信息里的链接,并在控制台单独显示。
ShowInventoryLayout = true                  # 以字符画形式显示库存布局。
TerrainAndMovements = false                 # 开启地形处理将消耗更多的内存、CPU和网络带宽,但这允许你进行移动以及和方块交互。
MoveHeadWhileWalking = true                 # 在移动时转向头部。
MovementSpeed = 2                           # 高于 2 的移动速度可能会被检测为作弊。
TemporaryFixBadpacket = false               # 暂时修复一些服务器上的坏数据包问题。需要先启用“TerrainAndMovements”。
InventoryHandling = false                   # 启用库存处理(可操作背包、箱子等容器)。
EntityHandling = false                      # 启用实体处理。
SessionCache = "disk"                       # 如何缓存会话令牌。可使用 "none"(不缓存),"memory"(内存缓存) 或 "disk"(磁盘缓存)。
ProfileKeyCache = "disk"                    # 如何缓存聊天签名密钥。可使用 "none"(不缓存),"memory"(内存缓存) 或 "disk"(磁盘缓存)。
ResolveSrvRecords = "fast"                  # 可填写 "no","fast"(超时时间为五秒钟)或是 "yes"。加入某些服务器需要开启此项。
PlayerHeadAsIcon = true                     # 使用玩家皮肤头像作为窗口图标,这仅在部分旧版控制台中有效。
ExitOnFailure = false                       # 发生错误时是否直接退出,用于在非交互式脚本中使用MCC。
CacheScript = true                          # 缓存已编译的脚本,以便在低端设备上更快的加载。
Timestamps = false                          # 在聊天信息头部添加时间戳。
AutoRespawn = false                         # 死亡时自动重生(开启前请确保你的出生点是安全的)
MinecraftRealms = false                     # 启用对加入我的世界领域(Realms)服务器的支持。
TcpTimeout = 30                             # 与服务器的TCP连接超时时间(秒)。
EnableEmoji = true                          # 如果关闭,Emoji表情符号将被替换成更简单的字符(用于 "/chunk status" 命令)
MinTerminalWidth = 16                       # 当使用终端宽度来计算显示的图像大小时,限制其最小宽度。
MinTerminalHeight = 10                      # 当使用终端高度来计算显示的图像大小时,限制其最小高度。
IgnoreInvalidPlayerName = true              # 忽略无效的玩家名
# AccountList:使你可以不用输入账号信息而快速在多个账号间切换
# 可用命令示例:"/tell <mybot> reco Player2","/connect <serverip> Player1"
[Main.Advanced.AccountList]
AccountNikename1 = { Login = "playerone@email.com", Password = "thepassword" }
AccountNikename2 = { Login = "TestBot", Password = "-" }

# ServerList:可用使用服务器别名快速连接到该服务器
# 别名不能包含空格和小数点",而且 "localhost" 不能作为别名使用。
# 可用命令示例:"/tell <mybot> connect Server1","/connect Server2"
[Main.Advanced.ServerList]
ServerAlias1 = { Host = "mc.awesomeserver.com" }
ServerAlias2 = { Host = "192.168.1.27", Port = 12345 }

# 聊天签名相关设置(影响1.19及以上版本)
[Signature]
LoginWithSecureProfile = true               # 仅微软账户可用。如禁用此项,将无法签名消息和进入某些的服务器。
SignChat = true                             # 是否签名发送的聊天消息。
SignMessageInCommand = true                 # 是否签名指令中的消息。例如"/msg"和"/me"中的消息。
MarkLegallySignedMsg = true                 # 是否使用绿色色块标识拥有合法签名的聊天。
MarkModifiedMsg = true                      # 是否使用黄色色块标识被服务器更改过的聊天。
MarkIllegallySignedMsg = true               # 是否使用红色色块标识没有合法签名的聊天。
MarkSystemMessage = true                    # 是否使用灰色色块标识系统消息(它们总是不会被签名)。
ShowModifiedChat = true                     # 设置为 true,显示被服务器修改过的信息;设置为 false,显示经过签名的原始信息。
ShowIllegalSignedChat = true                # 是否显示没有被正确签名的聊天消息。

# 此项设置仅会影响到控制台中的信息(日志)。
[Logging]
DebugMessages = true                       # 请在提交错误报告之前先启用此项。谢谢!
ChatMessages = true                         # 是否显示来自服务器的聊天消息。
InfoMessages = true                         # 信息性的消息。(大部分来自MCC内部)
WarningMessages = true                      # 显示警告消息。
ErrorMessages = true                        # 显示错误消息。
ChatFilterRegex = ".*"                      # 过滤聊天消息所用的正则表达式。
DebugFilterRegex = ".*"                     # 过滤调试消息所用的正则表达式。
FilterMode = "disable"                      # 过滤方式:"disable"(禁用),"blacklist"(隐藏匹配的消息) 或 "whitelist"(仅显示匹配的消息)
LogToFile = false                           # 是否将日志信息写入到文件。
LogFile = "console-log.txt"                 # 日志文件名称。
PrependTimestamp = false                    # 写入日志文件时是否添加时间戳。
SaveColorCodes = false                      # 是否保留消息中的颜色字符。(例如"§b")

[Console]
[Console.General]
ConsoleColorMode = "vt100_24bit"            # 使用“disable”、“legacy_4bit”、“vt100_4bit”、“vt100_8bit”或“vt100_24bit”。如果终端上出现“←[0m”等乱码,您可以尝试切换到“legacy_4bit”模式,或者直接禁用它。
Display_Input = true                        # 您可以使用“Ctrl+P”打印当前输入和光标位置。
History_Input_Records = 32                  # Console.General.History_Input_Records

# 命令补全建议的设置。
# 只在使用“vt100_24bit”颜色模式时才可自定义颜色。
[Console.CommandSuggestion]
Enable = true                               # 是否在控制台中显示命令建议。
Enable_Color = true
Use_Basic_Arrow = false                     # 如果命令建议中的箭头未在您的终端中正确显示,请启用此选项。
Max_Suggestion_Width = 30
Max_Displayed_Suggestions = 6
Text_Color = "#f8fafc"
Text_Background_Color = "#64748b"
Highlight_Text_Color = "#334155"
Highlight_Text_Background_Color = "#fde047"
Tooltip_Color = "#7dd3fc"
Highlight_Tooltip_Color = "#3b82f6"
Arrow_Symbol_Color = "#d1d5db"

[AppVar]
# 可以在某些字段中以 "%yourvar%" 的形式使用。
# %username% 和 %serverip% 为保留的变量名。
[AppVar.VarStirng]
your_var = "your_value"
"your var 2" = "your value 2"

# 通过代理连接到服务器。
# 如果Mojang/微软登录服务被防火墙阻断,设置Enabled_Login=true以使用代理进行登录。
# 如果到Minecraft游戏服务器的连接被防火墙阻止,设置Enabled_Ingame=true以使用代理连接游戏服务器。
# /!\ 在启用代理前,请确保你的服务器规则允许使用代理或VPN,否则你可能面临被封禁等风险!
[Proxy]
Enabled_Update = false                      # 下载MCC的更新时是否通过代理服务器。
Enabled_Login = false                       # 是否使用代理连接Mojang或微软的登录服务器。
Enabled_Ingame = false                      # 是否通过代理连接Minecraft游戏服务器。
Server = { Host = "0.0.0.0", Port = 8080 }  # 代理服务器必须允许HTTPS登录。
Proxy_Type = "HTTP"                         # 支持的代理类型:"HTTP","SOCKS4","SOCKS4a","SOCKS5"。
Username = ""                               # 只有连接到受密码保护的代理才需要。
Password = ""                               # 只有连接到受密码保护的代理才需要。

# 下面的设置将会被发送到游戏服务器,只影响一些服务器端的东西,比如你的皮肤。
[MCSettings]
Enabled = true                              # 如果禁用,下面的设置就不会被发送到服务器上。
Locale = "en_US"                            # 请使用Minecraft的语言代码填写,详见[Main.Advanced.Language]
RenderDistance = 8                          # 渲染距离,取值范围[0 - 255]。
Difficulty = "peaceful"                     # Minecraft 1.7及更早版本难度。"peaceful","easy","normal","difficult"。
ChatMode = "enabled"                        # 使用 "enabled"(完全启用聊天)、"commands"(仅限命令)或 "disabled"(完全禁用聊天)。这允许你禁言自己...
ChatColors = true                           # 这允许你在服务器端禁用聊天颜色。
MainHand = "left"                           # 在1.9及更高版本中的主手设置。"left"(左手) 或 "right"(右手)。
[MCSettings.Skin]
Cape = true
Hat = true
Jacket = false
Sleeve_Left = false
Sleeve_Right = false
Pants_Left = false
Pants_Right = false

# MCC会尽力检测聊天信息,但有些服务器有不寻常的聊天格式
# 当这种情况发生时,你需要在下面自定义匹配聊天所用的正则表达式
# 详见 https://mccteam.github.io/g/conf/#chat-format-section
[ChatFormat]
Builtins = true                             # 是否启用MCC内置的聊天检测规则。设置为 false 以避免与自定义格式冲突。
UserDefined = false                         # 是否启用下方的自定义正则表达式进行聊天检测。
Public = "^<([a-zA-Z0-9_]+)> (.+)$"
Private = "^([a-zA-Z0-9_]+) whispers to you: (.+)$"
TeleportRequest = '^([a-zA-Z0-9_]+) has requested (?:to|that you) teleport to (?:you|them)\.$'

# =============================== #
# Minecraft 控制台客户端 机器人  #
# =============================== #
[ChatBot]
# 当检测到特定聊天消息或特定事件发生时提醒你
#  # 对检测特定玩家的聊天消息很有用。
[ChatBot.Alerts]
Enabled = false
Beep_Enabled = true                         # 除了高亮显示外,当检测到一个词时还会播放类似蜂鸣器的哔哔声。
Trigger_By_Words = false                    # 在收到指定的关键词后触发提醒。
Trigger_By_Rain = false                     # 在开始下雨和停止下雨时触发提醒。
Trigger_By_Thunderstorm = false             # 在雷暴天气的开始与结束触发提醒。
Log_To_File = false                         # 是否将提醒消息写入到日志文件。
Log_File = "alerts-log.txt"                 # 日志文件的路径。
# 触发提醒的聊天关键词列表。
Matches = [ "Yourname", " whispers ", "-> me", "admin", ".com", ]
# 出现这些关键词后该条消息一定不触发提醒。
Excludes = [ "myserver.com", "Yourname>:", "Player Yourname", "Yourname joined", "Yourname left", "[Lockette] (Admin)", " Yourname:", "Yourname is", ]

# 定期发送命令,或让机器人随机走动,以避免检测到挂机后被踢出服务器
#  # /!\启用前请确保你的服务器规则不禁止反AFK机制!
# /!\如果启用随机移动,请将机器人围在围栏里,以防走失!(建议尺寸5x5x5)
[ChatBot.AntiAFK]
Enabled = false
Delay = { min = 60.0, max = 60.0 }          # 执行操作的间隔时间。(秒)
Command = "/ping"                           # 发送给服务器的指令。
Use_Sneak = false                           # 在发送命令时是否蹲下。
Use_Terrain_Handling = false                # 启用地形处理,以使机器人能够四处移动。
Walk_Range = 5                              # 机器人可以随机移动的范围(注意:范围越大,速度越慢)
Walk_Retries = 20                           # 尝试移动失败几次后在改为发送命令模式。

# 自动攻击周围的生物
# 使用此功能之前,你需要开启实体处理。
# /!\确保你的服务器允许使用自动攻击。
# /!\服务器插件可能会认为此功能时作弊,并可能会封禁你的账号,所以请自己检查服务器规则是否允许。
[ChatBot.AutoAttack]
Enabled = false
Mode = "single"                             # "single"(单目标) 或 "multi"(多目标)。一次攻击一个生物还是范围内的所有生物。
Priority = "distance"                       # "health"(生命值)或 "distance"(距离)。当使用"single"模式时,以哪一个属性确定优先级。
Cooldown_Time = { Custom = false, value = 1.0 } # 每次攻击间的冷却时间,设置 "Custom = false" 以让MCC自动计算攻击速度。
Interaction = "Attack"                      # 可选项:"Interact"(交互),"Attack"(攻击) 或 "InteractAt"(交互并攻击)
Attack_Range = 4.0                          # 上限介于 1 到 4
Attack_Hostile = true                       # 是否攻击敌对生物。
Attack_Passive = false                      # 是否攻击被动生物。
List_Mode = "whitelist"                     # 将实体列表作为 "whitelist"(白名单)还是 "blacklist"(黑名单)。
Entites_List = [ "Zombie", "Cow", ]         # 你可以在这里找到所有的实体名称:https://mccteam.github.io/r/entity/#L15

# 自动使用背包中的物品进行合成。
# 请看 https://mccteam.github.io/g/bots/#auto-craft
# 你需要启用库存处理来使用这个功能
# 如果需要使用工作台,你还需要启用地形处理。
[ChatBot.AutoCraft]
Enabled = false
CraftingTable = { X = 123.0, Y = 65.0, Z = 456.0 } # 如果你打算使用工作台,请填写它所在的位置。(需要启用地形处理)
OnFailure = "abort"                         # 合成失败时应该怎么处理,"abort"(中止)或 "wait"(等待)。
# Recipes.Name:给该配方起一个独一无二的名字。(不能包含空白字符)
# Recipes.Type:合成类型,"player"(背包2x2)或 "table"(工作台3x3)
# Recipes.Result:合成的目标物品
# Recipes.Slots:合成的物品摆放方式,以从左到右、从上到下的格式填写。需留空请填写"Null"
# 最新的物品命名请看:https://mccteam.github.io/r/item/#L12

[[ChatBot.AutoCraft.Recipes]]
Name = "Recipe-Name-1"
Type = "player"
Result = "StoneBricks"
Slots = [ "Stone", "Stone", "Stone", "Stone", ]

[[ChatBot.AutoCraft.Recipes]]
Name = "Recipe-Name-2"
Type = "table"
Result = "StoneBricks"
Slots = [ "Stone", "Stone", "Null", "Stone", "Stone", "Null", "Null", "Null", "Null", ]

# 自动挖掘方块。
# 你需要启用地形处理来使用这个功能。
# 你可以使用 "/digbot start" 和 "/digbot stop" 指令来控制 AutoDig 的启停。
# 由于MCC目前还不支持精确计算方块的碰撞体积,在获取看向的方块时,视线上所有的方块都被看作是完整的立方体。
# 查询方块的名称,请访问 https://mccteam.github.io/r/block/#L15
[ChatBot.AutoDig]
Enabled = false
Mode = "lookat"                             # "lookat","fixedpos" 或 "both"。挖掘看向的方块还是固定位置的方块,或者是两个条件都满足的方块。
# 使用 "fixedpos" 或 "both" 模式时,方块的坐标。
Locations = [
    { x = 123.5, y = 64.0, z = 234.5 },
    { x = 124.5, y = 63.0, z = 235.5 },
]
Location_Order = "distance"                 # "distance" 或 "index",当使用 "fixedpos" 模式时,按照到玩家的距离,还是列表中的顺序确定挖掘的方块。
Auto_Start_Delay = 3.0                      # 进入游戏后等待多少秒后开始自动挖掘,设置为-1禁用自动开始。
Dig_Timeout = 60.0                          # 若挖掘一个方块用时超过这个值,将会重新获取目标进行挖掘。
Log_Block_Dig = true                        # 是否输出挖掘方块的相关信息。
List_Type = "whitelist"                     # 将方块列表作为 "whitelist"(白名单)还是 "blacklist"(黑名单)。
Blocks = [ "Cobblestone", "Stone", ]

# 自动从背包/库存中丢弃指定的物品
# 你需要启用库存处理来使用这个功能
# 查询物品命名:https://mccteam.github.io/r/item/#L12
[ChatBot.AutoDrop]
Enabled = false
Mode = "include"                            # "include"(丢弃列表中的物品),"exclude"(丢弃列表外的所有物品) 或 "everything"(丢弃所有物品)
Items = [ "Cobblestone", "Dirt", ]

# 在饱食度较低是自动在背包中寻找食物食用。
# 你需要启用库存处理来使用这个功能。
[ChatBot.AutoEat]
Enabled = false
Threshold = 6

# 使用鱼竿自动钓鱼。
# 指南:https://mccteam.github.io/g/bots/#auto-fishing
# 你可以使用"/fish"命令来手动进行控制。
# /!\ 启用前请确保服务器允许你自动钓鱼。
[ChatBot.AutoFishing]
Enabled = false
Antidespawn = false                         # 如果你之前没有启用过这个选项,请保持它为 false 。
Mainhand = true                             # 使用主手还是副手拿鱼竿。
Auto_Start = true                           # 是否在进入服务器后自动开始钓鱼,禁用此功能后,你需要使用"/usehand"手动使用鱼竿一次。
Cast_Delay = 0.4                            # 钓到鱼后多久开始下一次钓鱼(抛竿)。
Fishing_Delay = 3.0                         # 进入服务器后多久后开始自动钓鱼。(秒)
Fishing_Timeout = 300.0                     # 多少秒后没有钓到鱼视为超时。超时后会重新抛竿。
Durability_Limit = 2.0                      # 不会使用低于此耐久度的鱼竿(鱼竿耐久度最高为64)。(需要启用库存处理)
Auto_Rod_Switch = true                      # 在当前鱼竿不可用后自动切换到背包中的其他鱼竿。(需要启用库存处理)
Stationary_Threshold = 0.001                # 鱼钩在X轴和Z轴方向上的移动小于这个值将被认为是静止的,过高的阈值会在抛竿途中触发收竿。
Hook_Threshold = 0.2                        # 一个“静止”的鱼钩,在Y轴方向上的移动超过这个阈值将被认为钓到了鱼。
Log_Fish_Bobber = false                     # 用于调整以上两个阈值,启用后会在收到鱼钩实体移动数据包后打印其坐标变化。
Enable_Move = false                         # 这允许玩家在钓到鱼后改变其位置或朝向。(需要启用地形处理)
# 会按照 "1->2->3->4->3->2->1->2->..." 的顺序执行。每次可用改变位置、朝向或是都改变。推荐只改变朝向。

[[ChatBot.AutoFishing.Movements]]
facing = { yaw = 12.34, pitch = -23.45 }

[[ChatBot.AutoFishing.Movements]]
XYZ = { x = 123.45, y = 64.0, z = -654.32 }
facing = { yaw = -25.14, pitch = 36.25 }

[[ChatBot.AutoFishing.Movements]]
XYZ = { x = -1245.63, y = 63.5, z = 1.2 }

# 在被服务器断开连接时自动重连,例如服务器重启时。
# /!\ 谨慎使用Ignore_Kick_Message=true,这会在服务器管理员将你踢出时依然连回!
[ChatBot.AutoRelog]
Enabled = false
Delay = { min = 3.0, max = 3.0 }            # 重新加入到服务器前的延迟时间。(单位:秒)
Retries = 3                                 # 重新登录服务器失败时的重试次数,使用-1表示无限重试。
Ignore_Kick_Message = false                 # 当设置为 true 时,将不考虑踢出的信息直接重连。
# 如果踢出信息与这其中的任何一个字符串匹配,那么将触发自动重连。
Kick_Messages = [ "Connection has been lost", "Server is restarting", "Server is full", "Too Many people", ]

# 当聊天消息与文件中的规则匹配时,自动执行指定命令。
# /!\ 服务器管理员可以以任意玩家的身份发送任意消息,记住这一点!
# 此机器人如果设置的不得当可能会造成刷屏,建议设置一个冷却时间。
[ChatBot.AutoRespond]
Enabled = false
Matches_File = "matches.ini"
Match_Colors = false                        # 不要删除文本中的颜色代码(使用§字符的代码)。注意:启用后你的匹配模板也必须包括颜色代码。

# 将聊天信息写入到日志文件中。
[ChatBot.ChatLog]
Enabled = false
Add_DateTime = true
Log_File = "chatlog-%username%-%serverip%.txt"
Filter = "messages"

# 此机器人允许您通过Discord频道发送和接收消息和命令。
# 您也可以在文档中阅读此机器人的配置方法(文档中有图像)。
# 文档:https://mccteam.github.io/g/bots/#discord-bridge
# 配置方法:
# 首先您需要在 Discord 开发者中心上创建一个机器人,这有一个视频教程:https://www.youtube.com/watch?v=2FgMnZViNPA。
# /!\ 重要/! : 创建机器人时,您必须启用"Message Content Intent","Server Members Intent"和"Presence Intent"才能使机器人工作!还请小心跟随教程,不要错过任何步骤!
# 创建机器人时,复制生成的令牌并将其粘贴在"Token"字段中 (令牌很重要,保证它们的安全)。
# 复制"Application ID"并访问:https://discordapi.com/permissions.html
# 粘贴您复制过的ID并在权限中检查"Administrator"字段,然后点击底部的链接。
# 这将打开您的服务器的邀请菜单,选择您想邀请机器人的服务器并邀请他。
# 邀请机器人后,前往您的Discord客户端访问设置 -> 高级并启用"Developer Mode"。
# 退出设置并右击邀请机器人进入服务器列表中的服务器 然后点击"Copy ID",然后将ID粘贴到下方的"GuildId"。
# 然后右键单击要与机器人互动的频道,然后右键单击选择> "Copy ID",然后将ID粘贴到下方的"ChannelId"。
# 最后,在频道发送一条消息, 右键单击你的昵称,然后右键单击选择> "Copy ID",然后将ID粘贴到下方的"OwnersIds"。
# -----------------------------------------------------------
# 如何使用:
# 希望运行MCC指令时,在指令前加上点 "."。例如 ".move 143 64 735"。
# 希望发送聊天信息时,只需要直接发送就好了。
[ChatBot.DiscordBridge]
Enabled = false
Token = "your bot token here"               # 你的Discord机器人的令牌。
GuildId = 1018553894831403028               # 你邀请机器人加入的服务器ID。
ChannelId = 1018565295654326364             # 你想要使机器人与 MCC 交互的频道ID。
OwnersIds = [ 978757810781323276, ]         # 你希望能够使用机器人与 MCC 交互的用户ID列表。
Message_Send_Timeout = 3                    # 如果信息无法被发送至Discord时,要等候多少秒才取消发送。(最小 1 秒)
# 消息格式
# 使用 { 和 } 包裹的单词将在代码执行过程中被替换,请不要更改它们!
# 例如,{message} 将替换为实际的消息,{username} 将替换为用户名, {timestamp} 将替换为当前时间。
# 了解Discord消息格式,请访问:https://mccteam.github.io/r/dc-fmt.html
PrivateMessageFormat = "**[Private Message]** {username}: {message}"
PublicMessageFormat = "{username}: {message}"
TeleportRequestMessageFormat = "A new Teleport Request from **{username}**!"

# 自动为你耕种农作物(种下,收获和骨粉催熟)
# 可用的农作物类型:Beetroot(甜菜根), Carrot(萝卜), Melon(西瓜), Netherwart(地狱疣), Pumpkin(南瓜), Potato(马铃薯), Wheat(小麦)
# 使用方法:"/farmer start" 指令和 "/farmer stop" 指令。
# 注意:这是新加入的机器人,它不完美并且只在 1.19.2 版本进行过测试。它有些小问题,例如有时候不能对萝卜或马铃薯使用骨粉催熟;
# 或机器人会在耕地上跳跃并破坏耕地(这很少发生,但还是有机率出现)。我们期待可以改善它。
# 另外,如果你的耕地只有一格厚,请加厚至两格以上,否则机器人在重新连接时有可能会穿过耕地并掉落。
# 此外,如果机器人走到边缘时将不会拾起所有的掉落物,我们已有计划在未来添加这个选项,同时加入将农作物放到箱子及从箱子补充骨粉。
[ChatBot.Farmer]
Enabled = false
Delay_Between_Tasks = 1.0                   # 任务之间的延迟时间(最短为1秒)

# 让机器人跟随指定玩家
# 注意这是一个实验性的功能,目前的寻路速度可能很慢,你可能需要时常等一会机器人来让它跟上你。
# 你可以调整"Update_Limit",找到最适合你的速度。(注意不要设置的太低,这样可能导致反效果或使MCC卡顿)。
# /!\ 在使用此功能之前,请先确保服务器规则允许你这样做。
[ChatBot.FollowPlayer]
Enabled = false
Update_Limit = 1.5                          # 机器人寻路的间隔时间(以秒为单位)
Stop_At_Distance = 3.0                      # 如果玩家在该范围内,则视为已经接近玩家了。(防止机器人将玩家推开而产生无限循环)

# 一个用于演示聊天互动的小游戏。玩家可以一次一个字母地猜出神秘的单词。
# 你需要正确地使用 ChatFormat,并在 botowners 中添加自己,用/tell <bot username> start
# /!\ 这个机器人可能会造成刷屏,如果许多玩家与它互动。
[ChatBot.HangmanGame]
Enabled = false
English = true
FileWords_EN = "hangman-en.txt"
FileWords_FR = "hangman-fr.txt"

# 在玩家和服务器之间中继消息,就像一个邮件插件一样。
# 这个机器人可以在收件人离线时存储消息,并在他们加入服务器时发送消息。
# /!\ 服务器管理员可以以任意玩家的身份发送任意消息,请记住这一点。
[ChatBot.Mailer]
Enabled = false
DatabaseFile = "MailerDatabase.ini"
IgnoreListFile = "MailerIgnoreList.ini"
PublicInteractions = false
MaxMailsPerPlayer = 10
MaxDatabaseSize = 10000
MailRetentionDays = 30

# 允许你将地图渲染成.jpg图片,该图片会被渲染到Rendered_Maps文件夹中。
# 注意:这个功能目前只对解决使用地图的验证码有用。
# 如果一些服务器解决验证码的时间很短,请启用Auto_Render_On_Update并准备快速打开该文件。
# 在linux上,你可以使用FTP来访问生成的文件。
[ChatBot.Map]
Enabled = false
Render_In_Console = true                    # 是否在控制台中渲染地图。
Save_To_File = false                        # 是否将地图保存为文件。
Auto_Render_On_Update = false               # 一旦接收到新的地图或已有地图被更新,自动渲染该地图。
Delete_All_On_Unload = true                 # 在卸载/重新加载地图时删除所有已渲染的地图(退出MCC时不会删除图像)
Notify_On_First_Update = true               # 当第一次从服务器上收到一张地图时,发送一个通知。
Rasize_Rendered_Image = false               # 调整渲染图像的大小,当渲染的图像较小或需要发送到Discord时,这很有用。
Resize_To = 512                             # 渲染的图像应调整到的大小,以像素为单位(例如 512)。
# 将已渲染地图(保存到文件)通过Discord/Telegram Bridge发送到Discord/Telegram频道(Discord/Telegram Bridge必须已激活并完成配置!)
# 你需要激活 Save_To_File 才能使用此功能。
# 我们同时建议打开调整大小功能。
Send_Rendered_To_Discord = false
Send_Rendered_To_Telegram = false

# 定期记录当前的玩家列表到文件中。
[ChatBot.PlayerListLogger]
Enabled = false
File = "playerlog.txt"
Delay = 60.0                                # (单位:秒)

# 通过游戏中的私聊向机器人发送MCC控制台命令
# 你需要先配置好[ChatFormat]章节的设置,并在[Main.Advanced.bot_owners]中添加自己的账号。
# /!\ 服务器管理员可以以任意玩家的身份发送任意消息,仅在信任他们时启用本功能。
[ChatBot.RemoteControl]
Enabled = false
AutoTpaccept = true
AutoTpaccept_Everyone = false

# 使用"/replay start"开始记录游戏,并在之后使用 Replay Mod (https://www.replaymod.com/) 进行重放。
# 请注意,由于技术限制,玩家自身不会显示在重放文件中。
# /!\ 你应该使用"/replay stop"停止记录或者使用"/quit"退出程序,否则回放文件可能会损坏。
[ChatBot.ReplayCapture]
Enabled = false
Backup_Interval = 300.0                     # 每间隔多少秒自动保存一次回放文件,以秒为单位。使用-1禁用自动保存。

# 在加入服务器时、到达特定时间时或以设定的时间间隔执行命令或脚本文件
# 详细使用方法请查看:https://mccteam.github.io/g/bots/#script-scheduler
[ChatBot.ScriptScheduler]
Enabled = false

[[ChatBot.ScriptScheduler.TaskList]]
Task_Name = "Task Name 1"
Trigger_On_First_Login = false
Trigger_On_Login = false
Trigger_On_Times = { Enable = true, Times = [ 14:00:00, ] }
Trigger_On_Interval = { Enable = true, MinTime = 3.6, MaxTime = 4.8 }
Action = "send /hello"

[[ChatBot.ScriptScheduler.TaskList]]
Task_Name = "Task Name 2"
Trigger_On_First_Login = false
Trigger_On_Login = true
Trigger_On_Times = { Enable = false, Times = [ ] }
Trigger_On_Interval = { Enable = false, MinTime = 1.0, MaxTime = 10.0 }
Action = "send /login pass"

# 这个 Chatbot 可以让你通过Telegram机器人使用Telegram频道或私聊来与MCC交互。
# /!\ 注意:你不能从群组对话发送信息和指令,你只能从私人信息发送,但你可以从客户端取得群组对话的信息。
# -----------------------------------------------------------
# 配置:
# 首先你需要创建一个Telegram机器人并取得API密钥。请到Telegram找到@botfather
# 点击开始按钮,阅读机器人的信息,然后输入 "/newbot"。@botfather 将会引导你创建机器人。
# 当成功创建机器人后,复制API钥匙,然后贴在 "ChatBot.TelegramBridge" 部分中的 "Token" 字段(本部分)
# /!\ 请勿与任何人分享API密钥,并将它存储在安全的地方。
# 然后启动客户端和你的Telegram,在Telegram中寻找你新创建的机器人并与机器人打开私人信息。
# 点击开始按钮,输入并发送 ".chatid" 指令来获得聊天室ID。
# 复制聊天室ID (例子:2627844670),然后贴在 "ChannelId" 字段和 "Authorized_Chat_Ids" 字段 ("Authorized_Chat_Ids" 字段是一个数字而不是字符串),存储配置文档。
# 现在你可以通过私聊信息来使用机器人。
# /!\ 如果你没有将聊天室ID加到 "Authorized_Chat_Ids" 字段,任何找到你的机器人的人将能够运行指令和发送信息!
# /!\ "Authorized_Chat_Ids" 字段中的ID应该是一个数字而不是字符串!
# -----------------------------------------------------------
# 注意:如果你希望通过群组来接收信息,将群组暂时改为公开,邀请你的机器人到群组并给与机器人管理员权限,最后将群组改为私人。
# 然后将 "ChannelId" 字段设为 @群组名称(必须包括@,例子:"@mysupersecretchannel"),你可以在频道邀请链接看到这个用户名。
# /!\ 只需包含用户名加上@在前面,不需要包括剩下的链接。例如你的链接是 "https://t.me/mysupersecretchannel","ChannelId" 字段将会是 "@mysupersecretchannel"。
# /!\ 注意,你将不能从群组发送信息到客户端!
# -----------------------------------------------------------
# 如何使用:
# 希望运行MCC指令时,在指令前加上点 "."。例如 ".move 143 64 735"。
# 希望发送聊天信息时,只需要直接发送就好了。
[ChatBot.TelegramBridge]
Enabled = false
Token = "your bot token here"               # 你的Telegram机器人的令牌。
ChannelId = ""                              # 你想要使机器人与 MCC 交互的频道ID。
Authorized_Chat_Ids = [ ]                   # 允许发送信息和运行指令的聊天室ID列表。要获得你的私人聊天室ID,请在 Telegram 中使用 ".chatid" 指令。
Message_Send_Timeout = 3                    # 如果信息无法被发送至Telegram时,要等候多少秒才取消发送。(最小 1 秒)
# 消息格式
# 使用 { 和 } 包裹的单词将在代码执行过程中被替换,请不要更改它们!
# 例如,{message} 将替换为实际的消息,{username} 将替换为用户名, {timestamp} 将替换为当前时间。
# 了解Telegram消息格式,请访问:https://mccteam.github.io/r/tg-fmt.html
PrivateMessageFormat = "*(Private Message)* {username}: {message}"
PublicMessageFormat = "{username}: {message}"
TeleportRequestMessageFormat = "A new Teleport Request from **{username}**!"

# 一个收集掉落物的Chat Bot。
[ChatBot.ItemsCollector]
Enabled = false
Collect_All_Item_Types = true               # 如果被设置为true,则机器人会拾取所有的掉落物,无论其类型如何。如果您需要使用掉落物白名单,请将该选项设置为false。
Items_Whitelist = [ "Diamond", "NetheriteIngot", ] # 在这个列表中,您可以指定机器人要有目标地拾取某些掉落物。要启用该选项,请将Collect_All_Item_Types设为false。(PS:这并不能阻止机器人意外地拾取其他掉落物,它只是前往它发现掉落物的位置。)\n您可以参照掉落物类型列表:https://raw.githubusercontent.com/MCCTeam/Minecraft-Console-Client/master/MinecraftClient/Inventory/ItemType.cs
Delay_Between_Tasks = 300                   # 机器人扫描掉落物的延迟,以毫秒为单位。(推荐:300~500ms左右)
Collection_Radius = 30.0                    # 机器人搜寻掉落物的半径。(默认:30格)
Always_Return_To_Start = true               # 如果您将其设置为true,则机器人会在拾取完所有掉落物后返回起始位置。
Prioritize_Clusters = false                 # 如果设置为 true,机器人将会在收集完所有物品之后处理,而不是收集一次就处理

# 通过Web Sockets来远程控制MCC机器人.\n# 在远程和异步执行MCC中的程序很有用.\n# JavaScript示例: https://github.com/milutinke/MCC.js.git\n# 协议规范很快将会在文档种提供
[ChatBot.WebSocketBot]
Enabled = false
Ip = "127.0.0.1"                            # WebSocket服务器监听的IP地址
Port = 8043                                 # Websocket服务器绑定的端口
Password = "a7658cea42604230a552902221b20d3e" # 密码会用于Web Socket服务器的身份验证(建议修改默认密码并设置一个强密码)
DebugMode = false                           # 此选项适用于使用Chat Bot远程执行程序/命令/函数
AllowIpAlias = false                        # 允许 IP 别名,如 "localhost";如果使用容器,则可以使用容器名称...

Device

Desktop

Operating System

Windows

Server Address (If applicable)

2b2t.xin

milutinke commented 8 months ago

I do not get that message, I get kicked with: "Loaded chunk packet wrongly" which is not a standard Minecraft server error, the server uses Bungeecord, and probably has a plugin that causes issues. I am unable to debug this one, maybe try using a different version.

oldkingOK commented 8 months ago

I have the same issue with vanilla 1.20

Log

Minecraft Console Client v1.20.4 - for MC 1.4.6 to 1.20.4 - Github.com/MCCTeam
Resolving 127.0.0.1...
[MCC] [ScriptScheduler] Loaded task:
triggeronfirstlogin: False
 triggeronlogin: False
 triggerontime: True
 triggeroninterval: True
 timevalue: 14:00:00
 timeinterval: 53.4
 action: send /hello
[MCC] [ScriptScheduler] Loaded task:
triggeronfirstlogin: False
 triggeronlogin: True
 triggerontime: False
 triggeroninterval: False
 timevalue:
 timeinterval: 56
 action: send /login pass
Color test: Your terminal should display [0123456789ABCDEF]: (4bit)[0123456789ABCDEF]
Color test: Your terminal should display [0123456789]: (vt100 8bit)[0123456789]
Color test: Your terminal should display [0123456789]: (vt100 24bit)[0123456789]
[SessionCache] Initializing FileSystemWatcher for file: D:\SessionCache.ini
Loading session cache from disk: SessionCache.ini
Server version : 1.20 (protocol v763)
[KeysCache] Initializing FileSystemWatcher for file: D:\ProfileKeyCache.ini
Loading profile key cache from disk: ProfileKeyCache.ini
Loaded profile key, it will be refresh at 2024/3/16 8:36:39
Profile keys has been successfully loaded from disk.
Cached profile key is still valid for asd.
[MCC] Version is supported.
Logging in...
[DEBUG] Crypto keys & hash generated.
[MCC] Server was successfully joined.
Type '/quit' to leave the server.
> Unhandled exception. System.IO.InvalidDataException: Failed to process incoming packet of type ProfilelessChatMessage. (PacketID: 28, Protocol: 763, LoginPhase: False, InnerException: System.InvalidOperationException).
 ---> System.InvalidOperationException: Queue empty.
   at System.Collections.Generic.Queue`1.ThrowForEmptyQueue()
   at System.Collections.Generic.Queue`1.Dequeue()
   at MinecraftClient.Protocol.Handlers.DataTypes.ReadNextChat(Queue`1 cache) in D:\Documents\VSCode\Minecraft-Console-Client\MinecraftClient\Protocol\Handlers\DataTypes.cs:line 1068
   at MinecraftClient.Protocol.Handlers.Protocol18Handler.HandlePlayPackets(Int32 packetId, Queue`1 packetData) in D:\Documents\VSCode\Minecraft-Console-Client\MinecraftClient\Protocol\Handlers\Protocol18.cs:line 1050
   at MinecraftClient.Protocol.Handlers.Protocol18Handler.HandlePacket(Int32 packetId, Queue`1 packetData) in D:\Documents\VSCode\Minecraft-Console-Client\MinecraftClient\Protocol\Handlers\Protocol18.cs:line 447
   --- End of inner exception stack trace ---
   at MinecraftClient.Protocol.Handlers.Protocol18Handler.HandlePacket(Int32 packetId, Queue`1 packetData) in D:\Documents\VSCode\Minecraft-Console-Client\MinecraftClient\Protocol\Handlers\Protocol18.cs:line 459
   at MinecraftClient.Protocol.Handlers.Protocol18Handler.Updater(Object o) in D:\Documents\VSCode\Minecraft-Console-Client\MinecraftClient\Protocol\Handlers\Protocol18.cs:line 253
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
oldkingOK commented 8 months ago

Vanilla 1.20.1 can also reproduce the bug, 1.20.2 and 1.20.4 works fine.

Log 1.20.1

Minecraft Console Client v1.20.4 - for MC 1.4.6 to 1.20.4 - Github.com/MCCTeam
[MCC] [ScriptScheduler] Loaded task:
triggeronfirstlogin: False
 triggeronlogin: False
 triggerontime: True
 triggeroninterval: True
 timevalue: 14:00:00
 timeinterval: 53.4
 action: send /hello
[MCC] [ScriptScheduler] Loaded task:
triggeronfirstlogin: False
 triggeronlogin: True
 triggerontime: False
 triggeroninterval: False
 timevalue:
 timeinterval: 56
 action: send /login pass
Color test: Your terminal should display [0123456789ABCDEF]: (4bit)[0123456789ABCDEF]
Color test: Your terminal should display [0123456789]: (vt100 8bit)[0123456789]
Color test: Your terminal should display [0123456789]: (vt100 24bit)[0123456789]
[SessionCache] Initializing FileSystemWatcher for file: D:\Documents\VSCode\Minecraft-Console-Client\MinecraftClient\bin\Debug\net7.0\SessionCache.ini
Loading session cache from disk: SessionCache.ini
Loaded session: 
Loaded session: 
Session data has been successfully loaded from disk.
Access token expiration time is 2024/3/15 23:39:50
Cached session is still valid for oldkingOK.
Saving session cache to disk
Success. (session ID: 
Retrieving Server Info...
Performing request to sessionserver.mojang.com
Loading session cache from disk: SessionCache.ini
Loaded session: 
Server version : 1.20.1 (protocol v763)
[KeysCache] Initializing FileSystemWatcher for file: D:\Documents\VSCode\Minecraft-Console-Client\MinecraftClient\bin\Debug\net7.0\ProfileKeyCache.ini
Loading profile key cache from disk: ProfileKeyCache.ini
Loaded profile key, it will be refresh at 2024/3/16 8:36:39
Loaded profile key, it will be refresh at 2024/3/16 15:39:52
Profile keys has been successfully loaded from disk.
Cached profile key is still valid for oldkingOK.
[MCC] Version is supported.
Logging in...
[DEBUG] Crypto keys & hash generated.
[MCC] Checking Session...
Performing request to sessionserver.mojang.com

Saving session cache to disk
Loading session cache from disk: SessionCache.ini
Loaded session: So
[MCC] Server was successfully joined.
Type '/quit' to leave the server.
> Unhandled exception. System.IO.InvalidDataException: Failed to process incoming packet of type ProfilelessChatMessage. (PacketID: 28, Protocol: 763, LoginPhase: False, InnerException: System.InvalidOperationException).
 ---> System.InvalidOperationException: Queue empty.
   at System.Collections.Generic.Queue`1.ThrowForEmptyQueue()
   at System.Collections.Generic.Queue`1.Dequeue()
   at MinecraftClient.Protocol.Handlers.DataTypes.ReadNextChat(Queue`1 cache) in D:\Documents\VSCode\Minecraft-Console-Client\MinecraftClient\Protocol\Handlers\DataTypes.cs:line 1068
   at MinecraftClient.Protocol.Handlers.Protocol18Handler.HandlePlayPackets(Int32 packetId, Queue`1 packetData) in D:\Documents\VSCode\Minecraft-Console-Client\MinecraftClient\Protocol\Handlers\Protocol18.cs:line 1051
   at MinecraftClient.Protocol.Handlers.Protocol18Handler.HandlePacket(Int32 packetId, Queue`1 packetData) in D:\Documents\VSCode\Minecraft-Console-Client\MinecraftClient\Protocol\Handlers\Protocol18.cs:line 447
   --- End of inner exception stack trace ---
   at MinecraftClient.Protocol.Handlers.Protocol18Handler.HandlePacket(Int32 packetId, Queue`1 packetData) in D:\Documents\VSCode\Minecraft-Console-Client\MinecraftClient\Protocol\Handlers\Protocol18.cs:line 459
   at MinecraftClient.Protocol.Handlers.Protocol18Handler.Updater(Object o) in D:\Documents\VSCode\Minecraft-Console-Client\MinecraftClient\Protocol\Handlers\Protocol18.cs:line 253
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
milutinke commented 8 months ago

Vanilla 1.20.1 can also reproduce the bug, 1.20.2 and 1.20.4 works fine.

Log 1.20.1

Minecraft Console Client v1.20.4 - for MC 1.4.6 to 1.20.4 - Github.com/MCCTeam
[MCC] [ScriptScheduler] Loaded task:
triggeronfirstlogin: False
 triggeronlogin: False
 triggerontime: True
 triggeroninterval: True
 timevalue: 14:00:00
 timeinterval: 53.4
 action: send /hello
[MCC] [ScriptScheduler] Loaded task:
triggeronfirstlogin: False
 triggeronlogin: True
 triggerontime: False
 triggeroninterval: False
 timevalue:
 timeinterval: 56
 action: send /login pass
Color test: Your terminal should display [0123456789ABCDEF]: (4bit)[0123456789ABCDEF]
Color test: Your terminal should display [0123456789]: (vt100 8bit)[0123456789]
Color test: Your terminal should display [0123456789]: (vt100 24bit)[0123456789]
[SessionCache] Initializing FileSystemWatcher for file: D:\Documents\VSCode\Minecraft-Console-Client\MinecraftClient\bin\Debug\net7.0\SessionCache.ini
Loading session cache from disk: SessionCache.ini
Loaded session: 
Loaded session: 
Session data has been successfully loaded from disk.
Access token expiration time is 2024/3/15 23:39:50
Cached session is still valid for oldkingOK.
Saving session cache to disk
Success. (session ID: 
Retrieving Server Info...
Performing request to sessionserver.mojang.com
Loading session cache from disk: SessionCache.ini
Loaded session: 
Server version : 1.20.1 (protocol v763)
[KeysCache] Initializing FileSystemWatcher for file: D:\Documents\VSCode\Minecraft-Console-Client\MinecraftClient\bin\Debug\net7.0\ProfileKeyCache.ini
Loading profile key cache from disk: ProfileKeyCache.ini
Loaded profile key, it will be refresh at 2024/3/16 8:36:39
Loaded profile key, it will be refresh at 2024/3/16 15:39:52
Profile keys has been successfully loaded from disk.
Cached profile key is still valid for oldkingOK.
[MCC] Version is supported.
Logging in...
[DEBUG] Crypto keys & hash generated.
[MCC] Checking Session...
Performing request to sessionserver.mojang.com

Saving session cache to disk
Loading session cache from disk: SessionCache.ini
Loaded session: So
[MCC] Server was successfully joined.
Type '/quit' to leave the server.
> Unhandled exception. System.IO.InvalidDataException: Failed to process incoming packet of type ProfilelessChatMessage. (PacketID: 28, Protocol: 763, LoginPhase: False, InnerException: System.InvalidOperationException).
 ---> System.InvalidOperationException: Queue empty.
   at System.Collections.Generic.Queue`1.ThrowForEmptyQueue()
   at System.Collections.Generic.Queue`1.Dequeue()
   at MinecraftClient.Protocol.Handlers.DataTypes.ReadNextChat(Queue`1 cache) in D:\Documents\VSCode\Minecraft-Console-Client\MinecraftClient\Protocol\Handlers\DataTypes.cs:line 1068
   at MinecraftClient.Protocol.Handlers.Protocol18Handler.HandlePlayPackets(Int32 packetId, Queue`1 packetData) in D:\Documents\VSCode\Minecraft-Console-Client\MinecraftClient\Protocol\Handlers\Protocol18.cs:line 1051
   at MinecraftClient.Protocol.Handlers.Protocol18Handler.HandlePacket(Int32 packetId, Queue`1 packetData) in D:\Documents\VSCode\Minecraft-Console-Client\MinecraftClient\Protocol\Handlers\Protocol18.cs:line 447
   --- End of inner exception stack trace ---
   at MinecraftClient.Protocol.Handlers.Protocol18Handler.HandlePacket(Int32 packetId, Queue`1 packetData) in D:\Documents\VSCode\Minecraft-Console-Client\MinecraftClient\Protocol\Handlers\Protocol18.cs:line 459
   at MinecraftClient.Protocol.Handlers.Protocol18Handler.Updater(Object o) in D:\Documents\VSCode\Minecraft-Console-Client\MinecraftClient\Protocol\Handlers\Protocol18.cs:line 253
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)

Can you send me the message that is causing this? Do you run a pure vanilla server or a PaperMc server with/without plugins?

oldkingOK commented 8 months ago

Hi, @milutinke ,

Can you send me the message that is causing this?

I didn't send any message before the crash. It crashed right after Type '/quit' to leave the server.

Do you run a pure vanilla server or a PaperMc server with/without plugins?

Yes, I run a pure vanilla server with jar file from https://getbukkit.org/download/vanilla

Additional Information

Console Client Version

Latest

Operating System

Windows x64

milutinke commented 8 months ago

Hi, @milutinke ,

Can you send me the message that is causing this?

I didn't send any message before the crash. It crashed right after Type '/quit' to leave the server.

Do you run a pure vanilla server or a PaperMc server with/without plugins?

Yes, I run a pure vanilla server with jar file from https://getbukkit.org/download/vanilla

Additional Information

Console Client Version

Latest

Operating System

Windows x64

I will debug it tomorrow, thanks for the link for the Vanilla jar.

oldkingOK commented 8 months ago

Hi, @milutinke ,

It seems that the packet id wasn't correctly recognized.

In 1.20.2, https://wiki.vg/index.php?title=Protocol&oldid=18641#Disguised_Chat_Message

The Disguised_Chat_Message (alias in MCC: ProfilelessChatMessage) packet id is 0x1C -> 28

In 1.20.1, https://wiki.vg/index.php?title=Protocol&oldid=18375#Disguised_Chat_Message

The packet id is 0x1B -> 27

In the 1.20.1 log

Unhandled exception. System.IO.InvalidDataException: Failed to process incoming packet of type ProfilelessChatMessage. (PacketID: 28, Protocol: 763, LoginPhase: False, InnerException: System.InvalidOperationException).
oldkingOK commented 8 months ago

It looks like there's something wrong with the GetTypeHandler(int protocol)

            PacketTypePalette p = protocol switch
            {
                > Protocol18Handler.MC_1_20_4_Version => throw new NotImplementedException(Translations
                    .exception_palette_packet),
                <= Protocol18Handler.MC_1_8_Version => new PacketPalette17(),
                ...
                <= Protocol18Handler.MC_1_19_2_Version => new PacketPalette1192(),
                <= Protocol18Handler.MC_1_19_3_Version => new PacketPalette1193(),
                <= Protocol18Handler.MC_1_19_4_Version => new PacketPalette1194(),
                <= Protocol18Handler.MC_1_20_2_Version => new PacketPalette1202(),
                _ => new PacketPalette1204()
            };

MC_1_19_4_Version = 762 MC_1_20_Version = 763 (includes 1.20 and 1.20.1) MC_1_20_2_Version = 764

Tested, MCC works fine with Palette1194 and protocol763 while using Palette1202 causes the crash.

imnaK commented 8 months ago

Can we replace this line

- <= Protocol18Handler.MC_1_19_4_Version => new PacketPalette1194(),
+ <= Protocol18Handler.MC_1_20_1_Version => new PacketPalette1194(),

?

Clientbound protocols of 1.19.4 match with 1.20 and 1.20.1. Only 1.20.2 has new clientbound protocols which then will be catched by the next line. I will proof it and make a pull request if it works.

imnaK commented 8 months ago

Okay, so it works (at least for 1.20.1) if you choose the PacketPalette1194 for it like described above. But you still need to add MC_1_20_1_Version in Protocol18.cs like so:

// . . .
internal const int MC_1_20_Version = 763;
+ internal const int MC_1_20_1_Version = 763;
internal const int MC_1_20_2_Version = 764;
// . . .

Notice how it has the same version as 1.20. For now all 1.20.x will use 1.20.4 version which is not right.

I don't want to push it or make a pull request at this point because I have the feeling there might be more to do I can't know at this point because I am new to this project. Can a dev proof this or explain what else I have to consider when making these changes?

oldkingOK commented 8 months ago

Hi @imnaK ,

Can we replace this line

- <= Protocol18Handler.MC_1_19_4_Version => new PacketPalette1194(),
+ <= Protocol18Handler.MC_1_20_1_Version => new PacketPalette1194(),

I think

<= Protocol18Handler.MC_1_20_Version => new PacketPalette1194(),

is fine, because Protocol18Handler.MC_1_20_Version whose value is 763 includes 1.20 and 1.20.1.

There is no need to add a new const MC_1_20_1_Version.

imnaK commented 8 months ago

Hey @oldkingOK,

I think

<= Protocol18Handler.MC_1_20_Version => new PacketPalette1194(),

is fine, because Protocol18Handler.MC_1_20_Version whose value is 763 includes 1.20 and 1.20.1.

There is no need to add a new const MC_1_20_1_Version.

Makes sense :) I have noticed that but did not think of that because of the naming.

milutinke commented 8 months ago

Finally caught some free time to read up on this. Nice catch and work guys, thanks for contributing.