如何向播放器对象添加属性?

时间:2015-07-18 07:41:35

标签: java bukkit

我不太清楚这些是否是正确的单词,但在我的插件中,玩家必须选择一个类,我不太清楚如何分类。每个级别都有独特的法术/技能。如果我可以为一个玩家添加一个属性(例如每个类的布尔值;如果它们是那个类,则为true,否则为false)并返回值,这将解决我的问题。我该怎么做?

2 个答案:

答案 0 :(得分:2)

如果不需要跨服务器实例维护该属性,请使用Player的{​​{3}}接口。但是,使用起来很困难(也很慢),关闭或重新加载时不会保存。

您可以使用Map将每位玩家的UUID映射到该属性:

private static final Map<UUID, Boolean> playerProperties = new HashMap<>();

@Override
public void onEnable() {
    // Load from file / database
}

@Override
public void onDisable() {
    // Save to file / database
}

从那里,你可以获得playerProperties.get(player.getUUID())的玩家的财产。

但是,由于该属性是一个布尔值,因此使用Set并使用该属性存储玩家,使用Metadatable检查属性时算法更有效:

private static final Set<UUID> playerProperties = new HashSet<>();

@Override
public void onEnable() {
    // Load from file / database
}

@Override
public void onDisable() {
    // Save to file / database
}

public boolean getPlayerProperty(Player player) {
    return playerProperties.contains(player.getUUID());
}

public void setPlayerProperty(Player player, boolean newProperty) {
    if (newProperty)
        playerProperties.add(player.getUUID());
    else
        playerProperties.remove(player.getUUID());
}

答案 1 :(得分:-1)

我认为您可以使用元数据执行此操作。请查看包org.bukkit.metadata

中的https://hub.spigotmc.org/javadocs/bukkit/