You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Minecraft Forge 1.19.3:如何为所有玩家或世界存储统一NBT数据?

全局数据存储方案:统一玩家数据或世界级存储

一、批量给所有玩家设置相同数据

要是你想一次性给所有在线玩家都写入(a, b)这组数据,直接遍历服务器在线玩家列表就行:

// 遍历所有在线玩家,写入统一数据
for (Player player : Bukkit.getOnlinePlayers()) {
    player.getPersistentDataContainer().putString("a", "b");
}

如果要让后续新加入的玩家自动获取这组数据,可以监听玩家加入事件,在玩家刚进服时自动写入:

@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
    Player player = event.getPlayer();
    // 可选:先判断数据是否存在,避免重复写入
    if (!player.getPersistentDataContainer().has("a", PersistentDataType.STRING)) {
        player.getPersistentDataContainer().putString("a", "b");
    }
}

二、将数据存储到世界中(全局共享)

如果不需要给每个玩家单独存数据,而是想让整个世界共享这组数据,有两种常用方式:

方式1:使用世界的持久化数据容器

直接利用世界自带的PersistentDataContainer,数据会和世界文件绑定:

// 获取服务器主世界(也可以指定其他世界)
World mainWorld = Bukkit.getWorlds().get(0);
PersistentDataContainer worldPDC = mainWorld.getPersistentDataContainer();

// 写入全局数据
worldPDC.putString("a", "b");

// 读取数据示例
String globalValue = worldPDC.getString("a");

方式2:自定义配置文件存储

如果数据需要手动修改或者更直观的管理,创建自定义YAML配置文件是更合适的选择:

// 初始化配置文件(替换YourPluginName为你的插件名称)
Plugin yourPlugin = Bukkit.getPluginManager().getPlugin("YourPluginName");
File globalDataFile = new File(yourPlugin.getDataFolder(), "globalData.yml");

// 若文件不存在则从插件资源目录复制
if (!globalDataFile.exists()) {
    yourPlugin.saveResource("globalData.yml", false);
}

YamlConfiguration globalConfig = YamlConfiguration.loadConfiguration(globalDataFile);

// 写入数据
globalConfig.set("a", "b");
globalConfig.save(globalDataFile);

// 读取数据示例(第二个参数是默认值,当key不存在时返回)
String globalValue = globalConfig.getString("a", "default_b");

关键提示

  • 使用PersistentDataContainer时,强烈建议自定义NamespacedKey来避免和其他插件的数据冲突,示例:
NamespacedKey customKey = new NamespacedKey(yourPlugin, "a");
player.getPersistentDataContainer().put(customKey, PersistentDataType.STRING, "b");
  • 世界PDC适合绑定世界的动态数据,配置文件则适合需要持久化且支持手动编辑的场景。

内容的提问来源于stack exchange,提问作者BaRiboD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 17:00:14