跳转至

Api文档

日志

  • 作者:Minxyzgo
  • 日期:2025-05-03

RWPP提供以下顶层变量及函数供开发者使用:

通用

  • id 为该扩展的id。

示例

my-extension
info(id) -- "my-extension"
  • scripts 脚本模块。
  • ui ui模块。
  • extension 为该扩展的对象。
  • externalHandler 外部文件处理模块。
  • game 当前游戏的实例,详情见Game。
  • net 网络模块。
  • config 配置模块。
  • soundPool 声音池模块。
  • modManager 模组管理器。
  • isAndroid 当前平台是否为Android。
  • isDesktop 当前平台是否为桌面。
  • version 当前RWPP的版本。

  • info 输出日志信息,类型为函数。

示例

my-extension
info("Hello, world!")
  • getConfig(key) 以及 setConfig(key, value) 用于获取和设置扩展的配置,类型为函数。

示例

my-extension
local data = getConfig('data')

onExit(function()
    setConfig('data', data)
end)

注意

getConfig和setConfig存入和返回的值只能为字符串

  • onExit(callback) 注册一个函数,在RWPP退出时执行,类型为函数。

示例

my-extension
onExit(function()
    info("Goodbye, world!")
end)
  • reply(player, message, [title], [color]) 发送一条消息给指定玩家,类型为函数。

示例

my-extension
reply(player, "Hello, world!", "Greeting", -1)
  • timer(initial_delay, interval, callback) 创建一个定时器,类型为函数。

示例

my-extension
timer(1000, 1000, function()
    info("Hello, world!")
end)

事件系统

RWPP的事件处理在lua中采用回调的方式,有以下关于事件的函数:

  • filterEvents(event, [priority], callback) 注册一个回调函数,用于监听指定事件,类型为函数,其中priority为可选参数,从高到低依次为 HIGHEST, HIGH, NORMAL, LOW, LOWEST, MONITOR。

示例

my-extension
filterEvents('ChatMessageEvent', 'HIGH', function(event)
    event:intercept()
end)

注意

event:intercept()用于中断事件的传播,如果不调用,则事件会继续传播到其他监听者。

  • filterEventsOnce(...) 与 filterEvents 类似,但只会触发一次。
  • broadcast(event, ...) 广播一个事件,类型为函数。

示例

my-extension
broadcast('ChatMessageEvent', 'Hello, world!', nil, -1)

RWPP目前有以下可监听的事件。

指令系统

RWPP提供了较为简单的指令系统,所有指令的前缀为/,可使用registerCommand(text, params, description, callback)注册指令。

  • text 为指令的名称。
  • params 为指令的参数,用<>包裹的参数为必要参数,用[]包裹的参数为可选参数,也可在结尾处使用...来表示一个可变参数。下面是一个合法的参数列表: <required1> <required2> ...

  • description 为指令的描述。

  • callback 为指令的回调函数,接收两个参数,第一个参数为指令的参数列表,第二个参数为执行该指令的玩家。

示例

my-extension
registerCommand('say', '<message>', 'Say something', function(args, player)
    info(player:getName() .. ' says: ' .. args[1])
end)

模块系统

  • require(module_name) 加载模块
  • 模块名为 扩展id/xx.lua

例如,有以下模块:

module1
scripts/
├── test.lua
├── folder/
│   ├── test2.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时,表示该包已被处理,不再传播到其他监听者。

示例

my-extension
registerPacketDecoder(500, function(input) -- input: DataInputStream
    return java.proxy(java.import('io.github.rwpp.net.Packet'), {
        data = input:readUTF()
    })
end)
registerPacketListener(500, function(client, packet) -- client: Client, packet: Packet
    info(java.unwrap(packet).data)
end)

Extension

extension对象提供了以下方法和字段:

  • isEnabled() 扩展是否启用。
  • setEnabled(enabled: Boolean) 设置扩展是否启用。
  • getFile() 扩展的文件。
  • getZipFile() 如果扩展为zip文件,则返回zip文件,否则返回nil。
  • getConfig() 扩展的配置。
  • settingPanel: MutableList<LuaWidget> 扩展的设置面板,类型为列表。

示例

my-extension
extension.settingPanel:add(text('Hello, world!', 1, color('#FFFFFF')))
  • extraPlayerOptions: MutableList<LuaWidget> 扩展的玩家选项,类型为列表。
  • extraRoomOptions: MutableList<LuaWidget> 扩展的房间选项,类型为列表。
  • openInputStream(entry_name: String) 打开扩展的资源文件,类型为函数。

示例

my-extension
local input = extension:openInputStream('config.json')
local data = input:readAll()
input:close()

Extesion Config

通过extension:getConfig()获取。

  • getId() 扩展的id。
  • getName() 扩展的名称。
  • getDisplayName() 扩展的显示名称。
  • getIcon() 扩展的图标。
  • getVersion() 扩展的版本。
  • getAuthor() 扩展的作者。
  • getDescription() 扩展的描述。
  • getDependencies() 扩展的依赖。

External Handler

externalHandler对象提供了以下方法: - openFileChooser(onChooseFile: (File) -> Unit) 打开文件选择器。

示例

my-extension
externalHandler:openFileChooser(function(file)
    info(file:getAbsolutePath())
end)

Sound Pool

soundPool对象提供了以下方法:

  • newSound(input: InputStream, name: String): GameSound 创建一个新的声音。
  • GameSound.play() 播放声音。

示例

my-extension
local input = extension:openInputStream('sound.wav')
local sound = soundPool:newSound(input, 'test')
sound:play()

Config

  • getGameConfig(name: String) 获取游戏配置。
  • setGameConfig(name: String, value: Any) 设置游戏配置。

示例

my-extension
config:getGameConfig('musicVolume')
config:setGameConfig('musicVolume', 0.5)

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, ...)

示例

my-extension
-- Using java.import(class_name)
String = java.import('java.lang.String')
str = String('str')

-- Using java.new(jclass, ...)
str = java.new(String, 'This is the content of the String')
  • 调用Java方法,可以使用obj:method(...),调用静态方法,可以使用jclass:method(...)

示例

my-extension
-- Calling instance method
str = java.new(String, 'Hello, world!')
info(str:toLowerCase())

-- Calling static method
Calendar = java.import('java.util.Calendar')
info(Calendar:getInstance():getTimeInMillis())
  • 访问Java字段,可以使用obj.field或者jclass.field

示例

my-extension
-- Accessing instance field
str = java.new(String, 'Hello, world!')
info(str.length)

-- Accessing static field
Integer = java.import('java.lang.Integer')
info(Integer.MAX_VALUE)
  • java.luaify(jobject) 将Java对象转换为Lua对象,类型为函数。

示例

my-extension
-- Converting Java object to Lua object
String = java.import('java.lang.String')
str = java.new(String, 'Hello, world!')
lua_str = java.luaify(str)
info(lua_str)
  • java.proxy(jclass, ..., table) 创建一个实现了指定接口的java对象

示例

my-extension
button = java.new(java.import('java.awt.Button'), 'Execute')
callback = {}
function callback:actionPerformed(ev)
    -- do something
end

buttonProxy = java.proxy('java.awt.ActionListener', callback)
button:addActionListener(buttonProxy)

其它

  • functionN(count, func)一种快速创建kotlin函数的方式

示例

my-extension
functionN(2, function(a, b)
    return a + b
end) --- return kotlin.jvm.Function2