マイクラの配布サイト › フォーラム › 技術相談(統合版) › functionについて
- このトピックには4件の返信、1人の参加者があり、最後に匿名により3週、 3日前に更新されました。
- 投稿者投稿
- K参加者
鉄ブロックを右クリックすると
1: 鉄ブロックが消えて
2: 木~ネザライトの斧のうちどれかが手に入って
3: 1分後に同じ位置に鉄ブロックが復活するという動作をファンクションで作れますか?
作れるならコマンドも教えて頂きたいです。 - 匿名ゲスト
ブロックのクリック検知はscriptAPIでしか多分できないです。
どうしてもコマンドのみでやる場合は防具立てなどを仕様して擬似的な検知をする必要があると思います
- 匿名ゲスト
scriptAPIのやり方でいいので教えてください
- 匿名ゲスト
クリックしたブロックが鉄ブロックなら
それを消す、ランダムな斧をクリック者に与える。
を順に実行する。消した後1分後に復活するのはscore用いたコマンド式のタイマーでもscriptAPIでもどっちでも可能かと思います
- 匿名ゲスト
もし問題ないのであれば新たにブロックを作り、custom_componentsでクリックのイベントを検知するのが一番楽かと思います。
以下はiron_blockそっくりのブロックを追加するjsonです。custom_iron_block.json
{ "format_version": "1.21.50", "minecraft:block": { "description": { "identifier": "custom:iron_block", "menu_category": { "category": "construction" } }, "components": { "minecraft:geometry": "minecraft:geometry.full_block", "minecraft:material_instances": { "*": { "texture": "iron_block", "render_method": "opaque" } }, "minecraft:custom_components": ["iron_block:interact"], "minecraft:destructible_by_mining": false // trueにするとサバイバルで壊せるようになる } } }
レシピや破壊ツールなどの指定はしていませんので、そこまで再現するのであれば上記コードに更に書き足していく必要があります。
ただ、クリエイティブで使う分には問題ありません。
次に以下が指定された「鉄ブロックが消える、木、石、鉄、金、ダイヤ、ネザライトの斧のうちどれかが手に入る、1分後に消えた鉄ブロックの場所に鉄ブロックが復活する」のコードになります。
main.jsimport { world, ItemStack, system } from "@minecraft/server"; world.beforeEvents.worldInitialize.subscribe((initEvent) => { initEvent.blockComponentRegistry.registerCustomComponent("iron_block:interact", { onPlayerInteract: (e) => { const player = e.player; const block = e.block; block.dimension.setBlockType(block.location, "minecraft:air"); const axe = randomGetAxe(); const item = new ItemStack(axe, 1); player?.dimension.spawnItem(item, player.location); system.runTimeout(() => { block.dimension.setBlockType(block.location, "custom:iron_block"); }, 20 * 60); }, }); }); function randomGetAxe() { const axe = ["wooden_axe", "stone_axe", "iron_axe", "golden_axe", "diamond_axe", "netherite_axe"]; const random = Math.floor(Math.random() * axe.length); return <code>minecraft:${axe[random]}</code>; }
消えた状態でワールドを閉じるなどするとブロックが復活しないと思われますので、そこだけご注意ください。
以下はアドオンのmanifest.jsonです。
manifest.json{ "format_version": 2, "header": { "description": "", "name": "Sample Addon", "uuid": "7b790b7c-a415-474a-b9dc-00b3eed396cd", "version": [1, 20, 50], "min_engine_version": [1, 20, 50] }, "modules": [ { "description": "Script", "type": "script", "language": "javascript", "uuid": "c6421e65-bb4d-41f7-81d6-76452064e088", "version": [1, 0, 0], "entry": "scripts/main.js" } ], "dependencies": [ { "module_name": "@minecraft/server", "version": "1.16.0" } ] }
最後に以上3ファイルの構造になります。
Sample Script API ├─ manifest.json │ ├─ blocks │ └─custom_iron_block.json │ └─ scripts └─main.js
ご不明点などあれば返信ください。
- 投稿者投稿