概述
这是一个Forge/NeoForge模组,需要前置KubeJS。
该模组使用Forge/NeoForge的 Global Loot System 以及 KubeJS 来添加基于特定条件的战利品修改。
作者不会将其反向移植到 1.17 或 1.16.5 以下版本。
安装
从 CurseForge(或GitHub上)下载最新版模组。
下载最新版 KubeJS。
安装 Forge/NeoForge。
将两个模组放到 mods 文件夹中。
战利品修改示例
战利品修改应在服务端处理,所以脚本应当放在 kubejs/server_scripts 文件夹中,并创建一个 .js 的文件。
这是一个为苦力怕 (Creeper) 添加火药战利品的简单示例:
onEvent("lootjs", (event) => {
event
.addEntityLootModifier("minecraft:creeper")
.randomChance(0.3) // 30% 概率
.thenAdd("minecraft:gunpowder");
});
除了指定战利品表,还可以修改所有实体:
onEvent("lootjs", (event) => {
event
.addLootTypeModifier(LootType.ENTITY) // 可应用于多种类型
.logName("It's raining loot") // 你可以自定义在log中显示的名字
.weatherCheck({
raining: true,
})
.thenModify(Ingredient.getAll(), (itemStack) => {
return itemStack.withCount(itemStack.getCount() * 2);
});
});
并且还可以检测是否手持指定物品:
onEvent("lootjs", (event) => {
event
.addBlockLootModifier("#forge:ores") // 注意此处是方块标签而非物品标签
.matchEquip(EquipmentSlot.MAINHAND, Item.of("minecraft:netherite_pickaxe").ignoreNBT())
.thenAdd("minecraft:gravel");
// 检测主手以及副手示例如下:
// matchMainHand(Item.of("minecraft:netherite_pickaxe").ignoreNBT())
// matchOffHand(Item.of("minecraft:netherite_pickaxe").ignoreNBT())
});
高版本(1.19+)
由于高版本KubeJS改动很大,1.16的JavaScript代码部分不再通用
来自GitHub Wiki的官方例子,为砂砾添加火药作为随机掉落:
LootJS.modifiers((event) => {
event
.addBlockLootModifier("minecraft:gravel") //为砂砾添加Modifier
.randomChance(0.3) //概率为30%
.addLoot("minecraft:gunpowder");}); //掉落内容为火药
依然可以为苦力怕添加火药作为掉落:
LootJS.modifiers((event) => {
event
.addEntityLootModifier("minecraft:creeper") //为苦力怕添加实体Modifier
.addLoot("minecraft:gunpowder");}); //掉落内容为火药
还可以添加战利品列表(Loot Table):
LootJS.modifiers((event) => {
// by id 通过loot table的id添加
event
.addLootTableModifier("minecraft:entities/creeper") //使用苦力怕的战利品列表
.randomChance(0.3) //概率为30%
.addLoot("minecraft:gunpowder"); //掉落内容为火药
// by regular expression 通过正则表达式添加
event
.addLootTableModifier(/.*creeper.*/) //正则表达式,内容依旧是苦力怕
.randomChance(0.3) //概率为30%
.addLoot("minecraft:gunpowder");}); //掉落内容为火药
更多信息
有关模组的更多功能以及信息,请查看Wiki或示例。
禁用战利品表
一些方块例如树叶会被随机破坏。你可以禁用它们的战利品表。
onEvent("lootjs", (event) => {
// 禁用所有树叶
event.disableLootModification(/.*:blocks\/.*_leaves/);
// 禁止蝙蝠战利品
event.disableLootModification("minecraft:entities/bat");
});
为战利品修改启用日志记录
当进行了大量修改时,很难追踪在特定条件下触发了哪些修改。启用 enableLogging 后 LootJS 会将每次触发修改的日志记录到 logs/kubejs/server.txt 中。