生物群系画刷

基本信息

属性 值
注册名 RandomThings:biomePainter
类 lumien.randomthings.Items.ItemBiomePainter
堆叠上限 1(ItemBiomePainter.java:16)
作用范围 1 个区块(Chunk 粒度)
开关 Items.BiomePainter(RTConfiguration.java:214)

功能

生物群系画刷用生物群系胶囊的充能把一个区块的群系数组改写掉。它直接操作 Chunk.getBiomeArray(),是最"底层"的一类内容。

前置条件

onItemUse 首先要求玩家背包里有生物群系胶囊(ItemBiomePainter.java:23):

if (par2EntityPlayer.inventory.hasItem(ModItems.biomeCapsule)) {

然后遍历 36 格背包找已记录群系(getItemDamage() != 0)的胶囊(:26-27)。没有则静默失败。

充能检查

int charges = nbt.getInteger("charges");
if (charges > 0 || par2EntityPlayer.capabilities.isCreativeMode) {

(:33-34)—— 创造模式免费使用;生存模式每涂一次扣 1 点(:40-42):

nbt.setInteger("charges", charges - 1);
par2EntityPlayer.inventoryContainer.detectAndSendChanges();

群系改写

改写单位是整个区块(ItemBiomePainter.java:35-39):

Chunk c = par3World.getChunkFromBlockCoords(par4, par6);
int biomeID = is.getItemDamage() - 1;
byte[] biomeArray = c.getBiomeArray();
if ((biomeArray[(par6 & 15) << 4 | (par4 & 15)] & 255) != biomeID) {
    biomeArray[(par6 & 15) << 4 | (par4 & 15)] = (byte) (biomeID & 255);
    c.setBiomeArray(biomeArray);
    ...

索引 (par6 & 15) << 4 | (par4 & 15) 是原版 1.7.10 群系数组布局:Z 在高位、X 在低位。因此右键的方块坐标只用于定位"当前在哪个区块",实际改写的是该区块内 (x&15, z&15) 那一格的群系值。

改写后向全维度广播 MessagePaintBiome 以刷新客户端(:44 起,sendToDimension)。

数值

数值名 值
堆叠上限 1
影响范围 1 个 Chunk(256×256 列)
充能消耗 每次 1 点(创造模式 0)
群系 ID 来源 胶囊 metadata − 1
数组索引 (z & 15) << 4 | (x & 15)

交互

触发 行为
右键方块 改写该方块所在整个区块的群系值,消耗胶囊 1 点充能
无胶囊 / 无充能 静默无操作
创造模式 无限使用
改写后 全维度广播同步

合成配方

xtx
xwx
xox
字符 物品
t 转换核心(RandomThings:ingredient meta 5)
w 羊毛(任意颜色,WILDCARD_VALUE)
o 黑曜石棒(stickObsidian)

来源:Library/Recipes.java:440-451,受 ConfigItems.biomePainter 约束。

相关条目