生物群系胶囊

基本信息

属性 值
注册名 RandomThings:biomeCapsule
类 lumien.randomthings.Items.ItemBiomeCapsule
堆叠上限 1(ItemBiomeCapsule.java:31)
充能间隔 BiomeChargeTime,默认 20 tick(RTConfiguration.java:104-108)
静态颜色表 ItemBiomeCapsule.biomeColors(ItemBiomeCapsule.java:24)
开关 Items.BiomeSolution(RTConfiguration.java:213,配置名与注册名不同)

功能

生物群系胶囊记录所在位置的生物群系并为其充能。充能满后配合生物群系画刷使用,可以把任意区块的群系改写为胶囊里记录的那个。

充能机制

onUpdate 每 20 tick(1 秒)检查一次并累加(ItemBiomeCapsule.java:42 起):

if (!worldObj.isRemote && worldObj.getTotalWorldTime() % 20 == 0 && stack.getItemDamage() != 0) {
    int biomeID = stack.getItemDamage() - 1;
    ...

两个关键点:

  1. metadata 编码:stack.getItemDamage() - 1 得到群系 ID,所以 metadata 0 表示"未记录任何群系"(被条件排除),metadata N 表示群系 N-1
  2. 充能间隔:条件写死 % 20,而配置项 BiomeChargeTime 默认也是 20(RTConfiguration.java:104-108)—— 需注意条件是硬编码的 20,Settings.BIOME_CHARGE_TIME 在别处使用

静态颜色表

构造函数预置 4 个维度的群系颜色(ItemBiomeCapsule.java:33-40):

群系 ID 颜色值 注释
0 1452177 Ozean(海洋)
7 4303848 Fluss(河流)
8 6029312 Nether(下界)
9 8223332 The End(末地)

该表是 public static HashMap<Integer, Integer>,可被外部 mod 修改 —— RandomThings.imcMessages 处理 IMC 动作 setSolutionColor 往里写值(RandomThings.java:189-195):

if (action.equals("setSolutionColor")) {
    int biomeID = nbt.getInteger("biomeID");
    int color = nbt.getInteger("color");
    ItemBiomeCapsule.biomeColors.put(biomeID, color);
}

这是本 mod 唯一的 IMC 公共接口。

设定群系

/rt setBiomeCapsule <biomeID> 可直接把手中胶囊的 metadata 设为 biomeID + 1(Core/Commands/RTCommand.java:146-169),并用 Preconditions 校验手持物确实是 ItemBiomeCapsule、群系必须存在(BiomeGenBase.getBiome(biomeID) != null)。

数值

数值名 值
堆叠上限 1
充能判定周期 20 tick(硬编码 % 20,:42)
BiomeChargeTime 默认 20(RTConfiguration.java:104-108)
预置群系颜色数 4(0 / 7 / 8 / 9)
metadata 语义 群系ID + 1;0 = 未记录

交互

触发 行为
携带移动 每 20 tick 记录当前群系并累加充能
充能满 供生物群系画刷 消耗 1 点
/rt setBiomeCapsule 手动指定群系

合成配方

dte
qgq
ooo
字符 物品
d 钻石块(blockDiamond)
t 转换核心(RandomThings:ingredient meta 5)
e 绿宝石(gemEmerald)
q 下界石英(gemQuartz)
g 玻璃(blockGlass)
o 黑曜石

来源:Library/Recipes.java:422-439,受 ConfigItems.biomeCapsule 约束。

相关条目