Ears
基本信息
pl.asie.foamfix.repack.com.unascribed.ears.Ears —— 重打包(repack) 的
Ears(自定义玩家模型/皮肤)支持,提供 Minecraft 1.8+ 皮肤格式支持。
⚠️ @Mod 注解被注释掉
// @Mod(modid="ears", name="Ears", version="@VERSION@", useMetadata=true)
public class Ears { ... }
这是故意的 —— Ears 不是独立 mod,而是被 FoamFix 内嵌的一组类。
若保留 @Mod,FML 会把它当成第二个 mod 加载,与 FoamFix 冲突。
集成机制(双重)
1. applyEarsPatch() 探测
BugfixModClassTransformer.applyEarsPatch()(第 184 行):
- 仅当
settings.mc18SkinSupport为真才继续; Class.forName("com.unascribed.ears.Ears")—— 抛异常(未安装独立 Ears) 则applyEarsPatch = true;- 再探测
api.player.render.RenderPlayerAPI—— 若存在(说明装了别的兼容 API) 则回退applyEarsPatch = false。
即:只有在没有独立 Ears、也没有 RenderPlayerAPI 时才启用内置补丁, 避免与用户自己装的 Ears 重复。
2. 反射调用 onPreInit
FoamFixMod.preinit 客户端分支:
Class c = Class.forName("pl.asie.foamfix.repack.com.unascribed.ears.Ears");
Object o = c.newInstance();
c.getMethod("onPreInit", FMLPreInitializationEvent.class).invoke(o, evt);
catch (Throwable t) { t.printStackTrace(); // pass } —— 吞掉所有异常。
amendPlayerRenderer:64×64 皮肤改造
ModelBiped model = new ModelBiped(0, 0, 64, 64);
ReflectionHelper.setPrivateValue(RendererLivingEntity.class, rp, model,
"field_77045_g", "mainModel");
用 64×64 的 ModelBiped 替换原 64×32 模型,通过反射写私有字段
mainModel(SRG field_77045_g,双名参数),实现 slim/fat 手臂共存。
静态状态
| 字段 | 类型 | 说明 |
|---|---|---|
earsSkinFeatures |
Map<ITextureObject, EarsFeatures> |
WeakHashMap —— 纹理对象回收即清理 |
layer / slimLeftArm / slimRightArm / fatLeftArm / fatRightArm |
— | 渲染层与手臂模型 |
代码规模
pl/asie/foamfix/repack/com/unascribed/ears/ 共 80 个 java 文件
(占全仓 122 文件的约 2/3),是 FoamFix 中体量最大的子系统。
相关条目
源码
src/main/java/pl/asie/foamfix/repack/com/unascribed/ears/Ears.java