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

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

Discussion in 'Разработка плагинов для новичков' started by hyndorik, Jun 4, 2017.

Thread Status:
Not open for further replies.
  1. Автор темы
    hyndorik

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

    Trophy Points:
    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 Старожил Девелопер Пользователь

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

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

    Trophy Points:
    173
    Skype:
    alexandr0116
  5. Exception_Prototype

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

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

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

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

    Trophy Points:
    66
    Имя в Minecraft:
    hyndo
    Спасибо, разобрался.
     
Thread Status:
Not open for further replies.

Share This Page