Bukkit.invetory 删除了不必要的聊天颜色格式 1.13.2

Bukkit.invetory removes unnecessary chatcolor formatiing 1.13.2

亲爱的 Whosebug 社区,

我被这个问题困扰了几个月了,我在互联网上搜索了很多,但我找不到和我有同样问题的人。

所以基本上当我使用 Bukkit.createInventory(player, slots, title) 创建库存时,带有 e.getView().getTitle() 的库存标题 (InventoryClickEvent) 与我创建库存时输入的标题不同。

创建库存时输入的标题例如§2§5§r§3§lInventory§n§7§n§4,在我用e.getView().getTitle()获得标题后最终为§3§lInventory§4。观察一些格式化代码是如何被删除的。

所以真正的问题是库存标题不等于它应该的标题,似乎在从创建的库存返回标题时删除了不必要的格式代码。这个问题只发生在 minecraft 服务器 运行 1.13.2.

我已经尝试使用 plugin.getServer().createInventory(player, slots, title) 创建库存,但没有成功。我还尝试使用 e.getClickedInventory().getTitle() 而不是 e.getView().getTitle() 获得标题,但也没有成功。但是,当我从标题中删除所有格式代码时,它会起作用。

我希望任何人都可以帮助我解决这个问题并解释为什么会这样。

谢谢

问题:

这是因为记分牌标题不再存储为字符串...

我的世界 1.8 使用:

    public String getName() {
        return this.getInventory().getName();
    }

Minecraft 1.13.2 使用:

    public String getName() {
        return CraftChatMessage.fromComponent(this.getInventory().getDisplayName());
    }

标题现在基本上正在重新格式化,不幸的是,方法 fromComponent(...) 似乎删除了所有不必要的格式。

解法:

因为我真的不知道你到底想用这个标题做什么,我只能建议你在比较标题或任何你需要它的时候删除颜色代码。

String title = ChatColor.stripColor(e.getView().getTitle());

如果您确实需要颜色代码,可以将它们存储在 HashMap<Player, String> titles 类似的矿石中。