|
[Modloader][Modding] Основы Программирования Для Minecraft
|
|
qwertyedik1 | Дата: Четверг, 08.12.2011, 21:43 | Сообщение # 1 |
Сообщений: 353 |
|
Группа: Майнкрафтер |
|
| Всем доброго времени суток! Перед вами будущий учебник для начинающих модостроителей Minecraft'а. Намечается написать целых 20 и более глав для новичков. Так же скажу от себя - моддинг под данную игру может быть и не очень сложен, но он отнимает много времени и от вас потребуются железные нервы.
АХТУНГ! УЧЕБНИК ПО МОДДИНГУ ДЛЯ MODLOADERA! КОД НА ИЗОБРАЖЕНИЯХ ПРОВЕРКИ МОЖЕТ ОТЛИЧАТЬСЯ ОТ КОДА УЧЕБНИКА! НАПРИМЕР: ID ОБЪЕКТА. ИСПОЛЬЗУЙТЕ КОД КОТОРЫЙ УКАЗАН В ГЛАВАХ И ПРОВЕРЯЙТЕ РЕГИСТР НА КАРТИНКАХ! Вопрос-ответ:
Вопрос: Чем этот учебник отличается от статей WD'kun'a? Ответ: В данной учебнике больше информации и моддинг осуществляется для клиента с ModLoader'ом.
Вопрос: А зачем этот ModLoader? Ответ: Делает удобнее и быстрее моддинг в разы.
Вопрос: Я сделал свой первый мод, куда мне можно его залить и кому показывать? Ответ: Если вы уверены, что Ваш мод достоин внимания и он хорошо проработан как и в плане оптимизации, так и в плане внешнего вида - скидывайте его на minecraftforum.net
Вопрос: А что если у меня не лицензионная копия игры? Я не смогу делать моды? Ответ: Моды можно делать и на пиратке, на счет этого не беспокойтесь. Разницы нет.
Вопрос: Я там карочи всие сделол как написана и игра паказывает англиские слава какие та ниче ни понятна!!!!! Ответ: Для того, чтобы мы Вам помогли, скиньте Log'и (текст) ошибки прямо в эту тему, мы Вам обязательно поможем!
Вопрос: При рекомпиляции выпадает море ошибок. Что делать? Ответ: Отписать в эту тему или в джаббер конференцию. Если никто Вам не отвечает, проверьте, все ли скобки стоят правильно и совпадает ли регистр букв.
Вопрос: Я зашел в конференцию, а там никого нет? На форуме не отвечают, в конфе тоже пусто. Вы пропали? Ответ: Скорее всего из авторов учебника никого нет в сети. Будьте терпеливы, как только появится возможность, мы Вам обязательно поможем! Вопрос: У меня ничего не получается! Сделайте, пожалуйста за меня ... Ответ: Мы делаем что-то для пользователей только в крайних случаях, если например ошибки неизлечимы, и все это связанно с вашим компьютером, а не руками.
Вопрос: Я прошел весь учебник, но обновлений не наблюдаю. Вы забросили его? Ответ: Конечно же нет! Просто у нас тоже есть личная жизнь, и иногда приходится отлучаться.
Вопрос: Я видел у буржуев статью про ... Вы добавите ее к себе? Ответ: Добавьте ссылку на источник статьи, мы ее прочитаем, проверим, проанализируем и запишем по своему Вопрос: Все время вы говорите создать какой-то файл .java. Как его вообще создать? Ответ: Создаете текстовый файл и просто переименовываете его из Текстовый документ.txt, например, в mod_gcc.java (открывая его, непосредственно, в нотепаде), а затем редактируете и сохраняете.
Вопрос: В учебнике слишком неудобно отписаны некоторые моменты. Можно я какие мне надо строчки в другие файлики перемещу, ведь так удобнее! Ответ: Ни в коем случае! И даже не пытайтесь. Вопрос: А как открыть файл .jar винраром? Ответ: ПКМ --> Открыть с помощью --> WinRar или 7zip. Вопрос: Я начал работать, но в src/minecraft/ файлов нет! Я что-то забыл сделать? Ответ: Скорее всего, декомпилятор выдал ошибку и не отдал вам сорцы игры. Ну или в крайнем случае вы просто забыли его включить. Ну так начнем Глава 1. Подготовка рабочего места и настройка MCP. Требования: - Java Development Kit 6 (JDK 6). - Minecraft Coder Pack 4.5. - Notepad++ или Eclipse - обязательно, иначе вы не сможете пройти главы. - ModLoader + Клиент (1.0.0) (качать обязательно). - Руки, но не крюки. - Желательно базовое знание английского языка. Установка: 1. Создаем папку в любом удобном для вас месте. 2. Копируем файлы архива MCP в эту папку. 3. Прописываем путь к javac.exe (JDK) в системной переменной PATH. Щелкните правой кнопкой мыши по ярлыку Мой компьютер и выберите категорию Дополнительно. Там же ниже будет кнопка Переменные среды. В системных переменных найдите переменную Path (PATH) и допишите в ней строки: Code ;C:\Program Files\Java\jdk1.6.0_25\bin или Code ;C:\Program Files\Java\jdk1.6.0_26\bin
В зависимости от версии.
Без пробела и с символом "точка с запятой". Путь укажите, конечно же, по вашему усмотрению системы. 4. Кладем из клиента Minecraft папки bin и resources в папку 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. Он служит для складывания всей информации о блоках, рецептах, и т.д.
Впишем такую строчку.
Code package net.minecraft.src; Она включает магию которая даст возможность данному файлику работать с игрой. После чего добавим еще две строчки, но сначала делаем пробел. Code public class mod_gcc extends BaseMod { Здесь мы создаем класс. Code public static Block newblock = new BlockNew(130, 0).setHardness(0.5F).setResistance(1.0F).setBlockName("newblock"); Пишем в 5 строке вот такие словечки про наш кубик, тут мы его регистрируем. Давайте попробуем разобрать данную неразбериху. Code public static Block newblock newblock - это название, точнее регистр блока (не путайте с обычным названием, или консоль ошибок покарает вас!). Ну а вот тут у нас как раз и обычное название. Будет использоваться для обозначения в отдельном файлике для блока (доп. характеристики). Число 130 - айди блока. Используйте с 130 по 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; } }
Глава 2.1. Рецепт для блока или как добыть кубик. Добавим четыре строчки для определения версии вашего мода (или названия, не важно). Code public String getVersion() { return "1.0.0 Tutorial"; } Ну а теперь перейдем непосредственно к написанию рецепта. Запишем вот это: И начнем творить. Регистрируем блок строкой: Code ModLoader.RegisterBlock(newblock);
Добавляем название блока в игре.
ModLoader.AddName(newblock, "Тут пишем название кубика"); И запюливаем сам рецептик. 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 *В верстаке* 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}); Глава 2.2. Присваиваем текстуру. Эта глава очень короткая и легкая, но все же я выделил ей особое место. Берем вот такую текстуру: (размеры не изменять!) И временно кидаем ее в папку 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 и наслаждайтесь вашим творением!
Скриншот из игры: Глава 3. Создание предмета. Для начала добавим одну строчку: Code public static final Item smileItem = new Smile(3000).setItemName("smileItem"); Непосредственно после строки нашего блока: Code public static Block newblock = new BlockNew(130, 0).setHardness(0.5F).setResistance(1.0F).setBlockName("newblock"); Разберем код предмета. Вызываем предмет по тех. названию. Название для будущего Smile.java. ID предмета. Code setItemName("smileItem") Объявляем предмет, даем ему тех. название для идентификации.
Делаем отступ на одну строку от строки: Code newblock.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/textures/java.png"); И записываем следующее. Code ModLoader.AddName(smileItem, "Smile"); Даем название в самой игре.
И последняя строка рецепта. Code ModLoader.AddRecipe(new ItemStack(smileItem, 5), new Object[]{ "X#", "#X", Character.valueOf('X'), Block.dirt}); Число получаемых "смайлов" после крафтинга. Code "X#", "#X" Character.valueOf('X'), Block.dirt Сам рецепт. По диагонали ставим грязь - получаем смайл.
Теперь нам нужно создать файлик Smile.java для определения свойств.
В первой строке как обычно: Code package net.minecraft.src; В третьей и четвертой: Code public class Smile extends Item { А далее: Code public Smile(int i) { super(i); maxStackSize = 64; } }
Максимальное количество предмета в одном стаке (нап. 64). Глава 3.1. Присвоение текстуры. Возьмем текстуру смайлика: (размеры не изменять!) И поместим ее в minecraft.jar/textures как обычно.
Пишем после рецепта: Code smileItem.iconIndex = ModLoader.addOverride("/gui/items.png", "/textures/smile.png"); Разбираем. Определяет, чья иконка (текстура). Code ModLoader.addOverride("/gui/items.png", "/textures/smile.png") Это вам уже знакомо. Проверяем. Теперь вам осталось просто запустить recompile.bat и опробовать смайлы. Скриншоты из игры: Крафт: На земле: Глава 4. Генерация блока в мире.
Сейчас я попробую рассказать, как заставить наш блок генерироваться в игровом мире. Для примера он будет появляться у камня (2-3 блока вниз).
Откроем mod_gcc.java.
После первой строки добавьте строку: Code import java.util.Random; А после 13 строки сделаем отступ и запишем вот это. Code public void GenerateSurface(World world, Random rand, int chunkX, int chunkZ) { for(int i = 0; i < 150; i++) { int randPosX = chunkX + rand.nextInt(16); int randPosY = rand.nextInt(150); int randPosZ = chunkZ + rand.nextInt(16); (new WorldGenMinable(mod_gcc.newblock.blockID, 32)).generate(world, rand, randPosX, randPosY, randPosZ); } } Разбираем. Число 150 отвечает за редкость блока в игровом мире. 150 - это почти вездесущий, и его будет много. Для теста 150 подойдет отлично. Далее просто экспериментируйте. Code for(int i = 0; i < 150; i++) 150 - высота блока от админиума (Кореная порода). В нашем случае получается он выше камня на один блок в генерации. Тоже можно экспериментировать. Code int randPosY = rand.nextInt(150); mod_gcc - наш мод. newblock - регистр блока. Число 32 - количество блоков на одном месторождении. Для теста я использовал 32 блока. Code (new WorldGenMinable(mod_gcc.newblock.blockID, 32)) Проверяем. Вот и все. Запускайте и пробуйте! Скриншоты из игры: 1. 2. 3.
Помощ учебнику и мне,если есть лишний рубль скиньте на Яндекс кошелек : 410011173858870 , спасибо тем кто скинул хоть 1 рубль...
Главное не возраст, а что в голове.
Сообщение отредактировал qwertyedik1 - Пятница, 09.12.2011, 16:54 |
|
| | | | | | | | | | | | | | | |
| |