with one click
レッドストーン回路などの動作をYAMLファイルで宣言的にテストします。
npx skills add https://github.com/yadokari1130/MC-Redstone-AI --skill mc-cli-testCopy and paste this command into Claude Code to install the skill
レッドストーン回路などの動作をYAMLファイルで宣言的にテストします。
npx skills add https://github.com/yadokari1130/MC-Redstone-AI --skill mc-cli-testCopy and paste this command into Claude Code to install the skill
トリップワイヤーフックのブロック更新伝播特性を利用した、レッドストーン配線不要の「無線」BUD通信技法です。ボートとトラップドアを組み合わせることで、レバーなどのスイッチ操作で何度も繰り返し発火させることができます。
Minecraft のレッドストーン回路や構造物を設計するための、JSON データモデルの仕様と設計ガイドラインです。
Minecraft の世界から指定した範囲のブロック情報を取得します。
Minecraft の世界の指定範囲に存在するエンティティを削除します。
Minecraft の世界に指定したブロックを配置します。
レッドストーンコンパレーターの特性、配置方法、および操作に関するガイドラインです。
| name | mc_cli_test |
| description | レッドストーン回路などの動作をYAMLファイルで宣言的にテストします。 |
このスキルは、*_test.yaml / *_test.yml 形式のテストファイルを実行し、
Minecraft内のレッドストーン回路やブロックの動作を自動検証するためのものです。
# 単一ファイルを指定
mc-cli test path/to/circuit_test.yaml
# ディレクトリを指定(*_test.yaml / *_test.yml を自動スキャン)
mc-cli test ./tests/
<file_or_dir>: テストYAMLファイルのパス、またはテストファイルを含むディレクトリのパス。--url: (任意) サーバーの URL。デフォルトは http://localhost:8080。*_test.yaml または *_test.yml のいずれかで命名してください。
name: "テストスイート名"
description: "説明(省略可)"
tests:
- name: "テストケース1"
setup: ...
steps: ...
assert: ...
setup — 回路の配置テストケースごとに毎回回路を配置し直します。これによりテスト間の干渉を防ぎます。
setup:
# ファイルパス(place-blocksで使用するPlaceRequest形式のJSONファイル)
# 単一オブジェクトの他、フェーズ配列 [ {...}, {...} ] も利用可能
blocks_file: "./and_gate.json"
# または、インラインでJSON構造を直接記述(どちらか一方)
# 単一オブジェクト形式:
blocks:
blocks:
- { x: 10, y: 64, z: 10, block: "minecraft:stone" }
entities:
- { type: "minecraft:boat", x: 10.5, y: 64.5, z: 10.5, yaw: 90.0 }
attaches: []
connects: []
# フェーズ(配列)形式:
# blocks:
# - blocks:
# - { x: 10, y: 64, z: 10, block: "minecraft:stone" }
# - attaches:
# - { pos: [10, 65, 10], component: "minecraft:lever", base: [10, 64, 10] }
steps — 操作ステップinteract_block — ブロックをインタラクトレバー・ボタンなどをインタラクトします。
target_state を指定した場合は現在の状態を確認し、既に目標状態であれば何もしません。
これにより、レバーの状態を「ONにする」という意図を確実に実行できます。
target_state:
lever): {"powered": "true"} or "false"{"powered": "true"} (※ボタンは一定時間で自動的に false に戻るため、ON状態の確認用)steps:
- action: interact_block
x: 10
y: 64
z: 10
target_state: # 省略可。省略時は無条件にインタラクトする
powered: "true" # この状態になっていることを目標とする
wait — 待機CLIプロセスを指定ミリ秒スリープします。リピーターなど遅延回路の信号伝播を待つ際に使います。
steps:
- action: wait
ms: 500 # ミリ秒(例: 500ms ≒ 10tick)
place_blocks — 途中配置テストの途中でブロックを追加配置したい場合に使用します。blocks フィールドには単一オブジェクトまたはフェーズ配列のいずれかを指定できます。
steps:
- action: place_blocks
blocks_file: "./extra.json"
# インライン単一オブジェクト
- action: place_blocks
blocks:
blocks:
- { x: 10, y: 64, z: 10, block: "minecraft:stone" }
# インライン配列(フェーズ)
- action: place_blocks
blocks:
- blocks:
- { x: 10, y: 64, z: 10, block: "minecraft:stone" }
- attaches:
- { pos: [10, 65, 10], component: "minecraft:lever", base: [10, 64, 10] }
fill — 範囲を埋める指定した範囲(両端の座標を含む)を特定のブロックで埋めます。回路のリセット(airで消去)等に使います。
steps:
- action: fill
x1: 10 y1: 63 z1: 10
x2: 20 y2: 65 z2: 20
block: "minecraft:air"
kill_entities — エンティティを削除指定した範囲内のエンティティを削除します。オプションでエンティティタイプを指定できます。
steps:
- action: kill_entities
x1: 10 y1: 63 z1: 10
x2: 20 y2: 65 z2: 20
type: "minecraft:boat" # 省略可。省略時はすべてのエンティティを対象とする
assert — アサーション(検証)テストの最終的な状態を検証します。部分一致のため、指定したキーのみ確認します。
assert:
- x: 15
y: 64
z: 10
block: "minecraft:redstone_lamp" # 省略可(IDのチェックをスキップ)
state:
lit: "true" # 指定したキーのみ検証(他は無視)
# 複数座標をリストで並べられる。すべて合格で初めてテスト合格
- x: 16
y: 64
z: 10
block: "minecraft:air" # 空気(ブロックなし)を期待
name: "ANDゲート 真理値表テスト"
description: "2入力ANDゲートの全入力パターンを検証する"
tests:
- name: "A=OFF, B=OFF → 出力=OFF"
setup:
blocks_file: "./and_gate.json"
steps:
- action: interact_block
x: 10 y: 64 z: 10
target_state: { powered: "false" }
- action: interact_block
x: 12 y: 64 z: 10
target_state: { powered: "false" }
- action: wait
ms: 200
assert:
- x: 15 y: 64 z: 10
block: "minecraft:redstone_lamp"
state: { lit: "false" }
- name: "A=ON, B=ON → 出力=ON"
setup:
blocks_file: "./and_gate.json"
steps:
- action: interact_block
x: 10 y: 64 z: 10
target_state: { powered: "true" }
- action: interact_block
x: 12 y: 64 z: 10
target_state: { powered: "true" }
- action: wait
ms: 200
assert:
- x: 15 y: 64 z: 10
block: "minecraft:redstone_lamp"
state: { lit: "true" }
=== テスト結果 ===
ファイル: and_gate_test.yaml
✅ A=OFF, B=OFF → 出力=OFF
✅ A=ON, B=ON → 出力=ON
2件中 2件合格 (失敗: 0件, エラー: 0件)
❌ A=ON, B=ON → 出力=ON
アサーション失敗: (15, 64, 10)
期待 block: minecraft:redstone_lamp
期待 state.lit: true
実際 block: minecraft:redstone_lamp
実際 state.lit: false
理由: ブロック状態が一致しません
redstone_ai/temp/ 内の適切なサブディレクトリ(例: temp/{name}_{datetime}/)に保存するか、回路JSONと同じディレクトリに置くのが推奨です。setup.blocks_file には place-blocks コマンドで使用するのと同じ PlaceRequest 形式のJSON(単一オブジェクトまたはフェーズ配列)を指定できます。wait の時間の目安: リピーター1段 ≒ 50〜100ms、複数段の場合は段数 × 100ms 程度が安全です。1 になります(CI/CD連携に利用可能)。