プレイヤーのデータを退避するPlayerStateをちょっと修正
[マインクラフト] [2014/07/26 19:47]
以前の記事で、プレイヤーのデータを一時的に退避し、復元するPlayerStateクラスを作ったけど
久しぶりに動かしてみたら動かなかったので、動くように動作を修正。
修正版:PlayerState.java
主な変更点として、プレイヤーのデータを保存しているファイルのパスが変わったようなので対応。
以前の記事を書いたときは、プレイヤーデータは「基本ワールドのフォルダ/players/プレイヤー名.dat」だった。
しかしV1.7.9beta(git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks (MC: 1.7.9))では、
「基本ワールドのフォルダ/playerdata/プレイヤーのUUID.dat」になっている。
ちなみにUUIDというのは、まあ要するにすべてのエンティティについているID。
UUIDを得るには、EntityクラスのgetUniqueId()を叩けばいい。
このUUIDはマインクラフトのセーブデータに記録されるため、サーバーを再起動しても同じエンティティは同じUUIDをもち、村人やMOBを一意に識別するのに使える。
あと、これはマインクラフトの話ではないけど、OSによってパスの区切り文字が違う(Win系は\、Linux系は/)のを忘れていたので
この辺を妥当になるように、あわせて以下のように変更した。
// データファイルを退避フォルダにコピー 前:fileName = "/" + player.getName() + ".dat"; 後:fileName=File.separator + player.getUniqueId() + ".dat";
なおソースコード以外に、退避したデータを戻すためにバッチファイルに書いておくパスも、同様に修正が必要。
::退避したユーザーデータがあれば元の位置に戻す(Windowsの場合) 前:move /y plugins\プラグイン名\reserve\*.dat world\players 後:move /y plugins\プラグイン名\reserve\*.dat world\playerdata
この記事を評価
この記事にコメント
- ...