Разработка моба — от рендера до дропа (часть 3)
Разработка моба — от рендера до дропа (часть 3)
Сегодня рассмотрим все оставшиеся аспекты создания нового моба на ModPE. Начнем cзагрузки данных о мобе при заходе в мир.
Сохранение и загрузка рендеров и скинов
В прошлом уроке мы “метили” наших мобов с помощью Entity.setExtraData. Эти данные сохраняются не только на протяжении игры, но и между запусками Майнкрафта. Казалось бы, все просто – в NewLevel получаем всех мобов, находим “меченных” и задаем им рендер. Но дело в том, что при заходе в мир сущности еще не инициализированы. Поэтому делать это будем в модтике, как только прогрузятся мобы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | //Создадим переменную, показывающую, надо ли инициализировать мобов var init = false; // При входе в игру скажем, что нужно инициализировать function newLevel(){ init = true; } // Если вдруг кто-то сможет выйти из игры до первого тика function leaveGame(){ init = false; } function modTick(){ // Если не нужна инициализация, продолжать бессмысленно if(!init) return; //Проверяем, подгрузились ли мобы if(Entity.getAll().length == 1) return; // Для каждой подгруженной сущности проверяем наличие данных Entity.getAll().forEach(function(ent){ var data = Entity.getExtraData(ent, KEY_TYPE); // Если мы нашли приведение, установим ему рендер и скин if(data == "ghost"){ Entity.setRenderType(ent, ghost_renderer); Entity.setMobSkin(ent, "mob/ghost.png"); } }); init = false; } |
Дроп
Чтобы добавить дроб кастомному мобу с помощью ModPE, есть три возможности. Рассмотрим их поподробнее:
- При смерти моба просто дропать нужный айтем. Тогда сохранится изначальный дроп моба, а кастомный дроп станет дополнительным. Если вы создаете моба на основе зомби, то будет дропаться гнилая плоть и, например, алмазик.
- Непосредственно перед смертью моба убирать его с помощью Entity.remove и дропать нужный предмет. Так не будет мусорного дропа, но не будет и анимации смерти.
- Можно пытаться убирать старый дроп уже после смерти моба, но вероятность того, что а) игрок поднимет его раньше б) пропадет еще какой-то дроп, валяющийся рядом, очень высока. Поэтому рассмотрим первые два варианта:
1 2 3 4 5 6 7 8 9 10 11 12 13 | function deathHook(attacker,victim){ // Если это приведение откинуло копыта if(Entity.getExtraData(victim, KEY_TYPE) == "ghost"){ // Если первый вариант реализации, убираем эту строчку, если второй, оставляем preventDefault(); Level.dropItem(Entity.getX(victim), Entity.getY(victim), Entity.getZ(victim), 0, 260, 1, 0); // Дропаем яблоко // Если первый вариант реализации, убираем эту строчку, если второй, оставляем Entity.remove(victim); } } |
На этом создание основных фич мода можно считать законченным. Если под этим постом будет больше 20 лайков, я добавлю небольшую статью по созданию спецэффектов из частиц и особых способностей.
Comments