添加方块

kubejs可以在startup_scripts文件夹内创建去创建方块,注意所有的添加自定义的操作都是无法热加载的,写完之后需要重启游戏后才会加载进游戏内

基础写法

在kubejs当中注册方块是一件很容易的事情,它只需要下面这一行代码就可以注册好方块

StartupEvents.registry("block", (event) => {
    //event.create(方块id, 方块类型)
    event.create("meng:my_block", "basic")
})

上面的代码中我们选择的是方块注册,将方块id设置为"meng:my_block",这里前面的meng命名空间,主要关系到我们之后去添加材质贴图本地化(lang文件)的路径

方块类型

我们的方块类型设置的为basic也就是默认的、基本的方块类型,在kubejs中已经给我们提供了不少的方块类型,如下

类型
描述
示例

basic

基础方块

待更新

carpet

地毯

待更新

crop

农作物

fence

栅栏

待更新

fence_gate

栅栏门

待更新

pressure_plate

压力板

待更新

button

按钮

待更新

slab

台阶

待更新

stairs

楼梯

待更新

wall

待更新

cardinal

朝向方块(类似讲台、熔炉等)

待更新

detector

检测方块?

待更新

falling

下落方块(类沙子)

待更新

在kubejs中,你并不用为方块单独去注册物品,kubejs已经帮你把方块物品注册好了,所以你可以直接获取到方块的物品,且物品id和方块id是一样的,在准备材质时,只需要准备方块的材质就可以了,无需单独为方块物品准备材质

通用方法参数

通用方法参数指的是不管什么类型的方块都可以调用到下面的方法

常用

方法
参数
描述
返回类型

randomTick(Consumer\<RandomTickCallbackJS>)

-

方块随机tick

this

lootTable(Consumer\<LootBuilder>)

-

方块战利品构建

~

tagBlock(ResourceLocation)

设置方块的标签(如可被挖掘的工具类型和挖掘等级)

this

tagItem(ResourceLocation)

->

设置方块物品的tag

this

noItem()

-

不生成对应的物品

this

displayName(Component)

->

设置显示名字

this

lightLevel(float)

->

设置光照等级

this

blockEntity(Consumer\<BlockEntityInfo>)

-

创建为方块实体

this

rightClick(Consumer\<BlockRightClickedEventJS>)

-

方块右键事件

this

noDrops()

-

该方块的无掉落物

this

hardness(float)

->

设置方块硬度(默认1.5)

this

speedFactor(float)

->

设置方块速度(高于1会速度很快)

this

jumpFactor(float)

->

设置方块跳跃高度

this

noValidSpawns(bool)

->

该方块上是否会生成生物

this

notSolid()

-

使块不坚固???

this

unbreakable()

-

使方块无法破坏

this

resistance(float)

->

设置方块的耐爆炸性(默认为3)

this

requiresTool()

-

设置方块需要对应的工具挖掘才会掉落

this

常用的tagBlock()参数

  • 挖掘需要的对应工具

如果方块没有requiresTool(),则使用对应工具可以加快挖掘速度

如果方块有requiresTool(),则需使用对应工具才可掉落

参数
对应工具类型

"minecraft:mineable/sword"

"minecraft:mineable/pickaxe"

"minecraft:mineable/axe"

"minecraft:mineable/shovel"

"minecraft:mineable/hoe"

  • 挖掘需要的工具品质

参数
需要的工具品质

"minecraft:needs_wooden_tool"

"minecraft:needs_stone_tool"

"minecraft:needs_iron_tool"

"minecraft:needs_golden_tool"

"minecraft:needs_diamond_tool"

钻石

"forge:needs_netherite_tool"

下界合金(由Forge提供的标签,fabric版本未知)

关于渲染相关

方法
参数
描述
返回类型

box(double, double, double, double, double, double)

~

~

this

box(double, double, double, double, double, double, bool)

~

~

this

defaultCutout()

-

~

this

defaultTranslucent()

-

~

this

transparent(bool)

->

方块是否透明

this

noCollision()

-

设置方块无碰撞箱

this

renderType(string)

"cutout"/"cutout_mipped"/"translucent"/"basic"

选择渲染类型,一共就前面四种

this

model(string)

->

模型的位置路径

this

viewBlocking(bool)

~

~

this

fullBlock(bool)

->

设置方块是否为完整的块

this

opaque(bool)

->

设置方块是否透明(光线是否能够穿过)

this

material(string)

->

?

this

声音类型

方法
参数
描述
返回类型

glassSoundType()

-

玻璃音效

this

grassSoundType()

-

草地音效

this

sandSoundType()

-

沙子音效

this

stoneSoundType()

-

石头音效

this

gravelSoundType()

-

沙砾音效

this

cropSoundType()

-

作物音效

this

woodSoundType()

-

木头音效

this

noSoundType()

-

没有音效

this

soundType(SoundType)

->

自定义音效

this

其他

方法
参数
描述
返回类型

mirrorState(Consumer\<BlockStateMirrorCallbackJS>)

~

~

this

rotateState(Consumer\<BlockStateRotateCallbackJS>)

~

~

this

bounciness(float)

~

弹力?粘性?

this

canBeReplaced(Predicate\<CanBeReplacedCallbackJS>)

~

设置块是可以被替换

this

placementState(Consumer\<BlockStateModifyPlacementCallbackJS>)

~

放置方块事件

this

steppedOn(Consumer\<EntitySteppedOnBlockCallbackJS>)

~

方块踩踏事件

this

afterFallenOn(Consumer\<AfterEntityFallenOnBlockCallbackJS>)

-

~

this

fallenOn(Consumer\<EntityFallenOnBlockCallbackJS>)

-

方块下落时事件

this

tagBoth(ResourceLocation)

~

~

this

defaultState(Consumer\<BlockStateModifyCallbackJS>)

-

方块的默认状态

this

exploded(Consumer\<BlockExplodedCallbackJS>)

~

方块爆炸后的事件(此时方块已经被摧毁)

this

canBeWaterlogged()

-

方块是否被水淹没

bool

textureSide(Direction,string)

~

设置特定面的材质

this

mapColor(MapColor)

->

设置方块在地图上的颜色

this

redstoneConductor(bool)

->

设置方块是否是红石导体

this

textureAll(string)

->

用相同的纹理纹理块的所有方面?

this

suffocating(bool)

->

设置方块是否会让生物窒息

this

slipperiness(float)

~

设置块有多滑?

this

transformObject(Block)

~

~

Block

texture(string,string)

~

~

this

property(BlockProperties)

->

设置方块属性

this

item(Consumer\<BlockItemBuilder>)

-

方块的物品构建

this

tag(ResourceLocation)

->

设置方块的tag

this

color(int,BlockTintFunction)

~

设置块的特定层的颜色

this

color(BlockTintFunction)

~

~

this

createProperties()

-

?

BlockBehaviour$Properties

generateDataJsons(DataJsonGenerator)

~

~

-

generateAssetJsons(AssetJsonGenerator)

~

~

-

getRegistryType()

-

~

RegistryInfo<>

waterlogged()

-

设置块是可以被水淹没

this

instrument(NoteBlockInstrument)

~

音符块乐器?

this

createAdditionalObjects()

-

~

-

简单的注册方块轮子

注:以下内容根据个人习惯选择性使用和更改

StartupEvents.registry("block", (event) => {
	// ModID声明如果选择不更改ModID(默认即"kubejs")直接把ModID这个变量取消
	const MODID = "meng:"

	// 工具类型
	const toolType = {
		sword: "minecraft:mineable/sword",
		pickaxe: "minecraft:mineable/pickaxe",
		axe: "minecraft:mineable/axe",
		shovel: "minecraft:mineable/shovel",
		hoe: "minecraft:mineable/hoe"
	}

	// 挖掘等级
	const miningLevel = {
		wooden: "minecraft:needs_wooden_tool",
		stone: "minecraft:needs_stone_tool",
		iron: "minecraft:needs_iron_tool",
		gold: "minecraft:needs_gold_tool",
		diamond: "minecraft:needs_diamond_tool",
		nether: "forge:needs_netherite_tool"
	}

	/* 
	* 定义方块
	* 在添加下一个方块时要记得在[]后加上逗号
	* 并且一定要严格按照格式进行
	* [方块id, 声音类型, 硬度和爆炸抗性(这里我选择让他们共用一个数值), 工具类型, 挖掘等级]
	*/
	let blockRegisters = [
		// 示例
		["example_block", "stone", 3, "pickaxe", "wooden"],
	]
	blockRegisters.forEach(([name, soundType, hardness, tool, level]) => {
		event.create(MODID + name) // 声明方块id
			.soundType(soundType) // 声音类型
			.hardness(hardness) // 硬度
			.resistance(hardness) // 方块的耐爆炸性
			.tagBlock(toolType[tool]) // 工具类型
			.tagBlock(miningLevel[level])  // 挖掘等级
			// .tagItem(MODID + "items") // 添加物品tag(可选)
			// .tagItem(MODID + "blocks") // 添加物品tag(可选)
			.requiresTool(true) // 必须要工具挖掘
	})
})

Last updated