SRP&Wiz核心

SRP&Wiz核心

此模组专为我的整合包而制作,旨在整合许多独立的模组以提升游戏体验,同时包含调整和修复等内容。

SRP&Wiz Core 是一个粘合模组,我把那些不好看的东西都塞在了这里。它最初是我为自己整合包准备的私人配套模组,之所以发布出来,是因为它修复的崩溃并非我的整合包独有——如果你运行一个大型 1.12.2 厨房水槽类整合包,并且使用了线程化实体刻(threaded entity ticking)、OpenTerrainGenerator、FutureMC、Ice & Fire 或 Chocolate Quest Repoured,你很可能至少遇到过其中一个问题。

每个功能都独立通过配置开关控制,位于 config/srpwizcore.cfg。关于默认值有两条规则:

  • 崩溃与存档损坏防护默认开启。 默认关闭的防护在需要时永远不会触发,而在不需要时也毫无作用。
  • 任何改变游戏玩法、世界生成或存档数据的选项默认关闭——其中一些带有来自我自己整合包的示例值。在开启它们之前请先阅读说明。

它不依赖我的内容模组,这里的所有内容也都不需要 Scape and Run: Parasites,尽管名字里有它。


崩溃与存档损坏防护

线程化实体刻

如果你运行 EntityThreading 或类似模组,实体将在工作线程上执行刻(tick)——而 Minecraft 的许多组件从未为此设计过。有以下四个防护:

  • 实体追踪 — Minecraft 的追踪列表不能从两个线程同时安全访问,一旦出错,服务器会因 Exception in server tick loop 而崩溃。
  • 声音 — 在工作线程上刻的实体可能会破坏正在播放的声音列表并导致客户端崩溃。这些声音会在主线程上稍后重放。
  • 世界存档数据 — 每个世界的数据存储在一个列表中,从两个线程写入是不安全的。如果某个模组在游戏保存时从非主线程注册数据,列表可能会产生一个空洞,空洞之后的所有数据将永远不会写入磁盘。你会在没有任何错误信息的情况下丢失数据。 另一个选项可以跳过这样的空洞,以便至少其余部分能被写入,同时诊断日志会记录是哪个模组在这样做。
  • 区块生成 — 这个防护是治本而非治标。当工作线程上的实体触及尚不存在的地形时,游戏会从错误的线程开始生成区块,这本身就是导致生物群系数据和存档损坏的根源。启用防护后,这样的请求将返回空气而不是生成新地形。代价只是视觉上的:一支箭会飞过,一个怪物找不到出去的路。 还有一种仅报告模式,用于了解你的环境中是否有任何东西会触发此行为。

地形生成

OpenTerrainGenerator — 在生物群系全部被重映射的维度中,OTG 可能无法解析某个生物群系并导致世界崩溃;FutureMC 的世界生成可能以中止区块填充的方式出错。这两种情况都会被捕获并记录为日志,而不是致命错误。

针对其他模组的性能防护

  • Doomlike Dungeons — 一个无法完成布局的地牢会为其原本覆盖的每个区块抛出错误,几秒钟内就有数百个。现在该故障只会被处理一次。
  • Chocolate Quest Repoured — 在 OTG 维度中请求一个已关闭类型的最近结构,会导致 CQR 永远向外搜索。
  • Defiled Lands — 可调节的节流阀,用于控制腐化逐块扩张的速度。该模组本身没有这个设置。
  • Raids-Backport — 按原样发布时,每个维度都将袭击数据写入同一个槽位,因此它们每刻都会互相覆盖。

在 WorseHurtTimer 下的无敌帧

WorseHurtTimer 会在每次受到攻击时用一个固定值覆盖无敌窗口,这会摧毁任何试图以原版方式延长无敌帧的机制。它修复了以下两个问题:

穿戴物品可以再次授予更长的无敌帧,适用于所有 WHT 路径——近战、箭矢、魔法、火焰。来自多个来源的乘数可以叠加,直到一个可配置的上限。这终于让 Bountiful Baubles 的 Cross Necklace 实现了其物品提示所承诺的效果。

基础值是确定性的。 未经修改的 WHT 会从本次会话中第一个被某个伤害来源击中的实体身上获取该来源的无敌帧数值(如果该来源不在其自身的表格中),然后在本次会话的剩余时间内全局复用这个数值。

默认值复现了 WHT 自身的数值,因此保持该部分不变不会有任何影响。 /whtdiag 提供聚合诊断信息——限制器拒绝攻击的频率、出现哪些伤害来源、打开了哪些窗口。

在 FirstAid 下重新启用的 Broken Heart

Bountiful Baubles 的 Broken Heart 饰品在同时运行 FirstAid 的任何整合包中完全失效——FirstAid 会取消伤害事件,因此该饰品监听的事件根本不会被触发。现在它已挂钩到死亡判定本身,在身体部位生命值模型下,这是它应有的合理位置。

最大生命值的代价是在 Bountiful Baubles 自己的修饰符 ID 下付出的,因此睡觉恢复心之容器仍然会移除它。拥有自己的配置部分:代价、使饰品失效的最低阈值,以及冷却时间。仅当两个模组同时存在时才会启用。

按维度划分的 Ice & Fire 世界生成

Ice & Fire 对其结构和矿石有全局开关,一旦你添加了维度,这就会成为问题。这为你提供了每个结构的列表——龙穴、栖所和骨架、陵墓、蛇发女妖神庙、独眼巨人洞穴、蚁狮群落等等。

每个列表默认都是空的,而你未列出的维度将保持 Ice & Fire 自身的行为,因此未修改的配置与未安装此模组无法区分。它还修复了一个真实的跨维度 bug:Ice & Fire 在所有维度共享的字段中追踪最后一个结构生成的位置。

元素龙远程武器

Ice & Fire 的元素龙长弓、弩和弓现在会将它们的元素传递给所发射的任何弹药,而不仅仅是固定的投射物——包括那些自身没有元素的弹药。龙钢远程武器在可用时会优先使用龙类弹药。

生成引擎

针对那些原版怪物上限失效、数百只敌对生物堆积的深度模组维度:

  • 种群预算,按维度和生物类型划分,以及按模组和按生物划分的预算应用于生成候选列表——游戏甚至不会构建超出预算的条目。
  • 刷新速率限制。 预算限制了可以存在的怪物数量;这个则限制它们恢复的速度。
  • 诊断功能,显示实时数量与我的预算以及 Minecraft 自身上限的对比,以便你在配置之前进行衡量。

默认关闭,附带的数值仅是我整合包中的示例。在启用之前,请为你的环境设置维度列表和预算。

CQR × Spartan Weaponry

当同时安装 Chocolate Quest Repoured 和 Spartan Weaponry 时,地牢怪物将不再使用普通的原版装备战斗:

  • 装备替换 — 原版剑、斧和弓会变成同材料等级对应的斯巴达武器。
  • 可用的弩 — 斯巴达的弩现在能被 CQR 的远程 AI 理解。
  • 基于攻击距离的近战 — 持有长枪、戟和骑枪的怪物会利用其攻击距离并保持距离。
  • 法杖施法者 — CQR 的法杖怪物会获得一根绑定咒语的 Electroblob's Wizardry 魔杖。
  • Boss 房间宝箱锁定,可选在 Boss 死亡时追加一次奖励书抽取。
  • 攻城挖掘 和 攻击者上限,两者均为实验性功能。

以上所有功能默认关闭;每个功能都可单独切换。

休眠传送石碑

罕见的地表结构,能将你传送到另一个维度再返回,一次一对配对好的石碑。手持配置好的钥匙物品会显示一条粒子轨迹,指向最近的一个。默认关闭;附带的默认值来自我的整合包。


兼容性

  • Minecraft 1.12.2,Forge。 需要 MixinBooter,或在 Cleanroom 上运行。
  • 所有内容均在运行时检测。可选目标:OpenTerrainGenerator (针对 v9.7 测试)、FutureMC、Ice & Fire (2.2.9)、Chocolate Quest Repoured、Spartan Weaponry、Spartan Fire、Doomlike Dungeons、Defiled Lands、Raids-Backport、SetBonus、WorseHurtTimer、Bountiful Baubles、FirstAid、Electroblob's Wizardry。

配套模组,均为可选且独立:SRP&Wizardry InsaneTweaks、SRP&WIZ Mixins、CTombstone-Tweaks、Reskill Tweaks。

鸣谢

感谢 CleanroomMC 为 1.12.2 提供现代 mixin 支持。感谢 PG85 和 OTG 团队、Alexthe666 (Ice & Fire)、FutureMC 的作者们、Team CQR、ObliviousSpartan (Spartan Weaponry) 以及 JaredBGreat (Doomlike Dungeons) 制作了这些我所对接的模组。

来源:https://github.com/pegek/Insane-Tweaks-SRP-Wizardry