Обновление ItemStack'а со всех возможный мест

Версия Minecraft
1.12.2
1,015
9
102
Мне надо делать кое-какие действия с айтемом каждый тик, и не важно где он находится (в тайле блока, в EntityItem, в инвентаре существ), при этом мне надо знать координаты блока/ентити. С помощью родительских функций айтема можно вызывать функцию каждый тик только если айтем в ItemEntity или в инвентаре игрока. А если он находится в тайле блока или в другом энтити (не в игроке)?

В голове у меня есть идея: сделать WorldSaveData, где я буду сохранять под каждый ItemStack в мире его позицию, и обрабатывать каждый из них при тике сервера. Но тут есть проблема - после перезагрузки мира, как мне понять какой именно стак имеет сохраненную позицию (после выключения мира мы же теряем ссылки на оригинальные объекты). У них есть какие-либо идентификаторы? Они хранятся в каком-либо контейнере в мире? Если нет, то наверное придется как-то перегенерировать лист со стаками, но тогда надо заново найти в мире каждый из них
 
7,099
324
1,509
Очень интересная задача) И очень сложная.
Сложность заключается в том, что стак может попасть в инвентарь тайла разными путями.
Вот примеры:
игрок положил юзая контейнер
лежащий по полу предмет сожрал голодный сундук из тумкрафта
предмет переместился по трубам из других модов
предмет только что создался, например, был извлечен из ae-сети прямо в тайл с инвентарем

А в чем вообще изначальная задача?
 
1,015
9
102
Хочу сделать обновление для своего мода. У меня есть аккумуляторы в виде предмета с какой-то вместимостью энергии. Есть передатчик энергии, который может заряжать эти аккумуляторы по радиусу. И надо чтобы он заряжался вне зависимости от того, в каком контейнере находится
 
7,099
324
1,509
И так каждый тик? Каждую секунду? Проверять каждый тайл? Каждый слот? Лагадром будет
Индексировать инвентари вокруг каждые n тиков. Потом каждый тик проходить по уже индексированным инвентарям и апать энергию в предметах

У него нет аналога addInventoryChangeListener
Всм? Я его использую до сих пор. Что вместо него?
Если юзать InventoryBasic, то норм будет, к тому же IInventory сейчас не помечен как deprecated
 
Common issues and recommendations
Пункт 5

Индексировать инвентари вокруг каждые n тиков. Потом каждый тик проходить по уже индексированным инвентарям и апать энергию в предметах
А ты подумал над тем что IInventory можно имплементить не только к тайлам? а к любым классам, и уже их использовать как переменные в тайле? или как ты собрался чекать тайлы на итемы?

Если не зацикливаться на старых вещах типа IInventoty можно уяснить что чекать блоки(и не только) с предметами можно через капу.
 
7,099
324
1,509
От того, что там это написано у ItemStackHandler не появятся листенеры изменения
Хотя, можно продублировать ту же логику в своей реализации, переопределив onContentsChanged
А ты подумал над тем что IInventory можно имплементить не только к тайлам?
А я так и делаю, например
EndersMagic/EnderMagic
блоки(и не только) с предметами можно через капу
А если в нбт сохраняется?

Вообще, хороший вопрос: как определить, имеет ли блок инвентарь? Наверное стоит чекнуть, как это определяют трубы из технических модов
 
Последнее редактирование:
Сверху