レベルアップコマンドの拡張
- 今作っているコマンドは、固定値なので不便(確かに )
まずは、名前の変更。
public class SetLevelCommand implements CommandExecutor
名前を変えるときは、クラス名のところを右クリックして、「リファクタリング → 名前の変更」をするとファイル名も一緒に変更できる。
(これをしないとエラーが出て、ファイル名も別個に書き換えなければいけなくなるので手間となる。)
ここで設定レベルを任意にするために
args = 引数
を使う。
(これは、配列になっているので、argsに入ってくる数というのは複数になる事もできるが、ここでは一個だけとする。)
つづいて、コードを書いていきます。
if (args.length == 1){
}
「もし、argaの長さが1ならば、(1でなければ何もしないということでもある)」
player.setLevel(Integer.parseInt(args[0]));
を中にいれるが
Integer.parseIntは、もし列を数字に変えている。
全体としては
if(sender instanceof Player player) {
if (args.length == 1){
player.setLevel(Integer.parseInt(args[0]));
}
これは、
- 引数の数が1個であると想定している
- 引数が一個のときに文字列を数字型に変更して、最初は0
(プログラミングでは一個目の要素は0から始めるので[0]となる。)
そして次のコードとして
else {
player.sendMessage("ArgumentsException");
}
を入力。
「長さが1個以上の場合は、playerにメッセージを送る。」
ArgumentsException = 数がおかしいという意味。
しかし、
}else {
player.sendMessage("Nooooooooo!!");
}
に変更。
ここで、他のファイルも変更を加えていく
Mainファイルに移動して
getCommand("levelup").setExecutor(new LevelUpCommand());
を変更
getCommand("setLevel").setExecutor(new LevelUpCommand());
へ、そして、plugin.yml二移動して(Mainファイルの下のresourseの中にある)
commands:
levelup:
を
commands:
setLevel:
へ変更。
しかし、ここでbuildしようとするとエラーが出た!!
getCommand("setLevel").setExecutor(new LevelUpCommand());
^
シンボル: クラス LevelUpCommand
場所: クラス Main
LevelUpCommandが見つかりませんと言われているようなので、
ここで
getCommand("setLevel").setExecutor(new SetLevelCommand());
に変更するとエラーが消えました。
すると、buildが完了。
ここで実行すると

そして、ここでlevel10にしようとしたら

エラーとなった
原因としては、「setlevel」のあとにスペースがないことだったので、スペースを入れたら入力できた。
結果として
引数をコマンドに対して送ることによって、様々な処理を拡張することができるようになる

コメント