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

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

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

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

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

    Баллы:
    66
    Имя в 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. Хостинг MineCraft
    <
  3. makssof

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

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

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
  5. Exception_Prototype

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

    Баллы:
    46
    Знаете, я редко критикую чьи то плагины, но в этот раз...
    Зачем же нам сохранять варпы в памяти сервера и выгружать в конфиг когда сервер вырубается(или просто хотя бы сейвить переодически), нет, давайте каждый раз цикл по конфигу запускать. Да, если там тех варпов штук 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;
          }
        }
      }
    }
    
    [DOUBLEPOST=1496556939,1496555908][/DOUBLEPOST]Я даже коменты прочитал в теме плагина, Вам ещё тогда советовали изменить этот момент. ООП, кстати, отсутствует полностью.
     
  6. makssof

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

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

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

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

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