【发布时间】:2015-09-14 16:38:33
【问题描述】:
这主要用于 Spigot API,但我希望能够获取“播放器”对象并将其转换为自定义对象以添加新方法,并且我希望能够执行以下操作:
User user = (User) Bukkit.getPlayer("player_name");
我知道这可能无法回答,但学习如何做到这一点会非常有帮助
编辑:我需要知道如何完成用户类/接口
【问题讨论】:
这主要用于 Spigot API,但我希望能够获取“播放器”对象并将其转换为自定义对象以添加新方法,并且我希望能够执行以下操作:
User user = (User) Bukkit.getPlayer("player_name");
我知道这可能无法回答,但学习如何做到这一点会非常有帮助
编辑:我需要知道如何完成用户类/接口
【问题讨论】:
您不能将对象强制转换为SomeClass,除非该对象实际上是SomeClass 或其子类的实例。我认为扩展播放器类不是一种选择,因为您无法更改 Bukkit.getPlayer() 返回的内容。您可以做的是将播放器对象包装在您的自定义 User 类中,如下所示:
class User {
private Player player;
public User(Player player) {
this.player = player;
}
// your custom methods
}
将Player 更改为Bukkit.getPlayer() 返回的适当类型。然后你可以使用你的类:
User user = new User(Bukkit.getPlayer("player_name"));
【讨论】:
User.valueOf()。
player.getUniqueId(); 设置它。然后,您可以创建一个方法,例如返回 Bukkit.getPlayer(player); 的 public void toPlayer()。
Player 字段的User 对象比拥有一个Player 对象更糟糕(这将是原始情况)?也许我不了解这里的上下文,因为我不熟悉 Bukkit。
Player player(字段)存储在另一个对象(用户)中会导致内存泄漏。使用用户的 UUID 存储在 User 对象中更加高效和安全。
您可以直接在 CraftBukkit 中修改 CraftPlayer 的源代码,然后使用 CraftPlayer 对象。
【讨论】: