Skip to content

添加自定义物品 ​

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

基础写法 ​

js
StartupEvents.registry("item",event=>{
    event.create("meng:my_item","basic")
})

kjs创建物品是非常简单的,只需要一行就可以解决

create里的第一个参数为物品id,这里如果写成"xxx:xxx",冒号前面的是你的命名空间(类似于模组id),后面的才是你的物品id,如果你只是写成"xxx"并不加冒号也是可以的,kjs为默认为你创建在kubejs下,最后呈现形式就是"kubejs:xxx"

create里的第二个参数为物品类型,在下面会给大家列举出来他的物品类型和描述

物品类型 ​

类型参数 作用 描述 示例
basic 基础物品 无 -
basic 基础物品 -
music_disc 唱片 可以在唱片机里播放的
smithing_template 锻造模板 无 -
helmet 头盔 无 添加护甲
chestplate 胸甲 无 同上
leggings 护腿 无 同上
boots 鞋子 无 同上
axe 斧子 无
hoe 锄头 无 同上
pickaxe 镐子 无 同上
shovel 铲子 无 同上
sword 剑 无 同上
shears 剪刀 无 添加剪刀

通用方法参数 ​

下面提供的方法为所有物品类型都可以调用到的参数,针对于护甲、工具等物品会在对应的章节提供专有的方法

常用方法 ​

方法调用 传入参数 用处 返回类型
maxDamage(int) -> 设置物品的最大耐久 this
food(Consumer<FoodBuilder>) -> this
maxStackSize(int) -> 设置物品的最大堆叠,虽然能超过64但是不建议 this
fireResistant(bool) -> 设置物品是否防火 this
displayName(string) -> 设置在没有配置lang文件时直接显示的名称 this
tag(ResourceLocation) -> 设置物品的tag标签 this
texture(string) -> 设置物品材质路径 this
unstackable() - 设置物品为不可堆叠 this
burnTime(int) - 设置物品的可燃烧tick(默认为0则是不可燃烧) this
modifyAttribute(ResourceLocation,string,double,AttributeModifier) ~ 物品属性修饰符 this
createItemProperties() - 创建为物品属性 Item

物品使用时调用的方法 ​

方法调用 传入参数 用处 返回类型
use(ItemBuilder$UseCallback) -> 物品开始被玩家使用时 this
releaseUsing(ItemBuilder$ReleaseUsingCallback) -> 当玩家没有使用完物品但中途松开鼠标右键时(?) this
finishUsing(ItemBuilder$FinishUsingCallback) -> 当玩家使用完物品时 this
useDuration(ToIntFunction<ItemStack>) ~ 关于物品的使用时间? this
useAnimation(UseAnim) ~ 物品在使用时的动画 this

关于渲染的方法 ​

方法调用 传入参数 用处 返回类型
modelJson(JsonObject) -> 设置模型的json(虽然但是不建议这么干) this
parentModel(string) ~ 设置模型的父模型? this
textureJson(JsonObject) -> 设置物品的材质json ?? this
barWidth(ToIntFunction<ItemStack>) ~ 关于耐久条? this
barColor(Function<ItemStack>,Color) ~ 关于耐久条颜色? this
glow(bool) -> 设置物品是否有附魔光效 this
tooltip(Component) -> 物品提示内容 this

其他方法 ​

方法调用 传入参数 用处 返回类型
hurtEnemy(Predicate<HurtEnemyContext>) -> 物品攻击实体生物时 this
rarity(Rarity) 设置物品稀有度 this
getRegistryType() - 获取注册类型 RegistryInfo<T>
generateAssetJsons(AssetJsonGenerator) ? ? -
generateDataJsons(DataJsonGenerator) ? ? -
name(NameCallback) ~ 动态设置物品名字? this
color(int,ItemTintFunction) ? ? this
color(ItemTintFunction) ? ? this
transformObject(Item) ~ ~ this
subtypes(Function<ItemStack,Collection<ItemStack>>) ~ ? this
containerItem(ResourceLocation) ~ 设置物品为容器??? this

简单的注册物品轮子 ​

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

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

	/* 
	* 定义物品
	* 在添加下一个物品时要记得在[]后加上逗号
	* 并且一定要严格按照格式进行
	* [物品id, 稀有度类型, 是否有附魔光效]
	*/
	let itemRegisters = [
		["example_item", "common", false],
	]
	itemRegisters.forEach(([name, rarity, glow]) => {
		event.create(MODID + name) // 声明id
			.rarity(rarity) // 稀有度
			.glow(glow) // 是否有附魔光效
			.tag(MODID + "items") // 添加物品tag(可选)
	})
})