彩色照明(钠兼容)

彩色照明(钠兼容)

与Embeddium/Sodium、Starlight等兼容的彩色光照!

装饰

ℹ️ 分支信息

本模组是 erykczy 的 Colorful Lighting 的直接分支。我们进行此分支的主要目标是为其在大型模组包中的使用扩展模组兼容性。如果你发现不兼容的模组,请在 GitHub Issues 页面报告。

❓ 工作原理

本模组构建在 Minecraft 原版光照引擎之上。它的工作原理是在原版光照等级之外存储一组额外的数据,表示该方块中光的颜色。当放置一个发光方块时,模组会检查一个可配置的“发射器”列表,以判断它是否应该具有颜色。如果应该有,颜色就会像原版引擎一样,逐方块向外传播,并随距离衰减。

当光穿过半透明方块时,模组会检查一个“过滤器”列表。这些过滤器可以改变穿过它们的光的颜色。例如,红色染色玻璃可以被配置为过滤掉除红色分量以外的所有光。被阻挡的光量也可以配置。

为了避免性能问题,所有这种光传播都在单独的线程上处理,这意味着它不会拖慢你的游戏。该模组还使用了诸如三线性插值之类的技术来平滑方块之间的颜色,从而营造出更自然的外观。

✨ 特性

  • 不同的方块可以发出不同的颜色
  • 光在穿过特定方块时可以改变颜色
  • 光可以被特定方块吸收
  • 发出的颜色和过滤的颜色可以在资源包中自定义
  • 方块状态可以定义不同的颜色
  • 该模组是客户端模组——你可以在任何服务器上使用它,同时仍然体验彩色光照!

🔗 模组兼容性

  • Embeddium 支持:Embeddium 完全兼容,并且是必需项。
  • Starlight 支持:与 Starlight 无缝协作。
  • True Darkness 支持:与 True Darkness 兼容。
  • Oculus 支持:Colorful Lighting 现在附带一个着色器包自动修补器(类似于 Euphoria Patches)。启动时它会扫描你的 shaderpacks 文件夹,并为每个已识别的包创建一个修补后的 <Pack> + ColorfulLighting 副本——在 Oculus 着色器 GUI 中选择该副本,Colored Light Engine 就会保持启用状态。未修补的包仍会自动禁用该引擎。运行 /cl patchshaders 可在不重启的情况下重新扫描,或在客户端配置中设置 autoPatchShaderpacks = false 以选择退出。
  • 动态光源模组:大多数动态光源模组现在可以正常工作!Lively Lighting 仍然是唯一已知的、与 filters.json 条目兼容且可正常工作的动态光照模组。
  • Wakes: Reforged:与 wakes 完美配合,并相应地为其着色
  • Flywheel:自 Colorful Lighting 2.4.0 更新以来,Flywheel 渲染的对象现在会使用彩色光照进行渲染(已使用 flywheel 1.0.5 测试)。
  • Distant Horizons:在 LOD 内渲染的光将没有颜色。这是我们正在为未来版本处理的事项。
  • Flerovium:持有和掉落的物品会显得很暗。这是我们正在为未来版本处理的事项。
  • AsyncParticles:粒子会显得很暗。这是我们正在为未来版本处理的事项。
  • Lively Lighting:动态光源将发出具有其各自颜色的光。修复了残留光!
  • Immersive Portals:不会崩溃,但当渲染沉浸式传送门时,来自下界的光会渗入主世界。这可能会在未来修复。
  • Ponder (Create):Ponder 在最近的更新中工作正常,不再有红色染色问题!

🖼️ 资源包教程

在你的资源包命名空间文件夹中(即 textures 和 models 等文件夹所在的位置),创建一个 light 文件夹。在那里,你可以创建一个 emitters.json 文件,用于定义方块发出什么颜色的光。

emitters.json

此文件定义方块发出的光的颜色。你可以指定一个简单的颜色,或使用更复杂的对象来处理方块状态。

简单格式

{
          "minecraft:torch": "vanilla",               // 与原版光照中使用的颜色相同
    "minecraft:glowstone": "#00FF00",           // 十六进制颜色
    "minecraft:red_candle": "red",              // Minecraft 染料名称
    "minecraft:redstone_lamp": [0,255,255],     // RGB 数组
    "minecraft:soul_torch": "purple;5",         // 用 ';' 覆盖光照等级发射值,后面是一个从 0 到 F 的十六进制数字(F = 15)
}

方块状态格式

你可以为不同的方块状态定义不同的颜色。

{
    "minecraft:furnace": {
        "default": "orange",
        "states": {
            "lit=true": "red",
            "lit=false": "#000000"
        }
    }
}

filters.json

此文件定义光穿过方块(如染色玻璃)时如何被着色。你还可以指定光吸收量(0-15),其中 0 允许所有光通过,15 阻挡所有光。

简单格式

{
    "minecraft:red_stained_glass": "#00FF00", // 十六进制颜色
    "minecraft:green_stained_glass": "red",   // 染料名称
    "minecraft:glass": [ 0, 255, 255 ],       // RGB 数组
          "minecraft:oak_door": "white;5"           // 光吸收量(0=完全通过,15=阻挡)
}

方块状态格式

与发射器类似,过滤器也可以取决于方块状态。

{
    "minecraft:stained_glass_pane": {
        "default": "white",
        "states": {
            "waterlogged=true": "blue"
        }
    },
    "minecraft:oak_door": {
    "default": "white;15",
    "states": {
      "open=true": "white;0",
      "open=false": "white;15"
    }
}

absorbers.json

此文件定义哪些方块会完全吞噬(吸收)其周围的光。你可以定义它吸收的光的颜色(或使用白色表示所有光)以及它吸收多少光。

{
	"minecraft:end_portal": "#FFFFFF;15",
	"minecraft:end_gateway": "#FFFFFF;15"
}

entities.json

定义实体发出什么颜色的光(需要 LIVELY LIGHTING)。

{
    "minecraft:creeper": "#00FF00", // 十六进制颜色
    "minecraft:blaze": "orange"     // 染料名称
}

items.json

定义手持物品发出什么颜色的光(需要 LIVELY LIGHTING)。

{
    "minecraft:torch": "#00FF00",     // 十六进制颜色
    "minecraft:lava_bucket": "orange" // 染料名称
}

moon_phases.json

为每个月相定义单独的光照强度/鲜艳度值。

{
  "0": 0.45,
  "1": 0.60,
  "2": 0.75,
  "3": 0.90,
  "4": 1.0,
  "5": 0.90,
  "6": 0.75,
  "7": 0.45
}

‼️ 可用的着色器包

⚠️ 已知问题/计划修复

  • 带有自发光纹理的方块无法正确向外传播光照