- Баллы
- 66
- Имя в Minecraft
- deni9078
У меня есть 2 метода для создания и удаления нпс соответственно. Проблема с удалением. Дело в том, что нпс хоть и пропадает из списка игроков, но сам визуально еще виден. Как это можно исправить? Не нашел ничего в api протоколлиба.
Код:
public void spawn(Player player) {
PacketContainer playerInfoPacket = protocolManager.createPacket(PacketType.Play.Server.PLAYER_INFO);
playerInfoPacket.getPlayerInfoAction().write(0, EnumWrappers.PlayerInfoAction.ADD_PLAYER);
WrappedGameProfile profile = new WrappedGameProfile(fakePlayerUUID, fakePlayerName);
if (skinData != null) {
profile.getProperties().put("textures", new WrappedSignedProperty("textures", skinData[0], skinData[1]));
}
PlayerInfoData playerInfoData = new PlayerInfoData(profile, 1, EnumWrappers.NativeGameMode.SURVIVAL, WrappedChatComponent.fromText(fakePlayerName));
playerInfoPacket.getPlayerInfoDataLists().write(0, Collections.singletonList(playerInfoData));
protocolManager.sendServerPacket(player, playerInfoPacket);
PacketContainer spawnPacket = protocolManager.createPacket(PacketType.Play.Server.NAMED_ENTITY_SPAWN);
spawnPacket.getUUIDs().write(0, fakePlayerUUID);
spawnPacket.getDoubles()
.write(0, location.getX())
.write(1, location.getY())
.write(2, location.getZ());
spawnPacket.getBytes()
.write(0, (byte) (location.getYaw() * 256.0F / 360.0F))
.write(1, (byte) (location.getPitch() * 256.0F / 360.0F));
protocolManager.sendServerPacket(player, spawnPacket);
}
public void destroy() {
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
PacketContainer playerInfoPacket = protocolManager.createPacket(PacketType.Play.Server.PLAYER_INFO);
playerInfoPacket.getPlayerInfoAction().write(0, EnumWrappers.PlayerInfoAction.REMOVE_PLAYER);
WrappedGameProfile profile = new WrappedGameProfile(fakePlayerUUID, fakePlayerName);
PlayerInfoData playerInfoData = new PlayerInfoData(profile, 1, EnumWrappers.NativeGameMode.SURVIVAL, WrappedChatComponent.fromText(fakePlayerName));
playerInfoPacket.getPlayerInfoDataLists().write(0, Collections.singletonList(playerInfoData));
protocolManager.sendServerPacket(onlinePlayer, playerInfoPacket);
PacketContainer destroyPacket = protocolManager.createPacket(PacketType.Play.Server.ENTITY_DESTROY);
destroyPacket.getIntegerArrays().write(0, new int[]{entityId});
protocolManager.sendServerPacket(onlinePlayer, destroyPacket);
PacketContainer entityRemoveEffect = protocolManager.createPacket(PacketType.Play.Server.ENTITY_EFFECT);
entityRemoveEffect.getIntegers().write(0, entityId);
protocolManager.sendServerPacket(onlinePlayer, entityRemoveEffect);
}
}