Minecraftとタートルと僕

PCゲームMinecraftのMOD「ComputerCraft」の情報を集めたニッチなブログです。

こちらのページは更新が滞っており、情報が古くなりつつあります。新しいCC情報サイトをはじめましたので、もしよければご参照ください。今後ともよろしくお願い申し上げます。

「百億のマインクラフトと千億のタートル」(https://hevo2.hatenablog.com/)

まずはショートカットキーを覚えよう

まずはゲーム内でコンピュータを作りましょう。
なんでレッドストーンと板ガラスを焼石で囲んだだけでできるんだよ!などという突っ込みは野暮なのでダメ絶対。

なお、より上のグレードであるAdvanced Computerは画面がカラー表示されて見やすいので、最初からこちらを作るのもいいですね。
金色の成金趣味で見かけがダサいのは問題ですが……。

さて気を取り直して。

CCコンピュータを右クリックすればCCコンピュータの画面(ターミナル画面)を呼び出すことができます。
画面上には以下のようなプロンプト「>」(入力の促し記号)が表示されて、カーソル(アンダーバー)が点滅しています。これは、CCコンピュータがあなたの命令(コマンド)を待っている状態です。
f:id:hevohevo:20140104212649p:plain:w400

ここで、キーボードでコマンドを入力してエンターキーを押すと、CCコンピュータがその命令を実行してくれるわけです。

ここで言うコマンドとは、「何らかのプログラム」です。
CCコンピュータに初めから入っているプログラムかもしれませんし、今後、あなたが作ったプログラムかもしれません。
プログラムの名前を入力することで、「このプログラムを実行しろ」と命令するわけです。

しかし場合によっては、プログラムの使い方を間違えたり、プログラムを作り間違えたり(バグが入っていたり)することもあるでしょう。
そのようなとき、CCコンピュータがエラーメッセージを出してプログラムを終了し、またプロンプトを出す状態に戻ればいいのですが、そうでなく、プログラムが無限ループに陥って何も反応が返ってこなくなることがありえます。

そのようなときのために、プログラムを強制終了する方法を覚えておくと心強いです。

CCのショートカットキー

CCコンピュータを強制終了させるショートカットキーを覚えましょう。
WindowsでいうCTRL+ALT+Delteのように、複数のキーボードを同時に押すことで特別な操作をさせるわけです。
なお以下のキーは認識させるために2秒ほど長押しする必要あるので注意してください。

  • CTRL+T :実行プログラムの強制終了。Unixで言うTerminate。Whileループで終了条件つけてないプログラムはこれで止めよう。
  • CTRL+R :CCコンピュータのリセット。正確に言うとリブート。リセット後に再起動してくれるので「startup」プログラムのデバッグ時には重宝する。
  • CTRL+L :CCコンピュータを強制的に電源切断。電源切るだけなのであまり使うことはないかも

プログラムが暴走状態になったら、基本的に「CTRL+T」長押しで大丈夫です。
どうしてもダメなら、ピッケルなどでCCコンピュータ(タートル)を殴ってアイテムにしてしまえば何の問題もありません。
動き回るタートルを止めるなら、アイテム化させるのが一番早いですし。

ComputerCraftのディレクトリを理解する(基本編)

はじめに

Unix経験者向けの説明

  • CCコンピュータ(タートル)のホームディレクトリは、「/」ルートディレクトリ
  • ルートディレクトリ直下に、全てのコンピュータで共通の内容となる「rom」ディレクトリがマウントされる。
    • このディレクトリ内の「programs」ディレクトリ内にCC標準のプログラムが入っている。
    • その名のとおり読み専用ディレクトリなので、ゲーム内からこのディレクトリ内を編集・変更することはできない。
  • ホームディレクトリは各コンピュータで独立しており、他のコンピュータのホームディレクトリを参照することはできない。
  • ゲーム外から、「ルート(ホーム)ディレクトリ」や「romディレクトリ」対応するフォルダを開いて編集することが可能。具体的なやり方については後日説明する。
  • CCフロッピーはゴミ。

以上。

より初心者向けの説明

  • CCコンピュータ起動時、最初にアクセスする標準のディレクトリ(=ホームディレクトリ)は「/」ルートディレクトリ。
    • ディレクトリという呼び方になじみがない人は、「フォルダ」と読み替えてもいい
  • ルート直下は以下のようなディレクトリ構造になっている
    • 文字列の末尾に「/」スラッシュがついているものはディレクトリ、ないものはファイル
 / --- rom/ --- apis/
                help/
                programs/
                startup
  • 「フォルダ」という言葉で説明するならば、まず「/」(ルート)フォルダが標準のフォルダで、その中に「rom」フォルダがあり、さらにその中に「apis」「help」「programs」フォルダと「startup」ファイルが存在する。
  • 「rom」フォルダ以下は、全てのCCコンピュータ(タートル)の共通部分であり、全てのコンピュータで同じ内容が表示される。
  • 「rom」フォルダは読み込み専用フォルダであり、CCコンピュータからは、内容を見ることはできても、編集・変更することはできない。
  • 「/」フォルダの「rom」フォルダ以外の部分は、各CCコンピュータの個別記憶領域(個別のファイル保存場所)となっており自由にファイルなどを追加・編集・削除できる。
  • ただし個別領域は完全に独立しているので、あるコンピュータから他のコンピュータの個別領域を参照することはできない。

コンピュータにフロッピードライブをつなぐとルートディレクトリ直下に「floppy」ディレクトリが出現する(専門用語で言うとルートディレクトリ直下にマウントされる)。
CCフロッピーでコンピュータ間のファイルのやり取りができるが、フロッピーは使いづらい上に、別のもっと楽な手段があるので、ここでは説明を省略する。CCフロッピーについてこのサイトで説明することは今後もおそらくない。

各ディレクトリがどのように使われているかの解説

/ (ルート=ホーム)

  • CCコンピュータでは、ルートディレクトリがそのままホームディレクトリ
  • ゲーム内でファイルを編集し保存するときは ルートディレクトリ直下に保存することになる

rom/

  • ルートディレクトリ直下にある読み込み専用ディレクトリ。「ゲーム内からは」このディレクトリの中にある以下のディレクトリ&ファイル群を編集することはできない
  • つまり言い換えると、ゲーム外の別ウィンドウでこれに対応するディレクトリ(フォルダ)を開けばゲームを起動しながらもそのまま直接編集できる。詳しくは後日説明予定。

apis/

  • 各種CC用プログラムがインクルードしているAPIライブラリの保存場所

help/

  • 各種CC用プログラムでhelpを使うときにここを参照するのかな
  • あまり使わないのでここでは触れません

programs/

  • ここにCCコンピュータ用のプログラムがたくさん入っている

たとえばよく使う「list (=ls = dir)」 コマンドや「cd」コマンドなんかもここにいっしょくたに入っている。

以下のコマンドを実行すると、入っている全てのプログラムを一覧表示できる。

# /rom/programs/ というディレクトリ内のファイル一覧を表示せよ というコマンド(命令)
> list /rom/programs/

コンピュータの一種であるTurtle用プログラムは、programs/ 直下にturtleというディレクトリがあり、その中に入っている。

以下のコマンドを実行すると、それらプログラムを一覧表示できる。

# /rom/programs/turtle/ ディレクトリ内のファイルを一覧表示せよ というコマンド(命令)
> list /rom/programs/turtle/

最初から入っている「excavate」や「tunnel」プログラムは便利なのでおすすめ。

startup

  • これはファイル(役割的にはスタートアップシェルスクリプトっぽいw)なので注意
  • CCコンピュータが起動するときに一番最初に実行されるプログラムで最初から用意されているもの
  • 詳しくはファイルの中を読んでみると良い。具体的には以下のようなことをやっている。
    • エイリアス(alias)の実行。listコマンドをlsやdirで実行できるのはこのおかげ
    • PATHの追加。プログラム実行時に自動検索されるディレクトリを追加している。カレントディレクトリ(現在の作業用ディレクトリ)がどこであろうと、/rom/programs/以下のプログラムを実行できるのはこのおかげ
PATHとは

プログラムを実行するためには、本来なら、「どのディレクトリの中にある」「どのプログラム」なのかを正確に指定しなければならない。
しかし、プログラムが置いてあるディレクトリの候補をあらかじめ登録しておけば、プログラム名だけで命令しても、あとはコンピュータ側が候補ディレクトリから自動的に検索して実行してくれる。

そしてこの検索候補となるディレクトリの一覧(リスト)のことを一般的にPATHと呼ぶ。

CCのディレクトリを理解する(応用編)

基本が理解できたところで実際に応用に入ろう。
具体的には、ゲームを起動しつつも外部からCCコンピュータ内のファイルをいじれるようにしよう。

名前をつけてやろう

設置したコンピュータを撤去すると中に保存したファイルは消えちゃうのです。そのためにCCではフロッピーというのものがあるのですが、面倒すぎてやってられっかー!となるので楽をする方法を紹介しましょう。

まずは「label」コマンドでラベルを付けましょう。

CCコンピュータ(またはタートル)に「LovelyTurtle」というラベルをつける
> label set LovelyTurtle

これでこのコンピュータは、作成したばかりの一般コンピュータ(インベントリで複数スタック可能)から、「LovelyTurtle」という名前を持つ個体(複数スタック不可)だと世界に認識されました。

壊してアイテム化しても作ったプログラムは消えませんし、タートルならば、補給した燃料も残ったままになります。
ここで、「作ったプログラムが消えない」という点に注目してみましょう。

セーブフォルダ内にファイル保存場所ができる

ラベルをつけることでMinecraftセーブフォルダにこのコンピュータ用のフォルダとファイルが作成されます。

別ウィンドウでMinecraftのsavesフォルダを開いてみましょう。
「%appdata%\.minecraft\saves\」の中にその世界の名前(ゲームスタート時に自分でつけたはず)のフォルダがあって、その中に「computer」というフォルダがあるはずです。
(※Minecraft1.5.2以前のバージョンです。1.6.x以降のバージョンでは、設定によりセーブフォルダの位置が異なっている場合があります)

そのフォルダを開くと番号名のフォルダと、「labels.txt」というテキストファイルがあります。

内部処理的には、コンピュータにラベルを付けてあげることで一意なIDが自動的に割り振られます。
そしてそのIDとあなたがコンピュータにつけたラベルの対応表が「labels.txt」です。
メモ帳とかで覗いてみるとIDとラベル名が並んで書かれています。

さてここで、さきほどの「LovelyTurtle」君のIDが「1」だとしましょう。
このフォルダには「1」というフォルダがあるはずです。
実はこの「1」フォルダはゲーム内のコンピュータ「LovelyTurtle」の「/」ルートディレクトリに対応しているのです。

つまり、「IDが1」のコンピュータのルート直下に「test1」というプログラムを保存した場合、「1」フォルダの中に「test1」というファイルが保存されてことになります。

正確に言うと以下のように対応です。

  • IDが1のコンピュータ内のファイル(絶対パス表現)「/test1
  • Windowsでは「%appdata%\.minecraft\saves\(世界の名前)\computer\1\test1

これでゲーム外からファイル管理できる

このファイルをメモ帳とかのエディタで編集すれば、ゲーム内でもそのまま反映されます。
また、別のコンピュータ(たとえばIDが2)に「test1」ファイルをコピーしたかったら「2」フォルダの中にコピーしてあげればいいのです。

やふー! これでゴミ屑のようなフロッピーに頼ることなくファイル管理できますね。
貧弱なeditコマンドを使ってプログラミングする苦労からも解放されます!