轮廓即宣言

轮廓即宣言

每种附魔类型都分配了独特的颜色标识,让您能立即掌握手中物品的力量。

✨ 附魔轮廓 · 轮廓即宣言

每件附魔物品都值得拥有属于自己的灵魂颜色。
灵感来源于 Enchantment Outlines 资源包,但作为原生模组将其发挥到了极致。

🎨 一眼辨附魔 — 颜色即语言

厌倦了千篇一律的紫色附魔闪光?附魔轮廓(Enchanted Outlines) 为 Minecraft 的附魔机制注入了一套完整的视觉语义系统 —— 每种附魔类型都被赋予了独特的颜色标识,让你瞬间读懂手中的力量。
💡 未配置的附魔会自动回退到默认颜色。支持通过配置文件或游戏内界面进行逐附魔自定义。

🚀 八大核心特性

1. 🧬 程序化轮廓生成 — 零纹理,全兼容

传统资源包需要为每件物品预制轮廓纹理。附魔轮廓使用一个自定义核心着色器,在 GPU 上实时提取物品模型的 Alpha 遮罩,然后沿8个方向偏移渲染。
原始物品纹理 → Alpha 遮罩      
       ↓                                 
  8方向偏移渲染            
  (上 / 下 / 左 / 右 / 左上 / 右上 / 左下 / 右下)    
       ↓                                 
  纯色填充 → 混合叠加 → 轮廓
这意味着:
  • ✅ 任何模组物品都能自动生效 — 无需预绘制纹理
  • ✅ 零烘焙时间 — 安装即玩
  • ✅ 零像素回读 — 纯 GPU 计算
  • ✅ 零缓存内存 — 每帧实时生成

2. 🌐 全渲染场景覆盖

从背包到战场,从地面到天空 — 轮廓无处不在:
场景 渲染方式 特殊处理
🎒 背包 / 快捷栏 / 容器界面 2D 纹理轮廓 支持3D物品预览
🤚 第一人称手持 顶点法线挤出 厚度均匀,贴合表面
👤 第三人称手持 / 掉落物 顶点法线挤出 动态光照响应
🖼️ 物品展示框 标准模型轮廓 适应朝向
🛡️ 穿戴的盔甲 模型挤出 独立的 armorThickness 配置
🦋 穿戴的鞘翅 模型挤出 飞行姿态同步
🔱 掷出的三叉戟 近似盒体模型 投掷姿态追踪

3. 🎯 BEWLR 智能近似

盾牌、三叉戟和望远镜使用程序化渲染(BEWLR),缺乏可用于勾勒轮廓的传统模型。我们为它们构建了几何近似盒体模型,实时追踪 blocking(盾牌举盾)和 throwing(三叉戟投掷)的显示变换,确保轮廓永不偏移。
⚠️ 钓鱼竿、地图等占位符 BEWLR 模型缺乏几何形状,因此不会被勾勒轮廓 — 这是技术限制,而非疏漏。

4. 🔄 动画与变体原生正确性

时钟指针旋转、指南针指针偏转、NBT驱动的变体模型、耐久度导致的模型切换 — 所有动态变化都会每帧从相同模型解析,因此轮廓形状与物品本身始终保持完美同步。

5. 🔧 原生配置界面 — 暗琥珀金主题

无需手动编辑 TOML 文件。通过一个精致的配置界面即可在游戏内调整一切:
  • 🎨 暗色 + 琥珀金主题,与原版风格和谐统一
  • 📂 分类导航:附魔颜色 / 物品颜色 / 全局设置 / 禁用列表
  • 📜 可滚动列表:支持大量附魔/物品条目
  • 💾 即时保存:更改立即生效,无需重启
  • 🚫 禁用模糊背景:避免与某些界面模组冲突
  • 🎛️ 像素色闪光开关(itemPixelColorGlint / armorPixelColorGlint):决定在着色器包下,轮廓是与物品的逐像素纹理颜色混合,还是保持纯色

6. 🔌 开发者友好 API

其他模组可以通过事件总线以编程方式注册规则,优先级高于配置文件:
NeoForge.EVENT_BUS.addListener(OutlineColorEvent.class, event -> {
    // 注册附魔颜色
    OutlineColorRegistry.registerEnchantmentColor(
        ResourceLocation.fromNamespaceAndPath("mymod", "my_enchant"), 
        0xFFFFA500  // 琥珀金
    );
// 注册物品覆盖颜色
OutlineColorRegistry.registerItemColor(
    ResourceLocation.fromNamespaceAndPath("mymod", "magic_sword"), 
    0xFF00FF00  // 魔法绿
);

// 注册每物品厚度(覆盖全局 armorThickness)
OutlineColorRegistry.registerItemThickness(
    ResourceLocation.fromNamespaceAndPath("mymod", "big_axe"), 
    3
);

// 禁用特定物品的轮廓
OutlineColorRegistry.disableItem(
    ResourceLocation.fromNamespaceAndPath("mymod", "special_item")
);

});


7. ⚡ 纯客户端 — 即插即用

  • 🚫 零服务端代码
  • 🚫 零网络数据包
  • ✅ 可加入任何多人服务器
  • ✅ 兼容单机 / 多人 / Realms

8. 🧩 无缝兼容生态系统

兼容类型 状态 备注
自定义模型模组(OptiFine / EMF / ETF) ✅ 完全兼容 着色器级处理,不依赖纹理
界面美化模组 ✅ 兼容 已禁用模糊背景以避免冲突
其他附魔视觉模组 ⚠️ 建议测试 可能产生叠加效果
着色器包(Iris / Oculus) ✅ 兼容 通过反射进行运行时检测(无硬性依赖);启用的着色器包使用内置的 entity_translucent_emissive 后备方案,确保世界轮廓保持明亮且颜色正确 — 见下文

着色器包(Iris / Oculus)后备模式

附魔轮廓在运行时检测着色器包(反射 IrisApi — 无编译时依赖,且当安装了 Iris 但未启用任何着色器包时,行为完全不变)。当着色器包已启用且 allowUnknownShaders 关闭时(Iris 默认),自定义核心着色器会被 Iris 跳过,因此世界渲染会回退到内置的 entity_translucent_emissive 渲染类型:
  • 保留自发光效果 — 无光照贴图乘法,因此轮廓保持全亮,而不会被着色器包的光照重写变暗。
  • 盾牌 / 三叉戟盒体模型 采样专用的纯白纹理(非方块图集)→ 不再出现“盾牌/三叉戟反射附近方块纹理”的问题;颜色保持纯净。
  • 平面物品(剑/弓/工具)保留方块图集 — 精灵图的 Alpha 遮罩仍定义形状。
  • 物品展示框 在后备模式下统一渲染为半透明发光体。
两个开关控制物品自身像素颜色渗入轮廓的程度:
配置 默认值 效果(着色器包后备模式)
itemPixelColorGlint true 平面与3D物品轮廓与物品的逐像素纹理颜色混合(轮廓颜色 × 纹理颜色,例如钻石剑上的红色轮廓会显示为黄绿色)。false = 纯轮廓颜色,保持精确物品形状
armorPixelColorGlint true 盔甲 / 鞘翅 / 三叉戟实体轮廓采样原始纹理(形状贴合单层裁剪),颜色通过混合计算。false = 纯轮廓颜色,形状由模型几何体定义
💡 无着色器包(或启用了 allowUnknownShaders)时,自定义着色器会完全分离形状和颜色,因此轮廓始终是纯色,这些开关不会生效。 当像素颜色混合关闭时,会从物品精灵图的原始像素在 CPU 上生成一个“形状纹理”(RGB = 轮廓颜色,A = 原始 Alpha;缓存于 TextureManager 中,资源重载时自动清除)— 因此禁用混合绝不会将形状退化为矩形。

⚠️ 已知限制

限制 原因 缓解措施
🔱 掷出的三叉戟无法按附魔着色 客户端无法访问 pickupItemStack 的附魔列表 回退到 isFoil() 检查,使用物品固定颜色 / 默认颜色
🎣 钓鱼竿、🗺️ 地图不显示轮廓 BEWLR 占位符模型缺乏几何形状 暂无解决方案,不影响正常使用
🛡️ 盾牌 / 🔱 三叉戟 / 🔭 望远镜轮廓为近似形状 使用盒体模型近似 视觉上仍可清晰分辨
🛡️ 盾牌 / 三叉戟盒体在着色器包下始终为纯白色 盒体模型使用专用白色纹理以避免 Iris 的方块图集查找 可接受的权衡;仍能发光并形成鲜明对比

🤝 贡献与反馈

  • 🐛 Bug 报告:请附上 Minecraft 版本、NeoForge 版本及相关模组列表
  • 💡 功能建议:欢迎提出新的默认附魔调色板或渲染场景
  • 🔗 兼容性问题:请提供冲突模组的名称和版本

用 💜 和大量着色器魔法制作。 每件附魔物品都值得被看见。 轮廓即宣言 · 附魔轮廓