提供: Minecraft Modding Wiki
移動先: 案内検索

ComputerCraft API >

この記事は"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の情報をコンストラクタで受け取り、周辺機器側で保存しておきます。