Вверх ↑
Ответов: 123
Eternity
Inactive
#1: 2011-08-29 00:27:56 ЛС | профиль | цитата
И так почитав пару статей решила поделиться с вами, и будем по шагам обучаться вместе писать моды, создавать предметы, ивэнты, нпс и тп... Если что то не так то поправьте, камнями не кидайте.

Глава 1. Подготовка рабочего места и настройка MCP.

Выкидываем все постороние вещи в окно, все кто может нам помешать закрываем в туалете, тазик берем с собой.
А теперь серьезно.

Инструменты которые нам понадобятся (качаем):

1. Java Development Kit 6 (JDK 6).
2. Minecraft Coder Pack (MCP 4.3, качаем под нашу версию сервера Minecraft Server Beta 1.7.3).
3. Notepad++ Это будет один из главных наших редакторов.
4. ModLoader + Клиент (качать обязательно).

Установка:

1. Создаем папку в любом удобном для вас месте.
2. Копируем файлы архива MCP в эту папку.
3. Прописываем путь к javac.exe (JDK) в системной переменной PATH.
Щелкните правой кнопкой мыши по ярлыку Мой компьютер и выберите категорию Дополнительно. Там же ниже будет кнопка Переменные среды.
В системных переменных найдите переменную Path (PATH) и допишите в ней строки:

;C:\Program Files (x86)\Java\jdk1.6.0_26\bin


Win 7
Без пробела и с символом "точка с запятой". Путь укажите, конечно же, по вашему усмотрению системы.

4. Кладем из спец. сборки (Cleaned Minecraft + ML (Cleaned Minecraft + ML\.minecraft)) папки bin и resources в папку jars ((mcp43) mcp43\jars ), которая непосредственно находится в вашей папке которую вы подготовили ранее .
5. Откройте папку bin и найдите minecraft.jar. Откройте (не разархивируйте), и удалите папку META-INF.
6. Запускаем decompile.bat.
7. Как только вы пройдете уроки ниже, просто напросто запускайте recompile.bat, а после чего startclient.bat и тестируйте.
8. Ну а когда вы точно решили что мод готов - запускайте reobf.bat, проходите в папочку reobf и все содержимое кидайте в файл minecraft.jar специально подготовленной для этого игры.

Глава 2. Создание блока.

Запоминайте сразу, в пути \src\minecraft\net\minecraft\src находится весь декомпилированный код игры.

Для начала давайте создадим новый файлик посредством нотепада. Называться он будет mod_gcc.java.
Он служит для складывания всей информации о блоках, рецептах, etc.
Впишем такую строчку (используйте Notepad++)

package net.minecraft.src;

Она включает магию которая даст возможность данному файлику работать с Кубокрафтом.
После чего добавим еще две строчечки, но сначала делаем пробел.

public class mod_gcc extends BaseMod
{

Здесь мы создаем класс.

Пишем в 5 строке вот такие словечки про наш кубик, тут мы его регистрируем.

public static Block newblock = new BlockNew(101, 0).setHardness(0.5F).setResistance(1.0F).setBlockName("newblock");

Давайте попробуем разобрать данную неразбериху:

public static Block newblock - newblock - это название, точнее регистр блока (не путайте с обычным названием, или консоль ошибок покарает вас!).

new BlockNew(101, 0) - Ну а вот тут у нас как раз и обычное название. Будет использоваться для обозначения в отдельном файлике для блока (доп. характеристики).
Число 101 - айди блока. Используйте с 101 по 250.
Число 0 - не трогайте, это индексация текстуры по terrain.png, оно вообще не понадобится. Пусть стоит в фазе нуля.

setHardness(0.5F) - Тут у нас крепкость указана. На сколько силен блок, так сказать Нотч Вполне реально хватит и 0.5F если это блок похожий на землю (по скорости разрушения).

setResistance(0.3F) - Устойчивость от взрыва. 0.3F отлично вписывается.

setLightValue(1.0F) - Если хотите чтобы ваш блок был светящимся (для дополнительных команд вызова я выведу чуть позже целый спойлер Нотч ), просто укажите это через точку.
1.0F - светится как австралий.

setBlockName("newblock") - Сделан специально чтобы полностью до конца объявить регистр.

Проверим что у нас вышло


Теперь давайте создадим специальный файлик BlockNew.java (по названию блока) который определит наш кубик в игре.
Вписываем в первую строчку магические буковки, опять.

package net.minecraft.src;

Затем импортируем еще одну магию которая даст нам возможность использовать переменную Random.

import java.util.Random;

Потом создаем публичный класс (не забудьте название).

public class BlockNew extends Block
{

После чего копипастим вот это. Тут у нас получается что мы объявляем блок, делаем его настоящим (материальным) и задаем свойство (каждое свойство имеет ряд своих особенностей, типа звуков и т.п).

public BlockNew(int i, int j)
{
super(i, j, Material.rock);
}

Дальше объявляем выбрасывание и его ID.

public int idDropped(int i, int j)
{
return mod_gcc.newblock.blockID;
}
public int quantityDropped(Random random)
{
return 1;
}
}

Проверяем...


Если все так же - переходим к следующей главе.

Глава 2.1. Рецепт для блока или как добыть кубик.

Добавим четыре строчки для определения версии вашего мода в файл mod_gcc.java.

public String Version()
{
return "1.7_03";
}

Ну а теперь перейдем непосредственно к написанию рецепта.
Запишем вот это:

public mod_gcc()
{

И начнем творить.
Регистрируем блок строкой:

ModLoader.RegisterBlock(newblock);

Добавляем название блока в игре.

ModLoader.AddName(newblock, "GCC");

И делаем сам рецептик.

ModLoader.AddRecipe(new ItemStack(newblock, 1), new Object[]{ "##", "##", Character.valueOf('#'), Block.dirt});

Разберем?

(new ItemStack(newblock, 1) - При крафте появляется newblock в количестве 1 (изменяйте как душе угодно до 64).

new Object[]{ "##", "##", Character.valueOf('#'), Block.dirt - Тут очень сложно объяснить для детей, взрослые может быть и поймут, но я все же попробую. Одна решетка обозначает одну ячейку сверху вниз (это может быть и верстак, если решеток более 3 в одной строке). Т.е. в нашем случае мы заполняем обычной землей (Block.dirt) все крафт-ячейки в инвентаре (их 4).

Для примера, если например ваш объект крафтится не только из земли, да еще и в верстаке, поступать нужно так.

new Object[]{ "#X#", "#Z#", "#X#", Character.valueOf('X'), Block.dirt, Character.valueOf('Z'), Block.sand

В данном примере мы ставим землю по середине в верхней строке, ставим песок по середке в средней строке, и опять землю по середине, но только в третьей строке.
Если какой-то символ (в нашем случае решетка) не указана в Character.valueOf - то значит дефолтно ячейки должны быть пусты.

Проверяем.


Вот и все. Теперь ваш блок можно спокойно скрафтить.
Но мы забыли добавить текстуру, о нет! Об этом читайте в следующей главе.

Глава 2.2. Присваиваем текстуру.

Эта глава очень короткая и легкая, но все же я выделила ей особое место.
Берем вот такую текстуру:

(размеры не изменять!)

И временно кидаем ее в папку jars/bin.

Заходим в папку bin, находим minecraft.jar, открываем ее посредством WinRar или 7-zip и создаем там папочку textures.
И в эту папочку кидаем нашу текстуру java.png.

Теперь открываем mod_gcc.java и добавляем строчки рядом с рецептом.

newblock.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/textures/java.png");

Разбираем:

newblock.blockIndexInTexture - Сразу предупреждаю, не забывайте изменять название регистра здесь (у меня частенько бывает такое).

ModLoader.addOverride("/terrain.png" - Не знаю зачем оно, но вроде индексирует размеры блоков внутри terrain.png. Оставляем как есть.

"/textures/java.png" - Ну а тут, непосредственно, указывается путь к текстуре. В нашем случае это java.png в папке textures.

Вот и все!
Проверяем.


Если вы уверены что все сделали правильно, запускайте recompile.bat, проверяйте на наличие ошибок, после чего включайте startclient.bat и наслаждайтесь вашим творением!


Глава 3. Создание предмета.

Для начала добавим одну строчку в mod_gcc.java после строки нашего блока: public static Block newblock = new BlockNew(101, 0).setHardness(0.5F).setResistance(1.0F).setBlockName("newblock");

public static final Item smileItem = new Smile(2000).setItemName("smileItem");

Разберем код предмета:

Item smileItem - Вызываем предмет по тех. названию.

new Smile - Название для будущего Smile.java

(2000) - ID предмета.

setItemName("smileItem") - Объявляем предмет, даем ему тех. название для идентификации.

Делаем отступ на одну строку от строки: newblock.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/textures/java.png");
И записываем следующее.

ModLoader.AddName(smileItem, "Smile");

Разбор:

(smileItem, "Smile") - Даем название в самой игре.

И последняя строка рецепта.

ModLoader.AddRecipe(new ItemStack(smileItem, 5), new Object[]{ "X#", "#X", Character.valueOf('X'), Block.dirt});

Разбераем:

(smileItem, 5) - Число получаемых "смайлов" после крафтинга.


"X#", "#X" Character.valueOf('X'), Block.dirt - Сам рецепт. По диагонали ставим грязь - получаем смайл.

Теперь нам нужно создать файлик Smile.java.

В первой строке как обычно:

package net.minecraft.src;

В третьей и четвертой:

public class Smile extends Item
{

А далее:

public Smile(int i) {
super(i);
maxStackSize = 64;
}
}

maxStackSize = 64; - Максимальное количество предмета в одном стаке (нап. 64).

Проверяем.


Глава 3.1. Присвоение текстуры.

Возьмем текстуру смайлика

(размеры не изменять!)
И поместим ее в minecraft.jar/textures как обычно.

Пишем выше ModLoader.AddName(smileItem, "Smile"); в файле mod_gcc.java

smileItem.iconIndex = ModLoader.addOverride("/gui/items.png", "/textures/smile.png");

Разбераем:

smileItem.iconIndex - Определяет, чья иконка (текстура).

ModLoader.addOverride("/gui/items.png", "/textures/smile.png") - Это вам уже знакомо. Тут промолчу.

Проверяем.


Теперь вам осталось просто запустить recompile.bat и опробовать смайлы



З.Ы. Можете уже начинать создавать красивые вещи и кубики... а так же выкладывать их с кодом скрином и тп. по типу.

1. Скрин
2. Название блока или предмета
3. Рецепт крафта
4. Исходные коды вашего чуда
5. Почему именно ваш предмет или блок должны добавить на сервер.

карма: 18
13
Голосовали:admin, HolloW_w, Analcunt, harder_faster, Quazar, Marts, Nikolthor, GAJIOGEN4, player$21304, Prolbo, Loshadin, yakov518, player$40177, disbelief, -SoNNeikO-, TeeMage15, Dior