1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Как удалить нпс через ProtocolLib api

Тема в разделе "Разработка плагинов для новичков", создана пользователем DackZz, 26 янв 2025.

  1. Автор темы
    DackZz

    DackZz Активный участник Пользователь

    Баллы:
    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);
            }
        }
     
  2. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ну логично, тебе нужен пакет деспавна. Да и не только при удалении, но и когда игрок далеко.
     
  3. Автор темы
    DackZz

    DackZz Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    deni9078
    А моего метода не достаточно? Буду благодарен за подробности
     

Поделиться этой страницей