-
Notifications
You must be signed in to change notification settings - Fork 0
Extensions
Fromage is extremely abstract, even Sponge is abstracted upon after being abstracted on Minecraft! This makes your job as a developer for making addons or extensions to this plugin easy! Fromage finds libraries on the classpath using the Reflections library for all types that have the @FromageLib
. However, Fromage enforces a strict policy to only allow annotated elements that inherit from LuaObject.Static
which is a LuaObject
but is accessed statically.
For example, if we wanted to create a static function; but you have to reference the class, you simply do this in your @FromageLib
class:
@FromageLib
public class ExampleLib extends LuaObject.Static {
@LuaFunction
public void exampleMethod() {}
}
This means is processed and compiled into this: ExampleLib.exampleMethod()
for Lua users to use.
However, if you want to use a regular LuaObject
, it doesn't hold static methods. It is a instance that can be given from a static object. This object is completely local and instance based, similarly to regular objects. There are also, global functions that do not require a reference to the originating class. Similar to the broadcast(msg)
function showed in the README.md; since this object is only a instance face, you do not need the annotation of @FromageLib
, since it doesn't use static functions.
For example:
public class ExampleLib extends LuaObject {
@GlobalFunction
public void globalFunc() {}
@LuaFunction
public void luaFunc(){}
}
The global function is processed and compiled into a state similarly to this: globalFunc()
from anywhere in the script. However, #luaFunc
is processed into exampleLibInstance.luaFunc()
.
After you finished your library class, build it and place it in the config/fromage/ directory. It automatically identifies your library JAR and discovers your object classes and library classes automatically and processes them.