📄
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 提供支持
在本页
  • 0、基本格式
  • 1、方块战利品表(block.loot_tables)
  • 2、实体战利品表(entity.loot_tables)
  • 3、常用表达方式

这有帮助吗?

在GitHub上编辑
  1. 三、自定义修改初步

4 自定义Loot Table

上一页3 标签下一页5 自定义流体

这有帮助吗?


(本章参考了)

KubeJS目前能修改全局、方块、实体、猫或村民礼物(村庄英雄Buff)、钓鱼、宝箱战利品表

基本的方法名称如下

事件ID
覆盖原有战利品表的方法名称
修改战利品表的方法名称

generic.loot_tables

addGeneric

modify

block.loot_tables

addBlock

modifyBlock

entity.loot_tables

addEntity

modifyEntity

gift.loot_tables

addGift

modify

fishing.loot_tables

addFishing

modify

chest.loot_tables

addChest

modify

下面就下面5种的战利品表进行讲解。


0、基本格式

onEvent('事件ID', event => {
  event.覆盖/修改原有战利品表方法名称('物品/实体注册名', table => {
  	//修改内容
  }
  
  //table.clearPools()//清空所有随机池
  //table.clearConditions()//清空条件
  //table.clearFunctions()//清空函数
})

1、方块战利品表(block.loot_tables)

针对方块战利品表,KubeJS提供了很简单的添加单方块掉落物的方法。

onEvent('block.loot_tables', event => {
  event.addSimpleBlock('minecraft:dirt', 'minecraft:red_sand')//覆盖泥土的战利品表并使泥土掉落红沙
  event.addSimpleBlock('minecraft:oak_leaves')//覆盖橡树树叶的战利品表并使橡树树叶在破坏时掉落自身
})

如果你想要实现更复杂的修改,你需要使用随机池。KubeJS提供了一些简写方法,具体见下方例子。

onEvent('block.loot_tables', event => {
  event.addBlock('minecraft:dirt', table => {
    table.addPool(pool => {//新建随机池(覆盖原有的)
      pool.rolls = 1 // 固定值
      // pool.rolls = [4, 6] // 也可写为 {min: 4, max: 6} // 抽奖次数∈[4,6]
      // pool.rolls = {n: 4, p: 0.3} // 二项分布
      //以上两种值的表达方式为值提供器
      pool.addItem('minecraft:dirt')
      //pool.addItem('minecraft:dirt', 40) // 此处40为权重
      //pool.addItem('minecraft:dirt', 40, [4, 8]) // 物品个数∈[4,8]
      // pool.addCondition({json}) //json格式,抽取该物品需要满足的条件,原版数据包格式(具体使用情景详见14.1)
      // pool.addEntry({json})//json格式,项目类别
    })
  })
})

注:修改方块战利品表(而不是覆盖)的示例详见14.1

2、实体战利品表(entity.loot_tables)

onEvent('entity.loot_tables', event => {
  // 覆盖僵尸的战利品表,掉落5个物品(25%概率为胡萝卜,75%为苹果)
  event.addEntity('minecraft:zombie', table => {
    table.addPool(pool => {
      pool.rolls = 5//抽5次奖
      pool.addItem('minecraft:carrot', 1)
      pool.addItem('minecraft:apple', 3)
    })
  })
  
  event.modifyEntity('minecraft:pig', table => {
    table.addPool(pool => {
      // 修改猪的战利品表,使在被玩家杀死时多掉落一个泥土
      // 注:只是修改战利品表。并不会覆盖原有的掉落生/熟猪肉的战利品表
      pool.addItem('minecraft:dirt')
      pool.killedByPlayer()
    })
  })
})

注:对于gift.loot_tables、fishing.loot_tables、chest.loot_tables,只能使用addJson(物品注册名, json原版格式)来进行修改

3、常用表达方式

      /*
      	在新建/修改随机池时,还有以下表达方式可用:
      	以下值提供器与上述的表示方法相同
      	pool.enchantRandomly(附魔注册名)// 随机附魔
      	pool.enchantWithLevels(附魔等级(值提供器), 是否为宝藏(布尔值))// 指定等级和是否为宝藏的随机附魔
      	pool.name(name as Text)// 指定名称
      	pool.damage(掉落物耐久值(值提供器))// 修改掉落物耐久值
      	pool.randomChance(掉落概率(double型))// 修改掉落概率
      	pool.randomChanceWithLooting(掉落概率(double型), 倍率(double型))// 使用该表达方式时,抢夺或时运会对掉落物有影响
      	pool.furnaceSmelt()// 使当前随机池掉落的物品掉落形式为经过熔炉烧炼(自动烧炼)
      	pool.killedByPlayer()// 添加条件:实体被玩家杀死才会掉落
      	pool.survivesExplosion()// 添加条件:方块被爆炸破坏时依旧掉落
      	//以上方法也可以用于对Loot Table直接修改(例如table.name(name as Text)),具体使用见14.1
      */
Minecraft 原版模组入门教程 - 战利品表(作者ruhuasiyu)