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

Помогите Проблема с EntityPlayer.

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Всем привет. Пытаюсь создать с помощью NMS игрока, с которым можно было бы взаимодействовать (в том числе и бить).

    У меня получилось его создать и даже взаимодействовать с ним, используя PacketListenerAPI от ProtocolLib, но столкнулся с проблемой, что я не могу дамажить NPC, используя те же стрелы или зелья. Я прошерстил все пакеты, но ничего подобного найти не смог, а мне это очень важно.

    Помогите пожалуйста с этой проблемой.

    Код:
    Код:
    package ru.lisenochek.mcrust.objects;
    
    import com.mojang.authlib.GameProfile;
    import net.minecraft.server.v1_12_R1.*;
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    import org.bukkit.craftbukkit.v1_12_R1.CraftServer;
    import org.bukkit.craftbukkit.v1_12_R1.CraftWorld;
    import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer;
    import org.bukkit.entity.Player;
    
    import java.util.HashMap;
    import java.util.UUID;
    
    public class NPCClass extends EntityPlayer {
    
        public static HashMap<Integer, NPCClass> npcMap = new HashMap<>();
    
        private Location location;
    
        public NPCClass(Player player, String name) {
            super(((CraftServer) Bukkit.getServer()).getServer(), ((CraftWorld) player.getLocation().getWorld()).getHandle(), new GameProfile(UUID.randomUUID(), "NPC"), new PlayerInteractManager(((CraftWorld) player.getLocation().getWorld()).getHandle()));
    
            WorldServer worldServer = ((CraftWorld) player.getLocation().getWorld()).getHandle();
    
            this.location = player.getLocation();
    
            npcMap.put(getId(), this);
        }
    
        public int getID() {
            return getId();
        }
    
        public Location getLocation() {
            return location;
        }
    
        public void spawn() {
    
            setLocation(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch());
            playerConnection = new PlayerConnection(((CraftServer) Bukkit.getServer()).getServer(), new NetworkManager(EnumProtocolDirection.SERVERBOUND), this);
        }
    
        public void removeNPC() {
            for (Player player : Bukkit.getOnlinePlayers()) ((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutEntityDestroy(getId()));
            npcMap.remove(getId());
        }
    }
    
     
  2. alexandrage

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

    Баллы:
    173
    А че ты хотел, нпс то фейковый. В мире его нет.
     
  3. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Я понимаю, но мне позарез нужно слушать дамаг от непися, ну и соотвественно дамажить его самого.
     
  4. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Можно же как-то это сделать?
     
  5. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    ProtocolLib
     
  6. alexandrage

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

    Баллы:
    173
    Так как ты делаешь, нет. Иди юзай ситизенс апи.
     
  7. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    А никак нельзя обойтись без ситизенс?
     
  8. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Ну так сам детекти дамаг, считай векторы стрел и тд, при дамаге посылай соответсвующие пакеты
     
  9. alexandrage

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

    Баллы:
    173
    Оно не так делается. В ситизенс апи все костыли уже есть и ивенты.
     
  10. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Ну просто не хочется делать плагин зависимым от сторонних API, но видимо придется..
     
  11. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Всмысле не так? А как?
     
  12. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Я купил ситизенс. Можно ли с помощью него как-то спавнить неписей, при этом не загружая плагин на сервер?
     
  13. alexandrage

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

    Баллы:
    173
    Думаю да https://github.com/CitizensDev/CitizensAPI
     
  14. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Ну апишка естественно тут нужна, но методы в АПИ вернут NPE, если нет имлепента с Citizens, т.е плаг должен быть загружен.
     
  15. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Ты сам ответил на свой вопрос
     
  16. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Мне все равно кажется, что можно как-то поизвращаться и не подгружать ситизенс.
     
  17. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Заимплементь везде RMI, и запусти ситизенс у себя на отдельном хосте, и вызывай методы
     
  18. alexandrage

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

    Баллы:
    173
    Проблему из ничего раздул. Берешь и ставишь ситизенс.
     

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