Api文档
日志
- 作者:Minxyzgo
- 日期:2025-05-03
RWPP提供以下顶层变量及函数供开发者使用:
通用
id为该扩展的id。
scripts脚本模块。uiui模块。extension为该扩展的对象。externalHandler外部文件处理模块。game当前游戏的实例,详情见Game。net网络模块。config配置模块。soundPool声音池模块。modManager模组管理器。isAndroid当前平台是否为Android。isDesktop当前平台是否为桌面。-
version当前RWPP的版本。 -
info输出日志信息,类型为函数。
getConfig(key)以及setConfig(key, value)用于获取和设置扩展的配置,类型为函数。
示例
注意
getConfig和setConfig存入和返回的值只能为字符串
onExit(callback)注册一个函数,在RWPP退出时执行,类型为函数。
reply(player, message, [title], [color])发送一条消息给指定玩家,类型为函数。
timer(initial_delay, interval, callback)创建一个定时器,类型为函数。
事件系统
RWPP的事件处理在lua中采用回调的方式,有以下关于事件的函数:
filterEvents(event, [priority], callback)注册一个回调函数,用于监听指定事件,类型为函数,其中priority为可选参数,从高到低依次为HIGHEST, HIGH, NORMAL, LOW, LOWEST, MONITOR。
示例
注意
event:intercept()用于中断事件的传播,如果不调用,则事件会继续传播到其他监听者。
filterEventsOnce(...)与filterEvents类似,但只会触发一次。broadcast(event, ...)广播一个事件,类型为函数。
RWPP目前有以下可监听的事件。
指令系统
RWPP提供了较为简单的指令系统,所有指令的前缀为/,可使用registerCommand(text, params, description, callback)注册指令。
text为指令的名称。-
params为指令的参数,用<>包裹的参数为必要参数,用[]包裹的参数为可选参数,也可在结尾处使用...来表示一个可变参数。下面是一个合法的参数列表:<required1> <required2> ... -
description为指令的描述。 callback为指令的回调函数,接收两个参数,第一个参数为指令的参数列表,第二个参数为执行该指令的玩家。
示例
模块系统
require(module_name)加载模块- 模块名为
扩展id/xx.lua
例如,有以下模块:
可以这样调用此模块:
my-extension
local module1 = require('module1/test.lua')
local module2 = require('module1/folder/test2.lua')
网络
registerPacketDecoder(packet_type: Int, decoder: (DataInputStream) -> Packet)创建一个新的网络包解码器,类型为函数。registerPacketListener(packet_type: Int, listener: (Client, Packet) -> Boolean)创建一个新的网络包监听器,类型为函数。 注意,你需要先创建一个解码器,然后才能注册监听器。listener函数返回true时,表示该包已被处理,不再传播到其他监听者。
示例
Extension
extension对象提供了以下方法和字段:
isEnabled()扩展是否启用。setEnabled(enabled: Boolean)设置扩展是否启用。getFile()扩展的文件。getZipFile()如果扩展为zip文件,则返回zip文件,否则返回nil。getConfig()扩展的配置。settingPanel: MutableList<LuaWidget>扩展的设置面板,类型为列表。
extraPlayerOptions: MutableList<LuaWidget>扩展的玩家选项,类型为列表。extraRoomOptions: MutableList<LuaWidget>扩展的房间选项,类型为列表。openInputStream(entry_name: String)打开扩展的资源文件,类型为函数。
示例
Extesion Config
通过extension:getConfig()获取。
getId()扩展的id。getName()扩展的名称。getDisplayName()扩展的显示名称。getIcon()扩展的图标。getVersion()扩展的版本。getAuthor()扩展的作者。getDescription()扩展的描述。getDependencies()扩展的依赖。
External Handler
externalHandler对象提供了以下方法:
- openFileChooser(onChooseFile: (File) -> Unit) 打开文件选择器。
Sound Pool
soundPool对象提供了以下方法:
newSound(input: InputStream, name: String): GameSound创建一个新的声音。GameSound.play()播放声音。
示例
Config
getGameConfig(name: String)获取游戏配置。setGameConfig(name: String, value: Any)设置游戏配置。
Net
net对象提供了以下方法:
getClient()获取一个okhttp客户端。sendPacketToServer(packet: Packet)发送一个网络包到服务器。sendPacketToClients(packet: Packet)发送一个网络包到所有客户端。openUriInBrowser(uri: String)打开一个uri。downloadFile(url: String, outputFile: File, progress_callback: (progress: Float) -> Unit)下载一个文件。getBbsProtocols()获取论坛协议。
LuaJava
RWPP的lua基于LuaJava,因此LuaJava也提供了相关的函数,下面给出一些常用的函数:
java.import(class_name)返回一个jclass或者table,类型为函数。
示例
my-extension
lang = java.import('java.lang.*')
info(lang.System:currentTimeMillis())
R = java.import('android.R.*')
info(R.id.input)
j = java.import('java.*.*')
info(j.lang.System:currentTimeMillis())
-- Both works
j = java.import('java.*')
info(j.lang.System:currentTimeMillis())
System = java.import('java.lang.System')
info(System:currentTimeMillis())
- 创建新的Java对象,可以使用
java.import(class_name)(...)或者java.new(jclass, ...)
示例
- 调用Java方法,可以使用
obj:method(...),调用静态方法,可以使用jclass:method(...)
示例
- 访问Java字段,可以使用
obj.field或者jclass.field
示例
java.luaify(jobject)将Java对象转换为Lua对象,类型为函数。
示例
java.proxy(jclass, ..., table)创建一个实现了指定接口的java对象
示例
其它
functionN(count, func)一种快速创建kotlin函数的方式