矿石战利品表
easy
scripting
格式版本 1.21.70
本教程假定您已掌握方块基础知识。 开始前请先阅读方块指南。
本教程将展示如何为自定义矿石创建带有完善战利品表的新方法。使用minecraft:loot组件时,无论使用何种工具都会执行指定的战利品表,但通过在战利品表中添加match_tool条件,您可以为每个奖励池指定所需的工具类型。
此外,通过脚本和自定义组件的配合,我们还能实现当玩家使用正确工具破坏方块时,获得与原版矿石相同的经验球奖励。
功能特性:
- 可使用指定工具开采(本教程以铁镐为例)
- 可要求工具附带特定附魔
- 同时掉落经验奖励
已知限制:
- 所有工具必须单独枚举指定
- 非玩家破坏方式(爆炸、命令等)无法触发战利品掉落
战利品表配置
以下示例展示了如何使用match_tool条件检测玩家是否使用minecraft:iron_pickaxe:
BP/loot_tables/blocks/silver_ore.json
json
{
"pools": [
{
"rolls": 1,
"conditions": [
{
"condition": "match_tool",
"item": "minecraft:iron_pickaxe",
"count": 1
}
],
"entries": [
{
"type": "item",
"name": "wiki:raw_silver"
}
]
}
]
}附魔条件配置
如需检测附魔效果,可在条件中添加附魔章节。注意:每个工具和附魔等级必须作为独立奖励池列出。
当前系统仅能正确检测第1级和第2级附魔效果。
BP/loot_tables/blocks/silver_ore.json > pools
json
"conditions": [
{
"condition": "match_tool",
"item": "minecraft:iron_pickaxe",
"count": 1,
"enchantments": [
{
"fortune": {
"level": 1
}
}
]
}
]经验奖励脚本
通过自定义组件可实现矿石被破坏时生成经验球。这里我们使用onPlayerDestroy事件钩子。若不需要经验奖励,可跳过此步骤。
与战利品表类似,我们会检测玩家手持物品,然后在方块位置生成随机数量的经验球。
BP/scripts/silver_ore.js
js
import { world, EquipmentSlot } from "@minecraft/server";
/**
* @param {number} min 最小值
* @param {number} max 最大值
* @returns {number} 返回min和max参数之间的随机整数(包含边界值)
* */
const randomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;
// 在世界加载前注册自定义组件
world.beforeEvents.worldInitialize.subscribe(({ blockComponentRegistry }) => {
blockComponentRegistry.registerCustomComponent("wiki:silver_ore_xp_reward", {
onPlayerDestroy({ block, dimension, player }) {
// 检测玩家手持工具
const equippable = player?.getComponent("minecraft:equippable");
if (!equippable) return; // 若玩家或装备数据不存在则终止
const itemStack = equippable.getEquipment(EquipmentSlot.Mainhand);
if (itemStack?.typeId !== "minecraft:iron_pickaxe") return; // 若非铁镐则终止
// 检测附魔效果
const enchantable = itemStack.getComponent("minecraft:enchantable");
const silkTouch = enchantable?.getEnchantment("silk_touch");
if (silkTouch) return; // 若铁镐带有精准采集附魔则终止
// 生成经验球
const xpAmount = randomInt(0, 3); // 经验球生成数量
for (let i = 0; i < xpAmount; i++) {
dimension.spawnEntity("minecraft:xp_orb", block.location);
}
},
});
});方块JSON配置
以下方块行为文件可作为模板使用。别忘了通过terrain_texture.json设置方块贴图。
需要完成两个关键配置:
- 在
minecraft:loot组件中指定新战利品表路径 - 将经验奖励组件添加到
minecraft:custom_components数组
BP/blocks/silver_ore.json
json
{
"format_version": "1.21.70",
"minecraft:block": {
"description": {
"identifier": "wiki:silver_ore",
"menu_category": {
"category": "nature",
"group": "minecraft:itemGroup.name.ore"
}
},
"components": {
"minecraft:loot": "loot_tables/blocks/silver_ore.json", // 使用精准采集时不会掉落
"minecraft:custom_components": ["wiki:silver_ore_xp_reward"]
}
}
}最终效果









