- Версия(и) Minecraft
- 1.7.10
Ограничение переносимого игроком веса - одна из старейших игровых механик, особо широко использующая в РПГ и в некоторых других жанрах. Она позволяет сделать игру более правдоподобной и открывает много возможностей для прокачки.
И хотя сделать мод на переносимый вес может каждый, но подружить его с другими модами, так или иначе причастные к весу - совсем не простая задача. При наличии двух и более модов на вес запросто может сложится ситуация, что игрок будет одновременно перегружен и не перегружен. Остается лишь одно - оставлять в сборке лишь один мод, отказываясь от контента из другого. Но WeightAPI меняет дело...
WeightAPI поможет вам:
- Обеспечить бесконфликтную работу модов, связанных с переносимым весом
- Отслеживать изменение веса в инвентарях игроков и уведомлять об этом заинтересованные стороны
- Синхронизировать системы веса с клиентами игроков
- С легкостью расширять сторонние системы веса
- Активировать и отключать системы веса прямо в рантайме игры
FAQ
Вы найдете исчерпывающую инструкцию в нашей замечательной вики
Все что вам нужно - выбрасывать
WeightChangedEvent
при изменении содержимого вашего инвентаря. Вот так просто. Однако не выбрасывайте его, если контейнер с вашим инвентарем в настоящее время открыт т.к. стандартный трекер инвентаря отслежвает все слоты в открытых контейнерах.Реализуйте интерфейс
IWeightProvider
и зарегистрируйте ваш класс в WeightRegistry
. Теперь все остальные моды, использующие WeightAPI будут обращаться к вашему классу. Но не забудьте посылать соответствующие евенты (вы найдете их в пакете ru.rarescrap.weightapi.event
)Подпишитесь на евент
WeightChangedEvent
и реализуйте добавление эффекта замедления:
Java:
@SubscribeEvent
public void onOverload(WeightChangedEvent event) {
// Накладываем эффект только на сервере и только для игроков
if (event.entity.worldObj.isRemote || !(event.entity instanceof EntityPlayer)) return;
EntityPlayer player = (EntityPlayer) event.entity;
// Определяем, был ли игрок уже замедлен
boolean isSlowdown = ((EntityPlayer) event.entity).isPotionActive(Potion.moveSlowdown);
if (event.isOverloaded) { // Определяем, перегружен ли игрок
if (!isSlowdown) player.addPotionEffect(new EndlessPotionEffect(Potion.moveSlowdown.id, 2));
} else if (isSlowdown && player.getActivePotionEffect(Potion.moveSlowdown) instanceof EndlessPotionEffect) {
player.removePotionEffect(Potion.moveSlowdown.id); // Удаляем эффект при снятии перегрузки
}
}
TODO
TODO
TODO
DISCLAMER:
Этот API еще разрабатывается. Сейчас я занят написанием документации, тестированием, портированием на новый версии и т.д. Так что до v1.0.0 прошу тапками не кидаться. Если у вас есть вопрос/пожелание - напишите его тут. Если же вы нашли ошибку или плохое архитектурное решение - прошу, немедленно дайте об это знать. Всяческий анализ кода категорически приветствуется!