Java Bukkit ProtocolLib名称标签

Java Bukkit ProtocolLib名称标签,java,bukkit,Java,Bukkit,我正在尝试更改玩家实体上方的名称。我已经成功地做到了这一点,但它有一个副作用,改变玩家皮肤默认。如何在不重置玩家皮肤的情况下更改玩家的姓名标签 使用插件库 原科利犬 包装纸 用于更改名称的代码 public void changeNameOnHead(Player player, String name) { PlayerInfoData pid = new PlayerInfoData(WrappedGameProfile.fromPlayer(player), 1, EnumWr

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

使用插件库

  • 原科利犬

  • 包装纸

用于更改名称的代码

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);
 }

}
您可以尝试使用github中的available来更改玩家的姓名和皮肤

用法的快速示例:

PlayerDisplayModifier p = new PublicDisplayModifier(plugin);
p.changeDisplay(myPlayer, "SkinPlayer", "NewName");
如果您的服务器为1.8或更低版本,则此选项有效,但不确定它是否适用于更高版本


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

最后,您还可以尝试使用ataranlen的good by

,您可以尝试使用github中的available来更改玩家的姓名和皮肤

用法的快速示例:

PlayerDisplayModifier p = new PublicDisplayModifier(plugin);
p.changeDisplay(myPlayer, "SkinPlayer", "NewName");
如果您的服务器为1.8或更低版本,则此选项有效,但不确定它是否适用于更高版本


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

最后,您也可以尝试使用,并且与ataranlen提供的一个好的