石橋を叩いて壊すページ

プレイヤーのデータを退避するPlayerStateをちょっと修正

以前の記事で、プレイヤーのデータを一時的に退避し、復元する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

この記事を評価

この記事にコメント

  1. ...

【この記事にコメント】
お名前:
コメント:

Menu