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

Помогите Размещение схематики лицевой стороной

Discussion in 'Разработка плагинов для новичков' started by serega6531, Apr 27, 2015.

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

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

    Trophy Points:
    173
    Skype:
    shkurovs
    У меня есть определенное здание, расположенное входом, например, к северу. Как ставить схематику через we api, чтобы здание ставилось лицевой стороной к поставившему?
     
  2. Хостинг MineCraft
    <
  3. Studenikin

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

    Trophy Points:
    123
    Skype:
    vanya.studenikin
    Имя в Minecraft:
    stuvanya
    Что значит "лицевая сторона"?
     
  4. Автор темы
    serega6531

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

    Trophy Points:
    173
    Skype:
    shkurovs
    Сторона, на которой вход (условно)
     
  5. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Загружашь схематик, вертишь его методом rotate2D
     
  6. Автор темы
    serega6531

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

    Trophy Points:
    173
    Skype:
    shkurovs
    Я так и делал, но не смог определить, сколько раз поворачивать.
     
  7. ql_Nik_lp

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

    Trophy Points:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Тут еще раз надо задать что такое "Лицевая сторона"

    Для сервера лицевая сторона - одно
    Для игрока - другое
    Правильный вариант - делать правильные схематики

    Если же вопрос стоит в Relative, то работай с yaw и сторонами света
     
  8. Автор темы
    serega6531

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

    Trophy Points:
    173
    Skype:
    shkurovs
    @ql_Nik_lp, Хочу поинтересоваться, где же лицевая сторона у постройки для сервера?

    Для игрока, это, очевидно, сторона со входом. И мне не ясно, как узнать, сколько раз её нужно повернуть.
     
  9. ql_Nik_lp

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

    Trophy Points:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Ты как человек понимаешь что есть "вход"
    Для сервера шематик - не более чем массив блоков
     
  10. ql_Nik_lp

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

    Trophy Points:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Плюсую человека выше.

    В плане произношения - вариантов много, гугл транслейт вообще говорит как "скематик"
     
  11. CraftCoder

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

    Trophy Points:
    108
    Имя в Minecraft:
    CraftCoderr
    Ну если ты знаешь к какой стороне у тебя повернут схематик, то можно просто поворачивать его в сторону, противоположную направлению взгляда игрока.
     
  12. Автор темы
    serega6531

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

    Trophy Points:
    173
    Skype:
    shkurovs
    Вот и я об этом, для сервера нет лицевой стороны.

    Сейчас попробую ещё раз поворачивать его.[DOUBLEPOST=1430140043,1430137749][/DOUBLEPOST]Нет, не поворачивается как надо.

    Допустим, у меня у всех строений лицевая сторона смотрит на восток
    Code:
    int direction = Math.round(yaw / 90f) & 0x3; //Направление взгляда игрока
    int rotate = ...//?????
    clipboard.rotate2D(rotate * 90);
    
     
  13. ql_Nik_lp

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

    Trophy Points:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
  14. Автор темы
    serega6531

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

    Trophy Points:
    173
    Skype:
    shkurovs
    Как мне это использовать?[DOUBLEPOST=1430143381,1430141668][/DOUBLEPOST]В какую сторону поворачивается постройка при rotate2D?[DOUBLEPOST=1430149151][/DOUBLEPOST]Кажется, мне удалось сделать что-то похожее на решение.
    Code:
        private BlockFace getCardinalDirection(org.bukkit.util.Vector vector) {
            BlockFace[] faces = { BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST };
            org.bukkit.util.Vector n, e, s, w;
            w = new org.bukkit.util.Vector(-1, 0, 0);
            n = new org.bukkit.util.Vector(0, 0, -1);
            s = n.clone().multiply(-1);
            e = w.clone().multiply(-1);
    
            org.bukkit.util.Vector[] vectors = { n, e, s, w };
    
            double comp = 0;
            int besti = 0;
            for (int i = 0; i < vectors.length; i++) {
                double dot = vector.dot(vectors[i]);
                if (dot > comp) {
                    comp = dot;
                    besti = i;
                }
            }
    
            return faces[besti];
        }
    
            BlockFace bf = getCardinalDirection(direction);
            int rotate = bf.ordinal() + 1;
    
            clipboard.rotate2D(rotate * 90);
    По крайней мере, одна и та же точка тут всегда оказывается на одном месте.[DOUBLEPOST=1430150621][/DOUBLEPOST]Немного мучений с подбором координат для смещения постройки и все заработало как надо. Всем спасибо за помощь.
     
  15. Автор темы
    serega6531

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

    Trophy Points:
    173
    Skype:
    shkurovs
    Поэтому я и написал "условно".
     
Thread Status:
Not open for further replies.

Share This Page