Последние ответы на форуме
Новые файлы
  • Страница 1 из 1
  • 1
Modding minecraft
NEONДата: Среда, 03.10.2012, 17:28 | Сообщение # 1
Сообщений: 11
Offline
Modding Minecraft
Предисловие...

Давно обещал создать подобную тему на форуме. За неимением времени и огромным количеством требуемого материала гайд был отложен. Теперь же надеюсь регулярно пополнять гайд новыми уроками. Надеюсь создание нового и прекрасного вдохновит вас запилить эпический мод. Но надо сказать, что гайд будет составлен для начинающего "мододела". Далее, разобравшись в 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);

Namehere.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/Blocks/Namehere.png");

ModLoader.AddName(Namehere, "Namehere");

ModLoader.AddRecipe(new ItemStack(Namehere, 1), new Object[] {"###", "###", "###", Character.valueOf('#'), Item.seeds});
}

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.RegisterBlock(Namehere);

Namehere.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/Blocks/Namehere.png");

ModLoader.AddName(Namehere, "Namehere");

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

Клацаем Block.java, New, class. Name: BlockNamehere.

Код:
Код:
package net.minecraft.src;

import java.util.Random;

public class BlockNamehere extends Block
{

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;

public String Version()
{
return "1.0.0";
}

public mod_Terracraft()
{

Namehere.iconIndex = ModLoader.addOverride("/gui/items.png", "/Items/Namehere.png");

ModLoader.AddName(Namehere, "Namehere");

ModLoader.AddRecipe(new ItemStack(Namehere, 1), new Object[] {"###", "###", "###", Character.valueOf('#'), Item.seeds});
}

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;

public String Version()
{
return "1.0.0";
}

public mod_Terracraft()
{

Eda.iconIndex = ModLoader.addOverride("/gui/items.png", "/modTerracraft/Eda.png");

ModLoader.AddName(Eda, "Eda");
}

static
{
new ItemEda(1000, 10, true).setItemName("Eda");
}
}
Всё это вы уже знаете. Только static является новым. Ничего, разберёмся!

Код:
static
{
new ItemEda(1000, 10, true).setItemName("1");
}
Первое число в скобках-ID.
10-количество половинок еды. То есть 10=5 единиц голода.
true-будет ли еда привлекать волка. Можно изменить на false, и тогда волка останется к ней равнодушен.
Не забудьте текстуру хавчика!
 
  • Страница 1 из 1
  • 1
Поиск: