Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Туториал Портирование модов на craftbukkit [1.2.5]

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем Draiget, 16 май 2012.

  1. Автор темы
    Draiget

    Draiget Активный участник Пользователь

    Баллы:
    78
    Skype:
    draiget
    Имя в Minecraft:
    Draiget
    Вступление

    Многие делали свои моды под сингл Minecraft’а, и многие хотели перенести свое детище на сервер, но после долгих и упорных поисков либо вовсе ничего не находили, либо находили уроки на английском, и ничего не могли понять. Не так давно и я столкнулся с проблемой поиска подобных уроков. На русском естественно я ничего не нашел, пришлось гуглить на буржуйских форумах. Нашел пару уроков, большая часть написана для тех, кто хоть как-то понимает процесс портирования, уроки слишком короткие и непонятные. В одном хоть видео приложили, где все наглядно показали, правда, видео на немецком и очень старое, но оно помогло заполнить все пробелы.

    Кто уже знаком с этим делом и заметил ошибки, пишите, будем исправлять, ибо я только пару дней назад понял этот процесс, а такой урок много кому пригодиться, особенно новичкам.


    Видео:


    Приступим

    Первое что нам нужно сделать – это скачать все необходимые файлы, список ниже:
    После скачки всех компонентов, устанавливаем в следующем порядке:
    1. Распаковываем MCP (mcp62.zip) в любую папку. Это будет корневая директория - %ROOT%
    2. Распаковываем содержимое архива mappings_bukkit_1.2.5.tar.gz в папку %ROOT%\conf (с заменой файлов!).
    3. Распаковываем содержимое архива fernflower_0.8.6.zip в %ROOT%\runtime\bin.
    4. Открываем архив MinecraftForge-3.1.3.105-Source.zip, и распаковываем из него папку forge в %ROOT%.
    5. Перемещаем архив minecraft_server.jar в папку %ROOT%\jars
    6. Открываем архив minecraft_server.jar и суем туда ModLoaderMP (Не забываем удалить папку META-INF).
    7. Идем в папку %ROOT%\forge и запускаем файл install.cmd. Он начнет декомпилить наш minecraft_server.jar, если выдаст ошибки ничего страшного, запустите %ROOT%\cleanup.bat, напишите в нем “Yes”, и нажмите Enter. После запустите %ROOT%\decompile.bat.
    Теперь открываем NetBeans (Скачать можно отсюда: http://netbeans.org/downloads/start.html?platform=windows&lang=ru&option=javase) и создаем новый проект: Java-приложение, называем его как угодно и жмем «Готово».

    Справа в списке проектов у нас появился наш проект, основной класс "Название вашего проекта.java" в пакете "Название вашего проекта" - удалять и изменять нельзя!

    Создадим в проекте пакет net.minecraft.server, теперь нам надо добавить в библиотеки проекта сам буккит, для этого ищем в нашем проекте подраздел "Библиотеки" (как добавлять - 9:35 время на видео к тутору) , нажимаем по нему правой кнопкой, перед нами выпадает список, ищем Добавить JAR-файл и тыкаем по нему, в появившемся окне выбираем craftbukkit-1.2.5-R1.3-MCPC-SNAPSHOT-93.jar, который мы скачали (не обязательно качать 93, качайте самый новый снапшот).

    Теперь создадим пакет для нашего мода, к примеру я назвал свой мод ZontWelg_TestPort и отсюда пакет zontwelg_porting_test. В этом пакете мы буем создавать файлы мода (блоки, итемы, энтити и т.п.). Но чтобы все это дело загрузить создадим класс mod_ваш мод.java в пакете net.minecraft.server. (к примеру: mod_ZontWelg_PortTest.java).
    Если мы скопируем туда код мода от одиночной игры, появиться дофигище ошибок, спросите почему? В CraftBukkit’е классы\функции называются совсем по другому, например функция .setItemName("Имя"); в букките будет .a(“Имя”);

    Как же определить во что переименовали старые методы?

    А легко:
    Декомпильте официальный клиент майнкрафта через тот же MPC, лучше в отдельной папке. Допустим мы объявили в главном классе мода предмет:
    Код:
    public static final Item ItemGoldCoin = (new ItemGoldCoin(164)).setItemName("Gold Coin");
    Нам нужно открыть серверный файл %MCP%\src\minecraft_server\net\minecraft\src\Item.java
    И открыть клиентский: %MCP%\src\minecraft\net\minecraft\src\Item.java
    В обоих файлах остались комментарии от декомпилятора, что нам очень сильно поможет, ищем функцию setItemName в клиентском файле Item.java, нашли копируем комментарий выше самой функции:
    Ищем строку: "set name of item from language file"в сервером файле Item.java, и находим функцию public Item (String par1Str), нашли теперь можно исправить нашу строку с:
    Код:
     public static final Item ItemGoldCoin = (new ItemGoldCoin(164)).setItemName("Gold Coin"); 
    На:
    Код:
    public static final Item ItemGoldCoin = (new ItemGoldCoin(164)).a("Gold Coin");
    Таким способом ищем все функции и заменяем их на баккитовские.

    После долгой и упорной замены нам нужно скомпилить проект, нажимаем в главном меню программы Выполнить->Построить главный проект. Теперь идем в папку Мои документы->NetBeansProjects->Название вашего проекта->Build->classes и копируем отсюда папки net и названия вашего основного пакета мода (у меня это было zontwelg_porting_test). Открываем папку с сервером, если в корне папки (там где лежит craftBukkit.jar) нету папки mods, создайте ее. Идем в папку mods, создаем там еще одну папку, называем как угодно, и копируем туда наши файлы из папки classes (ранее мы их скопировали). Запускаем сервер, смотри на наличие ошибок, если их нету, заходим на сервер и проверяем мод.


    P.S. Это мой первый туториал в этой сфере, сильно тапками не кидаться, пишите, что где не так, исправим. Если не в той теме создал тоже извиняйте, ничего более подходящего не нашлось, а урок прямо относиться к баккиту.



    Урок написан мною, при копировании материала указывайте автора урока и ссылку на оригинал (эту тему), соблюдайте закон об авторском праве, будьте няшами :3
     

    Вложения:

    Феликс, Alexsei, ITrAnEI и 29 другим нравится это.
  2. Хостинг MineCraft
    <
  3. triker

    triker Активный участник

    Баллы:
    61
    Я прочитал полностью эту статью , но застрял на создание пакета в net.minecraft.server ,
    Draiget а ты можешь портировать мод(ы) на заказ ? ( бесплатно или платно не важно)
     
  4. PiFFk0

    PiFFk0 Активный участник

    Баллы:
    93
    Молодец, достойный туториал ;)
     
  5. Автор темы
    Draiget

    Draiget Активный участник Пользователь

    Баллы:
    78
    Skype:
    draiget
    Имя в Minecraft:
    Draiget
    В чем именно у тебя проблема? Можешь прикрепить скриншот окна NetBeans?

    Если по заказу одного человека, то вряд ли бесплатно, т.к. этот процесс выносит мозги на весь день.
     
  6. серьёзный сэм

    серьёзный сэм Активный участник

    Баллы:
    78
    Имя в Minecraft:
    OneWar
    а если не мод создать
    А если нужно не создать мод и портитровать его на буккит, а установить уже готовый мод (minecraft forge) ИК2?
     
  7. Автор темы
    Draiget

    Draiget Активный участник Пользователь

    Баллы:
    78
    Skype:
    draiget
    Имя в Minecraft:
    Draiget
    Это вопрос не по теме, мой урок только для портирования, как устанавливать моды найти не сложно, вроде как здесь на форуме была подобная тема.
     
    timkill нравится это.
  8. DaleMartinWatson

    DaleMartinWatson Старожил Девелопер Пользователь

    Баллы:
    103
    Да перестань же вы цитировать большие посты!:why:
     
    Sheogorath, tefal98, Toreodor и 3 другим нравится это.
  9. серьёзный сэм

    серьёзный сэм Активный участник

    Баллы:
    78
    Имя в Minecraft:
    OneWar
    хорошо
     
  10. Prosto Sokka

    Prosto Sokka Активный участник

    Баллы:
    68
    молодец.... ставлю лайк за работу.
     
  11. stalker0003

    stalker0003 Активный участник

    Баллы:
    61
    Имя в Minecraft:
    stalker003
    мне одному кажется, что портированные моды под баккит должны находиться в самом баккит? а не в папке mods(как в обычном сервере)
     
  12. stalker0003

    stalker0003 Активный участник

    Баллы:
    61
    Имя в Minecraft:
    stalker003
    да, ты еще указал только изменение для итемов(если я ничего не путаю). напиши для блоков тоже
     
  13. Автор темы
    Draiget

    Draiget Активный участник Пользователь

    Баллы:
    78
    Skype:
    draiget
    Имя в Minecraft:
    Draiget
    Да тебе одному кажеться, нету разницы будет ли он в архиве с сервером или в папке модов, удобнее когда мод лежит в папке.


    Я сказал как искать остальное, в чем проблема то?
     
    timkill нравится это.
  14. timkill

    timkill Активный участник

    Баллы:
    68
    Имя в Minecraft:
    timkill
    @Автор, и у тебя получалось?
     
  15. Автор темы
    Draiget

    Draiget Активный участник Пользователь

    Баллы:
    78
    Skype:
    draiget
    Имя в Minecraft:
    Draiget
    Заплил таблицу Excel 2010 со списком переименованных классов\функций Block.java
     

    Вложения:

    timkill нравится это.
  16. Автор темы
    Draiget

    Draiget Активный участник Пользователь

    Баллы:
    78
    Skype:
    draiget
    Имя в Minecraft:
    Draiget
    Видео посмотри.
     
  17. timkill

    timkill Активный участник

    Баллы:
    68
    Имя в Minecraft:
    timkill
    Тут аказц и видео имеется Oo, ну тогда извини, не заметил...
     
  18. timkill

    timkill Активный участник

    Баллы:
    68
    Имя в Minecraft:
    timkill
    Мне кажется или ты ошибся при замене "setItemName" на "а"? Ведь там идет строчка (как ты написал) "public Itema (String par1Str)" => не "а", а выделенная строчка ранее!?
    Прошу объяснений!
     
  19. Автор темы
    Draiget

    Draiget Активный участник Пользователь

    Баллы:
    78
    Skype:
    draiget
    Имя в Minecraft:
    Draiget
    Где там? Видео смотри, я там все показал целиком и полностью, у буккита все функции и свойства переименованы, там a и ничего более. И пишите понятней.
    [​IMG]
     
    timkill нравится это.
  20. timkill

    timkill Активный участник

    Баллы:
    68
    Имя в Minecraft:
    timkill
    Я написал понятно, те кто догоняет и хочет вникнуть поймут.
    Я мало вероятно ошибаюсь, но в серверном файле не буква "а", а строчка "Itema" как ты мог одно слово разделить на слово и букву?
    Заменил все как написано у тебя в документе, строчка по прежнему выделяется красным...
    оригинал строки:
    Код:
    public static final Block newblock = new Emerald(160, 0).setHardness(0.7F).setResistance(0.4F).setLightValue(0F).setBlockName("newblock");
    измененная строчка:
    Код:
    public static final Block newblock = (new Emerald(160, 0)).c(0.7F).b(0.4F).a(0F).a("newblock");
    подчеркивает слово Emerald
     
    slavik123123123 нравится это.
  21. Автор темы
    Draiget

    Draiget Активный участник Пользователь

    Баллы:
    78
    Skype:
    draiget
    Имя в Minecraft:
    Draiget
    Ты файл блока в своем пакете создал, и настроил его? Не судьба ли навести на подчеркнутое красным слово и увидеть ошибку?
    [​IMG]

    Объявление в классе мода:
    Код:
     public static final Block BlockEmerald = (new BlockEmerald(160, 0)).c(0.7F).b(0.4F).a(0F).a(" BlockEmerald"); 
    Файл BlockEmerald.java:
    Код:
     package твой_пакет;
     
    import net.minecraft.server.*;
    import java.util.Random;
     
    public class BlockEmerald extends Block
    {
    public BlockEmerald(int i, int j)
    {
    super(i, j, Material.ORE);
    }
     
    public int idDropped(int i, Random random, int j)
    {
    return твой_мод.BlockEmerald.id;
    }
     
    public int quantityDropped(Random random)
    {
    return 1;
    }
    }
    В сервером файле вместо .setItemName(String name); идет .a(String name);
    Где ты взял Itema?
     

Поделиться этой страницей