SignClassTransformer

[!WARNING] 未注册 —— 不会生效 本类 implements IClassTransformer,但本仓库没有 IFMLLoadingPlugin 实现,gradle.properties 的 coreModClass 为空, 也不存在 @FMLCorePlugin 注解。LaunchWrapper 因此从不调用本类, 其字节码补丁完全不会生效。

基本信息

属性 值
类名 myessentials.classtransformers.SignClassTransformer
实现 net.launchwrapper.IClassTransformer
补丁目标 net.minecraft.tileentity.TileEntitySign
源码行数 254
启用版本 Minecraft 1.7.10

功能

给 TileEntitySign 注入一个名为 myEssentials 的字段, 使告示牌能保存自定义 NBT 数据而不会在原版 writeToNBT / readFromNBT 中丢失。

实现要点

  • 2 个公开常量:TAG_ROOT = "MyEssentials"(NBT 根键)与 FIELD_NAME = "myEssentials"(注入字段名)
  • 7 个方法分两组:
    • MOD PART(游戏内读写):getMyEssentialsDataField(缓存反射 Field)、 getMyEssentialsDataValue、setMyEssentialsDataValue
    • CORE-MOD PART(字节码注入):在 writeToNBT / readFromNBT 返回前插入对上述静态方法的调用
  • 字节码里被插入的调用目标字符串为 myessentials/classtransformers/SignClassTransformer
  • 用 java.lang.reflect.Field 缓存注入字段以避免每次反射查找
  • 字段缺失时 getMyEssentialsDataField 抛 RuntimeException(NoSuchFieldException)
  • transform(String name, String srgName) 签名符合 1.7.10 LaunchWrapper 的 IClassTransformer 契约,但没有注册入口。
  • 若要启用,需补一个 IFMLLoadingPlugin 实现并在 gradle.properties 的 coreModClass 中声明; 当前仓库未提供。

相关条目