Minecraft изнутри - статья 1, вступительная
Ну что же, привет всем. Я уже довольно долго думал, и все же решил начать цикл статей по внутреннему устройству майнкрафта.
Несмотря на внешнюю сложность и запутанность, на самом деле игра не так уж и нелепо устроена. Довольно много времени потребовалось чтоб разобраться и понять основные аспекты. Теперь же будем разбираться вместе
![](/img/smilies/icon_smile.gif)
И так, в этой теме мы повторим основы - создадим блок.
Говорю сразу, мы исследуем и работаем с ваниллой - "чистым" MC, без модов типа ModLoader.
Приступим.
Создание блока
Так как с снапшота 12w18a клиент слился с сервером, моддить стало слегка легче - сразу же и MP тебе, и прочие прелести. Мы будем использовать версию 1.4.6.
Процесс настройки окружения описывался уже не раз и разжеван до мелочей. Я думаю, что вы знаете основы Java, скачали MCP, JDK, и выбрали среду разработки - Eclipse/NetBeans/просто блокнот. Для модификации я буду использовать Eclipse без MCP. Как такое
![](http://rom-soft.ru/out/img/mc_tutorial/1.png)
Список блоков у нас хранится в классе Block. Наши действия:
- Отнаследоваться от класса Block, создав класс Block***
- Создать в классе Block public static final Block - переменную с именем блока и назначить ей значение в виде нового экземпляра нашего Block***
- Добавить наш блок в генераторы, создать крафт, etc по вкусу.
Для начала создадим сам наш блок. Рассмотрим, как устроена земля (BlockDirt)
package net.minecraft.src;
public class BlockDirt extends Block
{
protected BlockDirt(int par1, int par2)
{
super(par1, par2, Material.ground);
this.setCreativeTab(CreativeTabs.tabBlock);
}
}
Что делает данный код? Он декларирует класс BlockDirt, в своем конструкторе (public BlockDirt) вызывает конструктор родительского класса (Block) и добавляет наш блок на вкладку в режиме креатива.
Создадим наш блок под названием Test.
Для этого создадим по такому же образу и подобию одноименный класс
![](http://rom-soft.ru/out/img/mc_tutorial/2.png)
package net.minecraft.src;
public class BlockTest extends Block
{
protected BlockTest(int par1, int par2)
{
super(par1, par2, Material.ground);
this.setCreativeTab(CreativeTabs.tabBlock);
}
}
Теперь добавим переменную в класс Block.
public static final Block test = (new BlockTest(146, 2)).setHardness(0.5F).setStepSound(soundGravelFootstep).setBlockName("test");
А вот здесь остановимся и разберем код поподробнее.
new BlockTest(146, 2)
.setHardness(0.5F)
.setStepSound(soundGravelFootstep)
public static final StepSound soundPowderFootstep = new StepSound("stone", 1.0F, 1.0F);
public static final StepSound soundWoodFootstep = new StepSound("wood", 1.0F, 1.0F);
public static final StepSound soundGravelFootstep = new StepSound("gravel", 1.0F, 1.0F);
public static final StepSound soundGrassFootstep = new StepSound("grass", 1.0F, 1.0F);
public static final StepSound soundStoneFootstep = new StepSound("stone", 1.0F, 1.0F);
public static final StepSound soundMetalFootstep = new StepSound("stone", 1.0F, 1.5F);
public static final StepSound soundGlassFootstep = new StepSoundStone("stone", 1.0F, 1.0F);
public static final StepSound soundClothFootstep = new StepSound("cloth", 1.0F, 1.0F);
public static final StepSound soundSandFootstep = new StepSound("sand", 1.0F, 1.0F);
public static final StepSound soundSnowFootstep = new StepSound("snow", 1.0F, 1.0F);
public static final StepSound soundLadderFootstep = new StepSoundSand("ladder", 1.0F, 1.0F);
public static final StepSound soundAnvilFootstep = new StepSoundAnvil("anvil", 0.3F, 1.0F);
.setBlockName("test")
Что ж, давайте скомпилируем и посмотрим на наш новоиспеченный тестовый блок.
![](/img/icon_plus.gif)
![](http://rom-soft.ru/out/img/mc_tutorial/3.png)
![](http://rom-soft.ru/out/img/mc_tutorial/4.png)
![](http://rom-soft.ru/out/img/mc_tutorial/5.png)
![](http://rom-soft.ru/out/img/mc_tutorial/6.png)
Открываю этот файл и вставляю строчку вида
группа.объект.параметр=значение
tile.test.name=Test
![](/img/icon_plus.gif)
![](http://rom-soft.ru/out/img/mc_tutorial/7.png)
На этом я завершу эту статью, а завтра мы поговорим о реализации сетевой подсистемы Minecraft. Скажу вам, что там есть довольно много интересного и ничего сложного.
С вами был 901.
901 специально для MCGL. При копировании указание копирайта обязательно.