4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめてのアドベントカレンダーAdvent Calendar 2023

Day 4

【Minecraft】worldとplayerdataの移行方法

Posted at

はじめに

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ファイルに上書きする

playerdata/
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 に記載されていることがわかった。
↓こんな感じで書いてある

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に上書きしてみる。

command
cp xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.dat 00000000-0000-0000-0000-000000000000.dat

データの上書きに成功したら、ワールドに接続してみる。

元の装備とアイテムが復活し、最後にマイクラを切断した位置でリスポーンした!!!やったー!建築するぞー!
というわけで、worldとplayerdataの移行が完了✨

まとめ

趣味のゲームとはいえ、色々調べたりサーバで試行錯誤したので記事にしてみました📝
worldとplayerdataは別で移行するというのがわかったので、これからいくらでもマイクラのデータ移行ができるぞ!

playerdataの移行方法は、ググっても「これだ!」っていう情報があんまりなかったので、誰かの役に立つといいな💁‍♀️🍣

参考文献

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?