提供: Minecraft Modding Wiki
この編集を取り消せます。
下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
11行目: | 11行目: | ||
ILuaObjectとは、通常Luaでは扱えない独自のオブジェクトをLua側からでも間接的に扱えるようにするためのインターフェイスです。 | ILuaObjectとは、通常Luaでは扱えない独自のオブジェクトをLua側からでも間接的に扱えるようにするためのインターフェイスです。 | ||
ILuaObjectの実装クラスのインスタンスをLua側へ渡すことで、Lua側からは実装したメソッドを通してJava側のオブジェクトを操作することができます。 | ILuaObjectの実装クラスのインスタンスをLua側へ渡すことで、Lua側からは実装したメソッドを通してJava側のオブジェクトを操作することができます。 | ||
− | |||
− | |||
実装例(IPeripheral.callMethod()の戻り値でLua側へ渡す場合): | 実装例(IPeripheral.callMethod()の戻り値でLua側へ渡す場合): | ||
<source lang = "java"> | <source lang = "java"> | ||
− | public class | + | public class MyPeripheral implements IPeripheral { |
− | + | /* 略 */ | |
− | |||
− | |||
− | |||
@Override | @Override | ||
− | public | + | public Object[] callMethod(IComputerAccess computer, ILuaContext context, int method, Object[] arguments) throws LuaException, InterruptedException { |
− | + | /* 略 */ | |
− | |||
− | + | MyObject myObject = new MyObject(); // ILuaObjectで扱うオブジェクトの例 | |
− | + | return new Object[] { wrapMyObject(myObject) }; | |
− | |||
− | |||
− | MyObject myObject = new MyObject(); | ||
− | return new Object[] { wrapMyObject(myObject) }; | ||
− | |||
− | + | /* 略 */ | |
} | } | ||
− | private ILuaObject wrapMyObject(final MyObject myObject) { | + | private ILuaObject wrapMyObject(final MyObject myObject) { |
return new ILuaObject() { | return new ILuaObject() { | ||
@Override | @Override | ||
public String[] getMethodNames() { | public String[] getMethodNames() { | ||
− | return new String[] { /* | + | return new String[] { /* myObject を扱うためのメソッド名の配列 */ }; |
} | } | ||
@Override | @Override | ||
public Object[] callMethod(ILuaContext context, int method, Object[] arguments) throws LuaException, InterruptedException { | public Object[] callMethod(ILuaContext context, int method, Object[] arguments) throws LuaException, InterruptedException { | ||
− | // TODO: | + | // TODO: myObject を扱うためのメソッドの処理を実装 |
return null; | return null; | ||
} | } | ||
55行目: | 44行目: | ||
}; | }; | ||
} | } | ||
− | |||
− | |||
} | } | ||
75行目: | 62行目: | ||
ILuaObjectの実装クラスのインスタンスはテーブルに変換されてLua側へ渡されます。テーブルの要素はキーがメソッド名の文字列、値がそのメソッドを呼ぶための関数です。 | ILuaObjectの実装クラスのインスタンスはテーブルに変換されてLua側へ渡されます。テーブルの要素はキーがメソッド名の文字列、値がそのメソッドを呼ぶための関数です。 | ||
− | |||
− | |||
例えばJava側で以下のようにILuaObjectを実装した場合、 | 例えばJava側で以下のようにILuaObjectを実装した場合、 | ||
90行目: | 75行目: | ||
<source lang = "lua"> | <source lang = "lua"> | ||
-- Lua: | -- Lua: | ||
− | -- | + | -- 以下 tObject に、実装した ILuaObject が入っているものとする |
− | + | tObject.getType() | |
− | + | tObject.getPos() | |
− | + | tObject.getName() | |
− | + | tObject.kill() | |
− | |||
− | |||
− | |||
</source> | </source> | ||
Lua側でメソッドを呼び出した場合、Java側では実装したcallMethod()が呼び出されます。 | Lua側でメソッドを呼び出した場合、Java側では実装したcallMethod()が呼び出されます。 | ||
119行目: | 101行目: | ||
} | } | ||
</source> | </source> | ||
− |