Помогите Создание области

  • Автор темы Автор темы hyndorik
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

hyndorik

Активный участник
Пользователь
Баллы
98
Имя в Minecraft
hyndo
Например я имею minX, minY, minZ, maxX, maxY, maxZ.
Необходимо чтобы, например если игрок заходит в эту область ему что-то писало(Это как пример)
Как это реализовать?
На ум приходит только это:
for (int x = minX; x <= maxX; ++x) {
for (int y = minY; y <= maxY; ++y) {
for (int z = minZ; z <= maxZ; ++z) {
}
}
}
Но это создает нагрузку, особенно если область большая. Так вот, можно ли как-то это адекватно сделать?
 
Зачем циклы?
Простые if'ы: смотришь, если
Java:
player.x > area.minX && player.x < area.maxX [и другие плоскости]
, то значит внутри твоего области.
Если не лень - смотри сорцы моего плагина (в подписи) TpPoint:
Path: ru.tlem.bukkit.tppoint.EventHandlers.PlayerMove.onPlayerMove()
 
Последнее редактирование:
Зачем циклы?
Простые if'ы: смотришь, если
Java:
player.x > area.minX && player.x < area.maxX [и другие плоскости]
, то значит внутри твоего области.
Если не лень - смотри сорцы моего плагина (в подписи) TpPoint:
Path: ru.tlem.bukkit.tppoint.EventHandlers.PlayerMove.onPlayerMove()
Знаете, я редко критикую чьи то плагины, но в этот раз...
Зачем же нам сохранять варпы в памяти сервера и выгружать в конфиг когда сервер вырубается(или просто хотя бы сейвить переодически), нет, давайте каждый раз цикл по конфигу запускать. Да, если там тех варпов штук 10 ладно ещё, но же мы знаем, что их не 10.
Java:
  @EventHandler
  public void onPlayerMove(PlayerMoveEvent e)
  {
    Player pl = e.getPlayer();
    Location loc = pl.getLocation();
    if ((!pl.hasPermission("tppoint.use")) ||
      (!Loader.get().contains("Warps")) ||
      (Loader.get().getConfigurationSection("Warps").getKeys(false).size() < 1)) {
      return;
    }
    for (String o : Loader.get().getConfigurationSection("Warps").getKeys(false))
    {
      World w = Bukkit.getWorld(Loader.get().getString("Warps." + o + ".w"));
      int x = Loader.get().getInt("Warps." + o + ".x");
      int y = Loader.get().getInt("Warps." + o + ".y");
      int z = Loader.get().getInt("Warps." + o + ".z");
      String targetName = Loader.get().getString("Warps." + o + ".t");

      int px = (int)loc.getX();
      int py = (int)loc.getY();
      int pz = (int)loc.getZ();
      if ((x == px) && (y == py) && (z == pz) && (Loader.get().contains("Targets." + targetName)))
      {
        double tx = Loader.get().getDouble("Targets." + targetName + ".x");
        double ty = Loader.get().getDouble("Targets." + targetName + ".y");
        double tz = Loader.get().getDouble("Targets." + targetName + ".z");
        float tyw = (float)Loader.get().getDouble("Targets." + targetName + ".yw");
        float tp = (float)Loader.get().getDouble("Targets." + targetName + ".p");
  
        pl.teleport(new Location(w, tx, ty, tz, tyw, tp));
        return;
      }
    }
  }
}

Я даже коменты прочитал в теме плагина, Вам ещё тогда советовали изменить этот момент. ООП, кстати, отсутствует полностью.
 
@Exception_Prototype , критика моего плагина уместна в связанном с ним треде, но не здесь. Но да, согласен, я, увы, не думал об этом (и многом другом) почти 3 года назад.
 
Зачем циклы?
Простые if'ы: смотришь, если
Java:
player.x > area.minX && player.x < area.maxX [и другие плоскости]
, то значит внутри твоего области.
Если не лень - смотри сорцы моего плагина (в подписи) TpPoint:
Path: ru.tlem.bukkit.tppoint.EventHandlers.PlayerMove.onPlayerMove()

Спасибо, разобрался.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх