はじめに
Minecraftのworldを別のサーバに移行したときに、「え、playerdataがない・・・!」 ってなった かつ 調べてもあんまり情報がでてこなかったので備忘録🤓
(友達みんなと今更マイクラにハマっているのであった・・・)
Minecraft Serverの基本情報
まずマイクラフトのデータ移行にあたって理解しておくべき、ディレクトリ構成やファイルの内容( ..)φメモメモ
環境構成
- Ubuntu 22.04.3 LTS
- Java版 ver 1.20.4
Minecraft Serverのディレクトリ構成
↓がサーバーのディレクトリ構成
他にもいろいろファイルはあるけど、移行で使ったところだけ記載
- /opt/minecraft_server/
- logs
- yyyy-mm-dd-x.log.gz
- ...
- server.properties
- usercache.json
- world/
- playerdata/
- xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx.dat
- ...
各ファイルの解説
-
logs
: クライアントが接続失敗したときとかに見るログ -
server.properties
: マイクラサーバーの難易度・Seed値とかの設定ファイル -
usercache.json
: playerのUUIDが書いてあるファイル -
world
: マイクラのワールドデータ -
playerdata
:各プレイヤーの装備・インベントリ・最後に切断した位置を保持しているファイル
↑このへんは調べたら、いろんなサイトで出てくる!!📚
worldの移行でやったこと
- 移行元のworldをローカル環境にダウンロード
- worldをzip圧縮
-
WinSCPでローカル → 移行先サーバの
/opt/minecraft_server/
にworld.zipを転送 - 転送したzipファイル解凍
なんかちょっと前にこういう仕事してた気がするな・・・と複雑な気持ちと懐かしさを感じながら作業😂
移行で詰まったところ
よっしゃワールドのデータは移行したぞー!いざ、接続~!!...と思ったら色々問題発生💣
問題①: Connection Refused でワールドに接続できない
問題②: ワールド接続後、装備やらアイテムやらが何もない
問題①: Connection Refused でワールドに接続できない
まずは、そもそもワールドに接続できない問題である。
なんでよ~😿
原因
色々見てみたらworldフォルダの所有者が違うために、ファイルの読み書き・実行できていないことがわかった。
解決方法
world/*
の所有者をminecraft
にする
chown -R minecraft:minecraft ./world/*
実際にやったこと
まずは/opt/minecraft_server/logs
の最新ファイルを見てみた。
(ちなみにgzipで圧縮されているので gunzip yyyy-mm-dd-x.log.gz
で解凍)
なんかエラーでてる
[Server console handler/ERROR]: Exception handling console input
java.io.IOException: Input/output error
もしかして・・・!と思って ls -l /opt/minecraft_server/
でフォルダの所有者の情報をみてみた
-rw-r--r-- 1 minecraft minecraft 1234 Dec 16 02:06 server.properties
drwxr-xr-x 12 user user 1234 Dec 16 16:38 world
おーやっぱり、所有者他のファイルと違う!となったので、所有者をminecraft
に変更
chown -R minecraft:minecraft ./world/
接続してみる・・・
ワールド接続成功!!!やったー!これで始められるぞー!!
....と思ったら、次の問題が発生。
問題②: ワールド接続後、装備やらアイテムやらが何もない
座標 0 にリスポーンするし、装備も持ち物も何にもないじゃん😤どうして~~
原因
移行元のサーバと移行先のサーバでユーザーの識別子が異なるため、playerdataが復元できていない。
解決方法
移行元のplayerdata(datファイル)を移行先のdatファイルに上書きする
cp {移行元サーバのUUID}.dat {移行先サーバのUUID}.dat
実際にやったこと
色々調べてみて、各プレイヤーのデータは、/opt/minecraft_server/world/playerdata
に格納されていることがわかった。
playerdata配下には、こんな感じでdatファイルが複数ある。
そしてどうやらdatファイルのファイル名は、{プレイヤーのUUID}.dat
になっているらしい。
00000000-0000-0000-0000-00000000000.dat
00000000-0000-0000-0000-00000000000.dat_old
11111111-1111-1111-1111-111111111111.dat
11111111-1111-1111-1111-111111111111.dat_old
UUIDはどこで調べられるかというとusercache.json
に記載されていることがわかった。
↓こんな感じで書いてある
[
{
"name":"player1",
"uuid":"00000000-0000-0000-0000-000000000000",
"expiresOn":"2024-01-16 15:43:09 +0900"
},
{
"name":"player2",
"uuid":"11111111-1111-1111-1111-111111111111",
"expiresOn":"2024-01-16 15:34:45 +0900"
},
{ ... }
]
ここで移行元サーバの自分のUUIDを調べてみた
{
"name":"player1",
"uuid":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
...
}
ほーん、移行先サーバの自分のUUID と 移行元サーバのUUIDが違うからユーザーデータが復元されないのね🤔
そこで、playerdataを{移行元サーバの自分のUUID}.dat
→{移行先サーバの自分のUUID}.dat
に上書きしてみる。
cp xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.dat 00000000-0000-0000-0000-000000000000.dat
データの上書きに成功したら、ワールドに接続してみる。
元の装備とアイテムが復活し、最後にマイクラを切断した位置でリスポーンした!!!やったー!建築するぞー!
というわけで、worldとplayerdataの移行が完了✨
まとめ
趣味のゲームとはいえ、色々調べたりサーバで試行錯誤したので記事にしてみました📝
worldとplayerdataは別で移行するというのがわかったので、これからいくらでもマイクラのデータ移行ができるぞ!
playerdataの移行方法は、ググっても「これだ!」っていう情報があんまりなかったので、誰かの役に立つといいな💁♀️🍣
参考文献