Результаты поиска
| |
Eye | Дата: Пятница, 02 Сентября 2011, 18:28 | Сообщение # 301 | Тема: Когда снимаю Half-Life Frapsом ничего не тормозит |
заслуженный участник
Сейчас нет на сайте
| Snagit - лучшая для этого программа.
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
|
|
| |
Eye | Дата: Вторник, 30 Августа 2011, 16:42 | Сообщение # 302 | Тема: Бесконечная история |
заслуженный участник
Сейчас нет на сайте
| Посоны, что за сыр бор? Kafkianskiy дело говорит. Вы сюда пришли игры делать или играть в них? Я все понимаю, если после тяжелого рабочего дня хочется оставить посты - но не заводить же ненужные темы!
Займитесь делом, детишки!
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
|
|
| |
Eye | Дата: Вторник, 30 Августа 2011, 13:29 | Сообщение # 303 | Тема: Romanosov's Ностальджи |
заслуженный участник
Сейчас нет на сайте
| Бро, тру. Еще хочу.
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
|
|
| |
Eye | Дата: Вторник, 30 Августа 2011, 00:12 | Сообщение # 304 | Тема: [MOD] Minecraft Light [WIP] |
заслуженный участник
Сейчас нет на сайте
| Хм, мы с Максимом (один из авторов учебника) рассчитываем на сентябрь, т.к еще 1.8 ждать.
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
|
|
| |
Eye | Дата: Понедельник, 29 Августа 2011, 23:40 | Сообщение # 305 | Тема: [MOD] Minecraft Light [WIP] |
заслуженный участник
Сейчас нет на сайте
| Minecraft Light Work in Progress
Minecraft Light - это самостоятельный мод, в котором полностью меняется баланс добычи ресурсов и выживания. Новый способ крафта основных блоков, новые способы добычи дерева и стройматериалов, новые инструменты, блоки, мобы, броня, предметы и многое другое.
Вас бесило что игра в синглплеере надоедает через два-три часа? Все ресурсы находятся быстро, а часто строить почти из всех найденных блоках уже не интересно. Тем самым игра станет в разы тяжелой, захватывающей и более реалистичной.
Глобальные изменения.
- Новая музыка с игр серии The Elder Scroll's (больше из родного Морровинда). - Убраны все деревянные, каменные, золотые и алмазные инструменты (кроме железного меча). - Убран алмаз (блок, руда и предмет). - Дерево не ломается рукой. - Для создания брони и железных инструментов потребуется наковальня, бочка и молот. - Из камня и руд теперь выпадают осколки. - Факелы делаются из угля, палки и нити. Изначально он не горит (потухший факел) - для того чтобы его поджечь, потребуется скрафтить его вместе с двумя осколками камня (искра поджигает факел). - Увеличен спавн монстров ночью. - Увеличена скорость выстрела скелета и сила взрыва крипера. - Максимальный стак блока или предмета - 16. - Бесконечных источников воды больше не сделать. - Ведра с лавой переносить в руках нельзя (нужны перчатки). - Увеличен шанс нахождения глины. - Из листвы выпадают ветки. - Из дерева и топора теперь делаются доски. 4 доски - один блок досок. - Теперь для того чтобы получить пыль редстоуна или черного алмаза, нужно разбить молотом их осколки на наковальне. - Булыжник теперь собирается из четырех осколков камня. - Увеличен шанс нахождения слизней. - Крафт брони происходит на наковальне или верстаке. Для крафта кожаной брони - потребуется игла, нити и кожа. Для железной брони потребуется - кожаная броня + расплавленное железо. - Из одного блока шерсти можно получить 4 нити.
Блоки.
- Черный алмаз (руда). - Окно - доски + блоки досок + стекло. - Фонарь - окно + факел. - Стол - доски + нити. - Наковальня - расплавленное железо + крепкий молот. - Бочка - железные прутья + доски. - Костер - доски + осколки камня. - Укрепленное стекло - песчаник в печи.
Предметы.
- Ветка - выпадает из листвы. - Удочка из ветки - ветка + нить. - Осколки камня, железа, золота, редстоуна и черного алмаза - выпадают из блоков руды. - Пыль черного алмаза - молот + осколок черного алмаза. - Доски - топор + дерево. - Расплавленное железо, золото - осколки в печи. - Игла - молот + железный прут. - Железный прут - расплавленное железо + палка + молот. - Перчатки - шерсть + нити.
Инструменты.
- Плохой топор - осколок камня + нить + ветка. - Укрепленный топор - осколок камня + нить + палка. - Крепкий топор - осколок камня + нить + палка + обожженный в печи.
- Плохой молот - два осколка камня + нить + ветка. - Укрепленный топор - два осколка камня + нить + палка. - Крепкий молот - два осколка камня + нить + палка + обожженный в печи.
- Железный топор - осколок железа + нить + палка. - Железная кирка - два осколка железа + нить + палка. - Железный молот - четыре осколка железа + нить + палка.
- Крепкий железный топор - осколок железа + нить + железный прут. - Крепкая железная кирка - два осколка железа + нить + железный прут. - Крепкий железный молот - четыре осколка железа + нить + железный прут.
Мобы.
- Призрак. - Баран (?). - Скелет-воин.
Скриншоты:
От себя.
В данном моде мы с парнями попробуем усложнить все что можно сделать быстро. И сейчас я расскажу что за что отвечает:
1. Для того чтобы получить факел, нужен уголь, нити и палка (не ветка!). После данного крафта вы получите ОДИН факел, но он будет потухшим, не горящим. Для того, чтобы зажечь факел, нужно поставить его в крафт вместе с двумя осколками камня. После чего вы получите ОДИН горящий факел. 2. Так же в игре будет окно. Для того чтобы скрафтить окно, потребуются следующие вещи – 4 блока досок, 4 доски, стекло и верстак. Оно используется как декорация. 3. Придется запастись очень многими «молотами», для того чтобы собрать много осколков для булыжника (напомню, 4 осколка – 1 булыжник). После чего можно будет собрать печь, в которой же, непосредственно, можно будет совершать еще несколько основных крафтов для наковальни и т.д 4. Плохой топор выдерживает 6 использований (6 разрушенных блоков). Укрепленный - 12, а крепкий 32. 5. Молот в начале игры служит как кирка. Так же, плохой молот состоит из ветки, двух осколков и нити, изначально им можно разрушить только 6 блоков. Для того чтобы сделать его лучше, использовать вместо ветки нужно палку (которая делается из доски) - таким образом получится укрепленный молот. Количество использований возрастет до 12 (можно разрушить только 12 блоков). Для того чтобы сделать крепкий молот, нужно будет обжечь в печи укрепленный молот. Крепкий молот выдержит не менее 32 использований (можно будет разрушить 32 блока). Тем самым, данным инструментом можно будет добыть железных осколков для нормальной кирки. 6. Все железные инструменты изготавливаются на наковальне. Плавим осколки железа, раскладываем их по порядку крафта с молотом и получаем их. Железный топор выдерживает 64 использования, молот тоже, а кирка более 86. 7. Любой молот можно использовать для крафта на наковальне. 8. Кидаем в печь песчаник – получаем укрепленное стекло. Сломать его тяжеловато (что хорошо в принципе), а вот видимость через него плохая. 9. Сломать дерево руками нельзя. Нужно добыть осколок из камня, собрать ветку с листьев и убить паука или добыть шерсть, тем самым получив нить. После крафта данных предметов в инвентаре – получится топор на 6 использований (6 блоков дерева). Так же из двух осколков камня можно сделать молот, и тоже на 6 раз. Данным молотом можно быстро собрать осколки (ну если повезет ). Так же для того чтобы сделать верстак, потребуется 4 блока досок (по стандарту). Но 1 блок досок делается из 4 досок. 1 блок дерева + топор – 2 доски (топор ломается). 4 доски – 1 блок досок. 4 блока досок – верстак. 10. Перчатки служат для переноса ведра с лавой и накаленных инструментов. 11. Напыление черного алмазного порошка на инструменты и броню (увеличение качества и наноситься только на железные вещи). Черный алмаз. Раньше этот удивительный алмаз был углем, но под высоким давлением (он на высоте 4-5 от админиума) он сжался в алмаз, но черный (не до конца). Руда (блок) имеет прочность красной пыли. Разрушается только железной киркой. После разрушения выпадает 0-1 алмаз. Для получения черной пыли нужно расколоть алмаз на наковальне молотом. После превращения алмаза в пыль, молот ломается. 12. Моб призрак не атакует, а только пугает своим появлением (в руках он держит факел и летает далеко от игрока). Догнать его невозможно, т.к он сразу же пропадает. Если вам удастся убить его (у него всего 1 HP) - выпадет секретный инструмент. 13. Запланированный моб - баран. Единственное что он дает игроку - это рога. Но рогам применения не нашлось. 14. Костер служит для жарки мяса и рыбs. 15. Стол - декорация. 16. Бочка служит для охлаждения инструментов после ковки на наковальне, т.к после крафта они будут горячими. 17. Скелет-воин, вместо того, чтобы стрелять из лука, нападает на игрока с железным мечом.
Игра будет полностью перебрана в плане меню, настроек и режимов. Это всего лишь мини-анонс, тема будет обновляться. На данный момент это все. Спасибо за внимание!
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
|
|
| |
Eye | Дата: Воскресенье, 28 Августа 2011, 16:05 | Сообщение # 306 | Тема: Counter-Strike: Global Offensive |
заслуженный участник
Сейчас нет на сайте
| Зажрались детишки...
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
|
|
| |
Eye | Дата: Воскресенье, 28 Августа 2011, 10:18 | Сообщение # 307 | Тема: Вопрос-[ответ] по Unity |
заслуженный участник
Сейчас нет на сайте
| denisik10, юнити.
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
|
|
| |
Eye | Дата: Воскресенье, 28 Августа 2011, 10:17 | Сообщение # 308 | Тема: Counter-Strike: Global Offensive |
заслуженный участник
Сейчас нет на сайте
| Главное чтобы баланс не погубили.
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
|
|
| |
Eye | Дата: Воскресенье, 28 Августа 2011, 10:15 | Сообщение # 309 | Тема: Добрые дела |
заслуженный участник
Сейчас нет на сайте
| Умылся во благо человечества
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
|
|
| |
Eye | Дата: Четверг, 25 Августа 2011, 09:30 | Сообщение # 310 | Тема: Сколько участников состоит в вашей команде? |
заслуженный участник
Сейчас нет на сайте
| 7 работающих человек.
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
|
|
| |
Eye | Дата: Среда, 24 Августа 2011, 19:31 | Сообщение # 311 | Тема: Нужна прога , для создание шейдеров |
заслуженный участник
Сейчас нет на сайте
| Короче я бы посоветовал из Ассетс стора купить нормальный визуальный редактор шейдеров.
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
|
|
| |
Eye | Дата: Среда, 24 Августа 2011, 19:19 | Сообщение # 312 | Тема: Нужен Конструктор игр жанра песочница |
заслуженный участник
Сейчас нет на сайте
| Code Platinum Arts Sandbox – это программное обеспечение для детей и подростков, предназначенное для легкого и быстрого создания трехмерных миров. Все с тобой ясно. Но все же пожелаем ему удачи в начинаниях
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
Сообщение отредактировал Eye - Среда, 24 Августа 2011, 19:21 |
|
| |
Eye | Дата: Среда, 24 Августа 2011, 19:11 | Сообщение # 313 | Тема: [ModLoader] Основы программирования для Minecraft [Часть 1] |
заслуженный участник
Сейчас нет на сайте
| Всем доброго времени суток! Перед вами будущий учебник для начинающих модостроителей Minecraft'а. Намечается написать целых 20 глав для новичков. Так же скажу от себя - моддинг под данную игру может быть и не очень сложен, но он отнимает много времени и от вас потребуются железные нервы.
АХТУНГ! УЧЕБНИК ПО МОДДИНГУ ДЛЯ MODLOADERA!
Вопрос-ответ:
Вопрос: Чем этот учебник отличается от статей WD'kun'a? Ответ: В данной учебнике больше информации и моддинг осуществляется для клиента с ModLoader'ом.
Вопрос: А зачем этот ModLoader? Ответ: Делает удобнее и быстрее моддинг в разы.
Вопрос: Я сделал свой первый мод, куда мне можно его залить и кому показывать? Ответ: Если вы уверены, что Ваш мод достоин внимания и он хорошо проработан как и в плане оптимизации, так и в плане внешнего вида - скидывайте его на minecraftforum.net
Вопрос: А что если у меня не лицензионная копия игры? Я не смогу делать моды? Ответ: Моды можно делать и на пиратке, на счет этого не беспокойтесь. Разницы нет.
Вопрос: Я там карочи всие сделол как написана и игра паказывает англиские слава какие та ниче ни понятна!!111 Ответ: Для того, чтобы мы Вам помогли, скиньте Log'и (текст) ошибки прямо в эту тему, мы Вам обязательно поможем!
Вопрос: При рекомпиляции выпадает море ошибок. Что делать? Ответ: Отписать в эту тему или в джаббер конференцию. Если никто Вам не отвечает, проверьте, все ли скобки стоят правильно и совпадает ли регистр букв.
Вопрос: Я зашел в конференцию, а там никого нет? На форуме не отвечают, в конфе тоже пусто. Вы пропали? Ответ: Скорее всего из авторов учебника никого нет в сети. Будьте терпеливы, как только появится возможность, мы Вам обязательно поможем!
Вопрос: У меня ничего не получается! Сделайте, пожалуйста за меня ... Ответ: Мы делаем что-то для пользователей только в крайних случаях, если например ошибки неизлечимы, и все это связанно с вашим компьютером, а не руками.
Вопрос: Я прошел весь учебник, но обновлений не наблюдаю. Вы забросили его? Ответ: Конечно же нет! Просто у нас тоже есть личная жизнь, и иногда приходится отлучаться.
Вопрос: Я видел у буржуев статью про ... Вы добавите ее к себе? Ответ: Добавьте ссылку на источник статьи, мы ее прочитаем, проверим, проанализируем и запишем по своему
Вопрос: Все время вы говорите создать какой-то файл .java. Как его вообще создать? Ответ: Создаете текстовый файл и просто переименовываете его из Текстовый документ.txt, например, в mod_gcc.java (открывая его, непосредственно, в нотепаде), а затем редактируете и сохраняете.
Вопрос: В учебнике слишком неудобно отписаны некоторые моменты. Можно я какие мне надо строчки в другие файлики перемещу, ведь так удобнее! Ответ: Ни в коем случае! И даже не пытайтесь.
Вопрос: А как открыть файл .jar винраром? Ответ: ПКМ --> Открыть с помощью --> WinRar или 7zip.
Вопрос: Я начал работать, но в src/minecraft/ файлов нет! Я что-то забыл сделать? Ответ: Скорее всего, декомпилятор выдал ошибку и не отдал вам сорцы игры. Ну или в крайнем случае вы просто забыли его включить.
Глава 1. Подготовка рабочего места и настройка MCP.
Я отказываюсь писать статьи по старому стилю оформления как в прошлых уроках, т.к надоедает все время отписывать числа. Надеюсь, вы меня поймете B)
Требования:
- Java Development Kit 6 (JDK 6). - Minecraft Coder Pack (MCP 4.3, самая верхняя). - Notepad++ - обязательно, иначе вы не сможете пройти главы. - ModLoader + Клиент (качать обязательно). - Руки, но не крюки. - И желательно базовое знание английского языка.
Если что-то не работает - готовый MCP с исходниками 2 глав.
Установка:
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. Кладем из спец. сборки папки 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. Он служит для складывания всей информации о блоках, рецептах, etc.
Впишем такую строчку (используйте Notepad++, детишки!).
Code package net.minecraft.src; Она включает магию которая даст возможность данному файлику работать с Кубокрафтом. После чего добавим еще две строчечки, но сначала делаем пробел.
Code public class mod_gcc extends BaseMod { Здесь мы создаем класс.
Code public static Block newblock = new BlockNew(101, 0).setHardness(0.5F).setResistance(1.0F).setBlockName("newblock"); Пишем в 5 строке вот такие словечки про наш кубик, тут мы его регистрируем. Давайте попробуем разобрать данную неразбериху.
Code public static Block newblock newblock - это название, точнее регистр блока (не путайте с обычным названием, или консоль ошибок покарает вас!).
Ну а вот тут у нас как раз и обычное название. Будет использоваться для обозначения в отдельном файлике для блока (доп. характеристики). Число 101 - айди блока. Используйте с 101 по 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; } }
Примечание: У меня там Rock написано в свойстве, пропустите это, ага.
Если все так же - переходим к следующей главе.
Глава 2.1. Рецепт для блока или как добыть кубик.
Добавим четыре строчки для определения версии вашего мода. Code public String Version() { return "1.7_03"; }
Ну а теперь перейдем непосредственно к написанию рецепта. Запишем вот это:
И начнем творить. Регистрируем блок строкой: 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 - то значит дефолтно ячейки должны быть пусты.
Проверяем.
Вот и все. Теперь ваш блок можно спокойно скрафтить. Но мы забыли добавить текстуру, о нет! Об этом читайте в следующей главе.
Глава 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(2000).setItemName("smileItem");
Непосредственно после строки нашего блока: Code public static Block newblock = new BlockNew(101, 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 и опробовать смайлы
Скриншоты из игры:
Зарезервировано под новости и логи изменений.
Лог изменений от 22 августа:
- Обновлены почти все главы (убран лишний код и прочее). - Обновлена 12 глава. - Добавлена рубрика "Вопрос-ответ".
- Добавлена новая мини-глава про прозрачную текстуру.
Лог изменений от 23 августа:
- Обновлена 1 и 8 глава. - Добавлены новые ответы на вопросы.
Лог изменений от 24 августа:
- Исправил ссылочки и информацию.
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
Сообщение отредактировал Eye - Среда, 24 Августа 2011, 19:12 |
|
| |
Eye | Дата: Среда, 24 Августа 2011, 08:11 | Сообщение # 314 | Тема: Вопрос-[ответ] по Unity |
заслуженный участник
Сейчас нет на сайте
| denisik10, фотошоп в руки.
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
|
|
| |
Eye | Дата: Среда, 24 Августа 2011, 07:40 | Сообщение # 315 | Тема: Нужен Конструктор игр жанра песочница |
заслуженный участник
Сейчас нет на сайте
| Quote (lolkerdo) Scirra Construct подошол бы если б мне кинули исходник с мечём,киркой,земляным блоком,генератором мира(Интерфейсом,крафтом,хотьбой,какимто типом врагов,Сменой дня и ночи и так далее),Каменым блоком и булыжником Он хочет создать новый Minecraft. Во первых это фейл, во вторых советую просто помоддить игру.
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
Сообщение отредактировал Eye - Среда, 24 Августа 2011, 07:43 |
|
| |
Eye | Дата: Среда, 24 Августа 2011, 07:19 | Сообщение # 316 | Тема: Вопрос-[ответ] по Unity |
заслуженный участник
Сейчас нет на сайте
| denisik10, скриншоты с Xbox'a и разработчики опытные. Такую картинку в одиночку не сделаешь вообще, тем более на юнити.
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
|
|
| |
Eye | Дата: Среда, 24 Августа 2011, 07:09 | Сообщение # 317 | Тема: Поздравления пользователей |
заслуженный участник
Сейчас нет на сайте
| С днем рождения, BOOM! Так же ребят, поздравляю вас всех с прошедшим праздником!
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
|
|
| |
Eye | Дата: Среда, 24 Августа 2011, 06:54 | Сообщение # 318 | Тема: [ModLoader] Основы программирования для Minecraft [Часть 4] |
заслуженный участник
Сейчас нет на сайте
| Глава 10. Создание нового враждебного моба - Advanced.
Ожидайте.
Глава 11. Создание разностороннего блока.
Копируем данный код, он должен уже быть ясен вам. Если нет, то бегом зубрить предыдущие главы.
Cоздаем файл с именем mod_tex.java дабы не портить mod_gcc и не запутаться. Code package net.minecraft.src; import java.util.Random;
public class mod_tex extends BaseMod { public static Block Tex = new BlockTex(110, 0).setHardness(1.0F).setResistance(6000.0F).setBlockName("Tex"); } public String Version() { return "1.7_03"; } public mod_tex() { ModLoader.RegisterBlock(Tex); Tex.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/textures/Tex.png"); ModLoader.AddName(Tex, "Tex"); ModLoader.AddRecipe(new ItemStack(Tex, 1), new Object[]{ "#", Character.valueOf('#'), Block.dirt,}); } }
Далее пишем под публичной блока: Публичная текстуры с бока: Code public static int TexSide;
Публичная текстуры с лица: Code public static int TexFront;
Сделали? Отлично! Теперь нам нужно указать TexSide и TexFront куда им ходить за текстурой. Пишем после рецепта:
Путь к текстуре, которя будет боковой: Code TexSide = ModLoader.addOverride("/terrain.png", "/textures/TexSide.png");
Путь к текстуре, которя будет лицевой: Code TexFront = ModLoader.addOverride("/terrain.png", "/textures/TexFront.png");
Front.
Side.
Обычная Tex.
Проверяем код.
Двинемся далее. Cоздаем файл с именем BlockTex.java. Вот код для отображении текстуры на нашем блоке. Думаю, что потом вам не составит труда отредактировать его для своего следующего блока. В общих словах, вся эта махина создает блок с текстурой Tex. Потом присваивает всем сторонам текстуру TexSide, а уже потом только лицевой стороне присваивается текстура TexFront. Code package net.minecraft.src;
import java.util.Random;
public class BlockTex extends Block {
public BlockTex(int i, int j) { super(i, j, Material.rock); blockIndexInTexture = j; } public int idDropped(int i, int j) { return mod_tex.Tex.blockID; } public int quantityDropped(Random random) { return 2; } public int getBlockTextureFromSideAndMetadata(int i, int j) { if(i == 1) { return blockIndexInTexture; } if(i == 0) { return blockIndexInTexture; }
int k = mod_tex.TexFront; if(j == 2 && i == 2) { return k; } if(j == 3 && i == 5) { return k; } if(j == 0 && i == 3) { return k; } if(j == 1 && i == 4) { return k; } else { return mod_tex.TexSide; } }
public int getBlockTextureFromSide(int i) { if(i == 1) { return blockIndexInTexture; } if(i == 0) { return blockIndexInTexture; } if(i == 3) { return mod_tex.TexFront; } else { return mod_tex.TexSide; } }
Ну и как бы бонус Вот эти пару строчек будут ставить блок к вам лицом. Если это нужно, то впишите их в конце. Code public void onBlockPlacedBy(World world, int i, int j, int k, EntityLiving entityliving) { int l = MathHelper.floor_double((double)((entityliving.rotationYaw * 4F) / 360F) + 2.5D) & 3; world.setBlockMetadataWithNotify(i, j, k, l); }
Скриншот из игры:
Глава 12. Создание нового моба-помощника. Лучник - Advanced.
Эта статья рассчитана на продвинутых пользователей умеющих делать простейшие моды для майнкрафта, и здесь я попытаюсь рассказать о том как сделать моба который будет вас защищать стоя на месте.
Итак начнем:
Создаем файл mod_BowMan.java в котором мы укажем блок спавна нашего защитника:
Code package net.minecraft.src;
public class mod_BowMan extends BaseMod {
public static final Block BowManEgg = (new BlockBowManEgg(164, 0)).setHardness(0.0F).setResistance(0.0F).setBlockName("BowManegg");
public mod_BowMan() { ModLoader.RegisterBlock(BowManEgg); ModLoader.AddName(BowManEgg, "Bowman Egg"); BowManEgg.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/textures/bowmanegg.png"); ModLoader.AddRecipe(new ItemStack(BowManEgg, 1), new Object[] { "X", Character.valueOf('X'), Block.dirt}); ModLoader.RegisterEntityID(net.minecraft.src.EntityBowMan.class, "entityBowMan", ModLoader.getUniqueEntityId()); }
public String Version() { return "Guard Mob Tutorial by Perpetual Motion Team"; } }
Теперь создаем файл EntityBowMan.java Начало такое-же как и в создании нейтрала
Code package net.minecraft.src;
import java.util.List; import java.util.Random;
public class EntityBowMan extends EntityAnimal {
public EntityBowMan(World world) { super(world); texture = "/mob/char.png"; moveSpeed = 0.0F; health = 50; isImmuneToFire = true; }
Но появляется пара новых строчек.
Скорость передвижения моба(0.7F - скорость игрока, 0.0F - моб стоит на месте), у нас будет лучник, поэтому скорость 0.
Жизни моба(1 жизнь - пол-сердца, у игрока 20 жизней).
Иммунитет к огню (и к лаве ). Code isImmuneToFire = true;
Теперь дописываем дальше:
Чтоб наш моб не пропадал. Code protected boolean canDespawn() { return false; }
Теперь надо чтоб лучник находил врагов:
Здесь в каждую переменную типа list записывается данный о враждебных мобах. Code protected void updatePlayerActionState() { if(playerToAttack == null) { List list; list = worldObj.getEntitiesWithinAABB(net.minecraft.src.EntityMob.class, AxisAlignedBB.getBoundingBoxFromPool(posX - 16.0D, posY - 4.0D, posZ - 16.0D, posX + 17.0D, posY + 5.0D, posZ + 17.0D)); if(list.isEmpty()) { list = worldObj.getEntitiesWithinAABB(net.minecraft.src.EntityMob.class, AxisAlignedBB.getBoundingBoxFromPool(posX - 16.0D, posY - 12.0D, posZ - 16.0D, posX + 17.0D, posY - 4.0D, posZ + 17.0D)); if(list.isEmpty()) { list = worldObj.getEntitiesWithinAABB(net.minecraft.src.EntityMob.class, AxisAlignedBB.getBoundingBoxFromPool(posX - 16.0D, posY - 20.0D, posZ - 16.0D, posX + 17.0D, posY - 12.0D, posZ + 17.0D)); } } if(!list.isEmpty()) { setTarget((Entity)list.get(worldObj.rand.nextInt(list.size()))); } } super.updatePlayerActionState(); }
Теперь обрабатываем событие на атаку: Code protected void attackEntity(Entity entity, float f) { if(f < 240F) { double d = entity.posX - posX; double d1 = entity.posZ - posZ; if(attackTime == 0) { EntityArrow entityarrow = new EntityArrow(worldObj, this); entityarrow.posY += 0.1999999761581421D; double d2 = (entity.posY + (double)entity.getEyeHeight()) - 0.20000000298023224D - entityarrow.posY; float f1 = MathHelper.sqrt_double(d * d + d1 * d1) * 0.2F; worldObj.playSoundAtEntity(this, "random.bow", 1.0F, 1.0F / (rand.nextFloat() * 0.4F + 0.8F)); worldObj.entityJoinedWorld(entityarrow); entityarrow.setArrowHeading(d, d2 + (double)f1, d1, 1.5F, 12F); attackTime = 2; } rotationYaw = (float)((Math.atan2(d1, d) * 180D) / 3.1415927410125732D) - 90F; hasAttacked = true; } } Если умеете нормально программировать, то можете поменять здесь код на свою обработку. А так объясню только 1 переменную:
Время до следующей атаки (у скелета время = 30, а у нас в 15 раз быстрее )
И наконец дописываем концовку: Code protected String getLivingSound() { return "mob.skeleton"; }
protected String getHurtSound() { return "mob.skeletonhurt"; }
protected String getDeathSound() { return "mob.skeletondeath"; }
private int angerLevel; private int randomSoundDelay; }
Теперь нам надо сделать файл BlockBowManEgg.java:
Code package net.minecraft.src;
import java.io.PrintStream; import java.util.Random;
public class BlockBowManEgg extends Block {
protected BlockBowManEgg(int i, int j) { super(i, j, Material.ground); }
public int quantityDropped(Random random) { return 1; }
public int tickRate() { return 30; }
public void onBlockClicked(World world, int i, int j, int k, EntityPlayer entityplayer) { double d = i; double d1 = j; double d2 = k; EntityBowMan entitybowman = new EntityBowMan(world); entitybowman.setLocationAndAngles(d, d1, d2, world.rand.nextFloat() * 360F, 0.0F); world.entityJoinedWorld(entitybowman); } }
Здесь все просто - по нажатию левой кнопкой мыши блок ломается (потому-что крепкость 0) и вызывает на это место лучника. Остались только текстуры: Текстура лучника - не требуется (в коде вписана стандартная текстура игрока). Текстура bowmanegg.png - берем любой файл 16*16 и кидаем в папку textures в minecraft.jar с именем bowmanegg.png.
Ну вот стрелок и готов.
Скриншот из игры:
Автор 12 главы: DarkMan.
Мини-глава. Нормальное стекло.
Многие встречались с проблемой, когда после создания "прозрачной" текстуры, через блок можно было смотреть через весь мир, типа X-Ray мода. Данная проблема решается строчками, которые добавляются в .java блока.
Code public boolean isOpaqueCube() { return false; }
public boolean shouldSideBeRendered(IBlockAccess iblockaccess, int i, int j, int k, int l) { int i1 = iblockaccess.getBlockId(i, j, k); if(!localFlag && i1 == blockID) { return false; } else { return super.shouldSideBeRendered(iblockaccess, i, j, k, l); } }
private boolean localFlag;
Вот и все. После чего у вас будет красивое подобие стекла. Удачи!
У нашей команды есть своя официальная конференция в джаббере. Там можно задать вопросы по моддингу - и получить быстрый ответ, поговорить с разработчиками учебника или просто пофлудить [spider]
Сервер - conference.jabber.ru Комната - mc-guide
Регистрировать аккуант на jabber.ru, а качать лучшего всего клиент Psi. Но сидеть в конфе можно и через квип. Всем спасибки за внимание!
Учебник разрабатывается коллективом mc.salmons.ru!
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
Сообщение отредактировал Eye - Среда, 24 Августа 2011, 07:01 |
|
| |
Eye | Дата: Среда, 24 Августа 2011, 06:53 | Сообщение # 319 | Тема: [ModLoader] Основы программирования для Minecraft [Часть 3] |
заслуженный участник
Сейчас нет на сайте
| Глава 9. Создание нового нейтрального моба - Advanced.
Ну, для начала скажу, что в создании моба нет ничего сложно. Основная проблема, которая может у вас возникнуть, так это создание новой модельки. Я взял обычного крипера и чуть-чуть перерисовал текстуру.
Создаем файл и указываем название mod_freeper.java. Эта часть кода должна быть уже известна вам, если прошли предыдущие уроки конечно. Code package net.minecraft.src;
import java.util.*; import java.util.Map;
public class mod_freeper extends BaseMod {
public String Version() { return "1.7.3"; } }
Теперь в класс mod_freeper вставляем следующий код: Code public mod_freeper() { ModLoader.RegisterEntityID(EntityFreeper.class, "Freeper", ModLoader.getUniqueEntityId());
ModLoader.AddSpawn(EntityFreeper.class, 500, EnumCreatureType.creature); }
Регестрируем моба в нашем мире: Code ModLoader.AddSpawn(EntityFreeper.class, 500, EnumCreatureType.creature);
Спавн моба. Число 500 обозначает их редкость: Code ModLoader.AddSpawn(EntityFreeper.class, 500, EnumCreatureType.creature);
Размер тени мы сможем указать ври помощи этого кода: Code public void AddRenderer(Map map) { map.put(EntityFreeper.class, new RenderFreeper(new ModelFreeper(), 1.0F)); }
Далее.
Создаем файл под названием EntityFreeper.java.
Вписываем туда этот код: Code package net.minecraft.src;
Создаем класс EntityFreeper с указанием, что это нейтральный моб (животное). Code public class EntityFreeper extends EntityAnimal
Вписываем в класс EntityFreeper следующий код: Code public EntityFreeper(World world) { super(world); texture = "/mob/freeper.png"; setSize(1.5F, 1.5F); }
Тут мы объясняем мобу, что мир, в котором он будет жить, супер:
Тут мы указываем путь к текстуре: Code texture = "/mob/freeper.png";
(размеры не изменять!)
Тут размеры коллайдера на мобе:
Это просто скопируйте. Тут записываются и считываются данные. Code public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); }
public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); }
Теперь мы указываем звуки, которые он будет издавать.
Это отвечает за то, что он будет издавать постоянно. В моем случае он будет кукарекать. Code protected String getLivingSound() { return "mob.chicken"; }
Это отвечает за то, что он будет издавать при уменьшении HP. Code protected String getHurtSound() { return "mob.creeper"; }
Это отвечает за то, что он будет издавать при смерти. Code protected String getDeathSound() { return "mob.creeperdeath"; }
Устанавливаем громкость. Code protected float getSoundVolume() { return 0.4F; }
Вписываем ID предмета, который выпадет после смерти моба. Code protected int getDropItemId() { return 289; }
Проверяем.
Идем далее.
Назвав файл RenderFreeper.java, мы вписываем в него следующий код: Code package net.minecraft.src;
public class RenderFreeper extends RenderLiving {
public RenderFreeper(ModelBase modelbase, float f) { super(modelbase, f); }
public void func_177_a(EntityFreeper ebs, double d, double d1, double d2, float f, float f1) { super.doRenderLiving(ebs, d, d1, d2, f, f1); }
public void doRenderLiving(EntityLiving entityliving, double d, double d1, double d2, float f, float f1) { func_177_a((EntityFreeper)entityliving, d, d1, d2, f, f1); }
public void doRender(Entity entity, double d, double d1, double d2, float f, float f1) { func_177_a((EntityFreeper)entity, d, d1, d2, f, f1); } } Собственно это он генерирует нашего моба в мире (отображает). Думаю и вам, и мне будет легче, если вы просто скопируете его к себе.
Начинаем, как всегда с того, что создаем файл и даем ему имя. В данном случае, имя ему будет ModelFreeper.java. Ну и, наконец, самое главное... модель нашего моба. Чтобы делать модели для minecraft'a, нужна специальная программа, она называется Techne. Впоследствии, возможно мы и напишем пару уроков по “созданию” модели в этой программе. Но пока, скопируйте просто готовый код фрипера. Объяснять тут ничего не надо, так как программа сама все вам сгенерирует. Code package net.minecraft.src;
public class ModelFreeper extends ModelBase {
public ModelFreeper() { this(0.0F); }
public ModelFreeper(float f) { int i = 4; head = new ModelRenderer(0, 0); head.addBox(-4F, -8F, -4F, 8, 8, 8, f); head.setRotationPoint(0.0F, i, 0.0F); field_1270_b = new ModelRenderer(32, 0); field_1270_b.addBox(-4F, -8F, -4F, 8, 8, 8, f + 0.5F); field_1270_b.setRotationPoint(0.0F, i, 0.0F); body = new ModelRenderer(16, 16); body.addBox(-4F, 0.0F, -2F, 8, 12, 4, f); body.setRotationPoint(0.0F, i, 0.0F); leg1 = new ModelRenderer(0, 16); leg1.addBox(-2F, 0.0F, -2F, 4, 6, 4, f); leg1.setRotationPoint(-2F, 12 + i, 4F); leg2 = new ModelRenderer(0, 16); leg2.addBox(-2F, 0.0F, -2F, 4, 6, 4, f); leg2.setRotationPoint(2.0F, 12 + i, 4F); leg3 = new ModelRenderer(0, 16); leg3.addBox(-2F, 0.0F, -2F, 4, 6, 4, f); leg3.setRotationPoint(-2F, 12 + i, -4F); leg4 = new ModelRenderer(0, 16); leg4.addBox(-2F, 0.0F, -2F, 4, 6, 4, f); leg4.setRotationPoint(2.0F, 12 + i, -4F); }
public void render(float f, float f1, float f2, float f3, float f4, float f5) { setRotationAngles(f, f1, f2, f3, f4, f5); head.render(f5); body.render(f5); leg1.render(f5); leg2.render(f5); leg3.render(f5); leg4.render(f5); }
public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) { head.rotateAngleY = f3 / 57.29578F; head.rotateAngleX = f4 / 57.29578F; leg1.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1; leg2.rotateAngleX = MathHelper.cos(f * 0.6662F + 3.141593F) * 1.4F * f1; leg3.rotateAngleX = MathHelper.cos(f * 0.6662F + 3.141593F) * 1.4F * f1; leg4.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1; }
public ModelRenderer head; public ModelRenderer field_1270_b; public ModelRenderer body; public ModelRenderer leg1; public ModelRenderer leg2; public ModelRenderer leg3; public ModelRenderer leg4; }
Скриншот из игры:
От Eye: Мобы имеют АИ как у обычной свиньи. Бегают, прыгают, улыбаются. Чуть позже мы вместе с Максимом расскажем как сделать вражеского моба и дружелюбного по типу Волка. От Aswo: Всем привет, я Максим. С сегодняшнего дня я присоединяюсь к Вале, дабы помочь ему и вам в этом нелегком деле. Так же думаю, будет серия уроков по Techne, в которых вы научитесь моделировать объекты для игры. Ну и конечно же добавлять их в игру. В общем, зубрите пока первые девять глав
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
Сообщение отредактировал Eye - Среда, 24 Августа 2011, 06:59 |
|
| |
Eye | Дата: Среда, 24 Августа 2011, 06:51 | Сообщение # 320 | Тема: [ModLoader] Основы программирования для Minecraft [Часть 2] |
заслуженный участник
Сейчас нет на сайте
| Глава 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))
Проверяем.
Вот и все. Запускайте и пробуйте!
Скриншоты из игры:
Глава 5. Создание еды или как слепить хавку.
Добавляем к пабликам строку: Code public static final Item pighead = new ItemFood(2001, 10, false).setItemName("pighead");
Разберем.
Первое число - ID, второе - количество половинок сердца для восстановления (всего 20 половинок), а false можно ли использовать на волке для привлечения. Далее все по прежнему. Code new Head(2001, 20, false)
Запишем привычные строки. Code pighead.iconIndex = ModLoader.addOverride("/gui/items.png", "/textures/pighead.png"); ModLoader.AddName(pighead, "Pig Head"); ModLoader.AddRecipe(new ItemStack(pighead, 1), new Object[]{ "XX", "X#", Character.valueOf('X'), Block.dirt});
Закинем текстуру в minecraft.jar/textures. (размеры не изменять!)
Создаем файлик pigHead.java.
Туда кидаем: Code package net.minecraft.src;
public class pigHead extends ItemFood { public pigHead(int i, int j) { super(i, j, true); } }
Запускаем и пробуем!
Для развития:
Если хотите чтобы после поедания вашей еды выпадал предмет (например, если это суп), вместо старого паблика впишите новый: Code public static final Item pighead = new Head(2001, 20, false, 16).setItemName("pighead");
Переименуйте pigHead.java в Head.java и весь код замените на: Code package net.minecraft.src;
public class Head extends ItemFood { public Head(int i, int j, boolean flag, int k) { super(i, j, flag); healAmount = j; maxStackSize = k; } public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) { itemstack.stackSize--; entityplayer.heal(healAmount); entityplayer.dropPlayerItem(new ItemStack(mod_gcc.pighead.shiftedIndex, 1, 0)); return itemstack; } public int getHealAmount() { return healAmount; }
protected int healAmount; }
Единственное что вам тут понадобится - эта строка. После поедания еды выпадает она же в количестве 1. Можете экспериментировать. Для дропа других итемов, пишите Item.название.shiftedIndex. Code entityplayer.dropPlayerItem(new ItemStack(mod_gcc.pighead.shiftedIndex, 1, 0))
Глава 6. Создание руды или как сделать чтобы из блока выпадали предметы.
Тут все очень просто. Открываем BlockNew.java.
Ищем: Code public int idDropped(int i, int j) { return mod_gcc.newblock.blockID; } public int quantityDropped(Random random) { return 1; } }
Меняем на: Code public int idDropped(int i, Random random) { return Item.stick.shiftedIndex; } public int quantityDropped(Random random) { return 2 + random.nextInt(5); } }
Разберем код выше.
Выкидываем палочки. Для дропа своих итемсов - пишите mod_gcc.nameItem.shiftedIndex - nameItem - название предмета. Для дропа блоков - названиеблока.blockID. Для дропа СВОИХ блоков или того же блока (по типу руды) - mod_gcc.названиеблока.blockID. Code return Item.stick.shiftedIndex;
Число 2 - минимальное значение дропа. Число 5 - максимальное значение. Значит игра будет рандомно давать вам от 2 до 5 палок с блока. Code return 2 + random.nextInt(5);
Проверяем.
Вот и все. Пробуйте!
Глава 7. Создание нового инструмента (на основе стандартных материалов).
Сейчас мы сделаем веник. Он будет у нас аналогом алмазного меча.
Добавим к пабликам строку: Code public static final Item venik = new ItemSword(2002, EnumToolMaterial.EMERALD).setItemName("venik");
Разберем.
Обозначаем что это за предмет. Есть sword, axe, pickaxe и shovel. В нашем случае - меч.
ID.
Материал инструмента. WOOD - Дерево STONE - Камень IRON - Железо EMERALD - Алмаз GOLD - Золото Code EnumToolMaterial.EMERALD
Добавим все как обычно.
Code venik.iconIndex = ModLoader.addOverride("/gui/items.png", "/textures/venik.png"); ModLoader.AddName(venik, "Venik"); ModLoader.AddRecipe(new ItemStack(venik, 1), new Object[]{ "XXX", "#X#", "#X#", Character.valueOf('X'), Block.dirt});
Кидаем текстуру в minecraft.jar/textures. (размеры не изменять!)
Тестируем!
Глава 8. Создание нового инструмента и его свойств - Работает!
Открываем EnumToolMaterial.java.
Ищем строку: Code GOLD("GOLD", 4, 0, 32, 12F, 0),
И добавляем ниже новые характеристики: Code TITAN("TITAN", 5, 5, 100, 25F, 5);
Название.
Первая пятерка - порядковый номер свойства. Вторая - уровень разрушения. Сотня - количество разрушаемых блоков в общем (состояние инструмента). 25F - сила разрушения, скорость. 5 - сила удара для мобов.
Сравнивайте со стандартными свойствами и делайте новые. Теперь просто в mod_gcc, в строке инструмента: Code EnumToolMaterial.EMERALD Пишите ваше свойство. Например: Code EnumToolMaterial.TITAN
Так же хочу рассказать про уровень разрушения. На данный момент в игре используется только 4 уровня.
0 - дерево, камень. 1 - железо. 2 - золото. 3 - алмаз.
Открываем ItemPickaxe.java и смотрим код. Можно заметить что обсидиан разрушается только алмазной киркой - уровнем 3.
Когда стоит строка: Code getHarvestLevel() == 3
Значит разрушение происходит ТОЛЬКО 3 уровнем.
А когда стоит: Code getHarvestLevel() >= 1
То значит, разрушение происходит от 1 уровня до максимального.
Если хотите чтобы ваш блок разрушался только вашей киркой - ставите уровень 4 в свойстве. Затем дописываем в ItemPickaxe (или что у вас там) новую строку по типу: Code if(block == mod_gcc.newblock) { return toolMaterial.getHarvestLevel() == 4; }
Таким образом только одна кирка сможет разрушить данный блок, а точнее с вашей киркой разрушение пройдет быстрее и из блока может что-то выпасть.
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
Сообщение отредактировал Eye - Среда, 24 Августа 2011, 06:57 |
|
| |
|