【Minecraft 26.3】mod用にコマンドを登録する

この記事はMinecraft NeoForge 26.3に対応しています。

お疲れ様です。dnyrです。MinecraftのModを開発するうえでデバッグでもユーザー向けでもコマンドは非常に便利なので簡単に登録できる状態にしておく必要があります。

というわけでNeoForgeで自分のmodのコマンドを登録してみます。

クラスを作成する

まずはコマンドを登録するためのクラスを作成します。

public class CommandRegistrationHandler()
{

}

のようなクラスを作成します。インスタンスが作成されないようにコンストラクタはPrivateにしておきます。

public static void onRegisterCommad(RegisterCommandsEvent inEvent)
{

}

こんか感じの関数を作り、ここで各種コマンド登録の関数を呼ぶ形にします。 この関数自体はModのメインクラスで呼びだします。

NeoForge.EVENT_BUS.addListener(CommandRegistrationHandler::onRegisterCommand);

コマンドを作成する

では実際にコマンドを作成してみます。 〇〇Command的なクラスを作成します。中身は

    public static void register(CommandDispatcher<CommandSourceStack> inDispatcher)
    {
        inDispatcher.register(Commands.literal(SampleMod.MODID)
            .then(Commands.literal("mode").requires(Commands.hasPermission(Commands.LEVEL_GAMEMASTERS))
                .then(Commands.literal("get").executes(ModeCommand::getMode))
                .then(Commands.literal("set")
                    .then(Commands.literal("normal").executes(context -> setMode(context, Mode.NORMAL)))
                    .then(Commands.literal("super").executes(context -> setMode(context, Mode.SUPER)))
                    .then(Commands.literal("hyper").executes(context -> setMode(context, Mode.HYPER))))
                .then(Commands.literal("toggle").executes(ModeCommand::toggleMode))
        ));
    }

こんな感じでコマンドを登録します。

MODID mode get

などが実際のコマンドになります。