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

Помогите Призыв, детект кликов по NPC

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

Статус темы:
Закрыта.
  1. Автор темы
    iD3LSY

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

    Баллы:
    76
    Драсте, форумчане :)

    Около ~3 месяцов назад пытался заспавнить NPC, а позже уже детектить по нему клики. Призвать - призвал, а вот как детектить - вообще хз.

    Идеи на счет "загугли" не катят. Уже тогда все перерыл. (на тот момент, скорее всего как и сейчас ничего не понял там)

    Код:
    private EntityPlayer npc;
    
    public void onEnable() {
        Bukkit.getServer().getPluginManager().registerEvents(this, this);
    
        MinecraftServer nmsServer = ((CraftServer) Bukkit.getServer()).getServer();
        WorldServer nmsWorld = ((CraftWorld) Bukkit.getWorlds().get(0)).getHandle();
        npc = new EntityPlayer(nmsServer, nmsWorld, new GameProfile(UUID.fromString("c793afb5-c4b7-4fdb-a100-b761315913c4"), "PogoStick29"), new PlayerInteractManager(nmsWorld));
    }
    
    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent e) {
        npc.setLocation(e.getPlayer().getLocation().getX(), e.getPlayer().getLocation().getY(), e.getPlayer().getLocation().getZ(), 0, 0);
        PlayerConnection connection = ((CraftPlayer) e.getPlayer()).getHandle().playerConnection;
        connection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, npc));
        connection.sendPacket(new PacketPlayOutNamedEntitySpawn(npc));
    }
    Весь код взят с ролика PogoStick29Dev.
     
  2. xDark

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

    Баллы:
    96
    детект кликов:
    ProtocolLibrary.getProtocolManager().addPacketListener
     
  3. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    Свой PlayerInteractManager.
     
  4. Автор темы
    iD3LSY

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

    Баллы:
    76
    Так, окей, сразу не увидел. Сейчас загуглил - нашёл темку.

    Сейчас думаю проверю, но вроде ведь нету проверки на самого NPC. Возможно ли узнать, какой он например из 100? Т.е. если их будет 100, то все они будут реагировать на клик одинаково.
    Свой, если мне нужно будет узнать, какого именно NPC нажал? Или как я уже выше спросил, можно как то их распознавать?
     
  5. Dan_Ender

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

    Баллы:
    76
    PlayerInteractEntityEvent e

    Entity ent = e.getEntity();
    If (ent.getType()==EntityType.Player) {
    If (ent.getCustomName().equalsIgnoreCase("name")) {
    SomeAction
    }
    }

    Писал с планша, могут быть ошибки.
    Можно и через id
     
  6. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    Куда на лечение?
    Создаешь класс, который наследует PlayerInteractManager и оверрайдешь методы
     
  7. xDark

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

    Баллы:
    96
    проще будет протокол либом, если на несколько версий делать
     
  8. alexandrage

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

    Баллы:
    173
    PlayerInteractEntityEvent or EntityDamageByEntityEvent.
     
Статус темы:
Закрыта.

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