【1.20.1対応】KubeJSイベント作成&エラー修正編:AIを使った自動生成とデバッグの極意

KubeJS

「AIにKubeJSのコードを書いてもらったのに、いざマイクラに入れてみたら赤文字のエラーが…」「エラーすら出ないのに全然動かない…」 Mod環境を作っていて、そんな絶望を味わったことはありませんか?

この記事では、KubeJSを使った「オリジナルイベントの作り方」と、AIを活用した「最強のエラー修正・デバッグ術」を徹底解説します!

今回は実践編として、矢を当てた周囲の敵を壁越しに透かして表示する超実用的なギミック「索敵アロー」を一緒に作りながら、エラーを乗り越える超リアルな手順を学んでいきましょう。もちろん、最後にコピペ一発で遊べる完成版コードもご用意しています!

(※KubeJSの導入方法がまだの方はこちらの記事からどうぞ👇)

【1.20.1対応】ConoHa VPSでマイクラ独自環境を作るMOD!KubeJS・MoreJS・LootJS導入完全ガイド
1. はじめに:KubeJSを駆使してマイクラを「独自環境」に魔改造する2. マルチプレイで独自環境を楽しむなら「ConoHa VPS」一択な理由3. ConoHa VPSでマイクラサーバーを立ち上げる3ステップ4. サーバーにKubeJS…

【重要】当サイトの動作確認環境

マイクラのModは、バージョンが少し違うだけでコードが動かなくなることがよくあります。この記事のスクリプトは、以下の環境で動作確認を行っています。

  • Minecraftバージョン: 1.20.1
  • 前提Mod: Forge
  • 使用Mod: KubeJS
  • 環境: ConoHa VPS

1. AIへの指示は「変数化」が命!

イベント作りは「AIに指示を出す ➔ 動かしてみる ➔ 修正する」の繰り返しです。まずはAIにベースとなるコードを作らせますが、ここで絶対に覚えておきたいプロンプト(指示)の極意があります。

▼ AIへのプロンプト例

KubeJS(1.20.1)の server_scripts 用コードを書いてください。

・エンティティに矢(minecraft:arrow)が当たった時に発動。

・当たった対象の周囲10ブロック以内にいるすべてのモンスターに、10秒間「発光」エフェクトを付与する。

※範囲(10.0)や時間(200)などの数値は、後から調整しやすいようコードの一番上で変数(const)として定義してください。

この一言を添えるだけで、後から「範囲を広げたい」と思った時、コードの中から数字を探し回る手間が省けます。

2. エラー発生!慌てず「latest.log」をAIに丸投げしよう

AIが出したコードをサーバーに入れても、チャット欄に赤文字でエラーが出ることがあります。

ここで「英語のエラー文を読んで原因を考える」必要は一切ありません! サーバーの logs フォルダにある latest.log を開き、エラーが起きた時間帯のテキストをガサッとコピーして、そのままAIに丸投げしてください。

▼ 修正依頼プロンプト

矢を当てるとエラーが出て動きませんでした。以下のログファイルから原因を特定し、修正したコードを出力してください。

(ここにlatest.logのテキストをドーンと貼り付ける)

AIが「あ、1.20.1ではこの書き方でしたね!」と自分の間違いに気づき、修正版を出してくれます。

3. エラーが出ない!?最強の「デバッグログ」戦術

丸投げでエラーは消えたのに、「エラーは出ないけど全く動かない」という一番厄介な現象が起きることがあります。 そんな時は、ゲーム内で処理がどこまで進んでいるかを確認するデバッグログ(console.info)をコードに仕込みます。

console.info("[索敵アロー] 命中しました!");

これをコードに挟むことで、ゲーム内のコンソールやログに文字が出力され、どこで処理が止まっているかを一発で特定できるようになります。

4. 🏹 「索敵アロー」完成版スクリプト

AIとのデバッグを終えた完璧なコードがこちらです。 FTPソフト等でサーバーに接続し、kubejs ➔ server_scripts フォルダの中に、新しく tactical_arrow.js というファイルを作成して、以下のコードをそのままコピペして貼り付けてください。

JavaScript

// ==========================================
// 🏹 タクティカル索敵アロー
// ==========================================

// ⚙️ 設定値(一番上で変数にしておくと、後から改造しやすい!)
const SEARCH_RADIUS = 10.0; // 索敵範囲(ブロック)
const GLOW_DURATION = 200;  // 発光エフェクトの時間(20ティック=1秒)

EntityEvents.hurt(event => {
    const { entity, source, level } = event;

    if (source.immediate && source.immediate.type === 'minecraft:arrow') {
        
        // ▼ デバッグ用:条件をクリアしたかログで確認する
        console.info(`[索敵アロー] ${entity.type} に命中!周囲の索敵を開始します。`);

        let aabb = AABB.of(
            entity.x - SEARCH_RADIUS, entity.y - SEARCH_RADIUS, entity.z - SEARCH_RADIUS,
            entity.x + SEARCH_RADIUS, entity.y + SEARCH_RADIUS, entity.z + SEARCH_RADIUS
        );
        
        let nearbyEntities = level.getEntitiesWithin(aabb);
        
        nearbyEntities.forEach(target => {
            if (target.isLiving() && target.isMonster()) {
                console.info(`[索敵アロー] モンスター発見: ${target.type} に発光エフェクトを付与`);
                target.potionEffects.add('minecraft:glowing', GLOW_DURATION);
            }
        });
    }
});

サーバー上のファイルを保存したら、OP権限を持った状態でマイクラのチャット欄を開き、以下のコマンドを実行するだけで即座に反映されます。

/reload

5. 【おまけの解説】AIがハマる罠と、こだわりの工夫

今回のコードを完成させるにあたり、AIが必ず引っかかるマイクラ特有の罠を2つ修正しています。プログラミングに興味がある方は読んでみてください!

  • 1.20.1の罠「矢の判定方法」以前のバージョンでは source.type === 'arrow' だけで矢を判定できましたが、1.20では仕様が変わり「直接ぶつかった物体(immediate)」のIDを調べる必要があります。これをAIに気づかせるため、デバッグログで「手で殴るとプレイヤー、弓なら矢」というデータを取って修正しました。
  • アイテムにエフェクトをかけてクラッシュ!?コード内の target.isLiving() && target.isMonster() の部分。AIに書かせると大抵 isMonster() だけで出力してきますが、これだと「範囲内に落ちているアイテム」や「飛んでいる矢」にまでエフェクトをかけようとして、マイクラが確実にクラッシュします。先に「生きているモブか?(isLiving)」を確認するのがこだわりの工夫です!

▼ 安定したマイクラサーバー構築ならこの環境! ▼ こだわりのMod環境やドッキリギミックを安定して動かすなら、当ブログでも使っているConoHa VPSが一番手軽で確実です。設定ファイルの編集も簡単に行えるので、ぜひ皆さんも最高の独自ワールドを構築してみてくださいね!

コメント

タイトルとURLをコピーしました