下面列出了怎么用org.bukkit.Skin的API类实例代码及写法,或者点击链接到github查看源代码。
private void appendAddition(TabEntry entry, int index) {
Skin skin = entry.getSkin(this.view);
BaseComponent displayName = this.getContent(entry, index);
this.addPacket.b.add(
NMSHacks.playerListPacketData(
this.addPacket,
entry.getId(),
entry.getName(this.view),
displayName,
entry.getGamemode(),
entry.getPing(),
entry.getSkin(this.view)));
// Due to a client bug, display name is ignored in ADD_PLAYER packets,
// so we have to send an UPDATE_DISPLAY_NAME afterward.
this.updatePacket.b.add(
NMSHacks.playerListPacketData(this.updatePacket, entry.getId(), displayName));
this.updateFakeEntity(entry, true);
}
public static Skin parseUnsignedSkin(@Nullable Node node) throws InvalidXMLException {
if(node == null) return null;
String data = node.getValueNormalize();
try {
Base64.decodeBase64(data.getBytes());
} catch(IllegalArgumentException e) {
throw new InvalidXMLException("Skin data is not valid base64", node);
}
return new Skin(data, null);
}
public Skin needSkin(String text) {
return MapUtils.computeIfAbsent(skins, text, t -> {
final ConfigurationSection skinSection = root.getConfigurationSection("skins");
if(skinSection != null) {
final String referenced = skinSection.getString(text);
if(referenced != null && !referenced.equals(text)) {
return needSkin(referenced);
}
}
return new Skin(text, null);
});
}
public static PacketPlayOutPlayerInfo.PlayerInfoData playerListPacketData(PacketPlayOutPlayerInfo packet, UUID uuid, String name, @Nullable BaseComponent displayName, GameMode gamemode, int ping, @Nullable Skin skin) {
GameProfile profile = new GameProfile(uuid, name);
if(skin != null) {
for(Map.Entry<String, Collection<Property>> entry : Skins.toProperties(skin).asMap().entrySet()) {
profile.getProperties().putAll(entry.getKey(), entry.getValue());
}
}
PacketPlayOutPlayerInfo.PlayerInfoData data = packet.new PlayerInfoData(profile, ping, gamemode == null ? null : EnumGamemode.getById(gamemode.getValue()), null);
data.displayName = displayName == null ? null : new BaseComponent[]{ displayName };
return data;
}
@Command(aliases = {"info"},
desc = "Dump the encoded data for a player's skin",
usage = "[player]")
public void info(CommandContext args, CommandSender sender) throws CommandException {
Skin skin = CommandUtils.getPlayerOrSelf(args, sender, 0).getSkin();
sender.sendMessage(ChatColor.BLUE + "Textures: " + ChatColor.WHITE + skin.getData());
sender.sendMessage(ChatColor.BLUE + "Signature: " + ChatColor.WHITE + skin.getSignature());
}
@Command(aliases = {"none"},
desc = "Clear a player's skin, making them steve/alex",
usage = "[player]")
public void none(CommandContext args, CommandSender sender) throws CommandException {
Player player = CommandUtils.getPlayerOrSelf(args, sender, 0);
player.setSkin(Skin.EMPTY);
sender.sendMessage(ChatColor.WHITE + "Cleared the skin of " + player.getDisplayName(sender));
}
/**
* Refresh the given player's fake appearance for the given viewer, assuming the given identity
*/
private void refreshFakeNameAndSkin(Player player, Identity identity, @Nullable String fakeDisplayName, Player viewer) {
if(identity.isRevealed(viewer)) {
player.setFakeNameAndSkin(viewer, null, null);
player.setFakeDisplayName(viewer, null);
} else {
player.setFakeNameAndSkin(viewer, identity.getNickname(), Skin.EMPTY);
player.setFakeDisplayName(viewer, fakeDisplayName);
}
}
/** Skin for the entry's icon */
@Nullable
Skin getSkin(TabView view);
@Override
public @Nullable Skin getSkin(TabView view) {
return DEFAULT_SKIN;
}
@Override
public @Nullable Skin getSkin(TabView view) {
return this.player.getSkin();
}
public static Packet playerListAddPacket(UUID uuid, String name, @Nullable BaseComponent displayName, GameMode gamemode, int ping, @Nullable Skin skin) {
PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER);
packet.add(playerListPacketData(packet, uuid, name, displayName, gamemode, ping, skin));
return packet;
}
@Override
public @Nullable Skin getSkin(TabView view) {
return DEFAULT_SKIN;
}
@Override
public @Nullable Skin getSkin(TabView view) {
final Identity identity = identityProvider.currentIdentity(player);
return identity.isDisguised(view.getViewer()) ? null : player.getSkin();
}
@EventHandler
public void onPlayerChangeSkinParts(PlayerSkinPartsChangeEvent event) {
getPlayer(event.getPlayer()).setHat(event.getPlayer().getSkinParts().contains(Skin.Part.HAT));
}
/**
* Skin for the entry's icon
*/
@Nullable Skin getSkin(TabView view);