Разработка моба — от рендера до дропа (часть 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 лайков, я добавлю небольшую статью по созданию спецэффектов из частиц и особых способностей.

Запись опубликована в рубрике ModPE. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *