use of net.minecraft.server.v1_16_R3.PacketPlayOutPlayerInfo in project DragonsOnline by UniverseCraft.
the class PlayerNPC116R3 method addToTablist.
public void addToTablist() {
PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo();
PacketPlayOutPlayerInfo.PlayerInfoData data = packet.new PlayerInfoData(this.handle.getProfile(), 0, EnumGamemode.NOT_SET, CraftChatMessage.fromString(tablistName)[0]);
@SuppressWarnings("unchecked") List<PacketPlayOutPlayerInfo.PlayerInfoData> players = (List<PacketPlayOutPlayerInfo.PlayerInfoData>) getField(packet, "b");
players.add(data);
this.setField(packet, "a", PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER);
this.setField(packet, "b", players);
this.sendPacket(packet);
}
use of net.minecraft.server.v1_16_R3.PacketPlayOutPlayerInfo in project DragonsOnline by UniverseCraft.
the class PlayerNPC116R3 method removeFromTablistFor.
public void removeFromTablistFor(Player player) {
PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo();
PacketPlayOutPlayerInfo.PlayerInfoData data = packet.new PlayerInfoData(this.handle.getProfile(), 0, EnumGamemode.NOT_SET, CraftChatMessage.fromString(tablistName)[0]);
@SuppressWarnings("unchecked") List<PacketPlayOutPlayerInfo.PlayerInfoData> players = (List<PacketPlayOutPlayerInfo.PlayerInfoData>) getField(packet, "b");
players.add(data);
this.setField(packet, "a", PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER);
this.setField(packet, "b", players);
this.sendPacket(packet, player);
}
use of net.minecraft.server.v1_16_R3.PacketPlayOutPlayerInfo in project DragonsOnline by UniverseCraft.
the class PlayerNPC116R3 method spawnFor.
public void spawnFor(Player player) {
if (isDestroyed)
return;
// resync
location = getEntity().getLocation();
location.setYaw(originalYaw);
handle.setCustomNameVisible(false);
sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, handle), player);
sync(() -> sendPacket(new PacketPlayOutNamedEntitySpawn(handle), player), 1);
PacketPlayOutEntityTeleport tp = new PacketPlayOutEntityTeleport();
setField(tp, "a", getEntityId());
setField(tp, "b", location.getX());
setField(tp, "c", location.getY());
setField(tp, "d", location.getZ());
setField(tp, "e", getPacketRotation(location.getYaw()));
setField(tp, "f", getPacketRotation(location.getPitch()));
setField(tp, "g", handle.isOnGround());
sync(() -> sendPacket(new PacketPlayOutEntityMetadata(handle.getId(), handle.getDataWatcher(), true), player), 2);
sync(() -> setTablistName(getTablistName()), 2);
sync(() -> sendPacket(tp, player), 3);
sync(() -> sendPacket(new PacketPlayOutEntityHeadRotation(handle, getPacketRotation(location.getYaw())), player), 6);
sync(() -> removeFromTablistFor(player), 20 + (int) Math.ceil(2 * bridge.getPing(player) * 20 / 1000));
lastSeenLocation.put(player, location.clone());
// https://www.spigotmc.org/threads/remove-nameplate-of-an-nms-player-entity.436099/ (Phaze)
ScoreboardTeam team = new ScoreboardTeam(((CraftScoreboard) Bukkit.getScoreboardManager().getMainScoreboard()).getHandle(), player.getName());
team.setNameTagVisibility(ScoreboardTeamBase.EnumNameTagVisibility.NEVER);
sendPacket(new PacketPlayOutScoreboardTeam(team, 1), player);
sendPacket(new PacketPlayOutScoreboardTeam(team, 0), player);
sendPacket(new PacketPlayOutScoreboardTeam(team, List.of(handle.getName()), 3), player);
}
use of net.minecraft.server.v1_16_R3.PacketPlayOutPlayerInfo in project DragonsOnline by UniverseCraft.
the class PlayerNPC116R3 method removeFromTablist.
public void removeFromTablist() {
PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo();
PacketPlayOutPlayerInfo.PlayerInfoData data = packet.new PlayerInfoData(this.handle.getProfile(), 0, EnumGamemode.NOT_SET, CraftChatMessage.fromString(tablistName)[0]);
@SuppressWarnings("unchecked") List<PacketPlayOutPlayerInfo.PlayerInfoData> players = (List<PacketPlayOutPlayerInfo.PlayerInfoData>) getField(packet, "b");
players.add(data);
this.setField(packet, "a", PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER);
this.setField(packet, "b", players);
this.sendPacket(packet);
}
use of net.minecraft.server.v1_16_R3.PacketPlayOutPlayerInfo in project FunnyGuilds by FunnyGuilds.
the class V1_14R1PlayerList method send.
@Override
public void send(Player player, String[] playerListCells, String header, String footer, int ping) {
final List<Packet<?>> packets = Lists.newArrayList();
final List<Object> addPlayerList = Lists.newArrayList();
final List<Object> updatePlayerList = Lists.newArrayList();
try {
PacketPlayOutPlayerInfo addPlayerPacket = new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER);
PacketPlayOutPlayerInfo updatePlayerPacket = new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.UPDATE_DISPLAY_NAME);
for (int i = 0; i < this.cellCount; i++) {
if (this.profileCache[i] == null) {
this.profileCache[i] = new GameProfile(UUID.fromString(String.format(PlayerListConstants.UUID_PATTERN, StringUtils.leftPad(String.valueOf(i), 2, '0'))), " ");
}
String text = playerListCells[i];
GameProfile gameProfile = this.profileCache[i];
IChatBaseComponent component = CraftChatMessage.fromStringOrNull(text, false);
Object playerInfoData = PLAYER_INFO_DATA_HELPER.createPlayerInfoData(addPlayerPacket, gameProfile, ping, component);
if (this.firstPacket) {
addPlayerList.add(playerInfoData);
}
updatePlayerList.add(playerInfoData);
}
if (this.firstPacket) {
this.firstPacket = false;
}
PLAYER_INFO_DATA_ACCESSOR.set(addPlayerPacket, addPlayerList);
packets.add(addPlayerPacket);
PLAYER_INFO_DATA_ACCESSOR.set(updatePlayerPacket, updatePlayerList);
packets.add(updatePlayerPacket);
boolean headerNotEmpty = !header.isEmpty();
boolean footerNotEmpty = !footer.isEmpty();
if (headerNotEmpty || footerNotEmpty) {
IChatBaseComponent headerComponent = EMPTY_COMPONENT;
IChatBaseComponent footerComponent = EMPTY_COMPONENT;
if (headerNotEmpty) {
headerComponent = CraftChatMessage.fromStringOrNull(header, true);
}
if (footerNotEmpty) {
footerComponent = CraftChatMessage.fromStringOrNull(footer, true);
}
PacketPlayOutPlayerListHeaderFooter headerFooterPacket = new PacketPlayOutPlayerListHeaderFooter();
headerFooterPacket.header = headerComponent;
headerFooterPacket.footer = footerComponent;
packets.add(headerFooterPacket);
}
for (Packet<?> packet : packets) {
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
}
} catch (Exception ex) {
throw new RuntimeException(String.format("Failed to send PlayerList for player '%s'", player.getName()), ex);
}
}
Aggregations