提供: Minecraft Modding Wiki
この編集を取り消せます。
下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
3行目: | 3行目: | ||
== リソースのマウント == | == リソースのマウント == | ||
− | + | Modのjarファイル内やリソースパック内にあるファイルやフォルダ(リソース)を、接続したComputerのファイルシステムにマウントさせる周辺機器を追加することができます。 | |
− | |||
− | |||
− | |||
− | |||
+ | *リソースのIMountインスタンスの取得 | ||
+ | *IMountインスタンスのComputerへのマウント | ||
=== IMountインスタンスの取得 === | === IMountインスタンスの取得 === | ||
− | + | リソースのマウントに必要なIMountのインスタンスはComputerCraftAPI.createResourceMount()で取得します。 | |
<source lang = "java"> | <source lang = "java"> | ||
// IMount ComputerCraftAPI.createResourceMount( Class modClass, String domain, String subPath ) | // IMount ComputerCraftAPI.createResourceMount( Class modClass, String domain, String subPath ) | ||
17行目: | 15行目: | ||
"sampleperipheralmod", "lua/rom/apis/sample"); | "sampleperipheralmod", "lua/rom/apis/sample"); | ||
</source> | </source> | ||
− | + | リソースの位置を引数で指定します。実際にマウントできるリソースのパスは以下の両方です。 | |
*'''modClass'''のjarファイル + "/assets/" + '''domain''' + "/" + '''subPath''' | *'''modClass'''のjarファイル + "/assets/" + '''domain''' + "/" + '''subPath''' | ||
*ゲームフォルダのresourcepacks内の各リソースパック + "/assets/" + '''domain''' + "/" + '''subPath''' | *ゲームフォルダのresourcepacks内の各リソースパック + "/assets/" + '''domain''' + "/" + '''subPath''' | ||
− | + | 戻り値はリソースの取得に成功した場合はIMountのインスタンスが、失敗した場合はnullが返ります。 | |
− | ComputerCraft側の仕様上、createResourceMount() | + | ComputerCraft側の仕様上、createResourceMount()を呼び出すタイミングはMinecraftゲームサーバの起動(FMLServerStartedEvent発生)後となります。サーバが起動していないとき(例えばmodのコアクラスでFMLInitializationEventが発生した時点)に呼び出してもIMountのインスタンスは取得できません。 |
− | + | 取得したIMountインスタンスには、指定したリソース内のファイルリストを取得したり、ファイルのInputStreamを取得したりすることのできるメソッドが含まれ、それを利用することもできます。 | |
− | + | Mod開発環境上でのデバッグではjarファイルは生成されないため、jarに同梱するリソースをデバッグする場合は代わりにリソースパックから読み込ませて行うか、配布用と同じくjarファイルを生成してプレイ環境上で行います。 | |
=== Computerへマウント === | === Computerへマウント === | ||
− | + | 取得したIMountのインスタンスはIComputerAccess.mount()でComputerへマウントします。 | |
<source lang = "java"> | <source lang = "java"> | ||
// String IComputerAccess.mount( String desiredLocation, IMount mount ) | // String IComputerAccess.mount( String desiredLocation, IMount mount ) | ||
38行目: | 36行目: | ||
desiredLocationにはリソースをマウントするComputerのファイルシステム内のパスを、mountにはComputerCraftAPI.createResourceMount()で取得したリソースのIMountインスタンスを渡します。 | desiredLocationにはリソースをマウントするComputerのファイルシステム内のパスを、mountにはComputerCraftAPI.createResourceMount()で取得したリソースのIMountインスタンスを渡します。 | ||
− | + | 戻り値として実際にマウントされたComputerのファイルシステム内のパスが返ります。これはリソースをアンマウントする時に必要なので、後ほどアンマウントするつもりなら保存しておきましょう。ひとつの周辺機器には複数のComputerが接続されるため、Map<IComputerAccess, String>などに保存しておくとよいでしょう。マウントに失敗した場合はnullが返ります。 | |
− | Computerのrom/ | + | Computerのrom/apisにLuaプログラムファイルをマウントすればAPIを追加することができますが、起動後のComputerにマウントした場合はos.loadAPI()で登録するかComputerを再起動するまでは反映されません。 |
IPeripheral.attach()でmountすれば、接続された全てのComputerへマウントを試みることができます。ただし、desiredLocationに既にファイルやフォルダが存在した場合、マウントには失敗します。 | IPeripheral.attach()でmountすれば、接続された全てのComputerへマウントを試みることができます。ただし、desiredLocationに既にファイルやフォルダが存在した場合、マウントには失敗します。 |