Вопросы по Capability

Версия Minecraft
1.12.2
Представим ситуацию. Я пишу мод на жажду. Поковыряв форум и поисковики, я понял что мне нужна Capability. И тут началось самое веселое..
Я посмотрел реализацию простой маны где-то в ресурсах (и на планетмайнкрафт было что-то похожее, но все таки там делали иначе), и честно говоря ужаснулся.
Для добавления такой простой вещи как мана, нужно создать туеву хучу классов. Попытка скопипастить в новый проект чтобы просто посмотреть как оно работает провалилась: я просто запутался в коде и умер от истощения . Да и вообще, хотелось бы разобраться, а не просто CTRL+C CTRL+V.

Итак.
1)Есть ли иные способы хранения в сущности (игроке) значение той же самой жажды?
2)Есть ли более простые способы создавать Capability?
3)Ладно, может для одной только жажды я сделаю Capability, но что если у меня будут еще состояния? Например, усталость, температура, что-то еще, мне для каждого из значений нужно создавать тонну классов?
 
161
12
90
1) С таким же функционалом как у Capability? Нет, нету.
2) Capability сама по себе простая функция, там нет ничего не возможного.
3) Можно сделать одну капу и в ней указать все эти переменные.
От себя скажу, когда переходил на 1.12.2, да, были запары с ней, но посмотрев 2 гайда(на форуме был один, и на том же майнкрафтпланет), посидев около часа все понял, часов через 3 у меня была уже готова капа на роли игрока(шахтер, инженер, рыцарь, охотник и т.д).
Капа сложна только тем что использует большое количество фишек jav'ы. Если ты не понимаешь капу тебе надо скорее всего учить Java как бы, а именно интерфейсы, наследование, полиморфизм и скорее всего nbt. Что бы не быть голословным, и хотя бы чем то помочь то хотя бы распишу зачем нужны классы которые нужны для капы(от себя конечно и как я это понимаю).
1572200321427.png
CapabilityHandler - простой EventHandler, в нем обычно используется эвент AttachCapabilitiesEvent, для регистрации капы на игрока.
ISelect - интерфейс капы, там пишутся методы, которые уже в основном классе капы с помощью полиморфизма будут расписаны(например getRole(), setRole(), getRoleID(), setRoleID(), getRoleByName() ну и похожие по смыслу методы)
Select - имплеминтированный класс в котором и расписываются все методы и переменные из ISelect
SelectProvider - нужен для получения капы в методах(может быть еще за чем то, но хз)
StorageSelect - хранилище капы, в нем я к примеру сохраняю и получаю переменную role;
Еще если тебе нужно использовать капу не только на сервере, но и на клиенте, тебе надо будет сделать пакет, который будет при изменении на сервере переменной(переменной жажды к примеру) будет синхронизировать с клиентской стороной(капа хранится отдельно на сервере и на клиенте, и для ее использования на клиенте нужно будет ее синхронизировать). На этом думаю все(может быть потом еще дополню), и да, иди учи Jav'у.
 
Здесь ты прав, беда у меня с интерфейсами, а еще я не могу понять зачем нужны абстрактные классы, если есть обычные, вот так вот.

таким же функционалом как у Capability
Нужно ведь всего лишь сохранять и получать откуда то значение.

А за подробное объяснение - огромное спасибо! На неделе я все же попробую разобраться с этим, благодарю.
 
161
12
90
Нужно ведь всего лишь сохранять и получать откуда то значение.
Можно огонь палкой по голове разжигать, когда в кармане зажигалка лежит.

абстрактные классы
Они как интерфейсы, смысл похожий. Почитай в гугле.
 
1,057
50
234
IAttribute
 
Сверху