Skip to content

Create a loot table

LootJS支持我们创建自定义的战利品表。

创建战利品表

创建一个只有一个奖池的战利品表相当的简单

js
LootJS.lootTables(event => {
    event.create("lootjs:rare_equipment").createPool(pool => {
        // ...
    })
})

第一个奖池

第一个物品

假如我们想创建一个例子 中的战利品表中的一个条目,就像下面的 json 一样:

json
{
    "type": "minecraft:item",
    "name": "minecraft:diamond_leggings",
    "weight": 3,
    "functions": [
        {
            "function": "minecraft:enchant_with_levels",
            "levels": {
                "type": "minecraft:uniform",
                "min": 20,
                "max": 39
            },
            "options": "#minecraft:on_random_loot"
        }
    ]
}
js
LootJS.lootTables(event => {
    event.create("lootjs:rare_equipment").createPool(pool => {
        // 默认情况下,`enchantWithLevels` 将始终为 `#minecraft:on_random_loot`
        pool.addEntry(
            LootEntry.of("minecraft:diamond_leggings")
                     .withWeight(3)
                     .enchantWithLevels([20, 39])
        )
    })
})

更多的物品

我们可以向第一个奖励池添加更多的物品。

js
LootJS.lootTables(event => {
    event.create("lootjs:rare_equipment").createPool(pool => {
        pool.addEntry(
            LootEntry.of("minecraft:diamond_leggings")
                     .withWeight(3)
                     .enchantWithLevels([20, 39])
        )

        pool.addEntry(
            LootEntry.of("minecraft:iron_pickaxe")
                     .withWeight(10)
                     .enchantWithLevels([10, 19])
        )

        pool.addEntry(
            LootEntry.of("minecraft:diamond_sword")
                     .withWeight(5)
                     .enchantWithLevels([30, 50])
                     .damage([0.3, 0.5])
        )

        pool.addEntry("minecraft:diamond_horse_armor")

        pool.addEntry(LootEntry.of("minecraft:diamond").setCount([2, 5]))
    })
})

第二个奖励池

LootJS也允许我们创建第二个奖励池。例如,我们可以在第二个奖励池中添加一把带附魔的剑。

js
LootJS.lootTables(event => {
    event
        .create("lootjs:rare_equipment")
        .createPool(pool => {
            // 之前的第一奖励池的代码,就不重复写了
        })
        .createPool(pool => {
            pool.addEntry(
                LootEntry.of("minecraft:netherite_sword").enchant(builder => {
                    builder.withEnchantment("minecraft:sharpness", [4, 5])
                    builder.withEnchantment("minecraft:unbreaking", 3)
                    builder.withEnchantment("minecraft:knockback", 2)
                    builder.withEnchantment("minecraft:mending", 1)
                })
            )

            // Minecraft 原版通常使用一个带权重的空条目来代替 `randomChance`。
            // 在这个教程中,我们将做同样的事情。
            pool.addEntry(LootEntry.empty().withWeight(20))
        })
})

将表添加到其他表中

LootJS现在支持将整个表添加到其他表中。

js
LootJS.lootTables(event => {
    event.getLootTable("minecraft:gameplay/fishing") 
         .firstPool(pool => {
            pool.addEntry(LootEntry.reference("lootjs:rare_equipment")
//                                                      ⬆️
//                                           这里指的是刚才我们创建的战利品表
                .randomChance(0.1))
    })
})

贡献者

页面历史