はじめに
Qiitaでは初投稿、_yamipiです。
超適当にコマンド勢がプラグイン(Kotlin)に触れるとどうなるか、容易く乗り換えてはいけない理由をお話しします。
※ここではコマンドってなんぞや、プラグイン(Kotlin)ってなんぞやという人のための解説は残念ながらございません。
結論
前置きがとくに思いつかなったので結論から。コマンドと同じ感覚では一切通用しないです。
これに関しては見てもらった方が早いです。
以下はどちらも、全プレイヤーにメッセージを送信し、音を鳴らします。上がmcfunction、下がKotlinです
tellraw @a "test"
execute as @a at @s run playsound minecraft:ui.button.click master @s
Bukkit.getOnlinePlayers().forEach { player ->
player.sendMessage("test")
player.playSound(player,"minecraft.ui.button.click",1.0f,1.0f)
}
Kotlinまだ初心者なのでこんなもんしか書けません。
見てわかる通り、結構行数が増えちゃいます。コマンドはただのゲーム内での話ですが、プラグインとなるとやはり外部の言語に頼ることとなるので仕方ないといえば仕方ないですが。
僕はリアルでプログラミング言語に触れる機会がなんだかんだあるので、まだなんとか喰らいついていけてます。
ところで、Skriptなんてものがありますね。あれはどちらかといえばプラグインよりなわけですが、簡単な英語なのでコマンド勢がプラグイン開発する上で最初にすべきことはSkript習得だと思います。僕はほとんど齧らずKotlinに触れているわけですが。
とりあえずプラグイン開発に着手したいなと思ったらSkriptを最初にすべき、だと思います
以下はなんか細かいこと言ってるだけなのでもうお腹一杯の方はブラウザバッグしていただいて結構です。
コマンドとプラグインの違い
コマンド
・手軽
・(完成品の)導入が容易
・プレイヤーのnbt書き換えができない
・機能を盛り込むと動作が重くなりがち
・ちょっとバージョン上下するとすぐ使えなくなる(互換性が低い)
・外部のAPIなんてものはない
プラグイン
・(上手く使えれば)高クオリティなものが作れる
・バージョンの上下に影響されずらい
・イベント検知が豊富
・環境構築が面倒
・今なにかいてるのかさっぱりわかんない
・外部のAPIが充実している(使用できる)
コマンドは全体的にみれば簡単で気軽に始められる印象、プラグインは最初大変だけど後はとても簡単で高品質、という印象。Skriptは中間のいいとこどりをしています。いいご身分です。
プラグインに触れてちょっと困ったこと
もともとデータパックの人間です。困ったことぐらいあってもおかしくありません。ということで。
その1 - 変数の感覚が謎
コマンドで言う変数は、scoreboardのことを指す(そうでないことが超低確率であるが)プラグインでいう変数とは、クラス内共通の変数(?理解しきっていない?)というもので、言えばダミープレイヤーのscoreboardみたいなものであるということ。
これ慣れるまで結構時間がかかりました。ついでに、プレイヤー各々に与えられる変数は特殊な宣言が必要らしく、勉強中です。
その2 - コンフィグファイルとかいうやつ
コマンド勢からしたら、誰???と言わんばかりの存在。どうやら一部分をそのコンフィグから取り出して使用できるらしく、最近実装された動的functionみたいだなーと思っている。コンフィグファイル、最初は理解に苦しんだが使いこなせれば非常に便利。
その3 - 変数を操作
今となっては当たり前、前は理解すらできなかった。nbtの書き換えを行ってるようなもの。しかしメッセージを送るのも音を鳴らすのもすべて操作に含まれて言われるようで、理解に苦しんだ。
その4 - 軽量化
データパック作ってるときは結構軽量化を意識して作ってました。しかしどういうわけかKotlinになるとそういうの一切意識できないんですよ。ほんとに。
こんなものでしょうか。
おわりに
Kotlin初心者のひとりごとなので全然無視していただいて結構。
ただ、コマンドからプラグインやるときはSkriptっていう段階を踏んだ方がいいよ~っていう、そういうお話でした。
なんで今更プラグインを? (宣伝)
最初はもちろんプラグインなど触れる予定は一切ありませんでした
しかし現在開発部としてやらせてもらってるサーバーに参加したところ、プラグイン学んでほしいと言われ、今に至ります。プラグイン嫌いじゃないけど、まぁ使いこなすのは数年先の話になるでしょうね。
その前に学校でC言語の授業が始まったりするので...
それでは。