【问题标题】:How can I create a custom Player class? (Bukkit)如何创建自定义 Player 类? (Bukkit)
【发布时间】:2015-09-14 16:38:33
【问题描述】:

这主要用于 Spigot API,但我希望能够获取“播放器”对象并将其转换为自定义对象以添加新方法,并且我希望能够执行以下操作:

User user = (User) Bukkit.getPlayer("player_name");

我知道这可能无法回答,但学习如何做到这一点会非常有帮助

编辑:我需要知道如何完成用户类/接口

【问题讨论】:

    标签: java minecraft bukkit


    【解决方案1】:

    您不能将对象强制转换为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 类用作字段类型。将其存储为玩家的唯一 ID,并在构造函数中使用 player.getUniqueId(); 设置它。然后,您可以创建一个方法,例如返回 Bukkit.getPlayer(player);public void toPlayer()
    • @Momo 不知道你的意思——拥有一个带有Player 字段的User 对象比拥有一个Player 对象更糟糕(这将是原始情况)?也许我不了解这里的上下文,因为我不熟悉 Bukkit。
    • @Cinnam 我的意思是,将Player player(字段)存储在另一个对象(用户)中会导致内存泄漏。使用用户的 UUID 存储在 User 对象中更加高效和安全。
    【解决方案2】:

    您可以直接在 CraftBukkit 中修改 CraftPlayer 的源代码,然后使用 CraftPlayer 对象。

    【讨论】:

    • 这将是一个非常愚蠢和 api 破坏性的举动!
    猜你喜欢
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多