1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Туториал [1.7.2-1.8] [Forge] Приветствие в главном меню

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем Starr, 28 сен 2014.

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

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

    Баллы:
    98
    Добрый день, рубаккитовцы.
    В этом туториале я расскажу как вывести никнейм игрока в главном меню Minecraft.
    ВАЖНО! Если вы еще не работали с ForgeGradle/MCP - советую посетить эту и эту тему.
    Операции проводились на версии Minecraft 1.7.2, с остальными версиями все аналогично.
    Что нам понадобится:
    [​IMG]

    Что же, приступим.
    Открываем наш проект Minecraft в Eclipse.
    Идем в sources/java/

    1) Создаем пакет net.minecraft.client.gui
    В в данном пакете создаем класс GuiMainMenu
    Ищем данный класс в forgeSrc, копируем его содержимое в созданный нами класс.
    Дальше нам нужно найти строку
    Код:
    String s = "Minecraft 1.7.2";
    Впрочем, там может быть написана любая другая версия. ;)
    Перед этой строкой вставляем данный код:
    Код:
    String nickname = "Hello, " + this.mc.session.username + "!"; //Тут можно написать любую желаемую фразу
    int widthNULL = this.width - this.fontRendererObj.getStringWidth(nickname);
    int widthSpace = widthNULL / 2;
    this.drawString(this.fontRendererObj, nickname, widthSpace, 2, 16777215);
    //Если вы будете работать с 1.6, то замените fontRendererObj на fontRenderer
    Сохраняем данный класс.

    2) Создаем пакет net.minecraft.client (Если он не создается, можно поставить галочку на Create package-info.java)
    Создаем класс Minecraft
    Ищем такой же в forgeSrc и копируем его содержимое в созданный нами класс.
    Ищем строку:
    Код:
    private final Session session;
    И изменяем на:
    Код:
    public final Session session;
    Сохранеям.

    3) Создаем пакет net.minecraft.util
    Создаем в нем класс Session
    Ищем тот же класс в forgeSrc, копируем содержимое.
    Ищем строку:
    Код:
    private final String username;
    И изменяем на:
    Код:
    public final String username;
    Сохраняем.

    4) Выходим из Eclipse.

    5) Заходим в папку с ForgeDecompWorkspace (У меня C:\172\)

    6) Затем открываем Командную строку с правами админа и пишем
    Код:
    cd C:\172\
    set JAVA_HOME=Путь_к_вашей_JDK    <--- Это нужно писать, если у вас
    set PATH=%JAVA_HOME%\bin;%PATH%   <--- изменен путь к JDK
    gradlew build
    7) Когда билд закончился, запускаем BON.jar (Bearded Octo Nemesis)
    B Input File вписываем: C:\172\build\libs\modid-1.0.jar
    B Output вписываем C:\Users\Имя_учетки\Dekstop\Obfuscated.jar
    Путь к MCP указываете тот, куда установили его.
    В Side оставляем Universal.
    B Operation ставим Reobfuscate.
    Go! можно жать только после 8го шага!

    8) Открываем папку с MCP, закидываем в папку jars\versions\
    Ваш minecraft.jar (1.7.2.jar, к примеру)
    Переходим в корень папки MCP и жмем decompile.bat - это займет прилично времени.

    9) Когда декомпил закончился, в BON можно жать Go!

    10) На рабочем столе создастся файл мода (Obfuscated.jar), уже обфусцированный. Открываем его архиватором. Его классы перекидываем в джарник клиента. (Папку com, если таковая имеется, и файл mcmod.info перекидывать не нужно!)
    Удаляем в клиенте папку META-INF. Сохраняем.

    11) Запускаем лаунчер и выбираем ту версию, куда вы закидывали классы.
    Чтобы игра запустилась, нужно в аргументах запуска добавить:
    -Dfml.ignoreInvalidMinecraftCertificates=true -Dfml.ignorePatchDiscrepancies=true.

    Можно запускать игру и любоваться вашим ником в верхушке главного меню. ;)
    Отдельно выражаю благодарность @MrGiperCreeper за код центрирования ника.
     
    Последнее редактирование: 29 сен 2014
  2. LORD_09_RUS

    LORD_09_RUS Активный участник Пользователь Заблокирован

    Баллы:
    76
    Имя в Minecraft:
    Edward007
    А на 1.5.2 есть ?
     
  3. Автор темы
    Starr

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

    Баллы:
    98
    Работа с кодом аналогичная, но разница может быть только в использовании разных декомпиляторов - MCP или ForgeGradle.

    Можно сорцы для 1.5.2 закачивать с http://files.minecraftforge.net.
     
    Последнее редактирование: 1 июл 2015
  4. LORD_09_RUS

    LORD_09_RUS Активный участник Пользователь Заблокирован

    Баллы:
    76
    Имя в Minecraft:
    Edward007
    Понял , спс буду пробовать !
    А можешь создать второй урок такой-же тока на 1.5.2 ???
     
  5. Автор темы
    Starr

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

    Баллы:
    98
    Да, на днях наверное создам.
    На следующей неделе даже видео запишу.
     
  6. LORD_09_RUS

    LORD_09_RUS Активный участник Пользователь Заблокирован

    Баллы:
    76
    Имя в Minecraft:
    Edward007
    Угу ! Буду ждать !
    Просьба есть : Пж напиши мне в лс когда сделаешь урок на 1.5.2 ...
     
  7. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Тупо ник уже не модно )
    [​IMG]
     
  8. Alexgrist

    Alexgrist Старожил Пользователь

    Баллы:
    173
    Клиент на высоте. Очень понравился. :good:
     
  9. Автор темы
    Starr

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

    Баллы:
    98
    Понимаю, что не модно, но не все же могут так сделать :)
     
  10. kirr9999

    kirr9999 Старожил Пользователь

    Баллы:
    103
    Код:
      void test()
      {
        ResourceLocation resourcelocation = AbstractClientPlayer.field_110314_b;
        resourcelocation = AbstractClientPlayer.getLocationSkull(Minecraft.func_71410_x().func_110432_I().func_111285_a());
        AbstractClientPlayer.func_110304_a(resourcelocation, Minecraft.func_71410_x().func_110432_I().func_111285_a());
        this.field_146297_k.func_110434_K().func_110577_a(resourcelocation);
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        GL11.glPushMatrix();
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        GL11.glTranslated(this.field_146294_l / 2 - 8, 10.0D, 1.0D);
        GL11.glScaled(0.5D, 0.25D, 1.0D);
        GL11.glEnable(3008);
        GL11.glDisable(2884);
        func_73729_b(0, 0, 32, 64, 32, 64);
        func_73729_b(0, 0, 160, 64, 32, 64);
        func_73729_b(0, 64, 80, 160, 32, 96);
        func_73729_b(0, 160, 16, 160, 16, 96);
        func_73729_b(-16, 64, 176, 160, 16, 96);
        GL11.glRotated(180.0D, 0.0D, 1.0D, 0.0D);
        func_73729_b(-32, 160, 16, 160, 16, 96);
        func_73729_b(-48, 64, 176, 160, 16, 96);
        GL11.glPopMatrix();
      }
    Вот метод, успешно спёртый из клиента @alexandrage и рисующий скин в гл. меню. Вам осталось его всего лишь деобфусцировать.
     
  11. LORD_09_RUS

    LORD_09_RUS Активный участник Пользователь Заблокирован

    Баллы:
    76
    Имя в Minecraft:
    Edward007
    Красиво !!! Ваще супер !!!
    Но вот-бы на 1.5.2 вот так :)
     
  12. Автор темы
    Starr

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

    Баллы:
    98
    Попробую сделать... если конечно @alexandrage разрешит. ;)
    Там почти различий нет. Логически подумать просто нужно.
     
  13. NikaMuller

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

    Баллы:
    68
    Имя в Minecraft:
    NikaMuller
    Последнее редактирование: 13 окт 2014
  14. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Да юзайте если нужно, мне не жалко. Но учтите, что это робит только под моим fix skins 1.7.10 и клиентом 1.6.4.
    Только вы это не скомбилите там srg names
    Вот чистый код для форже градле

    Код:
        void SkinRender2D()
        {
            ResourceLocation resourcelocation = AbstractClientPlayer.locationStevePng;
            resourcelocation = AbstractClientPlayer.getLocationSkull(Minecraft.getMinecraft().getSession().getUsername());
            AbstractClientPlayer.getDownloadImageSkin(resourcelocation, Minecraft.getMinecraft().getSession().getUsername());
            this.mc.getTextureManager().bindTexture(resourcelocation);
            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0f);
            GL11.glPushMatrix();
            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0f);
            GL11.glTranslated(this.width / 2 - 16 / 2, 10, 1);
            GL11.glScaled(0.5, 0.25, 1.0);
            GL11.glEnable(GL11.GL_ALPHA_TEST);
            GL11.glDisable(GL11.GL_CULL_FACE);
            this.drawTexturedModalRect(0, 0, 32, 64, 32, 64);
            this.drawTexturedModalRect(0, 0, 160, 64, 32, 64);
            this.drawTexturedModalRect(0, 64, 80, 160, 32, 96);
            this.drawTexturedModalRect(0, 160, 16, 160, 16, 96);
            this.drawTexturedModalRect(-16, 64, 176, 160, 16, 96);
            GL11.glRotated(180, 0, 1, 0);
            this.drawTexturedModalRect(-32, 160, 16, 160, 16, 96);
            this.drawTexturedModalRect(-48, 64, 176, 160, 16, 96);
            GL11.glPopMatrix();
        }
     
  15. Автор темы
    Starr

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

    Баллы:
    98
    А что именно изменено тут, чтобы это работало только с Вашим фиксом?
     
  16. gamerforEA

    gamerforEA Старожил Пользователь

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    При получении скина в параметры передаётся ник.
     
  17. Автор темы
    Starr

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

    Баллы:
    98
    У меня то самого 1.6.4/1.7.2, так что это по идее должно работать..
     
  18. Radviger

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

    Баллы:
    88
    Имя в Minecraft:
    Radviger
    Посмотри клиент Upsilon на squareland.ru, вот потом и поговорим ;)
    Надо кому AnimatedPlayer, портированный на 1.7.10?

    Я думал у меня глаз вытечет от этой заставки
     
  19. Blooderino

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

    Баллы:
    66
    Я немного не понял, где искать классы в forgeSrc: в самом Eclipse (хотя я не нашел) или же еще где-то? Делаю под Minecraft 1.7.10
     
  20. Автор темы
    Starr

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

    Баллы:
    98
    В библиотеках проекта, она называется forgeSrc-версия_forge.jar
     

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