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

  • Автор темы Автор темы 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));

}
}

}}}}
 
Последнее редактирование:
JavaScript:
@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);           
        }
    }
 
JavaScript:
@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);          
        }
    }
Раз на то пошло, то GM забыл учитывать.
 
OnPlayerMoveEvent сладких снов, сервер)
А как еще можно реализовать отталкивание от игроков?
Как сделать, чтобы ивент не работал на игроках в режиме игры гм2? Т.е что бы в этом режиме игры игроки с этим же режиом могли соприкасаться, а с игроками в режиме игры 0 - нет.
 
А как еще можно реализовать отталкивание от игроков?
Как сделать, чтобы ивент не работал на игроках в режиме игры гм2? Т.е что бы в этом режиме игры игроки с этим же режиом могли соприкасаться, а с игроками в режиме игры 0 - нет.
Дополню ответ от 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));
}
 
Дополню ответ от 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));
}

upload_2017-7-4_17-11-46.png
 
Да, но отталкивает то от всех игроков, а нужно, чтобы только от игроков в гм 0.
Код:
@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));
        }
    });
}
 
Когда то давно сохранял себе, мало ли пригодится.
Глянь, мож чё себе возьмёшь.
Java:
    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);
 
Для твоей затеии тебе понадобиться еще й и шеулдер. Но тебе повезло, потому что плагин который ты хочешь написать уже есть...
https://www.spigotmc.org/resources/forcefield.25228/
А если нужно будет, декомпилируй и смотри.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх