【マイクラ統合版】カスタムコマンドを「名前空間」なしで登録・実行する方法【ScriptAPI】

はじめに

マインクラフト統合版には、ScriptAPIを用いたカスタムコマンド(CustomCommand)システムが存在します。下の画像のように、完全にオリジナルのコマンドを定義してゲーム内で呼び出せるシステムのことですね:

Character
だいぶできることが増えて楽しい

オリジナルコマンドそのものの概要や作り方については、以下の記事を参考にしてください。本記事では割愛します:

「名前空間」という障壁

さて、このカスタムコマンドの名前ですが、上記の記事で説明している通り「名前空間」というものが必須です。例えば上記の画像の例でいうなら「lq:test」の「lq」の部分ですね。これはコマンド同士の重複・干渉を防ぐために不可欠である一方で、配布ワールド・アドオン等でカスタムコマンドを定義しようという場合、少々厄介な仕様です。

Character
入力事項がその分増えるということだもんね

しかしながら実は、公式では説明されていないのですが、Minecraft統合版において「名前空間」なしのカスタムコマンドを定義することは一応可能です。本記事では、その方法について説明していきます。

YouTube動画

本記事の内容について解説したYouTube動画を作成しました。こちらより閲覧可能です:

スクリプト

以下は、名前空間なしのコマンド、「test」を登録する例です:

Copied!
import * as server from "@minecraft/server";

server.system.beforeEvents.startup.subscribe(ev => {
    // 登録したいコマンドの情報を定義
    const namespace = "lq";
    const commandName = "test";
    const commandDescription = "これはテスト用のコマンドです";
    const commandParameters = [
    ];

    // コマンド実行時の処理を関数として定義
    const commandCallback = (origin) => {
        server.system.run(() => {
            const entity = origin.sourceEntity;
            if (!entity) {
                return;
            }
            

            entity.runCommand("say test"); // 具体的な実行処理
        });
    };

    // 名前空間付きの「正式なコマンド」を登録
    ev.customCommandRegistry.registerCommand({
        name: `${namespace}:${commandName}`,
        description: commandDescription,
        permissionLevel: server.CommandPermissionLevel.Any,
        mandatoryParameters: commandParameters,
    }, commandCallback);

    // 名前空間なしのコマンドも登録
    ev.customCommandRegistry.registerCommand({
        name: commandName,
        description: commandDescription,
        permissionLevel: server.CommandPermissionLevel.Any,
        mandatoryParameters: commandParameters,
    }, commandCallback);
});

スクリプトを見ていただくと分かると思うのですが、これは「名前空間付きの正式なコマンド」と、「名前空間のないコマンド」を両方定義・登録し、コマンドの実行処理(commandCallback)を1つにまとめて定義しています。このように定義することで、「名前空間のないコマンド」が実質的な短縮版コマンドとして、それ単体で実行することが可能です。

Character
配布ワールドとかだとよく見るのに解説記事はなぜかない

実行

さて、実際にこのプログラムを保存してマイクラ内で挙動を確認してみましょう:

このように、ゲーム内で名前空間なしのコマンド、「test」が正常に定義されていることが分かるでしょう。このようにしてcommandCallbackをまとめることで簡潔なコマンドを定義することができます。配布ワールドなどを作る際は、こういうものがあると非常に便利だと思います。

  • ちなみに、起動時に何やらエラーが表示されますが問題なく実行できます

おしまい

ということで、本記事では名前空間なしでコマンドを実行する方法について解説してみました。個人的にこのような設定は配布ワールドや配布アドオンなどでよく目にするのですが、なぜか解説している記事がないんですよね。不思議です。

今回解説したスクリプトを使って、友人・コミュニティー内で24時間いつでも遊べるマルチサーバーを構築したい場合は、VPS(レンタルサーバー)の導入が近道です。

私の開発・検証環境では「シンVPS」を使用しています。

シンVPS コントロールパネル画像

以前は自宅PCでホストしていましたが、PCの電源を切り忘れるストレスや、電気代を考慮して移行しました。シンVPSを選んだ決め手は、圧倒的なコストパフォーマンスです。

  • 月額の安さ 4GBプランでも月額1,200円程度(長期契約なら1,000円以下)と維持費が安く済みます。
  • 高速な読み込み 全プランでNVMe SSDを採用しており、ワールドの読み込みや重いコマンド処理でもラグを感じにくいです。
※最低利用期間が3ヶ月からという縛りはありますが、サーバーを長期で安定運用するならむしろ割安になります。

以下のリンクから申し込むと初回利用料金が10%OFFになります。
(1ヶ月以上の契約対象。「安くて速い」サーバーを探している方はぜひ試してみてください)

シンVPS 公式サイトを見てみる
(10%OFF適用)
マルチサーバーの立て方はこちら
最新情報をチェックしよう!