矿石战利品表¶
这一页展示如何创建一个只有正确工具才能掉落物品的矿石方块,并在成功开采时奖励经验球。
战利品表¶
使用 match_tool 条件限制掉落:
BP/loot_tables/blocks/silver_ore.json
{
"pools": [
{
"rolls": 1,
"conditions": [
{
"condition": "match_tool",
"minecraft:match_tool_filter_all": [
"minecraft:is_tool",
"minecraft:is_pickaxe"
],
"minecraft:match_tool_filter_any": [
"minecraft:iron_tier",
"minecraft:diamond_tier",
"minecraft:netherite_tier"
],
"count": 1
}
],
"entries": [
{
"type": "item",
"name": "wiki:raw_silver"
}
]
}
]
}
只有使用铁镐及以上品质的镐才会掉落 wiki:raw_silver;用其他工具或徒手破坏则什么都不掉。
附魔过滤¶
如果要针对特定附魔(如时运)添加额外掉落,需要为每个附魔等级单独添加一个池:
pools > conditions(节选)
"conditions": [
{
"condition": "match_tool",
"minecraft:match_tool_filter_all": ["minecraft:is_pickaxe"],
"minecraft:match_tool_filter_any": ["minecraft:iron_tier", "minecraft:diamond_tier", "minecraft:netherite_tier"],
"enchantments": [
{
"fortune": { "level": 1 }
}
]
}
]
注意
附魔检测目前只能正确识别第1和第2附魔等级,请分别为每个等级创建独立的池。
经验球脚本¶
通过自定义组件在 onPlayerBreak 时生成经验球:
BP/scripts/silver_ore.js
import { system, EquipmentSlot } from "@minecraft/server";
const OreExpComponent = {
onPlayerBreak({ block, dimension, player }, { params }) {
const equip = player?.getComponent("minecraft:equippable");
if (!equip) return;
const item = equip.getEquipment(EquipmentSlot.Mainhand);
if (!item?.hasTag("minecraft:is_pickaxe")) return;
if (!item.hasTag("minecraft:iron_tier") &&
!item.hasTag("minecraft:diamond_tier") &&
!item.hasTag("minecraft:netherite_tier")) return;
// 丝绸之触不给经验
if (item.getComponent("minecraft:enchantable")?.getEnchantment("silk_touch")) return;
const count = params.min + Math.floor(Math.random() * (params.max - params.min + 1));
for (let i = 0; i < count; i++) {
dimension.spawnEntity("minecraft:xp_orb", block.location);
}
}
};
system.beforeEvents.startup.subscribe(({ blockComponentRegistry }) => {
blockComponentRegistry.registerCustomComponent("wiki:ore_exp", OreExpComponent);
});
方块定义¶
把战利品表和自定义组件挂到方块上:
BP/blocks/silver_ore.json
{
"format_version": "1.26.10",
"minecraft:block": {
"description": {
"identifier": "wiki:silver_ore",
"menu_category": {
"category": "nature",
"group": "minecraft:itemGroup.name.ore"
}
},
"components": {
"minecraft:destructible_by_mining": { "seconds_to_destroy": 3.0 },
"minecraft:loot": "loot_tables/blocks/silver_ore.json",
"minecraft:material_instances": {
"*": { "texture": "wiki:silver_ore" }
},
"wiki:ore_exp": { "min": 1, "max": 5 }
}
}
}
别忘了在 terrain_texture.json 中注册纹理短名 wiki:silver_ore。