【統合版解説】カスタムアイテム #4 銅のツルハシ+レシピ

スポンサーリンク

カスタムコンポーネントを使い、銅のツルハシとそのレシピを作成します。

ビヘイビアパック

Group-47.png

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" // 生成物
        }
    }
}

銅のツルハシのレシピを定義するファイル

リソースパック

Group-43-1.png

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

copper_pickaxe.png

動作確認

・石を素早く破壊できる
・採掘したときに耐久値が減る&壊れる
・レシピ通りに作れる

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88-2024-08-24-033750.png
%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88-2024-08-24-034123.png

zip
https://mega.nz/file/BAAxiTYS#0YiCSjkoTok5_QWY08dHrmykoFMw3uAcqt-50gdlTXs
mcaddon
https://mega.nz/file/hBRlyQ5T#pjKUn7_eeZ_zBwVgPLE45yi3yUmoTVz-k34pp3KiOA8

※投稿記事に含まれるファイルやリンクにより発生した被害についてクラフターズコロニーは責任を取りません
投稿通報

コメント

  1. #ほかのツールや防具の解説も出しますか?

    • やる気があれば出します。
      優先度的には、拡張ツルハシ>他ツール(シャベルや斧)>防具となります。

  2. わかりました!

コメント通報