Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Отталкивание от игроков.

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

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

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

    Баллы:
    66
    Я хочу сделать, чтобы при приближении игрока в гм 2, его отталкивало от других игроков.
    Как сделать так, чтобы отталкивание работало только на игроках в гм 1, тобишь от гм 1 отталкивало, а от гм 2 нет.

    Я не селен в яве. У меня получилось это, но с проблемой. Всех игроков, которые в гм2 тоже отталкивает друг от друга. Как это исправить?


    EventHandler
    public void OnPlayerMoveEvent(final PlayerMoveEvent event) {
    Player p = event.getPlayer();
    if(p.getGameMode() == GameMode.ADVENTURE){
    for(Entity nearby : p.getNearbyEntities(10,10,10)) {
    if(nearby instanceof Player) {
    for(Player pla: Bukkit.getOnlinePlayers()){
    if(pla.getGameMode() == GameMode.SURVIVAL){
    p.setVelocity(p.getLocation().getDirection().multiply(-1));

    }
    }

    }}}}
     
    Последнее редактирование: 4 июл 2017
  2. Хостинг MineCraft
    <
  3. Автор темы
    qDeath

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

    Баллы:
    66
    бамп
     
  4. Exception_Prototype

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

    Баллы:
    46
    OnPlayerMoveEvent сладких снов, сервер)
     
  5. Socarp

    Socarp Ньюби

    Баллы:
    1
    Имя в Minecraft:
    Socarp
    Код:
    @EventHandler
        public void onPlayerMove(PlayerMoveEvent e) {
            Player p = e.getPlayer();
            for (Entity entity : p.getNearbyEntities(1.0D, 1.0D, 1.0D)) {
                if (entity.getType() == EntityType.PLAYER)
                    p.getVelocity().add(p.getLocation().getDirection()).multiply(-2);           
            }
        }
     
  6. Exception_Prototype

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

    Баллы:
    46
    Раз на то пошло, то GM забыл учитывать.
     
  7. Автор темы
    qDeath

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

    Баллы:
    66
    А как еще можно реализовать отталкивание от игроков?[DOUBLEPOST=1499176692,1499175646][/DOUBLEPOST]Как сделать, чтобы ивент не работал на игроках в режиме игры гм2? Т.е что бы в этом режиме игры игроки с этим же режиом могли соприкасаться, а с игроками в режиме игры 0 - нет.
     
  8. zenbot

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

    Баллы:
    61
    Имя в Minecraft:
    ZENEGIX
    Дополню ответ от Socarp:
    Код:
    @EventHandler
    public void onPlayerMove(PlayerMoveEvent e) {
        Player p = e.getPlayer();
        if(p.getGameMode() != GameMode.ADVENTURE) return;
        for (Entity entity : p.getNearbyEntities(1.0D, 1.0D, 1.0D))
            if (entity.getType() == EntityType.PLAYER)
                p.setVelocity(p.getLocation().getDirection().multiply(-2));
    }
     
  9. Автор темы
    qDeath

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

    Баллы:
    66
    upload_2017-7-4_17-11-46.png
     
  10. zenbot

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

    Баллы:
    61
    Имя в Minecraft:
    ZENEGIX
  11. Автор темы
    qDeath

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

    Баллы:
    66
    Да, но отталкивает то от всех игроков, а нужно, чтобы только от игроков в гм 0.
     
  12. zenbot

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

    Баллы:
    61
    Имя в Minecraft:
    ZENEGIX
    Код:
    @EventHandler
    public void onPlayerMove(PlayerMoveEvent e) {
        Player p = e.getPlayer();
        if(p.getGameMode() != GameMode.ADVENTURE) return;
        p.getNearbyEntities(1D, 1D, 1D).forEach((entity) -> {
            if(entity instanceof Player) {
                Player player = (Player) entity;
                if(player.getGameMode() == GameMode.SURVIVAL)
                    p.setVelocity(p.getLocation().getDirection().multiply(-2));
            }
        });
    }
     
  13. Exception_Prototype

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

    Баллы:
    46
    Когда то давно сохранял себе, мало ли пригодится.
    Глянь, мож чё себе возьмёшь.
    Код:
        private Set<Player> players = Sets.newConcurrentHashSet();
        public void onEnable() {
            Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
                @Override
                public void run() {
                    for (Player p : players) {
                        for (Entity e : p.getNearbyEntities(4, 4, 4)) {
                            if (e.getType() == EntityType.PLAYER) {
                                Player p2 = (Player) e;
                                if (p != p2) {
                                    p2.setVelocity(p2.getLocation().getDirection().setY(-1.35).multiply(-1.2));
                                }
                            }
                        }
                    }
                }
            }, 5, 5);
    
     
  14. Grazy

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

    Баллы:
    76
    Имя в Minecraft:
    Prost
    Для твоей затеии тебе понадобиться еще й и шеулдер. Но тебе повезло, потому что плагин который ты хочешь написать уже есть...
    https://www.spigotmc.org/resources/forcefield.25228/
    А если нужно будет, декомпилируй и смотри.
     
  15. Автор темы
    qDeath

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

    Баллы:
    66
    Спасибо вам, ребята.
     
Статус темы:
Закрыта.

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