MixinS21PacketChunkDataThermosTainted

基本信息

属性 值
Mixin 目标 net.minecraft.network.play.server.S21PacketChunkData
Phase EARLY(仅当 Thermos 服务端存在:addRequiredMod(TargetMods.THERMOS))
角色 Thermos 服务端专用变体:与 MixinS21PacketChunkData 类似但走 NibbleArray.copyToByteArray 路径
配套检测 TargetMods.THERMOS = "org.bukkit.World"

与标准 MixinS21PacketChunkData 的差异

维度 标准 vanilla Thermos Tainted
字节尺寸 @ModifyConstant(<clinit> / func_149275_c / readPacketData) ✅ ✅
getBlockLSBArray() 重定向 ✅ ✅
LSB System.arraycopy 取消 ✅ ordinal = 0 ✅ ordinal = 0
getMetadataArray() 重定向 ✅ ✅
metadata System.arraycopy 取消 ✅ ordinal = 1 ❌(Thermos 用 NibbleArray.copyToByteArray 而非 System.arraycopy)
metadata NibbleArray.copyToByteArray 取消 ❌ ✅ ordinal = 0,remap=false
getBlockMSBArray() 重定向 ✅ ordinal = 0 ✅ ordinal = 0
客户端 @Inject transformBulk 管线 ✅ ❌

选择规则

Mixins.java:

VANILLA_STARTUP_ONLY_WITHOUT_THERMOS(new MixinBuilder()
    .addCommonMixins("minecraft.MixinS21PacketChunkData")
    .addExcludedMod(TargetMods.THERMOS)),
VANILLA_STARTUP_ONLY_WITH_THERMOS(new MixinBuilder()
    .addCommonMixins("minecraft.MixinS21PacketChunkDataThermosTainted")
    .addRequiredMod(TargetMods.THERMOS)),

GTNHLib 的 mixin 框架二选一加载:检测到 Thermos 类加载 → 加载 Tainted 版本;否则加载标准版本。

相关条目