📄
XPlus KubeJS Tutorial v1 (zh_cn)
  • 前言
    • 本文更新日志
  • 一、一切的开始
    • 1.1 常用指令
    • 1.2 文件结构
    • 1.3 脚本基础
    • 1.4 事件列表
  • 二、配方
    • 2.1 新建配方及物品表示
    • 2.2 配方的修改和删除
    • 2.3 非标准配方修改
  • 三、自定义修改初步
    • 3 标签
    • 4 自定义Loot Table
    • 5 自定义流体
    • 6 自定义世界生成
    • 7 添加方块
    • 10:自定义窗口标题和logo
  • 四、事件初步
    • 8 聊天事件
    • 9 计划重启
  • 五、针对其他模组的修改
    • 11.1 JEI信息修改
    • 11.2 REI信息修改
    • 11.3 FTB Quest相关修改
    • 11.4 KubeJs内置游戏阶段 (类似于GameStage)
  • 六、拓展模组简介
    • 12.1 KubeJS Create
    • 12.2 KubeJS Blood Magic
    • 12.3 KubeJS Mekanism
    • 12.4 KubeJS UI
    • 12.5 KubeJS Termal
    • 12.7 便捷战利品表修改(LootJS Forge)
    • 12.8 LootJS战利品表修改实例
  • 七、游戏内容修改进阶
    • 13 自定义物品和物品ToolTip
    • 14 方块和物品属性修改
  • 八、事件进阶
    • 15.0 事件列表
    • 15.1 玩家&实体事件,信息获取及操作
    • 15.2 实体生成 & RayTraceResultJS & ItemStackJS及其他
    • 15.3 方块信息获取及操作
    • 15.4 WorldJS 和 ServerJS
    • 15.5 本章例子
    • 15.6 测试用例
  • 九、杂项
    • 16 网络包和Painter API
    • 17 本地化相关
    • 18.1 熔炼之镐
    • 18.2 罐头示例(包含物品注册, 配方添加, 玩家交互和persistentData的使用)
    • 19 Forge事件监听
  • 十、1.18.2的变化和介绍
    • 20 1.18.2中的变化和功能
    • 20.1 ProbeJS
    • 20.2 组件(Component)的使用
    • 20.3 格式变化
      • 20.3.1 世界生成
      • 20.3.2 方块 / 物品注册
      • 20.3.3 事件
      • 20.3.4 global[] 的使用
    • 20.4 命令注册
    • 20.5 反射与Java access
由 GitBook 提供支持
在本页
  • 一、物品的表示方法——IngredientJS和ItemstackJS
  • 二、配方的添加

这有帮助吗?

在GitHub上编辑
  1. 二、配方

2.1 新建配方及物品表示


一、物品的表示方法——IngredientJS和ItemstackJS

KubeJS提供了IngredientJS和ItemstackJS用于表示物品。比如,标签Ingredient.of("#minecraft:logs")就是Ingredient,Item.of('minecraft:iron_ingot')就是一个Itemstack

其中Ingredient多用于匹配物品。你可以使用Ingredient.matchAny("条件")来获得一个包含当前筛选条件的物品组,其中条件可以为物品ID(minecraft:diamond),mod注册名(@tinkersconstruct),标签(#minecraft:logs)

Itemstack主要用于表示准确的物品组,ItemstackJS可使用的属性/函数如下:

属性
功能
返回值

id

返回该物品组的id

字符串

tags

返回该物品组的tags

Collection tags

count

设置/返回该物品组中物品数量

int

block

返回当前物品是否为方块

布尔值

nbt

返回当前物品组的nbt

CompoundTag

nbtString

返回字符串形式的nbt

字符串

name

返回当前物品组的名称

Text

enchantments

返回当前物品组的附魔

MapJS

harvestSpeed

返回当前物品组的破坏速度

浮点型

itemGroup

返回当前物品组在创造物品栏的位置

字符串

vanillaPredicate

获取当前物品谓词(?)

Predicate

empty

返回当前物品组是否为空

布尔值

函数
功能
返回值

hasTag(tag)

判断物品是否有指定tag

布尔值

withCount(整形 数量)

返回一个指定数量的物品组

ItemStackJS

hasNBT()

判断是否具有NBT

布尔值

removeNBT()

移除物品的NBT

void

withNBT(CompoundTag nbt)

返回具有指定NBT的物品组

ItemStackJS

withName(Text 名称)

返回一个具有指定名称的物品组

ItemStackJS

strongEquals(any)

将当前物品组与给定内容对比(同时比较数量等)

布尔值

hasEnchantment(字符串 附魔ID, 整形 等级)

判断当前物品组是否有给定的附魔

布尔值

enchant(字符串 附魔ID, 整形 等级)

返回一个添加了指定附魔的物品组

ItemStackJS

enchant(MapJS 附魔内容)

返回一个添加了指定附魔的物品组

ItemStackJS

ignoreNBT()

返回忽略的NBT的IngredientJS

IngredientJS

weakNBT()

返回部分忽略的NBT的IngredientJS

IngredientJS

areItemsEqual(ItemStackJS 对比对象)

将当前物品组与给定物品组对比

布尔值

isNBTEqual(ItemStackJS 对比对象)

将当前物品组与给定物品组的NBT对比

布尔值

getHarvestLevel(ToolType 工具类型, nullable PlayerJS 玩家, nullable BlockContainerJS 方块)

返回其挖掘等级

整形

getHarvestSpeed(nullable BlockContainerJS 方块)

返回其挖掘速度

浮点型

配方修改需要用到的大都是上表加粗的内容,剩余的内容大都等到第15章判断物品状态时才会用到。

估计你看到上面这些东西得有点麻了,不要慌,让我们看几个例子

例子
意义

Item.of("minecraft:iron_ingot").withCount(5)

5个铁锭

Item.of("minecraft:iron_ingot").withCount(5).withName("KubeJS魔改教程")

5个名字为"KubeJS魔改教程"的铁锭

Item.of("minecraft:diamond_sword").ignoreNBT()

忽略了NBT的钻石剑(长用于忽略物品耐久、附魔等属性)

Item.of("minecraft:enchanted_book", {StoredEnchantments:[{lvl:1,id:"minecraft:sweeping"}]})

横扫之刃I附魔书(直接添加NBT例子)

Item.of("minecraft:enchanted_book").enchant("minecraft:sweeping", 1)

横扫之刃I附魔书(使用函数添加NBT例子)

Item.of(/create:.*/)

所有机械动力物品(正则表达式)

显然,上面的方法表示物品非常麻烦。KubeJS提供了一些简写方法:

你可以使用命名空间ID直接表示一个物品,如"minecraft:iron_ingot"

你可以直接使用标签的字符串表示这一标签下的使用物品,如"#minecraft:logs"

你可以在命名空间前加上倍数来表示物品个数,如"5x minecraft:iron_ingot"表示五个铁锭

当然,你也可以直接使用正则表达式

你可以使用指令/kubejs hand来快速获取手持物品信息,详见1.1 基础代码格式和常用指令

二、配方的添加

1、有序配方添加

语句:event.shaped(输出物品 , 输入物品)

例子:用8个海绵合成3个石头

onEvent('recipes', event => { // 监听recipes事件
        // 主体修改内容
        event.shaped('3x minecraft:stone', [
                'SSS',
                'S S',
                'SSS'
          ], {
                S: 'minecraft:sponge'
          })
})

注:下文为了表述简洁将省略onEvent部分

2、无序配方添加

语句:event.shapeless(输出物品 , 输入物品)

例子:用1个石头和1个带萤石粉标签的物品合成4个圆石

event.shapeless('4x minecraft:cobblestone', ['minecraft:stone', '#forge:dusts/glowstone'])

3、切石机、熔炉、高炉、烟熏炉、锻造台配方的添加

  // 添加切石机配方:用1个minecraft:golden_apple合成4个minecraft:apple
  event.stonecutting('4x minecraft:apple'/* 输出物品 */, 'minecraft:golden_apple'/* 输入物品 */)

  // 添加切石机配方:用1个minecraft:golden_apple合成2个minecraft:carrot
  event.stonecutting('2x minecraft:carrot'/* 输出物品 */, 'minecraft:golden_apple'/* 输入物品 */)

  // 添加熔炉配方:用1个minecraft:golden_apple合成2个minecraft:carrot
  // (event.recipes.minecraft.smelting的缩写)
  event.smelting('2x minecraft:carrot'/* 输出物品 */, 'minecraft:golden_apple'/* 输入物品 */)
  
  // 添加高炉,营火和烟熏炉的配方(与上文类似)
  event.blasting('3x minecraft:apple', 'minecraft:golden_apple')
  
  // 添加锻造台配方,将后2个物品合并成第一个物品 (将minecraft:gold_ingot和minecraft:apple合成为minecraft:golden_apple)
  event.smithing('minecraft:golden_apple', 'minecraft:apple', 'minecraft:gold_ingot')

4、NBT和配方ID

带NBT的配方修改

  event.shaped('minecraft:book', [
    'CCC',
    'WGL',
    'CCC'
  ], {
    C: '#forge:cobblestone',
    L: Item.of('minecraft:enchanted_book', {StoredEnchantments:[{lvl:1,id:"minecraft:sweeping"}]}),
    // 尽管格式是相同的,但是对于附魔来说,你还可以将其简写成如下形式:
    W: Item.of('minecraft:enchanted_book').enchant('minecraft:respiration', 2),
    G: '#forge:glass'
  })

mc中所有的配方都有一个随机的ID,但以下配方被指定了一个唯一的静态ID。这个功能对于编写Patchouli手册比较有用

event.smelting('minecraft:golden_apple', 'minecraft:carrot').id('wudjimodpack:wudji_first_recipe_id'/* 配方ID */)
上一页1.4 事件列表下一页2.2 配方的修改和删除

这有帮助吗?

可以看到,KubeJS采用了类似来修改配方,如果你的配方不需要三行的话,直接留空即可

原版的格式