(→Computerへマウント: APIのマウントについて追加) |
(Stbテンプレート除去) |
||
1行目: | 1行目: | ||
[[ComputerCraft_API|ComputerCraft API]] > | [[ComputerCraft_API|ComputerCraft API]] > | ||
− | |||
{{前提MOD|reqmod="Minecraft Forge Universal 10.13.0.x~"及び"ComputerCraft 1.65~"}} | {{前提MOD|reqmod="Minecraft Forge Universal 10.13.0.x~"及び"ComputerCraft 1.65~"}} | ||
23行目: | 22行目: | ||
戻り値はリソースの取得に成功した場合はIMountのインスタンスが、失敗した場合はnullが返ります。 | 戻り値はリソースの取得に成功した場合はIMountのインスタンスが、失敗した場合はnullが返ります。 | ||
− | + | ComputerCraft側の仕様上、createResourceMount()を呼び出すタイミングはMinecraftゲームサーバの起動(FMLServerStartedEvent発生)後となります。サーバが起動していないとき(例えばmodのコアクラスでFMLInitializationEventが発生した時点)に呼び出してもIMountのインスタンスは取得できません。 | |
取得したIMountインスタンスには、指定したリソース内のファイルリストを取得したり、ファイルのInputStreamを取得したりすることのできるメソッドが含まれ、それを利用することもできます。 | 取得したIMountインスタンスには、指定したリソース内のファイルリストを取得したり、ファイルのInputStreamを取得したりすることのできるメソッドが含まれ、それを利用することもできます。 | ||
52行目: | 51行目: | ||
IPeripheral.detach()でunmountすれば、取り外された全てのComputerへアンマウントを試みることができます。ただし、リソースをマウントした周辺機器がComputerから取り外されたとき、その周辺機器がマウントしたリソースはComputerCraftによって自動的にComputerからアンマウントされるようです。 | IPeripheral.detach()でunmountすれば、取り外された全てのComputerへアンマウントを試みることができます。ただし、リソースをマウントした周辺機器がComputerから取り外されたとき、その周辺機器がマウントしたリソースはComputerCraftによって自動的にComputerからアンマウントされるようです。 | ||
− |
2015年4月13日 (月) 00:23時点における版
この記事は"Minecraft Forge Universal 10.13.0.x~"及び"ComputerCraft 1.65~"を前提MODとしています。 |
リソースのマウント
Modのjarファイル内やリソースパック内にあるファイルやフォルダ(リソース)を、接続したComputerのファイルシステムにマウントさせる周辺機器を追加することができます。
- リソースのIMountインスタンスの取得
- IMountインスタンスのComputerへのマウント
IMountインスタンスの取得
リソースのマウントに必要なIMountのインスタンスはComputerCraftAPI.createResourceMount()で取得します。
// IMount ComputerCraftAPI.createResourceMount( Class modClass, String domain, String subPath ) IMount mountResource = ComputerCraftAPI.createResourceMount(SamplePeripheralCore.class, "sampleperipheralmod", "lua/rom/apis/sample");
リソースの位置を引数で指定します。実際にマウントできるリソースのパスは以下の両方です。
- modClassのjarファイル + "/assets/" + domain + "/" + subPath
- ゲームフォルダのresourcepacks内の各リソースパック + "/assets/" + domain + "/" + subPath
戻り値はリソースの取得に成功した場合はIMountのインスタンスが、失敗した場合はnullが返ります。
ComputerCraft側の仕様上、createResourceMount()を呼び出すタイミングはMinecraftゲームサーバの起動(FMLServerStartedEvent発生)後となります。サーバが起動していないとき(例えばmodのコアクラスでFMLInitializationEventが発生した時点)に呼び出してもIMountのインスタンスは取得できません。
取得したIMountインスタンスには、指定したリソース内のファイルリストを取得したり、ファイルのInputStreamを取得したりすることのできるメソッドが含まれ、それを利用することもできます。
Mod開発環境上でのデバッグではjarファイルは生成されないため、jarに同梱するリソースをデバッグする場合は代わりにリソースパックから読み込ませて行うか、配布用と同じくjarファイルを生成してプレイ環境上で行います。
Computerへマウント
取得したIMountのインスタンスはIComputerAccess.mount()でComputerへマウントします。
// String IComputerAccess.mount( String desiredLocation, IMount mount ) String location = computer.mount("rom/apis/sample", mountResource);
desiredLocationにはリソースをマウントするComputerのファイルシステム内のパスを、mountにはComputerCraftAPI.createResourceMount()で取得したリソースのIMountインスタンスを渡します。
戻り値として実際にマウントされたComputerのファイルシステム内のパスが返ります。これはリソースをアンマウントする時に必要なので、後ほどアンマウントするつもりなら保存しておきましょう。ひとつの周辺機器には複数のComputerが接続されるため、Map<IComputerAccess, String>などに保存しておくとよいでしょう。マウントに失敗した場合はnullが返ります。
Computerのrom/apisにLuaプログラムファイルをマウントすればAPIを追加することができますが、起動後のComputerにマウントした場合はos.loadAPI()で登録するかComputerを再起動するまでは反映されません。
IPeripheral.attach()でmountすれば、接続された全てのComputerへマウントを試みることができます。ただし、desiredLocationに既にファイルやフォルダが存在した場合、マウントには失敗します。
Computerからアンマウント
ComputerへマウントしたリソースはIComputerAccess.unmount()でアンマウントできます。
// void IComputerAccess.unmount( String location ) computer.unmount(location);
locationにはそのComputerへmountしたときの戻り値を渡します。
IPeripheral.detach()でunmountすれば、取り外された全てのComputerへアンマウントを試みることができます。ただし、リソースをマウントした周辺機器がComputerから取り外されたとき、その周辺機器がマウントしたリソースはComputerCraftによって自動的にComputerからアンマウントされるようです。