MixinIconConnectedTexture
基本信息
| 属性 | 值 |
|---|---|
| 类名 | com.gtnewhorizons.angelicacompat.mixins.late.client.extrautils.MixinIconConnectedTexture |
| 目标类 | com.rwtema.extrautils.block.IconConnectedTexture |
| Mixin 阶段 | LATE(mixins.angelicacompat.late.json) |
| Mixin 启用条件 | PatchesConfig.patchExtraUtils == true |
| Mixin 注入方法 | 7 个 @Overwrite:setType、getMinU、getMaxU、getMinV、getMaxV、getIconName、getIconWidth、getIconHeight |
| 启用版本 | Minecraft 1.7.10(仅客户端) |
功能
Extra Utilities 的 IconConnectedTexture 把"当前选中的纹理索引"保存在一个实例字段 n 上,所有纹理查询方法都读取 n。Angelica 的 Sodium 多线程 ISBRT 路径会把同一个 IconConnectedTexture 实例并发访问——n 字段被多个 worker thread 同时读写,产生交错渲染结果(纹理闪烁/错位)。
本 Mixin 将 n 字段替换为 ThreadLocal<Integer> newN,每个线程持有独立的当前索引:
@Unique
private ThreadLocal<Integer> newN = ThreadLocal.withInitial(() -> 0);
@Overwrite(remap = false)
public void setType(int i) {
this.newN.set(i);
}
@Overwrite
public float getMinU() { return this.icons[newN.get()].getMinU(); }
// ... 其它 6 个 getter 同样改造 ...
实现要点
@Overwrite直接整体替换目标方法,@author Cleptomania,@reason Support thread-safety for connected textures。@SideOnly(Side.CLIENT)注解保留原方法的getIconWidth/getIconHeight注解。@Shadow(remap = false) public IIcon[] icons:复用原字段。
第三方 mod 集成
仅针对 com.rwtema.extrautils.block.IconConnectedTexture (Extra Utilities)。
相关条目
- MixinRenderBlockConnectedTextures - 平行 EU Mixin:实例化
FakeRenderBlocks - MixinRenderBlockConnectedTexturesEthereal - 平行 EU Mixin:实例化
FakeRenderEtherealBlocks - ExtraUtilsCompatHandler - 同时为 EU
RenderBlockConnectedTextures*系列声明@ThreadSafeISBRH(perThread=true) - PatchesConfig -
patchExtraUtils开关 - LateMixins - 注入入口