(「UpgradeNBTDataの取得」の一部を「UpgradeNBTDataの利用」の項に分離) |
(→UpgradeNBTDataの利用: 修正) |
||
46行目: | 46行目: | ||
詳しくはForgeチュートリアルのNBTに関するページを参照してください。 | 詳しくはForgeチュートリアルのNBTに関するページを参照してください。 | ||
− | + | Minecraftの構造上、(シングル・マルチを問わず)UpgradeNBTDataにも「サーバ側」と「クライアント側」が存在します。<br> | |
− | + | 基本的にはサーバ側のUpgradeNBTDataを利用することになりますが、UpgradeNBTDataのデータを元にTurtle Upgradeの外観を変えたりなどする場合はクライアント側のUpgradeNBTDataを利用する必要があります。<br> | |
− | + | サーバ側のUpgradeNBTDataの状態をクライアント側のUpgradeNBTDataへ反映させる(同期させる)には後述するITurtleAccess.updateUpgradeNBTData()を呼び出します。 | |
サーバ側のUpgradeNBTDataに保存したデータはゲームを終了しても消去されず、ゲーム再開後に再び取得することができます。<br> | サーバ側のUpgradeNBTDataに保存したデータはゲームを終了しても消去されず、ゲーム再開後に再び取得することができます。<br> | ||
55行目: | 55行目: | ||
*別のTurtle Upgradeと交換する(交換されたTurtle Upgradeの方のUpgradeNBTDataのみ消去されます) | *別のTurtle Upgradeと交換する(交換されたTurtle Upgradeの方のUpgradeNBTDataのみ消去されます) | ||
*Turtleを破壊する(両方のUpgradeNBTDataが消去されます。ラベルを付けたTurtleでも消去されます) | *Turtleを破壊する(両方のUpgradeNBTDataが消去されます。ラベルを付けたTurtleでも消去されます) | ||
− | |||
=== UpgradeNBTDataの同期 === | === UpgradeNBTDataの同期 === |
2016年1月15日 (金) 19:37時点における版
この記事は"Minecraft Forge Universal 10.13.x.x~"及び"ComputerCraft 1.65~"を前提MODとしています。 |
UpgradeNBTDataの利用
Turtleより提供されるTurtle Upgrade用のNBTTagCompound(UpgradeNBTData)の利用方法について解説します。
- UpgradeNBTDataの取得
- UpgradeNBTDataの同期
UpgradeNBTDataの取得
UpgradeNBTDataは ITurtleAccess.getUpgradeNBTData() で取得します。
// NBTTagCompound ITurtleAccess.getUpgradeNBTData( TurtleSide side ); NBTTagCompound nbt = turtle.getUpgradeNBTData(side);
引数でUpgradeNBTDataを取得したいTurtle Upgradeの装着方向を指定します。
各Turtleは左のTurtle Upgrade用のUpgradeNBTDataと右のTurtle Upgrade用のUpgradeNBTDataを持っていて、それぞれのUpgradeNBTDataは独立しています。
周辺機器タイプのTurtleで周辺機器実装クラスでもUpgradeNBTDataを利用したい場合は、以下のように周辺機器側でITurtleAccessとTurtleSideのインスタンスを保存しておきます。
public class TurtleSample implements ITurtleUpgrade { @Override public IPeripheral createPeripheral(ITurtleAccess turtle, TurtleSide side) { return new SamplePeripheral(turtle, side); // 周辺機器側にITurtleAccessとTurtleSideのインスタンスを渡す }
public class SamplePeripheral implements IPeripheral { private final ITurtleAccess turtleAccess; private final TurtleSide turtleSide; public SamplePeripheral(ITurtleAccess turtle, TurtleSide side) { // コンストラクタで渡されたITurtleAccessとTurtleSideのインスタンスを保存 // turtleAccess.getUpgradeNBTData(turtleSide) のようにしてUpgradeNBTDataを取得 turtleAccess = turtle; turtleSide = side; }
UpgradeNBTDataの利用
ITurtleAccess.getUpgradeNBTData()で取得したNBTTagCompoundは(TileEntityやItemStackのNBTTagCompoundと同じように)データの保存や取得が可能です。
詳しくはForgeチュートリアルのNBTに関するページを参照してください。
Minecraftの構造上、(シングル・マルチを問わず)UpgradeNBTDataにも「サーバ側」と「クライアント側」が存在します。
基本的にはサーバ側のUpgradeNBTDataを利用することになりますが、UpgradeNBTDataのデータを元にTurtle Upgradeの外観を変えたりなどする場合はクライアント側のUpgradeNBTDataを利用する必要があります。
サーバ側のUpgradeNBTDataの状態をクライアント側のUpgradeNBTDataへ反映させる(同期させる)には後述するITurtleAccess.updateUpgradeNBTData()を呼び出します。
サーバ側のUpgradeNBTDataに保存したデータはゲームを終了しても消去されず、ゲーム再開後に再び取得することができます。
ただし、以下の場合は保存したデータが消去されます。
- Turtle Upgradeを取り外す(取り外されたTurtle Upgradeの方のUpgradeNBTDataのみ消去されます)
- 別のTurtle Upgradeと交換する(交換されたTurtle Upgradeの方のUpgradeNBTDataのみ消去されます)
- Turtleを破壊する(両方のUpgradeNBTDataが消去されます。ラベルを付けたTurtleでも消去されます)
UpgradeNBTDataの同期
サーバ側で変更したUpgradeNBTDataをクライアント側へ反映させるには ITurtleAccess.updateUpgradeNBTData() を呼び出します。
// void ITurtleAccess.updateUpgradeNBTData( TurtleSide side ) turtle.updateUpgradeNBTData(side);
引数でUpgradeNBTDataを同期したいTurtle Upgradeの装着方向を指定します。
サーバ側からの呼び出しのみ有効で、クライアント側で呼び出してもクライアント側のUpgradeNBTDataがサーバ側に反映されるということはありません。
UpgradeNBTDataはTurtleがワールドへロードされた時などにも同期されますが、このメソッドを呼び出すと即座に同期されます。