Visual StudioでMinecraft Mod開発

Visual StudioでMinecraft Modが開発できるらしい。
Minecraft Mod Developer Pack

Minecraft Mod

ModとはModificationの略で要はPCゲームの改造である。Minecraftは家庭用ゲーム機のソフトとしても提供されているが、PC向け以外のMinecraftのModは聞いたことがない。

Minecraft Modには以前から興味があったが何から調べて良いのかわからず今に至る。公式のMod APIは以前から検討はされているが、現時点のMinecraft Modの仕組みはユーザ有志によって作られている。

Minecraftはスキン用のサーバあるくらいで、ゲーム内で課金もなければ、ユーザごとに閉じたワールドを生成して遊ぶため各ユーザが自分のMinecraftを改造したところで開発元やワールドを共有していない他のユーザに迷惑になることがなく、開発元のMojangもそこまで厳しく禁止してこなかったのが現状だと思われる。そんな中、Minecraftの開発元であるMojangを買収したMicrosoftが開発ツールを提供したというのは半分公式と受け取れなくもない。

Minecraft Modには描画を軽くするOptiFine HDや、3D表現をよりリアルにする影Modのような描画系のユーティリティMod、木をまとめて採集する木こりModのような機能的なユーティリティMod、竹Modのような建築材料を増やすMod、機能的なアイテムを追加する工業化Mod黄昏の森のような敵キャラやワールド生成時にダンジョンを追加するModなど沢山の種類がある。複数のModを組み合わせて遊ぶユーザも少なくない。

複数のModを簡単に適応させるため Minecraft Forge というツールがある。他にもMod Loaderなど似た仕組みを提供するツールもあったが最近はForgeの1強になりつつある。ForgeはMinecraft本体を改造し、modsディレクトリに各Modのファイルを配置するだけで起動時に読み込まれるというModである。従ってMinecraft Modを作って配布する場合は、Minecraft本体を改造するよりも、Forgeで読み込める形のModを作るのが汎用的である。

PC版のMinecraftはJavaで実装されており、ModもJavaで書くことになる。公式なMod APIがないこともあり、こういった改造はMinecraft本体のバージョンが上がると互換性がなくなって各Modの開発者はMinecraftのバージョンアップに伴い修正してリリースしている。継続的に開発する情熱がないとなかなか手をだすのが難しいし、技術的に互換性を保つのが難しくなり更新が止まってしまうModもある。

と、Modを使う側としてこれくらいは知っていたが作ったことがないのでそれ以上の知識もない。

Visual Studio Minecraft Mod Developer Pack

Visual Studio Minecraft Mod Developer PackはVisual StudioにMinecraft Modを開発できるようにするプラグインで、必要な環境は以下のようになっている。

  • Visual Studio (2013 Update 4 or 2015 RC or newer)
  • Java SE Development Kit (JDK) for Windows x64

Visual Studio 2015は個人の開発者向けにProfessional相当が無料で提供されることになっているのだが、まだ正式版が出ていなかったので今回はVisual Studio 2013の無料版であるVisual Studio Community 2013 Update 4をインストールすることにした。10GBもあってHDDが辛い。

しかし、以下の順番でインストールしたせいか上手く反映されなかった。

  1. Visual Studio Community 2013 Update 4
  2. JDK 8 Windows x64
  3. Minecraft Mod Developer Pack

Visual Studioを起動しても新規プロジェクトの作成でJavaのプロジェクトが一覧に表示されなかった。とりあえず困ったときのWindows再起動をしたら、Javaのプロジェクトは選べるようになったが、Minecraft Modプロジェクトは表示されなかった。この状態でもう一回、Minecraft Mod Developer Packをインストールしたところ「既にインストールされている」と怒られたがMinecraft Modプロジェクトを選べるようになった。よくわからない。そもそもMinecraft Mod関係なくVisual StudioでJavaが書けるとは知らなかった。

プロジェクトを生成するとREADME的なものが表示され

First thing, a provisioning build of your project will start. This will happen automatically after the project is created. This build will take between 5 and 20 minutes depending on your Internet connection. The following builds will only build your source code and will be much faster.

と最初の準備にインターネットの接続で5-20分かかると書いてある。Visual Studioを見ているとGradle Wrapperが動いていてMinecraft本体+Forgeをダウンロードしているっぽい。

Visual StudioからForge適応済みのMinecraftを起動できるのはなかなか便利だと思った。しかし、どういうわけかテンプレートで作成されたModはForgeで認識されておらず初期化処理のブレークポイントも効かなかった。具体的に何か作るものがあったわけではないので詳しくは調べてないけど。

build.gradle

Minecraft Mod Developer Packのプロジェクトテンプレートで作成したプロジェクトは以下のような build.gradle ができていた。graldeのforgeプラグインがあるってわかっただけでも大きい。

buildscript {
    repositories {
        mavenCentral()
        maven {
            name = "forge"
            url = "http://files.minecraftforge.net/maven"
        }
        maven {
            name = "sonatype"
            url = "https://oss.sonatype.org/content/repositories/snapshots/"
        }
    }
    dependencies {
        classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT'
    }
}

apply plugin: 'forge'

version = "1.0"
group= "com.yourname.modid" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "modid"

minecraft {
    version = "1.8-11.14.1.1357"
    runDir = "eclipse"

    // the mappings can be changed at any time, and must be in the following format.
    // snapshot_YYYYMMDD   snapshot are built nightly.
    // stable_#            stables are built at the discretion of the MCP team.
    // Use non-default mappings at your own risk. they may not allways work.
    // simply re-run your setup task after changing the mappings to update your workspace.
    mappings = "snapshot_20141130"
}

dependencies {
    // you may put jars on which you depend on in ./libs
    // or you may define them like so..
    //compile "some.group:artifact:version:classifier"
    //compile "some.group:artifact:version"

    // real examples
    //compile 'com.mod-buildcraft:buildcraft:6.0.8:dev'  // adds buildcraft to the dev env
    //compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env

    // for more info...
    // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
    // http://www.gradle.org/docs/current/userguide/dependency_management.html

}

processResources
{
    // this will ensure that this task is redone when the versions change.
    inputs.property "version", project.version
    inputs.property "mcversion", project.minecraft.version

    // replace stuff in mcmod.info, nothing else
    from(sourceSets.main.resources.srcDirs) {
        include 'mcmod.info'

        // replace version and mcversion
        expand 'version':project.version, 'mcversion':project.minecraft.version
    }

    // copy everything else, thats not the mcmod.info
    from(sourceSets.main.resources.srcDirs) {
        exclude 'mcmod.info'
    }
}

まとめ

Minecraft Modの開発のために10GB近いIDEをインストールするのは少しオーバースペックな気もするが、何から始めてよいかわからない場合にこういった開発環境があるというのは大きい。

Objective-CやXcodeをみんなが使い始めたのはそれらが他のプログラミング言語やIDEと比べて優れていたからではなくてiPhoneアプリの開発がそれでできたからという側面の方が大きいと思う。だからMinecraft Modの開発ができるからという理由でVisual Studioを使い始める人がいてもおかしくない。

俺は使わないけどな。

Windowsで開発する気がさらさらなく型落ちしたWindows PCしか持っていない。Visual Studio 2010までは趣味の開発で購入していたがここ数年は起動すらしていなかった。

gradleでビルドできるなら普通にMac OS XでIntelliJ IDEAを使って開発できるんだと思う。作りたいもの思いついたら調べる。

Raspberry Piではじめるどきどきプログラミング

という本を買っていた。雪なのでAmazon控えをしていたのに、予約していたためこの本が週末に発送されてしまった。申し訳。

Raspberry Piではじめるどきどきプログラミング

全ページカラーで、かわいいキャラクターが会話形式で説明してくれる。簡単な漢字以外にはルビも振ってあり小学生高学年くらいから読めそうな編集になっている。

一方で、コンピュータやプログラミングが初心者向けの説明になっていること、さらにScratchやMinecraft Piというアプリケーションの説明も章立てしてある。今まで持っているRaspberry Pi本だとLinuxサーバや電子工作としての使い方にページを割いていたりするので大人でもコンピュータ初心者やScratchやMinecraft Piに興味がある人には十分お勧めできそうな感じだ。僕はMinecraft Piのために購入した。

気持ち割高だけど、Raspberry Pi本体もAmazonで購入可能。でも先に本を買って必要なものを把握してから機器を集めるのでも良いと思う。僕はそうだった。

ずっと俺のターン

Kickstaterで資金調達中のKanoというプロダクトが気になっている。

Kano PC

Raspberry Piベースのコンピュータ一式で、Kano OSといDebianベースの独自OSがあって、Minecraftを始めとした工作系アプリも入っているようだ。

Kano OS Apps

Minecraft with Kano Blocks というYouTubeの動画も公開されている。Kanoの動画は最後に「YOUR TURN」という文字で終わるので、ずっと俺のターンと思っている。すでにRaspberry Piや周辺機器を持っているので、一式もらえる支援の方がいいのかOSなどデジタル・ダウンロードだけの支援がいいのか微妙なところ。

Pledge $119 のBackerになった。キーボードが気になっていたのと普通にRaspberry Pi買っても4,5千円すること考えるとそこまで高くない気がした。

Minecraft Server Managerでマルチサーバを公開してみる

Minecraft Server Manager 0.8.16 Betaを試した。

Minecraft Server Managerとは

Minecraft Server Managerは本家のWikiで以下のような説明。

  • 動作環境はDebian/Ubuntuをサポート
  • MinecraftやBukkitサーバたちを管理できるスクリプト
  • 定期的にWorld Edit互換のバックアップを作成できる
  • “あと10秒でシャットダウンします”といったメッセージをプレーヤーに通知できる
  • Terminalからゲーム内のコマンド(“say”, “op”, “whitelist”など)が使える
  • すべてのコマンドがTabで補完されるので簡単に学習できる

http://msmhq.com/がサイト。複数のマイクラサーバを管理してコマンドであたらしいマイクラサーバを作成したり、開始したり、停止したりできるサーバ管理者向けのツールっぽい。ちょうどDebianサーバを持っているので1マイクラサーバでもいろいろ便利そうなので使ってみることに。

実際にDebianのサーバで動かしているが、コマンドのテストの多くはローカルの仮想環境にあるUbuntuで行った。

インストール

インストールコマンドだと途中でパッケージの更新(apt-get update; apt-get upgrade)が入るので関係のないソフトウェアも全部最新にさせられることに注意(嫌ならManual Installationをする)。wgetだけは先にsudo apt-get install wgetで入れとく。

$ wget -q http://git.io/Sxpr9g -O /tmp/msm && bash /tmp/msm
MSM INSTALL: Configure installation
Install directory [/opt/msm]: (リターン)
New server user to be created [minecraft]:(リターン)
Complete installation with these values? [y/N]: y(リターン)

上記のデフォルトでは/opt/msmにユーザminecraftでインストールすることになる。パッケージが更新され依存するscreen rsync zipがインストールされる。サイトではRedhutはwget -q http://git.io/lu0ULA -O /tmp/msm && bash /tmp/msmでと書いてあるのでCentOSでも動くのかもしれない。

No directory, logging in with HOME=/,ディレクトリがありません。HOME=/ としてログインしますと警告がうるさいのでminecraftユーザのホームディレクトリを作成しておく。

sudo mkdir /home/minecraft
sudo chown minecraft:minecraft /home/minecraft

コマンド

インストールが成功するとmsm helpを打てといわれる。MSMではすべての操作をmsm xxxxのような形で実行する。

セットアップコマンド

コマンド 説明
server list マイクラサーバを一覧
server create <name> 新しいマイクラサーバの生成
server delete <name> 存在するマイクラサーバの削除
server rename <name> <new-name> 存在するマイクラサーバのリネーム

サーバ管理コマンド

コマンド 説明
<server> start マイクラサーバを起動
<server> stop [now] プレーヤーに警告をしてマイクラサーバを停止、またはいますぐ停止
<server> restart [now] プレーヤーに警告してマイクラサーバを再起動、またはすぐに
<server> status マイクラサーバの起動状態(running/stopped)を見る
<server> connected マイクラサーバに接続しているプレーヤーの一覧
<server> worlds list worldstorageにあるワールドの一覧
<server> worlds load worldstorageにあるワールドのリンクをマイクラサーバディレクトリに作成する
<server> worlds ram <world> 指定したワールドをRAMで上で動かすかDiskかのトグル
<server> worlds todisk RAM上のワールドをディスクに同期する
<server> worlds backup マイクラサーバ持っているすべてのワールドのバックアップを作成する
<server> worlds on|off <world> 指定したワールドをアクティブまたは非アクティブにする、非アクティブなワールドはバックアップされない
<server> logroll ログの縮小化のためマイクラサーバログを移動しgzipでアーカイブする
<server> backup マイクラサーバのディレクトリのバックアップを作る
<server> jar <jargroup> [<file>] マイクラサーバのjarファイルを設定する
<server> console インタラクティブコンソールに接続する、アクセスは制限される
<server> config [<setting> <value>] マイクラサーバを指定の値を設定する、指定しなかった場合は設定の一覧

マイクラサーバゲーム内コマンド

コマンド 説明
<server> wl on|off ホワイトリストチェックの有効・無効
<server> wl add|remove <player> ホワイトリストへプレーヤーを追加または削除する
<server> wl list ホワイトリストにあるプレーヤーの一覧
<server> bl player add|remove <player> プレーヤーをバンまたはバン解除する
<server> bl ip add|remove IPアドレスでバンまたはバン解除する
<server> bl list バンしているプレーヤーとIPアドレスの一覧
<server> op add|remove <player> プレーヤーに管理者権限を与えるまたは取り消す
<server> op list 管理者権限のあるプレーヤーの一覧
<server> gm survival|creative <player> プレーヤーのゲームモードを変更する
<server> kick <player> マイクラサーバーからプレーヤーをキックする
<server> say <message> マイクラサーバ上のすべてのプレーヤーへ(ピンク)メッセージを送る
<server> time set|add <number> マイクラの時刻を設定または追加する(0-24000)
<server> toggledownfall 雨または雪のトグル
<server> give <player> <item> [amount] [data] プレーヤーにアイテムを与える
<server> xp <player> <amount> プレーヤーに経験値を与える、負数なら減らす
<server> save on|off ワールドの変更をファイルに書き込むかの有効・無効
<server> save all 強制的に保存していないワールドの変更をファイルに書き込む
<server> cmd <command> コマンド文字列をマイクラサーバに送る
<server> cmdlog <command> cmdコマンドと同じだが、結果のログ出力を表示する(Ctrl+Cで終了)

Jarコマンド

コマンド 説明
jargroup list jarファイルの一覧
jargroup create <name> <download-url> ダウンロードURLとしてjarグループを生成する
jargroup delete <name> jarグループを削除する
jargroup rename <name> <new-name> jarグループをリネームする
jargroup changeurl <name> <download-url> jarグループのダウンロードURLを変更する
jargroup getlatest <name> jarグループのダウンロードURLから最新のjarファイルをダウンロードする

グローバルコマンド

コマンド 説明
start すべてのアクティブなマイクラサーバを開始する
stop [now] すべての起動中のマイクラサーバを停止する
restart [now] すべてのアクティブなマイクラサーバを再起動する
version Minecraft Server Managerのバージョンを表示する
config MSMで使われている設定の一覧
update [–noinput] MSMのファイルを最新のバージョンに更新する

コマンドから使い方を推測すると複数のマイクラサーバを管理するのでマイクラサーバに名前をつけて、マイクラサーバの名前を指定してコマンドを送ることになる。

またjargroupコマンドがありマイクラサーバと分離されている模様。マイクラサーバをどのjarファイルで生成するのか管理でき、例えばmodを当てたserver.jarを何処かに公開してそれを使って構築したり、あるマイクラサーバは公式のserver.jarから構築するなどの使い方ができると思われる。

サーバの作成と起動

まずは公式のマイクラサーバのminecraft_server.jarをminecraftという名前のjargroupで作成する。(ドキュメントではデフォルトでcraftbukkit、minecraftのjargroupがあるらしいのだが無いと怒られるので作成する)

sudo msm jargroup create minecraft https://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar
sudo msm jargroup create craftbukkit http://dl.bukkit.org/latest-rb/craftbukkit.jar

次にmyserver1というマイクラサーバを作成し、minecraftjargroup、つまり公式のminecraft_server.jarを指定して開始する。

sudo msm server create myserver1
sudo msm myserver1 jar minecraft
sudo msm myserver1 start

以下の情報は今のところ気にしなくていい。

[MSM Info: Assuming 'minecraft/1.3.0' for this server.You should override this value by adding 'msm-version=minecraft/x.x.x' to '/opt/msm/servers/myserver2/server.properties' to make this message go away]

コマンドなどバージョンによって下位互換を取らないといけないときにMSMにminecraft_serverのバージョンを教えてあげないといけないことがある。どうしても気になるならsudo msm myserver1 config msm-version minecraft/1.5.2などを実行する。

マイクラサーバ実行中でも以下のようにしてLinuxのターミナルから管理者権限を与えることができる。

sudo msm myserver1 op add username

2つ目のマイクラサーバを起動してみる。複数のマイクラサーバを公開するにはそれぞれポートを別にしないといけない。

sudo msm server create myserver2
sudo msm myserver2 jar minecraft
sudo msm myserver2 config server-port 25566
sudo msm myserver2 start

デフォルトのポート以外に接続する場合、クライアントは Server Addressに 127.0.0.1:25566 というようにコロンとポート番号を指定する。

マイクラサーバは/opt/msm/servers/myserver2/といったディレクトリにファイルがあるのでMSMを使わないで直接server.propertiesファイルなどの設定を変更することも可能。ファイル階層は以下のようになる。

/opt/msm
`- servers
   `- server_name
      |- world -> /opt/msm/servers/server_name/worldstorage/world
      `- worldstorage/
         |- world/
      |- worldstorage_inactive/
      |- server.jar
      |- server.properties
      |- server.log
      |- ops.txt
      |- white-list.txt
      |- banned-ips.txt
      `- banned-players.txt

ワールドの管理

基本的にMSMでワールドを管理するときにはworldstorageというディレクトリにワールドの実体ファイル(ディレクトリ)を置いてあげないといけない。

最初にマイクラサーバを起動するとworldというディレクトリにワールドを作成されるので、これをに以下のようにしてworldstorage下へ移動しworlds loadコマンドでシンボリックリンクを作成する。

sudo msm myserver1 stop now
cd /opt/msm/servers/myserver1
sudo mv world worldstorage/
sudo msm myserver1 worlds load

バックアップ

これでsudo msm myserver1 worlds backupを実行するとworldstorageにあるワールドのバックアップ(zip)がWORLD_ARCHIVE_PATH(/opt/msm/archives/worlds)に作成されるようになる。

なおworldstorageに複数ワールドがあるとすべてバックアップされる。これは <server\> worlds on\|off <world\> コマンドでアクティブ・非アクティブを切り替えることでアクティブなものだけがバックアップされるようになる。

リストア

リストアのコマンドは今のところないようなのでバックアップファイルから戻す。

sudo msm myserver1 stop now
cd /opt/msm/servers/myserver1/worldstorage
sudo mv world world_org
sudo unzip /opt/msm/archives/worlds/myserver1/world/{日付}.zip
sudo chown -R minecraft:minecraft world 
sudo msm myserver1 start

RAMを使う

ワールドをRAMに置くことでパフォーマンスが期待できる。

デフォルトでは/dev/shm/msmを使うことになっている。/dev/shmにディレクトリがない場合は以下のようにして作っておく。パスは/etc/msm.cnfのRAMDISK_STORAGE_PATHで変更することもできる。

sudo mkdir /dev/shm/msm
sudo chown minecraft /dev/shm/msm
sudo chmod -R 775 /dev/shm/msm

以下のようにサーバ名、ワールド名を指定してRAMに配置する。ワールドのパスを変えるので当然マイクラサーバは止めないといけない。

sudo msm myserver1 stop now
sudo msm myserver1 worlds ram world
sudo msm myserver1 start

ワールドはstopコマンドでサーバを止めたときなどのタイミングでディスクに同期されるので壊されてもいいようなテンポラリなワールドとして使えるわけではない。

マイクラサーバのバージョンアップ

jargroupコマンドで取得したjarファイルを置き換えることで可能。

停止してバックアップを取る。

sudo msm myserver1 stop now
sudo msm myserver1 backup
sudo msm jargroup getlatest minecraft
sudo msm jargroup list

でjarファイルのリストが見れるので日付で使うファイル名をきめて

sudo msm myserver1 jar minecraft 日付-minecraft_server.jar

起動するとバージョンが上がっているはず。

sudo msm myserver1 start

cronの修正

cronで定期的にバックアップ処理が走るのだが出力がメール送信されるので出力をnullにする。/etc/cron.d/msm ファイルを修正する。

02    05  *   *   *   minecraft   /etc/init.d/msm all worlds backup >/dev/null 2>&1
55    04  *   *   *   minecraft   /etc/init.d/msm all logroll >/dev/null 2>&1
*/30  *   *   *   *   minecraft   /etc/init.d/msm all worlds todisk >/dev/null 2>&1
@hourly               minecraft   /etc/init.d/msm start >/dev/null 2>&1

参考: Disable Cron E-mails

まとめ

MSMを使うとscreenを意識しなくていいし、バックアップもコマンド一つで取れるので楽ちん。マルチサーバを一台管理するだけでも便利だと思う。

PlayStation 4がx86ならMinecraft対応できないの?

PlayStation 4(PS4)が発表されたらしいのだけどあまりニュースをさらっと読んだ現状ではx86になって開発しやすくなったというキーワードしか記憶に残っていなかったりする。

ただその言い回しはピンときていない。iOSはx86ではないが開発しにくいと言われたらそんなものは関係なくてコンピュータプログラムで開発のしやすさというのは言語であったり、開発環境が占める割合が大きい。

ゲームの開発はよく知らないからなんとも言えないけれどパフォーマンスを要求される部分では確かにプロセッサを意識したコードを書かないといけない。とは言え、そもそも論としてそこをカプセル化するのがゲームハードウェアメーカー側の仕事なんじゃないかと思うし、仮にプロセッサによって開発しやすくなるとしたらソフトを書くゲームソフト会社に依存しているということになるんじゃない?

ユーザにとっては開発しやすくなるというのは直接的な影響はなくどのようなソフトがでてくるかがわからないので、もともと発表はユーザ向けではないのかもしれないし、深く考えもしょうがないのかな。

とりあえず切実に思うことは、x86で開発しやすくなったのなら PS4向けにMinecraftを対応してください と言うらへんだ。Java動くならなんとかなるんじゃないのかな。だってx86でGPUがちゃんとしていてネットワークに繋がるってもうMinecraftのためのゲーム機としか思えないよ。

Debianでminecraftサーバを立てワールドを公開してみた

minecraftサーバを立ててローカルで作業していたワールドを公開してみたのでそのやり方の紹介。公開といっても誰にでも公開しているというわけではないが。

Windowsでサーバを立てるならMinecraft Japan Wikiのまとめがおすすめ。

minecraft 基本的な話

minecraftについてはこれを見れば雰囲気はつかめるはず。PC版は20ユーロくらい。Xbox 360版、iOS/Android版もあるけどPC版がベスト、というか主流。

minecraftのPC版はjavaで動いているのでクロスプラットフォームで動作する。一人プレイとマルチプレイがありワールドデータを移行することも可能。

Debian/Ubuntuでminecraft_serverを実行する

環境構築

オフィシャルサイトのダウンロードページからマルチプレイのサーバ用にminecraft_server.jarが公開されており、サーバー側でレンダリングすることではないので単にjavaで実行すれば事足りる。Debian 6やUbuntu 12.04ではデフォルトのソースリストからsun-java6を入れられなくなっていてopensdkやoracle-java7を使うことが既定路線となりつつある。とは言え、相性などの問題からまだまだsun-java6を入れることが多いようなのだがセキュリティなどを考えると最新版を使うのがいい気もする。葛藤した挙句余計なトラップにハマりたくないので結局sun-java6をインストールする。

/etc/apt/sources.listに

>deb http://ftp.ja.debian.org/debian/ squeeze main non-free

を追加してsun-java6-jdkをインスコ。コンソールからの操作のためにscreenも入れておく

sudo apt-get update
sudo apt-get install sun-java6-jdk
sudo apt-get install screen

サーバのインストール

インストールというかダウンロードするだけ。ダウンロードページ minecraft_server.jarのリンクを引っ張ってくればよい。 面倒なのでログインユーザのホームディレクトリに管理することにして作業フォルダは~/minecraftとする。

mkdir ~/minecraft
cd ~/minecraft
wget https://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar

実行用スクリプトの作成

Debian 6/Ubuntu 12.04なら.profileで$HOME/binがあればPATHに突っ込んでくれている(つまり新規に$HOME/binを生成した場合は次回ログイン時にPATHが通る)ので~/binに作成する。

mkdir ~/bin
cd ~/bin
vi minecraft-server

で以下内容を保存。

#!/bin/sh
cd ~/minecraft
screen -AmdS minecraft-server java -Xms1024M -Xmx1024M -jar minecraft_server.jar nogui

次にscreen起動用のスクリプト

vi minecraft-console

で以下内容を保存。

#!/bin/sh
screen -r minecraft-server

実行権限をつけたら終わり。

chmod u+x minecraft-server minecraft-console

これでminecraft-serverと打てばサーバを起動、起動中のコンソールにアクセスするにはminecraft-consoleと打てばいい。コンソール実行(screen)から戻るには「Ctrl+A」を押してから「D」を押す。

設定ファイルを書き出すために一回起動して終了させておく。minecraft-serverを実行して、次にminecraft-consoleを実行。コンソールでstopと入力してminecraft-serverを停止させる。これで~/minecraftに幾つかのファイルが作成される。

ワールドデータの転送とminecraft-serverの設定

たとえばNew Worldという名前のワールドデータはWindows 7のC:\Users\ユーザ名\AppData\Roaming\.minecraft\saves\New Worldにあるのでこれをサーバの~/minecraft/New WorldにFTPなどでファイルをコピーすればいい。

次に~/minecraft/server.propertiesを開く。level-name=worldという箇所がワールド名の読み込み部分なのでこれをlevel-name=New Worldにすると持っていたワールドデータでminecraft-serverを起動できる。

あとはops.txtに自分のminecraftユーザ名を入れて管理者になれるようにしておくとよい。

ワールドデータのバックアップ

管理者コマンドに/save-allがあるのだけどバックアップコマンドなのかよくわからなかったので

tar -czf world.`date '+%Y%m'`.tar.gz world

などでワールドデータのフォルダをバックアップしておいたほうが確実だと思われる。

サーバの公開

デフォルトだと誰でもアクセスできるようになっていて世間には破壊者みたいなユーザもいるのでサーバのアドレスをうかつに人に教えたりしない方がいい。ポートを変えたり、ホワイトリスト対応するなどの手段も有効。