はじめに
MOD制作をしていると、たまに突き当たる壁があります。それは、
「○○をしたいけど、どんなスクリプトを書けばいいか分からない」
というもの。簡単なアイテムやブロックを追加するようなある程度形式化スクリプトならいいのですが、そうではないものの、割と頻繁に使われるスクリプトというのはあると思います。
本記事では、MOD制作においてよく使われる関数、具体的には以下の2点をまとめてみたいと思います。
- コマンドの実行
- メッセージの表示
なお、本ページのスクリプトは1.20.1を前提とします。その他のバージョンでの動作は保証しないのでご了承ください。
コマンドの実行
頻繁に使われるスクリプトの代表例、コマンドの実行。
以下は、Playerクラスの変数と実行したいコマンド(String)があることを前提に、指定のコマンドを実行する例です。事前に、
if(!event.getEntity().level().isClientSide){
// 処理
}
などの形で、サーバーサイドでの実行を判定しておくことをお勧めします。
ServerPlayer serverPlayer = (ServerPlayer) player;
MinecraftServer server = serverPlayer.getServer();
CommandSourceStack source = serverPlayer.createCommandSourceStack();
String command = "say Hello World";
CommandDispatcher<CommandSourceStack> dispatcher = server.getCommands().getDispatcher();
ParseResults<CommandSourceStack> parseResults = dispatcher.parse(command, source);
server.getCommands().performCommand(parseResults, command);
上記のString型の変数”command”にてコマンドの内容を定義しています。マインクラフトのコマンドシステムは非常に優秀ですので、このスクリプトは大きな汎用性を持つものと思われます。
ここで必要になる変数playerは前述の通りPlayerクラスである必要があります。本スクリプトでは、それをServerPlayerクラスとし、サーバー側で処理を行っています。
文字の表示
続いて、何らかの文字をアクションバーに表示するスクリプトを示します:
ServerPlayer serverPlayer = (ServerPlayer) player;
Component message = Component.literal("ここに表示したい文字");
ClientboundSetActionBarTextPacket packet = new ClientboundSetActionBarTextPacket(message);
serverPlayer.connection.send(packet);
先と同様に、サーバーサイドでの実行を確認しておきましょう。
「文字を表示」というのは一見すると地味なスクリプトですが、デバックや動作確認などいろいろな場面で重宝すると思います。上記のコマンドでもtitleコマンドやsayコマンドで可能ですが、余計なことをせずにシンプルにアクションバーに表示したい場合、このようにパケットを直接送信する方法がとり得ます。
他にもあるかもしれませんが、見つけ次第加筆します。何かあればコメントください。