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

Помогите Получить X, Y, Z из числа

Тема в разделе "Разработка плагинов для новичков", создана пользователем WhileInside, 18 май 2020.

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

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

    Баллы:
    66
    Имя в Minecraft:
    WhileInside
    У меня есть массив блоков: short[] blockData;

    Блок в данный массив записывается так:
    Код:
    public void writeBlockData(int x, int y, int z, int id, int data) {
      int index = (y * l + z) * w + x;
      blockData[index] = MathUtil.pair2b(id, data);
    }
    и мне нужно из переменной index получить обратно X, Y, Z (я уже знаю w и l)
    есть какие-то идеи?
     
  2. Автор темы
    WhileInside

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

    Баллы:
    66
    Имя в Minecraft:
    WhileInside
    Код, в котором мне нужно знать X, Y, Z
    upload_2020-5-19_1-9-14.png
     
  3. MurlikMurlik

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

    Баллы:
    96
    А почему бы не использовать объект блока для хранения в массиве?
     
  4. Автор темы
    WhileInside

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

    Баллы:
    66
    Имя в Minecraft:
    WhileInside
    Жрёт много памяти, любой объект (даже не смотря на то, что он пустой) будет жрать больше, чем short, это особенно заметно, когда у тебя будет 4 лямов элементов в массиве. (Раньше арена ела 14 мегабайт памяти, это я хранил только объект с ID и Data, я не знаю, что в Bukkit API, но возможно вышло бы больше, если бы я использовал Block. Сейчас арена съедает 5 мегабайтов)

    Кстати, мне ответили, забыл вчера тему закрыть.
    Вот ответ:

    Код:
    x = index % w
    z = (index / w) % l
    y = index / w / l
    Ещё были варианты сделать тройным циклом от 0 по w, от 0 до h и от 0 до l
     
Статус темы:
Закрыта.

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