カスタムコンポーネントを使い、銅のツルハシとそのレシピを作成します。
ビヘイビアパック
custom_item_BP/manifest.jsonは 前々回解説(#2) を参照
custom_item_BP/items/copper_pickaxe.json
{
"format_version": "1.21.10",
"minecraft:item": {
"description": {
"identifier": "saba:copper_pickaxe", // アイテムの識別子
"menu_category": {
"category": "Equipment", // アイテムのカテゴリ
"group": "itemGroup.name.pickaxe" // アイテムのグループ
}
},
"components": {
"minecraft:display_name": {
"value": "銅のツルハシ" // アイテム名
},
"minecraft:icon": {
"textures": {
"default": "saba:copper_pickaxe" // テクスチャ
}
},
"minecraft:damage": {
"value": 4 // ダメージ
},
"minecraft:durability": {
"max_durability": 150 // 最大耐久値
},
"minecraft:repairable":{ // 修理の設定
"repair_items": [
{
"items":[
"minecraft:copper_ingot" // 銅インゴット
],
"repair_amount": 40 // 耐久値回復量
}
]
},
"minecraft:max_stack_size": {
"value": 1 // スタックできる数
},
"minecraft:hand_equipped": true, // 持ち方をツールっぽくする
"minecraft:enchantable": {
"slot": "pickaxe", // エンチャントの種類
"value": 10 // エンチャントの可能性
},
"minecraft:digger": { // 採掘速度の設定
"use_efficiency": true, // エンチャントの影響を受ける
"destroy_speeds": [
{
"block": {
"tags": "q.any_tag("stone", "metal","iron_pick_diggable")" // 石・メタル系を指定
},
"speed": 6
}
]
},
"minecraft:custom_components": [ // カスタムコンポーネント
"saba:pickaxe_durability" // ピッケルの耐久値を操作するカスタムコンポーネント
]
}
}
}
custom_item_BP/scripts/main.js
import { world } from "@minecraft/server";
// 耐久値が減るかどうかを返す関数
function itemDamageChance(itemStack) {
// 耐久力エンチャントを取得
const enchantableComponent = itemStack.getComponent("enchantable");
const unbreaking = enchantableComponent.getEnchantment("unbreaking");
if (unbreaking) {
// 確率計算
const chance = 1 / (unbreaking.level + 1);
return Math.random() <= chance;
}
return true;
}
// アイテムの耐久値を減らす関数
function durabilityDamage(player, itemStack, damage) {
const durabilityComponent = itemStack.getComponent("durability");
const mainhand = player.getComponent("equippable").getEquipmentSlot("Mainhand"); // メインハンド
if (itemDamageChance(itemStack)) { // 耐久値が減るかのチェック
if (durabilityComponent.damage + damage >= durabilityComponent.maxDurability) {
// アイテム破壊
mainhand.setItem(undefined);
player.playSound("random.break");
} else {
// 耐久値減少
durabilityComponent.damage += damage;
mainhand.setItem(itemStack);
}
}
}
// カスタムコンポーネントの登録
world.beforeEvents.worldInitialize.subscribe(ev => {
// ピッケルの耐久値操作のアイテムコンポーネントの登録
ev.itemComponentRegistry.registerCustomComponent("saba:pickaxe_durability", {
// 採掘時の耐久値減少処理
onMineBlock: (ev) => { // 採掘したとき
if (ev.source.getGameMode() !== "creative") { // クリエ以外のとき
durabilityDamage(ev.source, ev.itemStack, 1); // 耐久値を1減らす
}
},
// 攻撃時の耐久値減少処理
onBeforeDurabilityDamage: (ev) => { // 攻撃で耐久値が減少したとき
if (itemDamageChance(ev.itemStack)) {
ev.durabilityDamage = 2; // 減少値を1にする
} else {
ev.durabilityDamage = 0;
}
}
});
});
custom_item_BP/recipes/copper_pickaxe.json
{
"format_version": "1.17.41",
"minecraft:recipe_shaped": {
"description": {
"identifier": "saba:copper_pickaxe"
},
"tags": ["crafting_table"], // レシピの種類 作業台
"pattern": [ // 銅のツルハシのレシピ
"XXX",
" I ",
" I "
],
"key": {
"X": {
"item": "minecraft:copper_ingot" // 銅インゴット
},
"I": {
"item": "minecraft:stick" // 棒
}
},
"result": {
"item": "saba:copper_pickaxe" // 生成物
}
}
}
銅のツルハシのレシピを定義するファイル
リソースパック
custom_item_RP/textures/item_texture.json
{
"resource_pack_name": "custom_item RP",
"texture_data": {
"saba:copper_pickaxe": {
"textures": "textures/items/copper_pickaxe"
}
}
}
custom_item_RP/textures/items/copper_pickaxe.png
動作確認
・石を素早く破壊できる
・採掘したときに耐久値が減る&壊れる
・レシピ通りに作れる
zip
https://mega.nz/file/BAAxiTYS#0YiCSjkoTok5_QWY08dHrmykoFMw3uAcqt-50gdlTXs
mcaddon
https://mega.nz/file/hBRlyQ5T#pjKUn7_eeZ_zBwVgPLE45yi3yUmoTVz-k34pp3KiOA8
コメント
#ほかのツールや防具の解説も出しますか?
やる気があれば出します。
優先度的には、拡張ツルハシ>他ツール(シャベルや斧)>防具となります。
わかりました!