Пример создания моба — различия между версиями

 
(не показано 5 промежуточных версий этого же участника)
Строка 1: Строка 1:
<pre>MobSpawnRegistry.registerSpawn("bird-blue", .2); ''// относительно редкий спавн птицы''
+
<syntaxhighlight lang="Javascript">MobSpawnRegistry.registerSpawn("bird-blue", .2); // относительно редкий спавн птицы
var blue_bird_texture = new Texture("bird_blue.png"); ''// создадим объект текстуры''
+
var blue_bird_texture = new Texture("bird_blue.png"); // создадим объект текстуры
blue_bird_texture.setResolution(128, 64); ''// зададим разрешение ''
+
blue_bird_texture.setResolution(128, 64); // зададим разрешение  
blue_bird_texture.setPixelScale(2); ''// установим масштабирование ''
+
blue_bird_texture.setPixelScale(2); // установим масштабирование  
''/* Так же этот код можно записать короче, в таком формате: ''var blue_bird_texture = new Texture("bird_blue.png").setResolution(128, 64).setPixelScale(2);''*/''
+
/* Так же этот код можно записать короче, в таком формате: var blue_bird_texture = new Texture("bird_blue.png").setResolution(128, 64).setPixelScale(2);*/
var blue_bird_texture = new Texture("bird_blue.png").setResolution(128, 64).setPixelScale(2);''// загружаем текстуру и задаем ей разрешение и масштабирование. ''
+
var blue_bird_texture = new Texture("bird_blue.png").setResolution(128, 64).setPixelScale(2);// загружаем текстуру и задаем ей разрешение и масштабирование.  
var blue_bird_model = new EntityModel(); ''// создаем модель нашей птицы ''
+
var blue_bird_model = new EntityModel(); // создаем модель нашей птицы  
blue_bird_model.setTexture(blue_bird_texture);''// устанавливаем ей текстуру // создаем анимацию модели: она будет содержать 16 кадров, каждый из которых будет занимать 0.5 тика (1 цикл = 1 взмах крыльев = 8 тиков) ''
+
blue_bird_model.setTexture(blue_bird_texture);// устанавливаем ей текстуру // создаем анимацию модели: она будет содержать 16 кадров, каждый из которых будет занимать 0.5 тика (1 цикл = 1 взмах крыльев = 8 тиков)  
blue_bird_model.createAnimation(16, function(frame) { ''// создание кадра ''
+
blue_bird_model.createAnimation(16, function(frame) { // создание кадра  
     var render = new Render(); ''// создаем рендер ''
+
     var render = new Render(); // создаем рендер  
     var partObj = [ ''// создаем объект, описывающий часть body, в нашем случае это вся модель''
+
     var partObj = [ // создаем объект, описывающий часть body, в нашем случае это вся модель
 
         {
 
         {
 
             type: "box",
 
             type: "box",
Строка 26: Строка 26:
 
                 y: 0
 
                 y: 0
 
             }
 
             }
         },''// тело ''
+
         },// тело  
 
         {
 
         {
 
             type: "box",
 
             type: "box",
Строка 43: Строка 43:
 
                 y: 0
 
                 y: 0
 
             }
 
             }
         }, ''// голова ''
+
         }, // голова  
 
         {
 
         {
 
             type: "box",
 
             type: "box",
Строка 60: Строка 60:
 
                 y: 16
 
                 y: 16
 
             }
 
             }
         }, ''// клюв''
+
         }, // клюв
 
         {
 
         {
 
             type: "box",
 
             type: "box",
Строка 77: Строка 77:
 
                 y: 0
 
                 y: 0
 
             }
 
             }
         }, ''// хвост''
+
         }, // хвост  
 
         {
 
         {
 
             type: "box",
 
             type: "box",
Строка 94: Строка 94:
 
                 y: 11
 
                 y: 11
 
             }
 
             }
         }, ''// ноги ''
+
         }, // ноги  
     ]; ''// крылья - более сложная структура и она генерируется в цикле, при том именно крылья меняют свое положение каждый кадр. ''
+
     ]; // крылья - более сложная структура и она генерируется в цикле, при том именно крылья меняют свое положение каждый кадр.  
     var position = Math.sin(frame / 16 * Math.PI * 2); ''// рассчитываем позицию крыльев - синус здесь принимает значения от 0 до 2 * pi и поэтому проходит 1 период, принимая значения от -1 до 1, что нам и нужно (взмахи) ''
+
     var position = Math.sin(frame / 16 * Math.PI * 2); // рассчитываем позицию крыльев - синус здесь принимает значения от 0 до 2 * pi и поэтому проходит 1 период, принимая значения от -1 до 1, что нам и нужно (взмахи)  
     for (var i = 0; i < 5; i++) { ''// каждое крыло состоит из 5 частей, чем дальше от тела часть, тем сильнее изменение позиции и тем меньше эта часть по длине ''
+
     for (var i = 0; i < 5; i++) { // каждое крыло состоит из 5 частей, чем дальше от тела часть, тем сильнее изменение позиции и тем меньше эта часть по длине  
 
         partObj.push({
 
         partObj.push({
 
             type: "box",
 
             type: "box",
Строка 114: Строка 114:
 
                 z: 0
 
                 z: 0
 
             }
 
             }
         }); ''// правое крыло ''
+
         }); // правое крыло  
 
         partObj.push({
 
         partObj.push({
 
             type: "box",
 
             type: "box",
Строка 131: Строка 131:
 
                 z: 0
 
                 z: 0
 
             }
 
             }
         }); ''// левое крыло ''
+
         }); // левое крыло  
 
     }
 
     }
     render.setPart("head", partObj, {});''// устанавливаем наше описание части в рендер''
+
     render.setPart("head", partObj, {});// устанавливаем наше описание части в рендер  
     return render;''// возвращаем рендер для данного кадра''
+
     return render;// возвращаем рендер для данного кадра
 
}, 0.5);
 
}, 0.5);
  
var entityTypeBird = MobRegistry.registerEntity("bird-blue"); ''// создаем тип моба - птицу ''
+
var entityTypeBird = MobRegistry.registerEntity("bird-blue"); // создаем тип моба - птицу  
entityTypeBird.customizeVisual({ ''// задаем нашу модель как основную (будет установлена при старте) ''
+
entityTypeBird.customizeVisual({ // задаем нашу модель как основную (будет установлена при старте)  
 
     getModels: function() {
 
     getModels: function() {
 
         return {
 
         return {
Строка 145: Строка 145:
 
     }
 
     }
 
});
 
});
entityTypeBird.customizeDescription({''// кроме этого задаем размер хитбокса птице, чтобы он был поменьше ''
+
entityTypeBird.customizeDescription({// кроме этого задаем размер хитбокса птице, чтобы он был поменьше  
 
     getHitbox: function() {
 
     getHitbox: function() {
 
         return {
 
         return {
Строка 156: Строка 156:
 
     coords = coords.relative;
 
     coords = coords.relative;
 
     Entity.spawnCustom("bird-blue", coords.x + .5, coords.y + .5, coords.z + .5);
 
     Entity.spawnCustom("bird-blue", coords.x + .5, coords.y + .5, coords.z + .5);
});</pre>
+
});</syntaxhighlight>

Текущая версия на 17:21, 5 февраля 2018

MobSpawnRegistry.registerSpawn("bird-blue", .2); // относительно редкий спавн птицы
var blue_bird_texture = new Texture("bird_blue.png"); // создадим объект текстуры
blue_bird_texture.setResolution(128, 64); // зададим разрешение 
blue_bird_texture.setPixelScale(2); // установим масштабирование 
/* Так же этот код можно записать короче, в таком формате: var blue_bird_texture = new Texture("bird_blue.png").setResolution(128, 64).setPixelScale(2);*/
var blue_bird_texture = new Texture("bird_blue.png").setResolution(128, 64).setPixelScale(2);// загружаем текстуру и задаем ей разрешение и масштабирование. 
var blue_bird_model = new EntityModel(); // создаем модель нашей птицы 
blue_bird_model.setTexture(blue_bird_texture);// устанавливаем ей текстуру // создаем анимацию модели: она будет содержать 16 кадров, каждый из которых будет занимать 0.5 тика (1 цикл = 1 взмах крыльев = 8 тиков) 
blue_bird_model.createAnimation(16, function(frame) { // создание кадра 
    var render = new Render(); // создаем рендер 
    var partObj = [ // создаем объект, описывающий часть body, в нашем случае это вся модель
        {
            type: "box",
            coords: {
                x: 0,
                y: 16,
                z: 0
            },
            size: {
                x: 5,
                y: 4,
                z: 9
            },
            uv: {
                x: 20,
                y: 0
            }
        },// тело 
        {
            type: "box",
            coords: {
                x: 0,
                y: 14,
                z: -4
            },
            size: {
                x: 4,
                y: 4,
                z: 6
            },
            uv: {
                x: 0,
                y: 0
            }
        }, // голова 
        {
            type: "box",
            coords: {
                x: 0,
                y: 14,
                z: -6.5
            },
            size: {
                x: 1,
                y: 1,
                z: 3
            },
            uv: {
                x: 0,
                y: 16
            }
        }, // клюв
        {
            type: "box",
            coords: {
                x: 0,
                y: 14,
                z: 6
            },
            size: {
                x: 3,
                y: 1,
                z: 8
            },
            uv: {
                x: 20,
                y: 0
            }
        }, // хвост 
        {
            type: "box",
            coords: {
                x: 0,
                y: 20,
                z: 0
            },
            size: {
                x: 3,
                y: 4,
                z: 1
            },
            uv: {
                x: 0,
                y: 11
            }
        }, // ноги 
    ]; // крылья - более сложная структура и она генерируется в цикле, при том именно крылья меняют свое положение каждый кадр. 
    var position = Math.sin(frame / 16 * Math.PI * 2); // рассчитываем позицию крыльев - синус здесь принимает значения от 0 до 2 * pi и поэтому проходит 1 период, принимая значения от -1 до 1, что нам и нужно (взмахи) 
    for (var i = 0; i < 5; i++) { // каждое крыло состоит из 5 частей, чем дальше от тела часть, тем сильнее изменение позиции и тем меньше эта часть по длине 
        partObj.push({
            type: "box",
            size: {
                x: 1,
                y: 1,
                z: 8 - i
            },
            uv: {
                x: 20,
                y: 0
            },
            coords: {
                x: 2.5 + i,
                y: position * i + 15,
                z: 0
            }
        }); // правое крыло 
        partObj.push({
            type: "box",
            size: {
                x: 1,
                y: 1,
                z: 8 - i
            },
            uv: {
                x: 20,
                y: 0
            },
            coords: {
                x: -2.5 - i,
                y: position * i + 15,
                z: 0
            }
        }); // левое крыло 
    }
    render.setPart("head", partObj, {});// устанавливаем наше описание части в рендер 
    return render;// возвращаем рендер для данного кадра
}, 0.5);

var entityTypeBird = MobRegistry.registerEntity("bird-blue"); // создаем тип моба - птицу 
entityTypeBird.customizeVisual({ // задаем нашу модель как основную (будет установлена при старте) 
    getModels: function() {
        return {
            "main": blue_bird_model
        };
    }
});
entityTypeBird.customizeDescription({// кроме этого задаем размер хитбокса птице, чтобы он был поменьше 
    getHitbox: function() {
        return {
            w: 0.3,
            h: 0.3
        };
    }
});
Item.registerUseFunctionForID(280, function(coords, item, block) {
    coords = coords.relative;
    Entity.spawnCustom("bird-blue", coords.x + .5, coords.y + .5, coords.z + .5);
});