提供: Minecraft Modding Wiki
2017年4月5日 (水) 02:11時点におけるNMS (トーク | 投稿記録)による版 (ページ作成。まだ書きかけです。)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索

ComputerCraft API >

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


この記事は執筆中です。加筆してくださる人を募集しています。

ILuaObjectの利用

Java側の独自オブジェクトをLua側から扱えるようにする方法について解説します。

  • ILuaObjectの実装
  • ILuaObjectの利用
  • Lua側での利用


ILuaObjectの実装

ILuaObjectとは、通常Luaでは扱えない独自のオブジェクトをLua側からでも間接的に扱えるようにするためのインターフェイスです。

実装例(周辺機器メソッドの戻り値からLuaへ渡す場合):

public class MyPeripheral implements IPeripheral {

	/* 略 */

	@Override
	public Object[] callMethod(IComputerAccess computer, ILuaContext context, int method, Object[] arguments) throws LuaException, InterruptedException {
		/* 略 */

			MyObject myObject = new MyObject();	// ILuaObjectで扱うオブジェクト
			return new Object[] { wrapMyObject(myObject) };

		/* 略 */
	}

	private ILuaObject wrapMyObject(final MyObject myObject) {
		return new ILuaObject() {

			@Override
			public String[] getMethodNames() {
				return new String[] { /* メソッド名の配列 */ };
			}

			@Override
			public Object[] callMethod(ILuaContext context, int method, Object[] arguments) throws LuaException, InterruptedException {
				// TODO: myObject を扱うためのメソッドを実装
				return null;
			}

		};
	}

}

この例では無名クラスでILuaObjectを実装しましたが、もちろん通常のクラスで実装しても構いません。

Java側のオブジェクトをLua側から扱うためのメソッドは、ILuaObject.getMethodNames()とILuaObject.callMethod()で実装します。
実装方法についてはIPeripheral.getMethodNames()及びIPeripheral.callMethod()と同じなので、「周辺機器メソッドの追加」を参考にしてください。

ILuaObjectの利用

実装したILuaObjectオブジェクトは、以下のようなメソッドの引数・戻り値(のObject配列の要素)としてLua側へ渡すことができます。

  • IPeripheral.getMethodNames()の戻り値
  • IComputerAccess.queueEvent()の引数
  • TurtleCommandResult.success()の引数

Lua側での利用

ILuaObjectオブジェクトはテーブルに変換されてLua側へ渡されます。テーブルの要素はキーがメソッド名の文字列、値がそのメソッドを呼ぶための関数です。