Skip to content

内置 API

LittleKt 脚本中可直接使用的预注入变量和方法。语法见 语言文档

serverSys

服务端系统相关的数据和能力。

属性

属性类型说明
serverSys.nameSpaceString引擎命名空间
serverSys.systemNameString引擎系统名称
serverSys.levelIdInt当前关卡 ID

serverSys.i

返回插件主类 LittleKtServer 实例,可直接调用所有 ServerSystem 方法:

kotlin
// 创建实体
serverSys.i.CreateEngineEntityByTypeStr("minecraft:zombie", (0, 65, 0), (0, 0), 0)

// 销毁实体
serverSys.i.DestroyEntity(entityId)

// 向客户端发消息
serverSys.i.NotifyToClient(playerId, "ServerMsg", args)

clientSys

与玩家客户端交互,可弹窗或触发震动。

clientSys.createMsgbox(playerId, message)

向指定玩家弹出提示框,仅有一个确定按钮。

参数类型说明
playerIdString目标玩家 ID
messageString弹窗内容
kotlin
clientSys.createMsgbox(playerId, "欢迎来到服务器!")

clientSys.createConfirmbox(playerId, message, callback)

弹出确认框,有确认和取消两个按钮。玩家点击后触发回调。

参数类型说明
playerIdString目标玩家 ID
messageString弹窗内容
callbackFunction回调函数,参数为 Booleantrue=确认,false=取消)
kotlin
clientSys.createConfirmbox(playerId, "确定要传送吗?", fun(ok) {
    if (ok) {
        println("玩家确认")
    } else {
        println("玩家取消")
    }
})

clientSys.createInputbox(playerId, message, callback)

弹出输入框。玩家输入后触发回调。

参数类型说明
playerIdString目标玩家 ID
messageString输入提示
callbackFunction回调函数,参数为 String(玩家输入内容)
kotlin
clientSys.createInputbox(playerId, "请输入昵称:", fun(text) {
    println("玩家输入:$text")
})

clientSys.vibrateDevice(playerId, milliseconds)

触发玩家设备震动。

参数类型默认值说明
playerIdString目标玩家 ID
millisecondsInt300震动时长(毫秒),iOS 无效
kotlin
clientSys.vibrateDevice(playerId, 500)

serverApi

完整的 ModSDK 服务端 API 入口。所有引擎组件都通过 serverApi.GetEngineCompFactory() 创建:

kotlin
// 操作玩家
val comp = serverApi.GetEngineCompFactory().CreatePlayer(playerId)
comp.SetPlayerMovable(false)

// 放置方块
val blockComp = serverApi.GetEngineCompFactory().CreateBlockInfo(serverSys.levelId)
blockComp.SetBlockNew((0, 65, 0), ["name" to "minecraft:stone", "aux" to 0], 0, 0, true)

// 执行命令
val cmdComp = serverApi.GetEngineCompFactory().CreateCommand(serverSys.levelId)
cmdComp.SetCommand("/time set day")

// 设置天气
val weatherComp = serverApi.GetEngineCompFactory().CreateWeather(serverSys.levelId)
weatherComp.SetRaining(1.0, 600)

组件工厂方法包括 CreatePlayerCreateItemCreateGameCreateBlockInfoCreateCommandCreateWeatherCreateTimeCreateDimensionCreateEffectCreateExpCreateFlyCreateMsgCreateNameCreateAttrCreateProjectile 等几十种。具体用法见 玩法示例

serverApi 上还有几个顶层函数:

函数说明
serverApi.GetPlayerList()获取所有在线玩家 ID 列表
serverApi.GetEngineActor()获取所有已加载实体
serverApi.GenerateColor(name)生成颜色码,如 "RED""GREEN""BLUE"
serverApi.GetMinecraftEnum()获取枚举值(EnchantTypeEffectType 等)
serverApi.GetEngineCompFactory()获取组件工厂

println(message)

向聊天栏输出灰字提示,全服可见。

kotlin
println("Hello World")
println("玩家坐标:$x, $y, $z")

globals

跨脚本共享的全局 Map。一个脚本写入,其他脚本可以读取。服务器重启后清空。

kotlin
// 写入
globals["score"] = 100
globals["players"] = ["Steve", "Alex"]

// 读取
val score = globals["score"]
if (score == null) {
    globals["score"] = 0
}

db

持久化键值存储,数据保存在世界自定义数据中,服务器重启后仍然存在

kotlin
// 写入
db["spawn_x"] = 100
db["spawn_z"] = 200

// 读取(不存在返回 null)
val x = db["spawn_x"]

// 带默认值
val y = db.get("spawn_y", 64)

// 删除
db.delete("spawn_x")

// 获取全部数据
val all = db.get_all()
方法说明
db["key"]读取,不存在返回 null
db["key"] = value写入,自动保存
db.get(key, default)读取,不存在返回 default
db.delete(key)删除指定 key
db.get_all()获取全部数据
db.save()手动保存

globals 的区别:globals 在内存中,重启清空;db 持久化到世界数据,重启不丢。

require(x, y, z, slot, dm)

加载指定容器槽位中书里的代码作为模块执行,返回模块对象。相同位置的模块只加载一次(有缓存)。

模块内定义的顶层变量和函数会作为导出符号,供外部通过 . 语法访问:

kotlin
// 假设 (100,64,100) 处箱子第 0 格的书中定义了:
//   val version = 1
//   fun greet(name) = "Hello, $name"

val mod = require(100, 64, 100, 0, 0)
println(mod.version)          // 1
println(mod.greet("World"))   // Hello, World
参数类型说明
xInt容器 X 坐标
yInt容器 Y 坐标
zInt容器 Z 坐标
slotInt槽位编号(0 起始)
dmInt维度 ID(0=主世界)

其他工具

变量说明
jsonJSON 编解码:json.dumps(obj) / json.loads(str)
uuid唯一 ID 生成:uuid.uuid4().hex
type(x)返回值的类型名称字符串