- Версия(и) Minecraft
- 1.6.4
Здрасьте, выше 1.6.4 я не умею поэтому разбор буду проводить на базе 1.6.4, позже может кто сделает на более новые версии.
Начинать будем с малого. Что же такое это ваше существо в натуре то?
!!!DataWatcher здесь не будет!!!
Теперь более важные вопросы, а как-же зарегистрировать своего моба?
Вариант таков!
Хочешь зарегистрировать рендер? Не беда, делаем Sided-Proxy и на клиенте регистрируем таким образом:
На этом к сожалению пока-что всё, в будущем если будет время - буду дополнять.
Спасибо за внимание и прочтение.
(задание на трелло висит я не виноват)
Начинать будем с малого. Что же такое это ваше существо в натуре то?
!!!DataWatcher здесь не будет!!!
Существо - это внутриигровой объект, имеющий определенные свойства не
характерные другим объектам таким как блок, и так далее.
характерные другим объектам таким как блок, и так далее.
На чём всё базируется?:
Существа базируются на главном классе Entity, от него уже отходят ветки:
Entity ->
EntityLivingBase ->
EntityLiving ->
EntityFlying,
EntityCreature ->
EntityAgeable,
EntityMob;
Это базовые классы существ, в которых описаны базовые методы их работы.
Сейчас возьмем за основу существо Зомби, самый простой и самый обычный.
У Зомби как и у всех существ с 'Мозгами', есть AI - Искусственный интеллект кой и является их мозгами.
Все элементы AI хранятся в поле
Далее у зомби имеется навигатор, существо двигается с помощью навигатора, а сам навигатор зависит от AI, поскольку именно в интеллекте устанавливаются пути куда должен пойти зомби!
Ещё дальше у зомби устанавливаются его атрибуты(свойства), т.е. пара примеров:
1 атрибут зомби это максимальная дальность между игроком и зомби после которого он обязательно должен перестать его преследовать, скорость передвижения зомби и урон наносимый зомби по другим существам.
Далее по курсу у нас идет метод обновления зомби, выполняемый каждый тик
В нём находится в данном случае код где проверяется есть ли шлем на зомби, и если нету а так-же сейчас дневное время и зомби находится непосредственно без укрытия или не в воде - то он начинает гореть целых 8 секунд!
Так-же у зомби есть свои звуки ходьбы, получения урона, смерти и просто издаваемые им звуки которые проигрываются случайно, методы:
При смерти зомби оставляет после себя кусочки гнилой плоти, ID предмета после смерти его определяет метод
Так-же есть невероятно важные методы, которые работают с данными нашего зомби:
Так-же когда зомби убивает жителя на уровне сложности 2 или более то происходит что?
Верно заражение жителя вследствии чего появляется зомби-житель!
За это отвечает метод
Так-же зомби-жителя можно вылечить вызвав у зомби-жителя слабость и дав ему золотое яблоко!
У зомби начнется превращение в обычного жителя. А как-же может начаться превращение?
У зомби есть метод
А ещё есть 1 метод, который не даст деспавнится(пропасть) зомби если он начал свое перевоплощение. А как? А вот так! Благодаря магии метода
Более в зомби нет ничего интересного для новичка(скорее мне лень расписывать вспомогательные методы).
У Зомби как и у всех существ с 'Мозгами', есть AI - Искусственный интеллект кой и является их мозгами.
Все элементы AI хранятся в поле
tasks
, а добавить свой элемент AI можно через EntityLiving#tasks.addTask
, первым аргументом будет идти приоритет вашего элемента интеллекта, а 2-м аргументом сам класс элемента AI, обычно AI обновляются раз в тик в методе EntityLivingBase#onLivingUpdate
, при этом вы должны унаследовать метод EntityLivingBase#isAIEnabled
и возвращать там true
что-бы AI был включён.Далее у зомби имеется навигатор, существо двигается с помощью навигатора, а сам навигатор зависит от AI, поскольку именно в интеллекте устанавливаются пути куда должен пойти зомби!
Ещё дальше у зомби устанавливаются его атрибуты(свойства), т.е. пара примеров:
1 атрибут зомби это максимальная дальность между игроком и зомби после которого он обязательно должен перестать его преследовать, скорость передвижения зомби и урон наносимый зомби по другим существам.
Далее по курсу у нас идет метод обновления зомби, выполняемый каждый тик
EntityLivingBase#onLivingUpdate
.В нём находится в данном случае код где проверяется есть ли шлем на зомби, и если нету а так-же сейчас дневное время и зомби находится непосредственно без укрытия или не в воде - то он начинает гореть целых 8 секунд!
Так-же у зомби есть свои звуки ходьбы, получения урона, смерти и просто издаваемые им звуки которые проигрываются случайно, методы:
playStepSound, getHurtSound, getDeathSound, getLivingSound
соответственно.При смерти зомби оставляет после себя кусочки гнилой плоти, ID предмета после смерти его определяет метод
getDropItemId
, а так-же редкий дроп как слиток железа, морковь или картофель которые регулирует метод dropRareDrop
.Так-же есть невероятно важные методы, которые работают с данными нашего зомби:
writeEntityToNBT
- Который отвечает за запись данных зомби в NBT иreadEntityFromNBT
- Который эти данные считывает из NBT.Так-же когда зомби убивает жителя на уровне сложности 2 или более то происходит что?
Верно заражение жителя вследствии чего появляется зомби-житель!
За это отвечает метод
onKillEntity
, где в классе зомби проверяется уровень сложности, и если уровень сложности равен 2 то зомби может не появится, а на 3 уже он будет обязательно!Так-же зомби-жителя можно вылечить вызвав у зомби-жителя слабость и дав ему золотое яблоко!
У зомби начнется превращение в обычного жителя. А как-же может начаться превращение?
У зомби есть метод
interact
который отвечает за взаимодействие игрока с зомби, если у зомби-жителя наложен эффект слабости и игрок дает ему золотое яблоко, то начинается перевоплощение!А ещё есть 1 метод, который не даст деспавнится(пропасть) зомби если он начал свое перевоплощение. А как? А вот так! Благодаря магии метода
canDespawn
который не дает этого сделать если зомби в процессе перевоплощения.Более в зомби нет ничего интересного для новичка(скорее мне лень расписывать вспомогательные методы).
Теперь более важные вопросы, а как-же зарегистрировать своего моба?
Вариант таков!
Java:
int myEntityID = EntityRegistry.findGlobalUniqueEntityId();
EntityRegistry.registerGlobalEntityID(MyEntityClass.class, "mod.myEntity.name", myEntityID);
//5 аргумент - trackingRange, Range на котором Minecraft отправляет трекинг-обновления существу(???)
//6 аргумент - частота отправки трекинг-обновлении существу в тиках
//7 аргумент - при значении true отправляет пакеты движения на клиенты
EntityRegistry.registerModEntity(MyEntityClass.class, "mod.myEntity.name", myEntityID, MyMod.instance, 80, 3, true);
RenderingRegistry.registerEntityRenderingHandler(MyEntityClass.class, new MyEntityRender());
На этом к сожалению пока-что всё, в будущем если будет время - буду дополнять.
Спасибо за внимание и прочтение.