概要
- 設定ファイル = プロパティーファイルともいわれる。
- 設定値を読み込んで便利に使いたいときに設定ファイルを利用する。
- いろんなバリエーションがあるので、こんな事があるというのを知っておく。
コード実装
まず、決まり事があり、最初にプラグインが読み込まれたとき動く「Main」クラスの
@Override
public void onEnable() {
Bukkit.getPluginManager().registerEvents(this, this);
getCommand("setLevel").setExecutor(new SetLevelCommand());
getCommand("allSetLevel").setExecutor(new AllSetLevelCommand());
}
の中の
public void onEnable() {
の下の部分に
saveDefaultConfig();
を挿入。
これをいれるとコンフィグファイルが生成される。
ここで、
左のサイドバーにある「resourses」を右クリックして、新規→ファイルで「config.yml」という名前のファイルを作る。
ここまでの部分は、決まり事として考えておく。(あまり深く考えない!!)
そこで設定値を決めるために、config.ymlの中に
Message: "実行できません。"
を入力。(コロンの横にはスペースがないと文字列が緑になりません)
そして、Mainクラスに戻り
saveDefaultConfig();
の下に
getConfig().getString("Message");
を入力する。
これを書くことにより、config.ymlファイルの中身を取得することができる。
しかし、これをしても、Mainクラスでは、JavaPluginを継承しているので使えるが、「SetLevelCommand」クラスは、「CommandExecutor」を実装しているだけなので、「getConfig();」とうメソッドがない!!
そこで、使えないので
getConfig().getString("Message");
を消して、「SetLevelCommand」のクラスに、Mainクラスの機能をつけえるように渡してあげる。
そこで、
public class SetLevelCommand implements CommandExecutor {
の下に
private Main main;
を入力し、(これをフィールドをもつという!)
この状態でエンターで2段ぐらい下がり、右クリック→生成→コンストラクターOKとすると
public class SetLevelCommand implements CommandExecutor {
private Main main;
public SetLevelCommand(Main main) {
this.main = main;
}
となる。
これをコンストラクターを定義するという。
しかし、このコンストラクターは隠れているだけで、本当は書かれいる(定義するときだけ入力する)
(隠れているコンストラクターをデフォルトコンストラクターという)
ここでエラーとなっているのは、
コンストラクターを定義して、引数にMainを受け取るようにしたので、「setLevelCommand」というクラスに基づいてなにか作るとき(インスタンスをnewするとき)「new SetLevelCommand()のこと」は、new SetLevelCommand()の引数にもMainがいると警告している。
ここで、ちょっとした解説:コンストラクターは複数作れる。
そこで、Mainに引数を渡すために、Mainクラスに
getCommand("setLevel").setExecutor(new SetLevelCommand(this));
を入力。
this = 自分
これで、Mainクラスをもった「setLevelCommand」というものが作れるようになったことになる。
これにより、メソッドがなかったが、「setLevelCommand」の中に
player.sendMessage("Nooooooooo!!");
であったところに
player.sendMessage(main.getConfig().getString("Message"));
というものが入力できるようになる。
ここで、buildすると、プラグインファイルの中にPluginMetricsというファイルが生成され、「config.yml」が中に作られる。
実行

ここでは ,成功!!
しかし、ここで問題発生!!
次に進もうと思い教材の画像どおり、
生成された「config.yml」をそのまま開くと、なんともおかしなVSコードで開いてしまい、エラーと理由のわからない表示となってしまった。
そこで、教材画像を見てみると「Sublime.Text.app」で開いていることが分かる。
しかし、そんなアプリが入っていないので、調べてみると「Sublime.Text.app公式サイト」があり、そこで「Sublime.Text.app」をダウンロードして、そのアプリで開いてみると

出ました〜!!
コメント