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

Помогите Чекнуть, перескается ли регион с другим регионом.

Discussion in 'Разработка плагинов для новичков' started by Mr_RoboMan, Jul 19, 2016.

  1. Автор темы
    Mr_RoboMan

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

    Trophy Points:
    123
    Ну кароче, есть четыре локации.
    Первые две это точки одного региона (например minLoc1 и maxLoc2)
    А еще две это точки второго региона (например minLoc2 и maxLoc2)
    Вопрос изи, но я как-то в аглоритмы не умею(
     
  2. Хостинг MineCraft
    <
  3. Larin

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

    Trophy Points:
    103
  4. Автор темы
    Mr_RoboMan

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

    Trophy Points:
    123
    По идее, единственное что там похоже с тем что мне надо - это вот это.
    Code:
    public class Vector {
       public float x;
       public float y;
      
       public Vector() {
          x = 0.0f;
          y = 0.0f;
       }
           
            // returns the (squared) distance between this Vector and another
       public float distSQ(final Vector vec) {
          float distX = x - vec.x;
          float distY = y - vec.y;
         
          return distX * distX + distY * distY;
       }
    
    Хотя мне чего-то не верится что это именно то...
    Я думал у кого-то есть ченить вырезанное из WG :D
    Там же как-то проверяется при привате, есть ли регионы в нем..
     
  5. Dereku

    Dereku Старожил

    Trophy Points:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Пользуйся поиском.
     
  6. slavik123123123

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

    Trophy Points:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Ну можно сделать мега костыль. Получать все блоки в регионе и сравнивать с блоками с другим регионом.
     
  7. Автор темы
    Mr_RoboMan

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

    Trophy Points:
    123
    Вот я про такое тоже подумал, но если регион будет например мильйон блоков? Это же хана серверу..
    Пользовался. Поисковал чето типо такого: Bukkit check is region cross with other region
    Ничего годного...
     
  8. Larin

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

    Trophy Points:
    103
    Гуглить не умеешь.
    Поехавший.
    Тут всё написано:
    http://www.java-gaming.org/index.php?topic=27326.0
     
  9. Автор темы
    Mr_RoboMan

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

    Trophy Points:
    123
    Хотя не, не то, это расстояние между локациями можно вычеслить..
     
  10. Larin

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

    Trophy Points:
    103
    Code:
    public static boolean testAABBAABB(final AABB box1, final AABB box2) {
       if (Math.abs(box1.center.x - box2.center.x) > (box1.r[0] + box2.r[0])) return false;
       if (Math.abs(box1.center.y - box2.center.y) > (box1.r[1] + box2.r[1])) return false;
       if (Math.abs(box1.center.z - box2.center.z) > (box1.r[2] + box2.r[2])) return false;
       return true;
    }
    Code:
    public class AABB {
       public Vector center;
       public float r[];
      
       public AABB(final float width, final float height) {
          center = new Vector();
          r = new float[2];
          r[0] = width * 0.5f;
          r[1] = height * 0.5f;
       }
      
       public void update(final Vector position) {
          center.x = position.x;
          center.y = position.y;
       }
    }
    Code:
    public class Vector {
       public float x;
       public float y;
      
       public Vector() {
          x = 0.0f;
          y = 0.0f;
       }
           
            // returns the (squared) distance between this Vector and another
       public float distSQ(final Vector vec) {
          float distX = x - vec.x;
          float distY = y - vec.y;
         
          return distX * distX + distY * distY;
       }
    }
    Не забудь добавить Z везде.
     
  11. Автор темы
    Mr_RoboMan

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

    Trophy Points:
    123
    Vector полагаю можно не делать? Ведь это тот-же Location только без z..[DOUBLEPOST=1468936965,1468936687][/DOUBLEPOST]А еще чувствую очень прикольно будет создавать этот самый AABB..
    Находить центр (а если например там четное количество? Там же центра нет..), потом расстояние во все стороны (в сторону и вверх/вниз (width/height))..
    Не очень то круто..
    Я надеялся что есть что-то именно для четырех локаций..
     
  12. Dereku

    Dereku Старожил

    Trophy Points:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    В этом разделе поднималась такая тема в этом году.
     
  13. Автор темы
    Mr_RoboMan

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

    Trophy Points:
    123
    А ответ там был (какой-то полегче чем с этим AABB)?
     
  14. Dereku

    Dereku Старожил

    Trophy Points:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Не помню, увы.
     
  15. Автор темы
    Mr_RoboMan

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

    Trophy Points:
    123
    :cry::cry::cry:
     
  16. Larin

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

    Trophy Points:
    103
    Там же самый 1 блок для детекта коллизий в 3d.
     
  17. Larin

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

    Trophy Points:
    103
    Code:
       if (Math.abs(box1.center.x - box2.center.x) > (box1.r[0] + box2.r[0])) return false;
       if (Math.abs(box1.center.y - box2.center.y) > (box1.r[1] + box2.r[1])) return false;
       if (Math.abs(box1.center.z - box2.center.z) > (box1.r[2] + box2.r[2])) return false;
     
  18. Larin

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

    Trophy Points:
    103
    Code:
        public AABB(final float width, final float height, final float depth) {
        center = new Vector();
        r = new float[3];
        r[0] = width  * 0.5f;
        r[1] = height * 0.5f;
        r[2] = depth* 0.5f;
        }
    
     
  19. Larin

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

    Trophy Points:
    103
    Code:
    public static boolean testAABBAABB(final AABB box1, final AABB box2) {
       if (Math.abs(box1.center.x - box2.center.x) > (box1.r[0] + box2.r[0])) return false;
       if (Math.abs(box1.center.y - box2.center.y) > (box1.r[1] + box2.r[1])) return false;
       if (Math.abs(box1.center.z - box2.center.z) > (box1.r[2] + box2.r[2])) return false;
       return true;
    }
     
  20. Автор темы
    Mr_RoboMan

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

    Trophy Points:
    123
    А как Location преоброзовать в AABB то?..
    Но я конечно до сих пор надеюсь на более легкий способ..
     
  21. Larin

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

    Trophy Points:
    103
    Боже, серьёзно? Я показал, как это можно сделать, это всего лишь алгоритм.
     

Share This Page