java - Bukkit ProtocolLib 名称标签

标签 java bukkit

我正在尝试更改玩家实体上方的名称。我已经成功地做到了这一点,但它有将玩家皮肤更改为默认值的副作用。如何在不重置玩家皮肤的情况下更改玩家的姓名标签。

使用的插件库

  • 协议(protocol)库

  • PacketWrapper

用于更改名称的代码

public void changeNameOnHead(Player player, String name) {
 PlayerInfoData pid = new
 PlayerInfoData(WrappedGameProfile.fromPlayer(player), 1,
  EnumWrappers.NativeGameMode.SURVIVAL,
  WrappedChatComponent.fromText(player.getName()));


 WrapperPlayServerPlayerInfo wpspi = new WrapperPlayServerPlayerInfo();
 wpspi.setAction(EnumWrappers.PlayerInfoAction.REMOVE_PLAYER);
 wpspi.setData(Collections.singletonList(pid));


 for (Player p: Bukkit.getOnlinePlayers()) {
  if (p.equals(player)) {
   continue;
  }
  p.hidePlayer(player);
  wpspi.sendPacket(p);
 }

 ProtocolLibrary.getProtocolManager().addPacketListener(
  new PacketAdapter(RoleplayEngine.Instance,
   PacketType.Play.Server.PLAYER_INFO) {

   @Override
   public void onPacketSending(PacketEvent event) {

    if (event.getPacket().getPlayerInfoAction().read(0) != EnumWrappers.PlayerInfoAction.ADD_PLAYER) {
     return;
    }

    PlayerInfoData pid =
     event.getPacket().getPlayerInfoDataLists().read(0).get(0);

    if (pid.getProfile().getUUID() !=
     player.getUniqueId()) return;


    PlayerInfoData newPid = new PlayerInfoData(
     pid.getProfile().withName(name),
     pid.getPing(),
     pid.getGameMode(),
     WrappedChatComponent.fromText(name)
    );


    event.getPacket().getPlayerInfoDataLists().write(0,
     Collections.singletonList(newPid));

   }
  }
 );

 for (Player p: Bukkit.getOnlinePlayers()) {
  if (p.equals(player)) {
   continue;
  }
  p.showPlayer(player);
 }

}

最佳答案

您可以尝试使用this library可在 github 中更改玩家的姓名和皮肤。

快速使用示例:

PlayerDisplayModifier p = new PublicDisplayModifier(plugin);
p.changeDisplay(myPlayer, "SkinPlayer", "NewName");

如果您的服务器是 1.8 及更低版本,则此方法有效,不确定它是否适用于更高版本。

<小时/>

如果您的服务器版本高于1.8,您可以尝试使用NickNamerIntegratedApi ,一个插件,也有一个供开发人员使用的 API。它是开源的,因此您可以挖掘使昵称更改成为可能的代码段

最后,您还可以尝试使用md-5's iTAG ,一个好fork of it通过 ataranlen

关于java - Bukkit ProtocolLib 名称标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42632562/

相关文章:

java - 使用 maven 导出的 jar 文件中包含 jar 文件和依赖项

java - 外部 XMPP 组件 - 有人知道教程或开源示例吗?

java - 类加载器找不到资源

java - 无法将 gdx-tools 添加到 libgdx gradle 项目

java - 正在创建文件,但 FileConfiguration 未在其中放入文本

java - 不知道为什么玩家能够从 bukkit GUI 中获取

java - MySQL 中的切换行语句不返回任何内容

java - Bukkit 装饰不工作

java - 如何使用jsp在按钮的单击事件上设置struts bean的属性

java - 如何在java中请求数据结构的数据锁定