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); });