[1.7.10] Гуи у предмета

svk

1,185
3
Как сделать гуи предмету, со слотом и т.п.Делал раньше гуи у блока, но там все вычесления в тайле производились, а с предметомкак?
 
Костылями, как еще. Все данные хранить в NBT предмета, контейнер и инвентарь создавать каждый раз при "залезании" в этот предмет.
 
Понятно теперь как сталкеропроекты делают. Ты глубоко неправ. Есть нормальное решение через IExtentedEntityPropeeties
 
Лол, это невозможно. Глубоко неправ тут ты. Пока предмет валяется на земле, данные реально хранить в IExtendedEntityProperties сущности предмета. Когда он в инвентаре у игрока, можно хранить данные в IExtendedEntityProperties игрока. Даже если закрыть глаза на сложность костыля для перехода между этими двумя состояниями, то решение все равно ломается, когда предмет перемещают в сундук. Там привязывать его уже не к чему, никакого IExtendedTileEntityProperties не существует.

Хранить данные в NBT предмета - меньшее из зол. Если кажется плохим то, что эта информация отправляется клиентам когда не нужно, то можно хранить не сам инвентарь, а ссылку на него. Это усложнит код, но уменьшит объем передаваемых данных.
 
GloomyFolken написал(а):
Лол, это невозможно. Глубоко неправ тут ты. Пока предмет валяется на земле, данные реально хранить в IExtendedEntityProperties сущности предмета. Когда он в инвентаре у игрока, можно хранить данные в IExtendedEntityProperties игрока. Даже если закрыть глаза на сложность костыля для перехода между этими двумя состояниями, то решение все равно ломается, когда предмет перемещают в сундук. Там привязывать его уже не к чему, никакого IExtendedTileEntityProperties не существует.

Хранить данные в NBT предмета - меньшее из зол. Если кажется плохим то, что эта информация отправляется клиентам когда не нужно, то можно хранить не сам инвентарь, а ссылку на него. Это усложнит код, но уменьшит объем передаваемых данных.
Слушай, а у вас особенный загрузчик 3Д моделей? Вроде полигонов больше 1000, и работает.
 
Жаль. Знаменитые моды его используют. Видимо сталкерлпроекты делают через жёппу. 
Алсо,у меня все работает(я делал IInventory)
 
Dovakin написал(а):
Жаль. Знаменитые моды его используют. Видимо сталкерлпроекты делают через жёппу. 
Алсо,у меня все работает(я делал IInventory)
Ну в сраку это гуи у оружия : )
 
Dovakin написал(а):
Жаль. Знаменитые моды его используют. Видимо сталкерлпроекты делают через жёппу. 
Алсо,у меня все работает(я делал IInventory)
Ты так говоришь, как будто я не использую IExtendedEntityProperties :D
Это хорошая штука, но она не применима здесь. Попросту нет такой сущности, куда можно было бы сохранять инвентарь, лежащий в этом предмете.
P.S: будь добр рассказать тогда уж, как реально сделать инвентарь, не реализовывая интерфейс IInventory и при этом не создавая свою реализацию классов Container, Slot и им подобных? А то говоришь так, как будто использовать для этого IInventory - это что-то особенное.
P.P.S а еще будь добр рассказать, как же ты прикрепляешь инвентарь именно к предмету через IExtendedEntityProperties. У меня была та же задача, что у @svk (инвентарь с аттачментами к пушкам), и мое решение прекрасно работает, если прикрепленные аттачменты сохранять в NBT пушки. Однако, в моем случае то, что все клиенты получают информацию об этих аттачментах - это наоборот удобно (чтобы без дополнительных костылей рендерить аттачменты на пушке).
 
Яснопонятно. Я делал двойное реализование. IInventory и IExtented.... У меня работает. А для атачментов можно в конструктор нбт передать,а потом записать. Записать в нбт,а итем читает и добавляет
 
Расскажу все-таки подробнее о том, как я предлагаю реализовывать инвентарь, привязанный к пушке.

При открытии ГУИ создается IInventory на основе данных из NBT. Хранить инвентарь в NBT можно по-разному, но ИМХО самый удачный способ придумал до нас Нотч. Можешь скопипастить этот код из сохранения-загрузки обычного инвентаря. Структура данных в NBT такая:
лист со слотами:
--элемент 1:
----айди слота
----NBTTagCompound с сохраненным предметом:
------айди предмета
------durability
------размер стака
------(опционально) stackTagCompound предмета
В классе ItemStack есть метод для сохранения и загрузки NBT тега со всей информацией о предмете.

На основе созданного IInventory и инвентаря игрока создается нужный Container. Синхронизацию данных между этим контейнером и NBT тегом пушки можно организовать как минимум двумя способами:
1) непрерывная синхронизация
2) очистить NBT тег пушки после загрузки и записать снова при закрытии ГУИ.
Оба способа чреваты своими дюпами, так что следует быть очень аккуратным.
[merge_posts_bbcode]Добавлено: 06.03.2015 19:07:33[/merge_posts_bbcode]

Dovakin написал(а):
Яснопонятно. Я делал двойное реализование. IInventory и IExtented.... У меня работает. А для атачментов можно в конструктор нбт передать,а потом записать. Записать в нбт,а итем читает и добавляет
А теперь внимательно прочитай, что я предлагаю с самого начала. И @svk с самого первого сообщения в топике хочет привязку именно к предмету, а не к игроку.
 
Я рюкзак делал и мне этого хватило. Пусть он решает как хочет(быдлокод нехорошо,но что уж поделать)
 
Dovakin написал(а):
Я рюкзак делал и мне этого хватило. Пусть он решает как хочет(быдлокод нехорошо,но что уж поделать)
Во-первых, это не быдлокод, а самое логичное решение в этом случае. Да, оно попахивает костылями, но ничего лучше придумать не выйдет.
Во-вторых, рюкзак и другие дополнительные слоты на моем сталкеропроекте как раз сделаны через дополнительный IInventory, который хранится в IExtendedEntityProperties. Здесь задача абсолютно другая.
 
Как меня бесишь ты сейчас. Он говорит "гуи для предмета". 2-3 варианта можно предложить. Описывать надо задачу полностью
 
Назад
Сверху