Давно обещал создать подобную тему на форуме. За неимением времени и огромным количеством требуемого материала гайд был отложен. Теперь же надеюсь регулярно пополнять гайд новыми уроками. Надеюсь создание нового и прекрасного вдохновит вас запилить эпический мод. Но надо сказать, что гайд будет составлен для начинающего "мододела". Далее, разобравшись в java вы сможете сами бороздить просторы MCP (МайнкрафтКодерПака).
Глава I Начало начал
На сегодняшний день актуальна версия Minecraft Coder Pack (MCP) 5.0. Данная версия подойдёт для игры 1.0.0 Ссылка на скачивание MCP 5.0 Так же MCP можно скачать с wiki MCP. Скачиваем, распаковываем в любою папку. Пример: папка "MCP" на рабочем столе. Нам потребуется чистый Minecraft 1.0.0. Для этого запускаем игру и жмём "Force update". Переходим по пути "C:\Documents and Settings\ВашПользователь\Application Data\.minecraft" Копируем bin и resources в папку "jars" нашего MCP. Жмём Decompile. Скачиваем ModLoader последней версии и устанавливаем его по пути "C:/Documents and Settings/ВашПользователь/Application Data/.minecraft/bin/minecraft.jar" Так же устанавливаем по пути "C:\Documents and Settings\Пользователь\Рабочий стол\MCP\jars\bin\minecraft.jar" На всякий случай создадим резервные копии minecraft.jar Установим Eclipse Данная программа поможет вам оперативно работать с языком java. Запускаем и указываем путь "C:\Documents and Settings\Пользователь\Рабочий стол\MCP\eclipse" Теперь мы готовы творить!
Глава II Мир из блоков
Мир Майнкрафта почти полностью состоит из блоков. Лишт некоторые предметы имеют иную форму. Кому-то это нравится кому-то - нет. И всё-таки первый урок - создание блока. Начнём! Открываем Эклипс. Нас интересует окно Project Explorer; client. Путь к файлам игры: src/net.minecraft.scr Вот она, вся кодовая часть Майнкрафта! Создадим новый мод. Жмём правой кнопкой мыши по BaseMod.java, New, class. В поле Name - название мода (например mod_Terracraft). Пишем код: Код: package net.minecraft.src;
public class mod_Terracraft extends BaseMod { public static Block Namehere;
public String Version() { return "1.0.0"; }
public mod_Terracraft() { ModLoader.RegisterBlock(Namehere);
static { new BlockNamehere(210, 0).setHardness(1.0F).setResistance(1.0F).setLightValue(1.0F).setBlockName("Namehere"); } } Разберём то, что мы написали (а в вашем случае-наверное скопировали).
Код: public class mod_Tarracraft extends BaseMod Этим мы задали новый мод Terracraft. Название можно менять, но только английским транслитом.
Код: public String Version() { return "1.0.0"; } Это версия игры (1.0.0).
Код: public static Block Namehere; Пишем новый блок под названием Namehere (можно менять). Позже мы создадим java файл с параметрами блока BlockNamehere.
ModLoader.AddRecipe(new ItemStack(Namehere, 1), new Object[] {"###", "###", "###", Character.valueOf('#'), Item.seeds}); Первой строчкой мы регистрируем блок. Второй создаём для него текстуру. В игре блоки берутся из текстуры terrain.png, а для этого мы создаём новую картинку размером 16х16 для нашего блока. Лучше всего делать это в программе Фотошоп. Третья строка задаёт имя Namehere и в скобках указываем имя в игре-тоже Namehere. Четвёртая строка даёт рецепт блоку. Если же вы хотите, чтобы блок генерировался в игре сам, то рецепт не нужен. Но это позже. Так вот, в скобках мы указали, что производим блок Namehere. 1 - количество получаемого. Далее идёт расположение крафта (как на верстаке). Они идут по вертикали. Вот как это выглядит в игре:
# # # # # # # # # Item.seeds-материал для получения блока (семена). То есть нам нужно заполнить весь верстак семенами.
Теперь давайте рассмотрим пример, когда наш блок будет крафтиться из двух разных предметов.
Код: ModLoader.AddRecipe(new ItemStack(Namehere, 1), new Object[] {" # ", " # ", " x ", Character.valueOf('#'), Item.seeds}), Character.valueOf('x'), Item.stick}); Теперь я добавил ещё один предмет-палку. Она обозначена переменной "x". В игре это будет так:
# # x Надеюсь это понятно.
Код: static { new BlockNamehere(210, 0).setHardness(1.0F).setResistance(1.0F).setLightValue(1.0F).setBlockName("Namehere"); Статик для нашего блока. Даём ему ID 210, Hardness (силу разрушения)-1.0F и другие параметры. Параметры можно посмотреть открыв Block.java и прокрутив вниз. Мы увидим статик для всех блоков игры. Их можно скопировать в наш мод и изменить. С кодом для мода разобрались. Перейдём к созданию BlockNamehere.java
public BlockNamehere(int i, int j) { super(i, j, Material.grass); } public int idDropped(int i, Random random) { return mod_Terracraft.Namehere.blockID; } public int quantityDropped(Random random) { return 1; } } Разберём:
Код: public class BlockNamehere extends Block Да, да мы знаем, что Namehere-блок).
Код: public BlockNamehere(int i, int j) { super(i, j, Material.grass); } Составляющая блока. Это просто запомните. Материал: трава 0_o? ну да ладно). Это можно менять. Например на стекло. Но об этом позже.
Ну а дальше, мы видим к чему относится блок (mod_Terracraft) и его дроп.
Это всё... Осталось только несколько манипуляций. Создадим папку Blocks. Создадим текстуру блока. Вот пример:
Дадим название Namehere.png
Теперь нажмём рекомпайл в папке MCP. Если ошибок нет-жмём дальше reobfuscate. Теперь в папке reobf есть файлы мода. Кидаем их в minecraft.jar вместе с папкой текстуры. Мод готов!
Глава III Предмет
Следующая часть уроков-предмет. Сейчас мы просто создадим вещь, у которой не будет никаких функций. К примеру эта вещь будет нужна для рецепта.
Вот уже немного другой код для мода:
Код: package net.minecraft.src;
public class mod_Terracraft extends BaseMod { public static Item Namehere;
static { new Item(1000).setItemName("1"); } } Сравните коды блока и предмета. Отличий очень немного. Немного изменена часть добавления текстуры и нет параметров в части static. Для предмета Namehere я сделал такой же рецепт, что и для блока. Поэтому во избежание ошибки вам нужно самостоятельно изменить рецепт. В одном из следующих уроков я расскажу как сделать блок генерируемый в мире. Из него будет выпадать какой-нибудь предмет, и с его помощью мы сможем изготовить новый блок (или вещь, или инструмент).
Теперь рассмотрим код предмета ItemNamehere.java.
Код: package net.minecraft.src;
public class ItemNamehere extends Item {
public ItemNamehere (int i) { super(i); maxStackSize = 64; } Здесь всё просто. В коде видно, что Namehere предмет. Так же показано его максимальное количество в рюкзаке (64). Осталось создать текстуру вещи 16х16 и закинуть её в папку Items.Например текстура:
Лучше используйте для своего мода одну и туже папку для всех картинок. Например Terracraft. Дерзайте!
Глава IV Кушать подано
Вот мы добрались и до еды. Одна из самых важных вещей в minecraft. Ведь теперь, после добавления голода (1.8.1) требуется обязательное восполнение сил. Возможно вы решите сделать какой-то экзотический фрукт (как сделать дерево или семена-позже), а может быть это будет трюфель зарытый в земле, а может быть обычный десерт и какао. И хотя еда очень важна, слепить её нетрудно.
Требуется лишь код мода: Код: package net.minecraft.src;
public class mod_Terracraft extends BaseMod { public static Item Eda;
static { new ItemEda(1000, 10, true).setItemName("Eda"); } } Всё это вы уже знаете. Только static является новым. Ничего, разберёмся!
Код: static { new ItemEda(1000, 10, true).setItemName("1"); } Первое число в скобках-ID. 10-количество половинок еды. То есть 10=5 единиц голода. true-будет ли еда привлекать волка. Можно изменить на false, и тогда волка останется к ней равнодушен. Не забудьте текстуру хавчика!