こんにちは
私は先日、CommandBlockScopesのv1.2をリリースしました。
具体的なアップデート内容は、いくつかのコマンドの追加とOriginalFormatです。
OriginalFormatは、CommandBlockScopes独自のレジストリフォーマットです。
この記事では独自のフォーマットを実装するためのコードを雑に書いておきます。
1. ファイル作成
ファイル作成には、java.io.Fileクラスを使いました。
プラグインのデータフォルダーはplugin.getDataFolder()
を使用して取得できるみたいです。
package hoge.hoge.originalFormatTest;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.text.MessageFormat;
import java.util.HashMap;
class OriginalFormat {
private final Path path;
public OriginalFormat(JavaPlugin plugin) {
// コンストラクタ
// プラグインからデータフォルダーを取得
path = Paths.get(plugin.getDataFolder().toString(), "data.txt");
// 親ディレクトリを作成
File file = path.toFile();
file.getParentFile().mkdirs();
// 初回起動時は新しく作る
if (!file.exists()) file.createNewFile();
}
}
2. 書き込みメソッド
書き込みにはjava.nio.file.Filesを使いました。FileWriterを使う方法等もあるかもしれませんが、この記事ではFilesを使います。
// ~省略~
class OriginalFormat {
// ~省略~
public void set(String key, String value) throws IOException {
// 末尾に追加する
Files.writeString(path, MessageFormat.format("{0},{1}\n", key, value), StandardOpenOption.APPEND, StandardOpenOption.CREATE);
}
}
3. 読み込みメソッド
書き込みとAPIを使いました。
// ~省略~
class OriginalFormat {
// ~省略~
public HashMap<String> getAll() throws IOException {
var result = new HashMap<String>()
// 1行ごとにループ
for (String line : Files.readAllLines(path)) {
var s = line.split(",");
if (s.length != 2) continue; // 正しいフォーマットの行以外は除外
result.put(s[0], s[1]);
}
return result;
}
public String get(String key) throws IOException {
return getAll().get(key);
}
}