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提供的一个好的