Парсить BlockPos в инт или что то такое

Версия Minecraft
1.12.2
5,018
47
783
Здравствуйте. Проблема чисто вопроса кода. Значит имеется некая переменная int, которая привязывается к координатам в мире или если точнее, к позиции. Неважно.
Так вот, эта переменная сохраняется такая в массив, обычный такой List значит. Для каждой позиции соответственно создается новое теплое местечко в массиве и присваивается индекс. Когда число , хранящееся в этом индексе, скажем, выполняет свою задачу, его надобно удалить, чтобы не занимало место. Более того оно не только место занимает, но и продолжает тикать, что естественно не есть хорошо. Так вот надо бы ее удалить из массива, и сделать это можно лишь способом remove(index). То есть мне необходимо знать индекс, под которым сохраняется блок в этот лист.
Казалось бы, создай счетчик и пусть он считает каким по счету блок был добавлен в мир. Но ведь он обнулится после перезахода, а его сохранять это лишнее ненужное костыльное телодвижение...
В общем нужно каким то образом получить индекс, под которым pos сохранился в лист. К слову это блок листвы, игроков много, так что количества блоков в мире будет тыщами измеряться. И каждый должен локально оттикать и удалится.

Либо же нужно парсить поз в инт. Я пробовал вот так, оно бы конечно сработало на ура, если бы pos не исчислялся числами большими чем int))

Java:
    int indexPos;
    @Override
    public void onBlockAdded(World world, BlockPos pos, IBlockState state) {
        world.scheduleBlockUpdate(pos, this, 1, 0);
        long lPos = pos.toLong();
        String sPos = Long.toString(lPos);
        System.out.println("sPos " + sPos);
        int iPos = Integer.parseInt(sPos);
        System.out.println("iPos " + iPos);
        time.add(iPos, new TimerForPos(pos,0));
        indexPos = iPos;
    }
 
Последнее редактирование:
Решение
Херня твой индекОф, не работает, -1 индекс сетает.
А, епт. У тебя лист хранит не блокпосы, а свой тип.
Тогда лучше как сказал человечек выше - мапу сделай и все.

Java:
Map<BlockPos, TimeForPos> times = Maps.newHashMap();

times.put(new BlockPos(x, y, z), new TimeForPos(...)); // Добавляем
TimeForPos time = times.get(new BlockPos(x, y, z)); // Получаем

P.S Щас бы моды писать уже второй год и не знать базовые коллекции...
5,018
47
783
5,018
47
783
Тогда тебе нужен не массив а мапа, хеш мапа для удобства. Где BlockPos это ключ, а TimerForPos значение. И никакие индексы искать не придется.
 
5,018
47
783
Чет не разобрался как его юзать, он тут два класса просит:confused:
HashMap<TimerForPos, pos> time2 = new HashMap();
Где пример юза чекнуть можно?
 

tox1cozZ

aka Agravaine
8,454
598
2,890
Херня твой индекОф, не работает, -1 индекс сетает.
А, епт. У тебя лист хранит не блокпосы, а свой тип.
Тогда лучше как сказал человечек выше - мапу сделай и все.

Java:
Map<BlockPos, TimeForPos> times = Maps.newHashMap();

times.put(new BlockPos(x, y, z), new TimeForPos(...)); // Добавляем
TimeForPos time = times.get(new BlockPos(x, y, z)); // Получаем

P.S Щас бы моды писать уже второй год и не знать базовые коллекции...
 
5,018
47
783
уже второй год и не знать базовые коллекции...
Никогда с ними не сталкивался просто. Да и в моддинг редко я углубляюсь, так то.
Спасибо, я как раз гуглил про хешмап, а тут подгончик.
 
5,018
47
783
А тайлы для кого придумали?
Для листвы, тайл, ради одной переменной..?:oops:
Ты вроде тут меня засирал за то что я лагодромы устраиваю, а теперь такое предлагаешь:unsure:
 
5,018
47
783
1. Не нужен лишний класс
1.1 С кучей методов
2. Не нужны нбт
3. Не создается дополнительных обьектов в мире.
:unsure:
 
2,505
81
397
Жалко, конечно, что нет супер легковесного тайла..

Но опять же если продолжить рассматривать твое решение.
0. Это громадная хэш мапа на весь мир. Это жесть. Причем я хз, будешь ли ты удалять ноды, при выгрузке чанка из мира.
1. Что насчет сохранения этой мапы при выходе из мира?
2. Что насчет синхронизации этой мапы с клиентами?

1. Не нужен лишний класс
1.1 С кучей методов
2. Не нужны нбт
3. Не создается дополнительных обьектов в мире.
1. Ой, сорри. Плюс один класс это реально больно.
2. Хз о чем ты, но сохранять тебе в любом случае придется куда-то. Иначе будет такое себе.
3. Эм. А позиция (ключ в мапе)? А твой каунтер? Все это по сути объекты в мире.
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
Напоминаю, что тайлам можно отключать тики - и они не будут в списках апдейтящихся тайлов в чанках и тому подобное
Занимаемой памяти (нбт тэг в мире, каждый минимум с координатами и типом тайла + твоя инфа) это конечно не уменьшит, но лагодрома не будет.
 
5,018
47
783
0. Это громадная хэш мапа на весь мир. Это жесть. Причем я хз, будешь ли ты удалять ноды, при выгрузке чанка из мира.
1. Что насчет сохранения этой мапы при выходе из мира?
Ничего я сохранять не буду, листва будет вырастать достаточно быстро для одной игровой сессии. По хорошему надо бы, но это не нужно. А если так случится что мир разгрузят целиком(выйдут все или один игрок) то разница оттого что отсчет начался заново, будет незаметной.
2. Что насчет синхронизации этой мапы с клиентами?
пусть она на сервере растет, нафига ее синхронизировать? А сетБлок автоматически синхронизируется.
 
Последнее редактирование:
Сверху