
离线玩家缓存:导演剪辑版
一个API Mod,允许在玩家离线时将玩家数据缓存到服务器上。 这意味着Mods可以使用这个API来访问离线玩家的数据。

前言 📝
离线玩家缓存:导演剪辑版已从头完全重制,其框架早于 1.* 及更低版本。
本模组的设计初衷是为服务器提供持久的排行榜,以记录离线玩家的数据。
内容 📦
模组开发者可以注册与 ID 和 Codec 关联的 Record(记录),用于序列化/反序列化数据。
当玩家从服务器断开连接时,其缓存数据会存储到服务器的 level(世界)数据中,之后可通过代码或模组提供的命令进行访问。
当玩家重新连接服务器时,其缓存数据将被删除。
命令
/opc get <uuid>|<name> <key>
提供当前玩家值的详细信息。如果玩家在线,将提供其当前值;如果离线,则提供其缓存值。
/opc remove <uuid>|<name> <key>
如果具有关联用户名或 UUID 的玩家处于离线状态,将根据所选键删除该玩家的缓存值。 如果玩家在线,此命令不会执行任何操作。
/opc list <uuid>|<name>
列出该玩家离线时存储的所有键和值;如果在线,则列出其当前所有的键和值。
开发者指南
环境配置
离线玩家缓存有 Modrinth 和 Curseforge 页面。
如需使用 API 进行开发,请添加以下内容:
gradle.properties
opc_version=...
build.gradle
repositories {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
content {
includeGroup "maven.modrinth"
}
}
}
dependencies {
modImplementation "maven.modrinth:opc-directors-cut:${project.opc_version}"
// 如果你不希望强制用户安装本模组,请包含这一行。
include "maven.modrinth:opc-directors-cut:${project.opc_version}"
}
或者,如果你使用 Kotlin DSL:
build.gradle.kts
repositories {
maven {
name = "Modrinth"
url = uri("https://api.modrinth.com/maven")
content {
includeGroup("maven.modrinth")
}
}
}
dependencies {
modImplementation("maven.modrinth:opc-directors-cut:${properties["opc_version"]}")
// 如果你不希望强制用户安装本模组,请包含这一行。
include("maven.modrinth:opc-directors-cut:${properties["opc_version"]}")
}
迁移至 2.*
- 不再有键的概念。相反,你需要注册一个 ID、一个
Record和一个Codec。
创建记录
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
public record Contract(String label, boolean signed) {
public static Codec<Contract> CODEC = RecordCodecBuilder.create((instance) ->
instance.group(
Codec.STRING.fieldOf("label").forGetter(Contract::label),
Codec.BOOL.fieldOf("signed").forGetter(Contract::signed)
).apply(instance, Contract::new)
);
}
注册
import maven_group.modid.concept.Contract; // 契约 :)
// 在静态/模组初始化期间的某个地方
private void init() {
OfflinePlayerCacheAPI.register(CONTRACT_RECORD_ID, Contract.class, Contract.CODEC, (Player player) -> {
// 在此代码块中,你决定如何将玩家数据转换为你选择的 Record。
return new Contract(player.getName() + ":contracted", true);
});
}
获取
var cache = OfflinePlayerCacheAPI.getCache(server);
cache.getEntry(Contract.class, "bibi_reden").ifPresent(contract -> {
// 现在我们知道该玩家存在有效的 Contract 条目。
// 你也可以使用 UUID 获取条目。
});
特别感谢我们的赞助商
使用代码“BAREMINIMUM”即可享受首月 15% 折扣!
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。