Новые сообщения · Участники · Правила форума · Поиск · RSS
  • Страница 1 из 1
  • 1
Создание блока
Fyral Дата: Суббота, 08.10.2011, 15:59 | Сообщение # 1
Администраторы
Сообщений: 10
Репутация: 2
Offline
Запоминайте сразу, в пути \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 - это название, точнее регистр блока (не путайте с обычным названием, или консоль ошибок покарает вас!).

Code
new BlockNew(110, 0)


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

Code
setHardness(0.5F)


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

Code
setResistance(0.3F)


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

Code
setLightValue(1.0F)


Если хотите чтобы ваш блок был светящимся, просто укажите это через точку.
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
public mod_gcc()
                    {


И начнем творить.
Регистрируем блок строкой:
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. Оставляем как есть.
Code
"/textures/java.png"


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

Вот и все!

Проверяем.



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

Скриншот из игры:
andrew Дата: Среда, 19.10.2011, 20:09 | Сообщение # 2
Пользователи
Сообщений: 1
Репутация: 0
Offline
== 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
Репутация: 0
Offline
Попробуй разобраться точно ли поставил все знаки.
Andrew_RedCrafter Дата: Пятница, 21.10.2011, 19:42 | Сообщение # 4
Пользователи
Сообщений: 4
Репутация: 0
Offline
OMGWTFBBQ можешь выложить мне сваи файлы.

Сообщение отредактировал Andrew_RedCrafter - Пятница, 21.10.2011, 20:17
  • Страница 1 из 1
  • 1
Поиск: