能量石

能量石

红石、蓝石、绿石和黄石的重叠导线

装饰

PowerStones

包含可重叠的红石、蓝石、绿石和黄石导线的 Minecraft 模组

版权所有 (c) 2023-2026 CalvinMT

依赖项

PowerStones 正常运行所需安装的模组:

Fabric

模组 原因
Fabric API Fabric 模组运行的必要条件。
FerriteCore 使 Minecraft 能在默认内存量下加载,而非需要 12GB 内存(需添加参数 -Xmx12G)。

Forge

模组 原因
FerriteCore 使 Minecraft 能在默认内存量下加载,而非需要 12GB 内存(需添加参数 -Xmx12G)。

兼容性

PowerStones 与其他红石模组兼容,例如 Red Bits 或 Redstone Bits。

本模组的目标是与尽可能多的其他模组兼容,但这需要一些时间。

如果你喜欢的某个模组似乎与 PowerStones 不兼容,请在 GitHub 上使用 "Mod compatibility request" 提交新问题。

特性

功能

  • 提供四种独立的导线颜色:红石、蓝石、绿石和黄石,每种颜色携带各自独立的能量信号。
  • 能量石导线可以成对重叠,允许两种独立的导线颜色占据同一方块而互不干扰。
  • 每种导线颜色仅连接并接收相同颜色的导线、方块、火把、中继器、比较器及其他红石元件传来的能量。
  • 红石中继器可以将能量从一种导线颜色传输到另一种,实现原本互相独立的电路之间的可控交互。
  • 手持能量石粉末物品破坏导线时,只会移除与手持物品颜色匹配的导线通道,便于在编辑重叠导线时不干扰其他通道。

方块与物品

名称 图片 合成配方
红石
蓝石
绿石
黄石
蓝石块
绿石块
黄石块
蓝石火把
绿石火把
黄石火把

实现过程与限制

最初的想法是能够将所有四种能量石导线放置在同一方块上。这意味着红石导线方块将拥有超过 5,308,416 种状态(3x3x3x3x16x16x16x16),而原版仅有 1,296 种状态(3x3x3x3x16)。由于游戏中所有方块的所有状态都在启动时计算,这将会耗费超过计算机处理能力的计算时间和内存。

为了保留最初的想法,曾尝试将能量石的能量限制为两种状态(0-1),而非十六种(0-15)。这将红石导线方块的状态数降至原版的 1,296 种(3x3x3x3x2x2x2x2)。然而,这个状态数并不是最终值,因为还需要添加更多状态来显示所有可能的连接。最终,这种实现方式被证明过于复杂且不合理,因为它需要彻底重构红石导线方块的能量更新机制,并会移除所有与红石能量等级相关的原版红石功能。

由于可重叠能量石仍被视为目标,团队尝试先在红石之上添加蓝石,通过增加另一个能量属性并将两个能量属性各加一,取得了成功。因此,红石导线方块的状态数为 23,409 种(3x3x3x3x17x17),仅增加了数秒的加载时间。

通过再增加两个能量属性来扩展模组以支持绿石和黄石导线是不可行的,原因与最初的想法相同(状态数过多)。于是决定让导线成对重叠。红石导线可与蓝石导线重叠,绿石导线可与黄石导线重叠。这可以很容易地通过添加一个具有两种状态的属性(每种能量石对对应一个状态)来实现,最终红石导线方块的状态数为 46,818 种(3x3x3x3x17x17x2)。添加这个基本属性后,游戏启动变慢(约 1 分 30 秒)。然而,更令人担忧的是,游戏加载所有状态所需的内存(RAM)接近 12GB。即使要求用户在 Minecraft 启动器中添加一个简单的 Java 参数来扩展游戏的最大分配内存对于其他模组来说也很常见,但与本模组为游戏带来的微小改动相比,12GB 内存仍然过于庞大。

由于能量石对属性似乎是一个很好的折中方案,能在经过六周的学习和开发后尽可能接近最初目标,因此决定寻找一个能够显著减少运行 PowerStones 所需内存的模组。经过快速搜索,FerriteCore 似乎合适,并且出乎意料地使游戏能够在 PowerStones 下运行而不改变最大分配内存(<4GB)。尽管 PowerStones 已经依赖于一个性能模组,但用户仍可从中受益而无需担心内存消耗。

PowerStones 最初是为 Fabric 开发的,并大量依赖 mixin。在模组取得足够成功的起步后,为了使其可用于 Forge,团队在 Forge Discord 上寻求帮助。然而,询问与 mixin 相关的问题只招致了对 PowerStones 依赖 O-So-Cursed-Mixin 的批评。虽然这些建议在深度上很有帮助,但其傲慢的态度和主观臆断本可以避免。尽管与 Forge 社区的某些成员有过不愉快的经历,但时间和理性的推理证明,使用每个模组加载器的 API 和独立的能量石类,而非过度依赖 mixin,才是最佳方案,这不仅是为了使其能通过 Forge 使用,也是为了最小化 bug 并最大化模组兼容性。随后对模组进行了重构以应用这些必要的更改。

由于实现引入的大量状态,对 FerriteCore 的依赖成为必要的妥协,而非可选的优化。然而,这也凸显了对更可持续架构方法的需求。因此,PowerStones 的合理下一步是将 MultipleWires 系统重构为基于 BlockEntity 的实现,这种方法已被多位用户认为是降低状态复杂度、同时提升整体性能和可扩展性的关键。在此背景下,社区贡献者 AtronixMH48 提供了宝贵的帮助,他提供了一个采用 BlockEntity 驱动方案的模组修改版。该贡献经过了仔细审查以确保完全理解其机制,并在整合到项目之前进行了部分优化,最终移除了 PowerStones 对 FerriteCore 的依赖。

在 BlockEntity 重构之后,多导线方块的渲染仍受限于原版方块模型,该模型无法正确表示同一方块上具有不同连接布局的两条导线。因此引入了自定义烘焙模型,利用存储在 MultipleWiresBlockEntity 中的连接数据独立渲染两条导线通道。这一重大改变使得每条导线都能保持自己的直线、拐角、交叉点和垂直连接,而不影响另一条导线的外观。在渲染基础就绪后,多导线实现被推广到原始的红石-蓝石和绿石-黄石对之外,支持红石、蓝石、绿石和黄石之间所有六种可能的配对组合。尽管 PowerStones 仍将重叠导线限制为每方块两种颜色,但四种可用颜色中的任意两种现在都可以共享同一空间,同时保持各自的能量等级和连接独立。

颜色选择

蓝色、绿色和黄色是在 2012 年左右选定的,当时这个项目首次成形。目标之一是为青金石、绿宝石和萤石粉等使用率低、几乎无用但储量丰富的资源找到更好的用途。

每种新的能量石颜色都来自红石颜色与能量石配方中所用资源颜色的组合。首先,用资源颜色为能量石纹理着色。然后,将红石纹理叠加在其上,最后对红石层应用约 30% 不透明度(75/255)的颜色减淡混合滤镜。

贡献

在实现重大功能之前请先进行讨论。

未经请求的功能拉取请求可能会被拒绝,即使它们在技术上是正确的。

Bug 修复、小的兼容性修复和范围明确的改进通常更有可能被接受。

贡献者

许可证

PowerStones 在 Mozilla Public License Version 2.0 下授权。

如果你重用或修改此项目,你必须按照 Mozilla Public License 2.0 保留所需的版权和许可声明。

如果你创建了基于 PowerStones 的项目,我们非常感谢对 PowerStones 的显著致谢以及指向原始仓库的链接。