提供: Minecraft Modding Wiki
移動先: 案内検索
(Computerへマウント: APIのマウントについて追加)
(解説文を修正)
 
(同じ利用者による、間の2版が非表示)
1行目: 1行目:
 
[[ComputerCraft_API|ComputerCraft API]] >
 
[[ComputerCraft_API|ComputerCraft API]] >
{{Stb}}
 
 
{{前提MOD|reqmod="Minecraft Forge Universal 10.13.0.x~"及び"ComputerCraft 1.65~"}}
 
{{前提MOD|reqmod="Minecraft Forge Universal 10.13.0.x~"及び"ComputerCraft 1.65~"}}
  
 
== リソースのマウント ==
 
== リソースのマウント ==
Modのjarファイル内やリソースパック内にあるファイルやフォルダ(リソース)を、接続したComputerのファイルシステムにマウントさせる周辺機器を追加することができます。
+
Modのjarファイルやリソースパックに含まれるファイルやフォルダ(以下リソース)を、接続したComputerのファイルシステムにマウントさせる方法について解説します。
 +
 
 +
*IMountインスタンスの取得
 +
*IMountインスタンスのマウント
 +
*IMountインスタンスのアンマウント
  
*リソースのIMountインスタンスの取得
 
*IMountインスタンスのComputerへのマウント
 
  
 
=== IMountインスタンスの取得 ===
 
=== IMountインスタンスの取得 ===
リソースのマウントに必要なIMountのインスタンスはComputerCraftAPI.createResourceMount()で取得します。
+
リソースのマウントに必要な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 )
16行目: 17行目:
 
"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が返ります。
+
戻り値はリソースの取得に成功した場合はIMountインスタンスが、失敗した場合はnullが返ります。
  
仕様上、createResourceMount()を呼び出すタイミングはMinecraftゲームサーバの起動(FMLServerStartedEvent発生)以降となります。サーバが起動していないときに呼び出してもIMountのインスタンスは取得できません。
+
ComputerCraft側の仕様上、createResourceMount()を呼び出すタイミングはMinecraftゲームサーバの起動(FMLServerStartedEvent発生)後となります。サーバが起動していないとき(例えばmodのコアクラスでFMLInitializationEventが発生した時点)に呼び出してもIMountインスタンスは取得できません。
  
取得したIMountインスタンスには、指定したリソース内のファイルリストを取得したり、ファイルのInputStreamを取得したりすることのできるメソッドが含まれ、それを利用することもできます。
+
取得したIMountインスタンスには、リソース内のファイルリストを取得したり、リソースファイルのInputStreamを取得したりすることのできるメソッドが含まれておりそれを利用することもできます。
  
Mod開発環境上でのデバッグではjarファイルは生成されないため、jarに同梱するリソースをデバッグする場合は代わりにリソースパックから読み込ませて行うか、配布用と同じくjarファイルを生成してプレイ環境上で行います。
+
Mod開発環境上のデバッグではjarファイルが生成されないため、jarに同梱するリソースをデバッグする場合には、Mod開発環境上のゲームフォルダ/resourcepacks内に代わりとなるリソースパックを作成してそちらを読み込ませるか、配布用と同じくjarファイルを生成して通常のプレイ環境上でデバッグします。
  
 
=== Computerへマウント ===
 
=== Computerへマウント ===
取得したIMountのインスタンスはIComputerAccess.mount()で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 )
37行目: 38行目:
 
desiredLocationにはリソースをマウントするComputerのファイルシステム内のパスを、mountにはComputerCraftAPI.createResourceMount()で取得したリソースのIMountインスタンスを渡します。
 
desiredLocationにはリソースをマウントするComputerのファイルシステム内のパスを、mountにはComputerCraftAPI.createResourceMount()で取得したリソースのIMountインスタンスを渡します。
  
戻り値として実際にマウントされたComputerのファイルシステム内のパスが返ります。これはリソースをアンマウントする時に必要なので、後ほどアンマウントするつもりなら保存しておきましょう。ひとつの周辺機器には複数のComputerが接続されるため、Map<IComputerAccess, String>などに保存しておくとよいでしょう。マウントに失敗した場合はnullが返ります。
+
戻り値として、実際にマウントされたComputerファイルシステム内でのパスが返ります。これはリソースをアンマウントする時に必要なので、後ほどアンマウントするつもりなら保存しておきましょう。ひとつの周辺機器には複数のComputerが接続されるため、Map<IComputerAccess, String>などに保存しておくとよいでしょう。マウントに失敗した場合はnullが返ります。
  
Computerのrom/apisにLuaプログラムファイルをマウントすればAPIを追加することができますが、起動後のComputerにマウントした場合はos.loadAPI()で登録するかComputerを再起動するまでは反映されません。
+
Computerのrom/apisにLuaプログラムファイルをマウントすればAPIを追加することができますが、ON状態のComputerにマウントした場合はos.loadAPI()で登録するかComputerを再起動するまでは反映されません。
  
 
IPeripheral.attach()でmountすれば、接続された全てのComputerへマウントを試みることができます。ただし、desiredLocationに既にファイルやフォルダが存在した場合、マウントには失敗します。
 
IPeripheral.attach()でmountすれば、接続された全てのComputerへマウントを試みることができます。ただし、desiredLocationに既にファイルやフォルダが存在した場合、マウントには失敗します。
52行目: 53行目:
  
 
IPeripheral.detach()でunmountすれば、取り外された全てのComputerへアンマウントを試みることができます。ただし、リソースをマウントした周辺機器がComputerから取り外されたとき、その周辺機器がマウントしたリソースはComputerCraftによって自動的にComputerからアンマウントされるようです。
 
IPeripheral.detach()でunmountすれば、取り外された全てのComputerへアンマウントを試みることができます。ただし、リソースをマウントした周辺機器がComputerから取り外されたとき、その周辺機器がマウントしたリソースはComputerCraftによって自動的にComputerからアンマウントされるようです。
{{Stb}}
 

2017年3月18日 (土) 07:15時点における最新版

ComputerCraft API >

この記事は"Minecraft Forge Universal 10.13.0.x~"及び"ComputerCraft 1.65~"を前提MODとしています。

リソースのマウント[編集]

Modのjarファイルやリソースパックに含まれるファイルやフォルダ(以下リソース)を、接続したComputerのファイルシステムにマウントさせる方法について解説します。

  • IMountインスタンスの取得
  • IMountインスタンスのマウント
  • IMountインスタンスのアンマウント


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に同梱するリソースをデバッグする場合には、Mod開発環境上のゲームフォルダ/resourcepacks内に代わりとなるリソースパックを作成してそちらを読み込ませるか、配布用と同じく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を追加することができますが、ON状態の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からアンマウントされるようです。