祭坛多方块结构放宽补丁
基本信息
| 属性 | 值 |
|---|---|
| 被补丁的类 | com.emoniph.witchery.blocks.BlockAltar(Witchery 本体的方块) |
| Mixin 文件 | mixins/late/witchery/BlockAltarMixin.java |
| 注入方法 | updateMultiblock(两处) |
| 所属 Mixin 组 | Mixins.WITCHERY(Phase.LATE,不受 Baubles|Expanded 门控) |
| 本 mod 自有方块 | 0 |
⚠️ 本 mod 不拥有任何多方块结构。 被改的是 Witchery 本体的祭坛。 祭坛的尺寸、层级、控制器方块、能否旋转拆除等全部由 Witchery 决定, 而 Witchery 不在本 wiki 收录范围(见 分类页), 因此本页只记录本 mod 施加的两处改动,不复述 Witchery 的结构定义。
改动 1:移除 TileEntity 数量上限
// Essentially removes the te > 3 check
@ModifyConstant(method = "updateMultiblock", constant = @Constant(intValue = 3, ordinal = 1), remap = false)
private int witcheryextras$removeTECheck(int original) {
return 999;
}
(BlockAltarMixin.java:23-27)
Witchery 原版在 updateMultiblock 里对已找到的 TileEntity 数量做 > 3 判断并据此
判定祭坛不成立;本 mod 把该常量 ordinal = 1 的那次比较从 3 改成 999,
实际上取消了上限。
ordinal = 1限定这是方法内第 2 个intValue = 3常量。 若 Witchery 升级后该方法内3的出现顺序改变,此补丁会打到错误的常量上—— 这是@ModifyConstant+ordinal的固有脆弱点。
改动 2:结构尺寸 9 视作 6
// validates altars with size 9
@ModifyExpressionValue(
method = "updateMultiblock",
at = @At(value = "INVOKE", target = "Ljava/util/ArrayList;size()I", ordinal = 1),
remap = false)
private int witcheryextras$addMultiblockSize(int original) {
return (original == 9) ? 6 : original;
}
(BlockAltarMixin.java:29-36)
补丁打在 ArrayList.size() 调用的第 2 处(ordinal = 1)返回值上:
当原逻辑算出的结构尺寸为 9 时,改写成 6,其余值原样透传。
即:本 mod 让 Witchery 原本会判为「尺寸 9」的那一类祭坛,按尺寸 6 的祭坛去校验。
未改动的部分
以下问题本 mod 没有触碰,不要在别处看到相关描述时误以为是它做的:
- 祭坛的方块种类、放置规则、旋转方向、可否用镐拆除 —— 全部沿用 Witchery 原版
- 祭坛等级与所需祭品 —— 沿用 Witchery 原版
- 本 mod 自身没有注册任何方块 / TileEntity / 物品