4 方块注册和属性修改

一、方块注册

1、事件监听

通过向StartupEvents.registry事件传入不同的参数,其可用于在启动脚本中注册游戏中的新元素,如方块、物品、声音、药效等,在这里,我们传入"block"来进行与方块有关的修改:

StartupEvents.registry("block",event=>{
    // 脚本
})

显然,方块注册脚本应该放于StartupEvents脚本文件夹中。

2、事件方法

方法
描述
返回值

create(字符串 方块ID, 字符串 类型)

注册方块

BlockBuilder

create(字符串 方块ID)

注册方块

BlockBuilder

其中,“类型”参数支持以下字符串:

描述
备注

"basic"

基础方块类型

-

"detector"

检测方块

使用说明详见后文detectorId(id: string)

"slab"

台阶方块

预设模型

"stairs"

楼梯方块

预设模型

"fence"

栅栏方块

预设模型

"fence_gate"

栅栏门方块

预设模型

"wall"

墙方块

预设模型

"wooden_pressure_plate"

木质压力板

预设模型和红石特性

"stone_pressure_plate"

石质压力板

预设模型和红石特性

"wooden_button"

木质按钮

预设模型,红石特性,其物品可用作燃料

"stone_button"

石质按钮

预设模型,红石特性,其物品不可用作燃料

"falling"

下坠方块

-

"crop"

农作物方块

使用说明详见后文

"cardinal"

黛玉朝向的方块

例如讲桌、熔炉方块等

通过设定自定义方块类型,你可以便捷地指定其模型或为其添加特殊功能。

3、BlockBuilder

方法
描述
备注
对应属性默认值

🧾 方块属性类

-

-

-

property(BlockProperties 属性)

设置方块属性

🔎 形如BlockProperties.WATERLOGGED

-

redstoneConductor(布尔值 b)

是否为红石信号导体

-

true

displayName(字符串 名称)

设置方块名称

-

-

tagBoth(命名空间 标签)

为物品和方块同时添加标签

-

-

tagBlock(命名空间 标签)

只为方块添加标签

-

-

tagItem(命名空间 标签)

只为物品添加标签

-

-

unbreakable()

设置为无法被破坏

将hardness设为-1,resistance设为Float.MAX_VALUE

-

resistance(float 抗性)

设置方块抗性

-

3F

hardness(float 硬度)

material(MaterialJS 材质)

设置方块材质

[1]

"wood"

randomTick(RandomTickCallbackJS 随机刻回调函数)

设置随机刻事件

[2]

-

lightLevel(float 强度)

设置方块光照等级

-

0F

noDrops()

设置为破坏时不掉落自身

默认为掉落自身

-

noItem()

设置为不注册方块对应物品

-

-

waterlogged()

设置为含水方块

-

false

jumpFactor(float 倍率)

设置跳跃高度倍率

-

1.0F

speedFactor(float 倍率)

设置速度倍率

-

1.0F

slipperiness(float f)

设置滑动倍率(μ)

-

0.6F

requiresTool(布尔值 f)

设置是否需要对应工具破坏

-

false

noValidSpawns(布尔值 b)

设置是否可以生成怪物

-

-

🎞 方块外形类

-

-

-

box(double x0,double y0,double z0, double x1,double y1,double z1,布尔值 scale16)

设置方块碰撞箱

[3]

-

noCollision()

设置为无碰撞箱

-

-

defaultTranslucent()

默认半透明渲染方式

详见4、方块渲染方式

-

defaultCutout()

默认镂刻渲染方式

详见4、方块渲染方式

model(命名空间 模型目录)

设置模型

形如"kubejs:blocks/wudji_notfound"

null

viewBlocking(布尔值 b)

-

详见4、方块渲染方式

true

notSolid()

设置为非固体方块

详见4、方块渲染方式

false

texture(字符串 id,字符串 材质)

手动设置方块材质

[4]

-

renderType(字符串 渲染类型)

设置方块渲染类型

[5]

"basic"

[1]

[2]RandomTickCallbackJS 支持以下方法:

方法
描述
返回值

getLevel()

获取当前世界

Level

getServer()

获取服务器

MinecraftServer

具体使用方法见后文示例。

[3]

[4]

[5]

4、方块渲染方式

在KubeJS中,常用defaultTranslucent()defaultCutout()来设定半透明和镂刻方块渲染。如下图,从左到右设置的选项分别为defaultTranslucent()defaultCutout()defaultCutout()未设置渲染方式设置:

给出常见情况:对于玻璃等半透明方块,应使用defaultTranslucent()进行设置;对于讲台等方块,应使用defaultCutout()进行设置

从KubeJS源代码可以看出,defaultTranslucent()设置了以下选项:

defaultCutout()设置了以下选项

5、资源目录

对于方块注册来说,你需要将方块材质置于assets\kubejs\textures\block\<方块ID>.png,自定义模型(可选)放于kubejs\assets\kubejs\models\block\<方块ID>.json下。(即文件结构同资源包)

6、示例

二、方块属性修改

1、事件监听

你需要监听BlockEvents.modification来对方块属性进行修改。

显然,方块属性修改脚本应该放于StartupEvents脚本文件夹中。

2、事件方法

方法
描述
返回值

modify(BlockStatePredicate 方块谓词, Consumer<Block_> 修改事件)

修改方块属性

-

3、谓词

2、事件方法中所述第一个参数方块谓词可以为以下值:

类型
描述
示例

BlockTag

方块标签

"forge:ores/gold" "minecraft:wooden_doors"

BlockID

方块ID

"minecraft:blue_shulker_box" "minecraft:glass"

4、修改方法

🔎 绝大多数的修改方法与方块注册中的方法类似。例如speedFactor(float 倍率)在方块修改中为setSpeedFactor(float 倍率)(详见ProbeJS)。

5、修改示例