この記事は"Minecraft Forge Universal 10.13.0.x~"及び"ComputerCraft 1.65~"を前提MODとしています。 |
目次
周辺機器タイプTurtleの追加[編集]
周辺機器タイプのTurtle Upgradeを追加します。
- ITurtleUpgrade(周辺機器タイプ)の実装
- TurtleUpgradeの登録
- IPeripheralの実装
ソースコード[編集]
「MC1.7 ツールタイプTurtleの追加」のソースコードを元にして、変更部分のみを解説します。 Packageは適宜設定してください。
SampleUpgradeCore.java[編集]
「MC1.7 ツールタイプTurtleの追加」を参照してください。
TurtleSample.java[編集]
// package mods.sample.upgrade; import mods.sample.peripheral.BlockSamplePeripheral; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.api.turtle.ITurtleAccess; import dan200.computercraft.api.turtle.ITurtleUpgrade; import dan200.computercraft.api.turtle.TurtleCommandResult; import dan200.computercraft.api.turtle.TurtleSide; import dan200.computercraft.api.turtle.TurtleUpgradeType; import dan200.computercraft.api.turtle.TurtleVerb; public class TurtleSample implements ITurtleUpgrade { public ItemStack upgradeItem = new ItemStack(Blocks.stone); @Override public int getUpgradeID() { return SampleUpgradeCore.turtleSampleID; } @Override public String getUnlocalisedAdjective() { return "Sample"; } @Override public TurtleUpgradeType getType() { return TurtleUpgradeType.Peripheral; } @Override public ItemStack getCraftingItem() { return upgradeItem; } @Override public IPeripheral createPeripheral(ITurtleAccess turtle, TurtleSide side) { return new SamplePeripheral(turtle, side); } @Override public TurtleCommandResult useTool(ITurtleAccess turtle, TurtleSide side, TurtleVerb verb, int direction) { return null; } @Override public IIcon getIcon(ITurtleAccess turtle, TurtleSide side) { return upgradeItem.getItem().getIconFromDamage(0); } @Override public void update(ITurtleAccess turtle, TurtleSide side) { } }
SamplePeripheral.java[編集]
// package mods.sample.upgrade; import dan200.computercraft.api.lua.ILuaContext; import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.api.peripheral.IComputerAccess; import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.api.turtle.ITurtleAccess; import dan200.computercraft.api.turtle.TurtleSide; public class SamplePeripheral implements IPeripheral { private final ITurtleAccess turtleAccess; private final TurtleSide turtleSide; public SamplePeripheral(ITurtleAccess turtle, TurtleSide side) { turtleAccess = turtle; turtleSide = side; } @Override public String getType() { return "sample"; } @Override public String[] getMethodNames() { return new String[] {}; } @Override public Object[] callMethod(IComputerAccess computer, ILuaContext context, int method, Object[] arguments) throws LuaException, InterruptedException { switch(method) { } return null; } @Override public void attach(IComputerAccess computer) { } @Override public void detach(IComputerAccess computer) { } @Override public boolean equals(IPeripheral other) { if ((other != null) && (other instanceof SamplePeripheral)) { return other == this; } return false; } }
解説[編集]
TurtleSample.java[編集]
Turtle Upgradeの機能を定義するクラス
- getType()
Turtle Upgradeの種類をTurtleUpgradeTypeの値で指定します。
今回は周辺機器タイプなので TurtleUpgradeType.Peripheral を返しています。
- getCraftingItem()
private ItemStack upgradeItem = new ItemStack(Blocks.stone); @Override public ItemStack getCraftingItem() { return upgradeItem; }
Turtle Upgradeを装着するためのアイテムをItemStackで指定します。
今回はバニラブロックの石(焼石)を指定していますが、modで追加した独自アイテムも同様に指定できます。
- createPeripheral()
周辺機器タイプのTurtle Upgradeでは周辺機器のインスタンスを返します。
周辺機器クラスにはコンストラクタの引数でTurtle Upgradeの情報を渡しています。
- useTool()
周辺機器タイプのTurtle Upgradeでは呼び出されることは無いため、単にnullを返しています。
- update()
Turtle UpgradeがTurtleの装着されている間、毎tick呼び出されます。
ロードされているワールド上で装着されている数だけ呼び出されますが、各パラメータでどれに対する呼び出しなのかが判別が可能です。
また、サーバ側とクライアント側でそれぞれ別に呼び出されますが、どちら側の呼び出しなのかはturtle.getWorld().isRemoteの値で判別可能です。
turtle.getPeripheral()で装着されている周辺機器Upgradeの周辺機器クラスのインスタンスを取得できます。
turtle.getUpgradeNBTData()で読み書き可能なNBTTagCompoundを取得できます。このNBTTagCompoundはTurtleに記録され、ゲームを終了しても消去されません(Turtle Upgradeを取り外したりTurtleが破壊されると消えます)。
今回は何もしていません。
SamplePeripheral.java[編集]
- コンストラクタ
private final ITurtleAccess turtleAccess; private final TurtleSide turtleSide; public SamplePeripheral(ITurtleAccess turtle, TurtleSide side) { turtleAccess = turtle; turtleSide = side; }
Turtle Upgradeの情報をコンストラクタで受け取り、周辺機器側で保存しておきます。