| Fyral |
Дата: Суббота, 08.10.2011, 15:59 | Сообщение # 1 |
Администраторы
Сообщений: 10
|
Запоминайте сразу, в пути \src\minecraft\net\minecraft\src находится весь декомпилированный код игры.
Для начала давайте создадим новый файлик посредством нотепада. Называться он будет mod_gcc.java. Он служит для складывания всей информации о блоках, рецептах, etc.
Впишем такую строчку (используйте Notepad++).
Code package net.minecraft.src;
Она включает магию которая даст возможность данному файлику работать с Кубокрафтом. После чего добавим еще две строчечки, но сначала делаем пробел.
Code public class mod_gcc extends BaseMod {
Здесь мы создаем класс.
Code public static Block newblock = new BlockNew(110, 0).setHardness(0.5F).setResistance(1.0F).setBlockName("newblock");
Пишем в 5 строке вот такие словечки про наш кубик, тут мы его регистрируем. Давайте попробуем разобрать данную неразбериху.
Code public static Block newblock
newblock - это название, точнее регистр блока (не путайте с обычным названием, или консоль ошибок покарает вас!).
Ну а вот тут у нас как раз и обычное название. Будет использоваться для обозначения в отдельном файлике для блока (доп. характеристики). Число 110 - айди блока. Используйте с 110 по 250. Число 0 - не трогайте, это индексация текстуры по terrain.png, оно вообще не понадобится. Пусть стоит в фазе нуля.
Тут у нас крепкость указана. На сколько силен блок, так сказать Вполне реально хватит и 0.5F если это блок похожий на землю (по скорости разрушения).
Устойчивость от взрыва. 0.3F отлично вписывается.
Если хотите чтобы ваш блок был светящимся, просто укажите это через точку. 1.0F - светится как австралий.
Code setBlockName("newblock")
Сделан специально чтобы полностью до конца объявить регистр.
Проверяем.
Теперь давайте создадим специальный файлик BlockNew.java (по названию блока) который определит наш кубик в игре. Вписываем в первую строчку магические буковки, опять. Code package net.minecraft.src;
Затем импортируем еще одну магию которая даст нам возможность использовать переменную Random. Code import java.util.Random;
Потом создаем публичный класс (не забудьте название). Code public class BlockNew extends Block {
После чего копируем вот это. Code public BlockNew(int i, int j) { super(i, j, Material.ground); }
Тут у нас получается что мы объявляем блок, делаем его настоящим (материальным) и задаем свойство (каждое свойство имеет ряд своих особенностей, типа звуков и т.п).
Дальше объявляем выбрасывание и его ID. Code public int idDropped(int i, int j) { return mod_gcc.newblock.blockID; } public int quantityDropped(Random random) { return 1; } }
Теперь создадим рецепт нашего блока.
Добавим четыре строчки для определения версии вашего мода (или названия, не важно). Code public String Version() { return "1.8.1 Tutorial"; }
Ну а теперь перейдем непосредственно к написанию рецепта. Запишем вот это:
И начнем творить. Регистрируем блок строкой: Code ModLoader.RegisterBlock(newblock);
Добавляем название блока в игре. Code ModLoader.AddName(newblock, "GCC");
И создаем сам рецептик. Code ModLoader.AddRecipe(new ItemStack(newblock, 1), new Object[]{ "##", "##", Character.valueOf('#'), Block.dirt});
Разберем? Code (new ItemStack(newblock, 1)
При крафте появляется newblock в количестве 1 (изменяйте как душе угодно до 64). Code new Object[]{ "##", "##", Character.valueOf('#'), Block.dirt
Тут очень сложно объяснить для детей, взрослые может быть и поймут, но я все же попробую.
Одна решетка обозначает одну ячейку сверху вниз (это может быть и верстак, если решеток более 3 в одной строке). Т.е. в нашем случае мы заполняем обычной землей (Block.dirt) все крафт-ячейки в инвентаре (их 4).
Для примера, если например ваш объект крафтится не только из земли, да еще и в верстаке, поступать нужно так. Code new Object[]{ "#X#", "#Z#", "#X#", Character.valueOf('X'), Block.dirt, Character.valueOf('Z'), Block.sand
В данном примере мы ставим землю по середине в верхней строке, ставим песок по середке в средней строке, и опять землю по середине, но только в третьей строке. Если какой-то символ (в нашем случае решетка) не указана в Character.valueOf - то значит дефолтно ячейки должны быть пусты (указаны, например символом #).
Проверяем.
Вот и все. Теперь ваш блок можно спокойно скрафтить. Но мы забыли добавить текстуру, о нет! Об этом читайте ниже.
Для того, чтобы добавить свой блок (или предмет) в крафт, используйте префикс mod_gcc. Например: Code ModLoader.AddRecipe(new ItemStack(newblock, 1), new Object[]{ "##", "##", Character.valueOf('#'), mod_gcc.smileItem});
Теперь присваиваем текстуру.
Эта глава очень короткая и легкая, но все же я выделил ей особое место. Берем вот такую текстуру: (размеры не изменять!)
И временно кидаем ее в папку jars/bin.
Заходим в папку bin, находим minecraft.jar, открываем ее посредством WinRar или 7-zip и создаем там папочку textures. И в эту папочку кидаем нашу текстуру java.png.
Теперь открываем mod_gcc.java и добавляем строчки рядом с рецептом. Code newblock.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/textures/java.png");
Разбираем. Code newblock.blockIndexInTexture
Сразу предупреждаю, не забывайте изменять название регистра здесь (у меня частенько бывает такое). Code ModLoader.addOverride("/terrain.png"
Не знаю зачем оно, но вроде индексирует размеры блоков внутри terrain.png. Оставляем как есть.
Ну а тут, непосредственно, указывается путь к текстуре. В нашем случае это java.png в папке textures.
Вот и все!
Проверяем.
Если вы уверены что все сделали правильно, запускайте recompile.bat, проверяйте на наличие ошибок (если есть, отписывайте с вопросами сюда), после чего включайте startclient.bat и наслаждайтесь вашим творением!
Скриншот из игры:
|
|
|
|
| andrew |
Дата: Среда, 19.10.2011, 20:09 | Сообщение # 2 |
Пользователи
Сообщений: 1
|
== MCP v4.4 == > Recompiling client... "E:\Program Files\Java\jdk1.7.0\bin\javac.exe" -g -source 1.6 -target 1.6 -class path "lib/;lib/*;jars/bin/minecraft.jar;jars/bin/jinput.jar;jars/bin/lwjgl.jar;j ars/bin/lwjgl_util.jar" -sourcepath src/minecraft -d bin/minecraft src/minecraft \net\minecraft\client\*.java src/minecraft\net\minecraft\isom\*.java src/minecra ft\net\minecraft\src\*.java conf/patches/*.java failed. Return code : 1
== ERRORS FOUND ==
warning: [options] bootstrap class path not set in conjunction with -source 1.6 src\minecraft\net\minecraft\src\mod_gcc.java:10: error: class, interface, or enu m expected public mod_gcc() ^
src\minecraft\net\minecraft\src\mod_gcc.java:13: error: class, interface, or enu m expected ModLoader.AddName(newblock, "GCC"); ^
src\minecraft\net\minecraft\src\mod_gcc.java:14: error: class, interface, or enu m expected ModLoader.AddRecipe(new ItemStack(newblock, 1), new Object[]{ "##", "##", Charac ter.valueOf('#'), Block.dirt}); ^
src\minecraft\net\minecraft\src\mod_gcc.java:15: error: class, interface, or enu m expected newblock.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/textures/ java.png"); ^
src\minecraft\net\minecraft\src\mod_gcc.java:16: error: class, interface, or enu m expected } ^
5 errors 1 warning ==================
> Done in 1.05 seconds > Recompiling server... > Done in 2.86 seconds
|
|
|
|
| OMGWTFBBQ |
Дата: Четверг, 20.10.2011, 18:07 | Сообщение # 3 |
Администраторы
Сообщений: 4
|
Попробуй разобраться точно ли поставил все знаки.
|
|
|
|
| Andrew_RedCrafter |
Дата: Пятница, 21.10.2011, 19:42 | Сообщение # 4 |
Пользователи
Сообщений: 4
|
OMGWTFBBQ можешь выложить мне сваи файлы.
Сообщение отредактировал Andrew_RedCrafter - Пятница, 21.10.2011, 20:17
|
|
|
|