
口渴已被夺走:Mixin服务器修复
Universal NBT ItemStack 空指针安全补丁。修复任何模组在服务器与客户端同步期间发生的 EncoderException 崩溃。使用 Mixins 防止空引用,无需修改源代码。最初为 TWT(Thirst Was Taken)开发。
查看大图口渴已取:服务器修复
🔧 这个模组是什么?
一个关键的补丁模组,修复了在服务器与客户端通信期间影响 ItemStack 序列化的 NBT 标签同步崩溃。最初为 Thirst Was Taken 和 Thirst-No-More 模组发现并解决,此修复普遍适用于任何在 Netty 数据包编码期间遇到空 ItemStack 崩溃的模组。
🐛 问题所在
多个模组(特别是水/饮水容器类模组)使用 ItemStack.getOrCreateTag() 模式,这可能会无意中创建包含空 ItemStack 引用的 NBT 标签。当这些物品从服务器同步到客户端时,Netty 编码器尝试序列化空 ItemStack 对象,从而导致:
EncoderException: Cannot invoke net.minecraft.world.item.ItemStack.m_41619_()
because p_130056_ is null
此崩溃会完全阻止玩家加入服务器。
✅ 解决方案
此模组使用 Forge Mixins 在网络层注入保护性补丁,而无需修改原始模组:
- FriendlyByteBufItemStackMixin:拦截所有对网络数据包的 ItemStack 写入,并用
ItemStack.EMPTY安全替换空 ItemStack 引用,保持数据包协议完整性 - ItemStackNullSafetyMixin:保护关键的 ItemStack 序列化方法(
save()、getMaxStackSize()、isEmpty()、getItem())
🎯 为什么选择此模组?
- 无需修改源代码 - Mixin 在运行时打补丁
- 通用解决方案 - 适用于任何存在空 ItemStack 问题的模组
- 安全 - 用有效的空堆栈替换空值,保持服务器稳定性
- 透明 - 零配置要求,安装后立即可用
📋 兼容性
- Minecraft:目前仅支持 1.20.1
- 适用于:Thirst Was Taken、Thirst-No-More,以及任何存在 ItemStack NBT 同步问题的模组
🔍 起源
此修复旨在解决使用 Thirst Was Taken 和 Thirst-No-More 模组的服务器中出现的严重加入崩溃问题。底层问题(NBT 序列化中的空 ItemStack)可能发生在任何模组中,因此此解决方案作为通用补丁提供。
遇到问题? 如果遇到任何问题,请连同您的 latest.log 一并报告。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。