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

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

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

Статус темы:
Закрыта.
  1. Автор темы
    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) {
    }
    }
    }
    Но это создает нагрузку, особенно если область большая. Так вот, можно ли как-то это адекватно сделать?
     
  2. makssof

    makssof Старожил Девелопер Пользователь

    Баллы:
    103
    Зачем циклы?
    Простые if'ы: смотришь, если
    Код:
    player.x > area.minX && player.x < area.maxX [и другие плоскости]
    , то значит внутри твоего области.
    Если не лень - смотри сорцы моего плагина (в подписи) TpPoint:
    Path: ru.tlem.bukkit.tppoint.EventHandlers.PlayerMove.onPlayerMove()
     
    Последнее редактирование: 4 июн 2017
  3. alexandrage

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

    Баллы:
    173
  4. Exception_Prototype

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

    Баллы:
    96
    Знаете, я редко критикую чьи то плагины, но в этот раз...
    Зачем же нам сохранять варпы в памяти сервера и выгружать в конфиг когда сервер вырубается(или просто хотя бы сейвить переодически), нет, давайте каждый раз цикл по конфигу запускать. Да, если там тех варпов штук 10 ладно ещё, но же мы знаем, что их не 10.
    Код:
      @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;
          }
        }
      }
    }
    

    Я даже коменты прочитал в теме плагина, Вам ещё тогда советовали изменить этот момент. ООП, кстати, отсутствует полностью.
     
  5. makssof

    makssof Старожил Девелопер Пользователь

    Баллы:
    103
    @Exception_Prototype , критика моего плагина уместна в связанном с ним треде, но не здесь. Но да, согласен, я, увы, не думал об этом (и многом другом) почти 3 года назад.
     
  6. Автор темы
    hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Спасибо, разобрался.
     
Статус темы:
Закрыта.

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