
CMT 的《力量宝石》
红石、蓝石、绿石和黄石的导线重叠。
查看大图
PowerStones
一个拥有红石、蓝石、绿石和黄石四种可重叠线缆的 Minecraft 模组

版权所有(c)2023-2026 CalvinMT
依赖项
为了让 PowerStones 正常运行,需要安装以下模组:
Fabric
- Fabric API - Fabric 模组运行所必需。
- FerriteCore (Fabric) - 在不需要添加参数(-Xmx12G)的情况下,使 Minecraft 能够以默认内存量加载,而非需要额外分配 12GB 内存。
Forge
- FerriteCore (Forge) - 在不需要添加参数(-Xmx12G)的情况下,使 Minecraft 能够以默认内存量加载,而非需要额外分配 12GB 内存。
兼容性
PowerStones 与其他红石模组兼容,例如 Red Bits 或 Redstone Bits。
我们致力于让 PowerStones 尽可能与其他模组兼容,但这需要一些时间。
如果你喜欢的某个模组似乎与 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 似乎很合适,并且出乎意料地,它使得游戏可以在不更改最大内存分配量(<4GB)的情况下运行 PowerStones。尽管 PowerStones 已经依赖于一个性能模组,但用户可以无需担心内存消耗而从中受益。
PowerStones 最初是为 Fabric 开发的,并在很大程度上依赖于 mixin。在模组取得了初步成功后,为了使其能在 Forge 上使用,我们在 Forge Discord 上寻求帮助。然而,询问 mixin 相关问题只会招致对 PowerStones 依赖的O-So-Cursed-Mixin的批评。尽管这些建议在深度上有所帮助,但其傲慢的形式和假设本可以避免。尽管在 Forge 社区中遇到了一些不愉快的经历,但时间和理性的推理证明,使用每个模组加载器的 API 和独立的能量石类,而不是过度依赖 mixin,不仅是为了使其在 Forge 上可用,而且也是为了最大限度地减少错误并最大化模组兼容性。随后,我们对模组进行了全面改革以应用这些必要的更改。
由于实施过程中引入了大量状态,对 FerriteCore 的依赖变成了一种必要的妥协,而非可选优化。然而,这也凸显了对更可持续架构方法的需求。因此,PowerStones 的合理下一步是将 MultipleWires 系统重构为基于 BlockEntity 的实现,一些用户早已指出这种方法对于降低状态复杂度同时提高整体性能和可扩展性至关重要。在此背景下,社区贡献者 AtronixMH48 提供了宝贵的帮助,提供了一个采用 BlockEntity 驱动解决方案的修改版模组。我们仔细审查了这份贡献以确保完全理解其机制,并在整合到项目之前进行了部分改进,最终移除了 PowerStones 对 FerriteCore 的依赖。
在 BlockEntity 重构之后,多个线缆方块的渲染仍然受限于原版方块模型,该模型无法正确表示同一方块上具有不同连接布局的两条线缆。因此,引入了自定义烘焙模型,以使用存储在 MultipleWiresBlockEntity 中的连接数据来独立渲染两条线缆通道。这一重大变化使得每条线缆都能保留其自身的直线、拐角、交叉点和垂直连接,而不会影响另一条线缆的外观。在这个渲染基础之上,多线缆实现被进一步推广,超越了最初的红石-蓝石和绿石-黄石配对,以支持红石、蓝石、绿石和黄石之间所有六种可能的配对组合。尽管 PowerStones 仍然限制每个方块最多重叠两种颜色的线缆,但现在四种可用颜色中的任意两种都可以共享同一空间,同时保持其功率等级和连接相互独立。
颜色选择
蓝色、绿色和黄色的选择大约是在 2012 年,当这个项目最初构思时做出的。目标之一是更好地利用那些使用率低、几乎无用但储量丰富的资源,如青金石、绿宝石和萤石粉。
每种新能量石颜色都来自于红石颜色与配方中所用资源颜色的组合。首先,将能量石纹理着色为资源颜色。然后,将红石的纹理叠加在上面,最后对红石层应用约 30% 不透明度(75/255)的颜色减淡混合滤镜。

贡献
请在实施重大功能之前先进行讨论。
未经请求的功能拉取请求可能会被拒绝,即使它们在技术上正确。
错误修复、小的兼容性修复和范围明确的改进通常更有可能被接受。
贡献者
- CalvinMT
- AtronixMH48(将
MultipleWiresBlock重构为 Block Entity)
许可证
PowerStones 根据 Mozilla Public License 2.0 许可证授权。
如果你重用或修改此项目,必须根据 Mozilla Public License 2.0 保留所需的版权和许可证声明。
如果你创建了基于 PowerStones 的项目,非常感谢提供对 PowerStones 的可见致谢并链接回原始仓库。
正在加载版本记录…









正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。