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

Туториал [FDW]. Убираем Копирайты Forge, Делаем кнопку на свой сайт! 1.7.2/1.7.10|+

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

?

Ты печенька?

  1. Да я печенька...

    105 голосов
    39,8%
  2. Нет! Я хлебушек!

    76 голосов
    28,8%
  3. Идите вы! Я бублик!

    83 голосов
    31,4%
  1. BoosterYT

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

    Баллы:
    66
    Skype:
    skype24.ru
    Не подскажите как изменять GuiMultiplayer , а то изменяю одно кнопку и куча ошибок
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    skoniks

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

    Баллы:
    78
    Skype:
    skolya16
    Имя в Minecraft:
    skoniks
    Подробнее.
     
  4. Volt_:-()

    Volt_:-() Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    Volt
    Я не нашёл GuiIngameForge. В пакете net.minecraftforge.client.gui было толькоForgeGuiFactory.
    Можешь дать полный путь?[DOUBLEPOST=1436091588,1436091533][/DOUBLEPOST]P.S Starr
     
  5. Starr

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

    Баллы:
    98
    Имя в Minecraft:
    _Starr_
    net.minecraftforge.client
    Пакет GUI не нужен.
     
  6. BoosterYT

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

    Баллы:
    66
    Skype:
    skype24.ru
    Убираю одну кнопку(//) и захожу в майн , нажимаю мультиплеер и вылетает
     
  7. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
    Краш-репорт прикрепить?
     
  8. Volt_:-()

    Volt_:-() Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    Volt
    Спасибо Starr. У меня есть ещё один вопрос :)
    Как вывести сообщение в чат, например при нажатии правой копкой мыши по блоку???
    P.S Мне нужно вывести сообщение, а про ПКМ сам разберусь.
     
  9. Starr

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

    Баллы:
    98
    Имя в Minecraft:
    _Starr_
    А как ты хочешь выводить? Плагин/клиент?
     
  10. Volt_:-()

    Volt_:-() Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    Volt
    Клиет. :)[DOUBLEPOST=1436191888,1436190363][/DOUBLEPOST]Странно...СТОЛЬКО моддеров и ни одного тутора про создание моба.
    Так что... КТО ХОЧЕТ БЫТЬ ПЕРВЫМ!?
     
  11. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
    В общем, я столкнулся с проблемой обфуксации классов клиента. Ванильный MCP для обфуксации клиента с forge не подходит - у forge другие маппинги (улучшенные). Встаёт вопрос: Как установить forge на MCP?
    Кто-нибудь пробовал редактировать net.minecraft.client.Minecraft? Наверняка должны были столкнуться с этой проблемой...

    @gamerforEA
     
  12. Volt_:-()

    Volt_:-() Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    Volt
    Ну? А как вывести сообщение в чат?
     
  13. Blooderino

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

    Баллы:
    66
    Ребят, кто знает - прошу, отзовитесь.
    В общем вопрос: как передвинуть лого Minecraft (естестно, в клиенте)? Весь GuiMainMenu.java облазил - не нашел. Подозреваю, что редактируется это в друг месте (хоть и вряд ли).
    P.S.: Работаю на 1.7.10
     
  14. Volt_:-()

    Volt_:-() Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    Volt
    Привет. Я надеюсь ты имел в виду надпись "MINECRAFT". Чтобы его передвинуть нам нужен класс GuiMainMenu
    находим а нём строчки
    this.drawTexturedModalRect(k + 0, b0 + 0, 0, 0, 155, 44);
    this.drawTexturedModalRect(k + 155, b0 + 0, 0, 45, 155, 44);
    Первый this это "MINEC", а второй "RAFT". :)
    На пример если изменить "k + 0" и "k + 155" на "k + -50" "k + 105" надпись передвинется на лево.
     
  15. Blooderino

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

    Баллы:
    66
    Спасибо!
     
  16. Volt_:-()

    Volt_:-() Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    Volt
    К стате, если надо передвинуть мигющийся надпись типо "150% hiperbole!" надо редактировать вот эту строчку(529):
    this.drawCenteredString(this.fontRendererObj, this.splashText, 0, -8, -256);
    "0"- по X. "-8" - по Y.[DOUBLEPOST=1436280902,1436280740][/DOUBLEPOST]и "-256" - это яркость.
     
    Последнее редактирование: 7 июл 2015
  17. Blooderino

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

    Баллы:
    66
    Volt_:-(), про это я в курсе. Хотел задать еще вопрос: можно ли сделать так, чтобы при любом масштабировании интерфейса (от мелкого до крупного) в главном меню все сохранялось на уровне "Нормальный"? Я, как понял, нужно редактировать GuiMainMenu.java, а, точнее, блок (см. спойлер)
    public void drawScreen(int p_73863_1_, int p_73863_2_, float p_73863_3_)
    {
    GL11.glDisable(GL11.GL_ALPHA_TEST);
    this.renderSkybox(p_73863_1_, p_73863_2_, p_73863_3_);
    GL11.glEnable(GL11.GL_ALPHA_TEST);
    Tessellator tessellator = Tessellator.instance;
    short short1 = 274;
    int k = this.width / 2 - short1 / 2;
    byte b0 = 30;
    this.drawGradientRect(0, 0, this.width, this.height, -2130706433, 16777215);
    this.drawGradientRect(0, 0, this.width, this.height, 0, Integer.MIN_VALUE);
    this.mc.getTextureManager().bindTexture(minecraftTitleTextures);
    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    Но не могу понять, что именно...

    Или же есть вариант заблокировать кнопку изменени интерфейса (чтобы была черной, как некликабельная кнопка)
    P.S.: не могу понять, как коды вставлять на rubukkit'е вставлять =(
     
    Последнее редактирование: 8 июл 2015
  18. Volt_:-()

    Volt_:-() Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    Volt
    Если хочешь, можешь сделать кнопку изменения интерфейса неизменяемым т.е. что бы всегда было так(Normal).
    Для этого в классе GameSettings (находится в пакете net.minecraft.client.settings) нужно изменить IF:
    _____________________________________________
    if (p_74306_1_ == GameSettings.Options.GUI_SCALE)
    {
    this.guiScale = this.guiScale + p_74306_2_ & 3;
    }
    ______________________________________________
    НА:
    ______________________________________________
    if (p_74306_1_ == GameSettings.Options.GUI_SCALE)
    {
    this.guiScale = 2;//2 можно поменять, если не хочешь "Normal".Варианты в низу.
    }
    _______________________________________________
    Варианты: 0-auto, 1-small, 2-normal, 3-large[DOUBLEPOST=1436349503,1436349370][/DOUBLEPOST]P.S.: Я тоже не могу понять, как коды вставлять на rubukkit'е
     
  19. Blooderino

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

    Баллы:
    66
    Volt_:-(), спасибо за информацию!
    Слушай, я реализовал такую вещь:
    В общем, я решил добавить кнопку "Об авторах..." в главное меню (см. спойлер "рис. 1"), при нажатии на которую нас бы переносило в окно с инфой об разработчике.
    [​IMG]
    Что я сделал:
    1.) Создал новый класс GuiAboutGame (название роли не играет) в пакете net.minecraft.client.gui
    2.a) В GuiMainMenu создал кнопку "Об авторах..."
    Код:
    this.buttonList.add(new GuiButton(99, this.width / - 200 + 15, var3 + 55, 130, 20, I18n.format("menu.about", new Object[0])));
    2.b) Опять-таки в GuiMainMenu прописал, чтобы кнопка открывала все, что прописано в GuiAboutGame
    Код:
    if (p_146284_1_.id == 99)
      {
      this.mc.displayGuiScreen(new GuiAboutGame ());
    
    3.) В GuiAboutGame я скопировал все из класса GuiWinGame (хотелось красоты) и подредактировал, чтобы вся инфа бралась не из end.txt и credits.txt, а из about.txt
    Код:
    package net.minecraft.client.gui;
    
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    import net.minecraft.client.renderer.Tessellator;
    import net.minecraft.network.play.client.C16PacketClientStatus;
    import net.minecraft.util.EnumChatFormatting;
    import net.minecraft.util.ResourceLocation;
    import org.apache.commons.io.Charsets;
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    import org.lwjgl.opengl.GL11;
    
    @SideOnly(Side.CLIENT)
    public class GuiAboutGame extends GuiScreen
    {
      private static final Logger logger = LogManager.getLogger();
      private static final ResourceLocation field_146576_f = new ResourceLocation("textures/gui/title/minecraft.png");
      private static final ResourceLocation field_146577_g = new ResourceLocation("textures/misc/vignette.png");
      private int field_146581_h;
      private List field_146582_i;
      private int field_146579_r;
      private float field_146578_s = 0.5F;
      private static final String __OBFID = "CL_00000719";
    
      /**
      * Called from the main game loop to update the screen.
      */
      public void updateScreen()
      {
      ++this.field_146581_h;
      float f = (float)(this.field_146579_r + this.height + this.height + 24) / this.field_146578_s;
    
      if ((float)this.field_146581_h > f)
      {
      this.func_146574_g();
      }
      }
    
      /**
      * Fired when a key is typed. This is the equivalent of KeyListener.keyTyped(KeyEvent e).
      */
      protected void keyTyped(char p_73869_1_, int p_73869_2_)
      {
      if (p_73869_2_ == 1)
      {
      this.func_146574_g();
      }
      }
    
      private void func_146574_g()
      {
      this.mc.thePlayer.sendQueue.addToSendQueue(new C16PacketClientStatus(C16PacketClientStatus.EnumState.PERFORM_RESPAWN));
      this.mc.displayGuiScreen((GuiScreen)null);
      }
    
      /**
      * Returns true if this GUI should pause the game when it is displayed in single-player
      */
      public boolean doesGuiPauseGame()
      {
      return true;
      }
    
      /**
      * Adds the buttons (and other controls) to the screen in question.
      */
      public void initGui()
      {
      if (this.field_146582_i == null)
      {
      this.field_146582_i = new ArrayList();
    
      try
      {
      String s = "";
      String s1 = "" + EnumChatFormatting.WHITE + EnumChatFormatting.OBFUSCATED + EnumChatFormatting.GREEN + EnumChatFormatting.AQUA;
      short short1 = 274;
      BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(this.mc.getResourceManager().getResource(new ResourceLocation("texts/about.txt")).getInputStream(), Charsets.UTF_8));
      Random random = new Random(8124371L);
      int i;
    
      while ((s = bufferedreader.readLine()) != null)
      {
      String s2;
      String s3;
    
      for (s = s.replaceAll("PLAYERNAME", this.mc.getSession().getUsername()); s.contains(s1); s = s2 + EnumChatFormatting.WHITE + EnumChatFormatting.OBFUSCATED + "XXXXXXXX".substring(0, random.nextInt(4) + 3) + s3)
      {
      i = s.indexOf(s1);
      s2 = s.substring(0, i);
      s3 = s.substring(i + s1.length());
      }
    
      this.field_146582_i.addAll(this.mc.fontRenderer.listFormattedStringToWidth(s, short1));
      this.field_146582_i.add("");
      }
    
      for (i = 0; i < 8; ++i)
      {
      this.field_146582_i.add("");
      }
    
      this.field_146579_r = this.field_146582_i.size() * 12;
      }
      catch (Exception exception)
      {
      logger.error("Couldn\'t load credits", exception);
      }
      }
      }
    
      private void func_146575_b(int p_146575_1_, int p_146575_2_, float p_146575_3_)
      {
      Tessellator tessellator = Tessellator.instance;
      this.mc.getTextureManager().bindTexture(Gui.optionsBackground);
      tessellator.startDrawingQuads();
      tessellator.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F);
      int k = this.width;
      float f1 = 0.0F - ((float)this.field_146581_h + p_146575_3_) * 0.5F * this.field_146578_s;
      float f2 = (float)this.height - ((float)this.field_146581_h + p_146575_3_) * 0.5F * this.field_146578_s;
      float f3 = 0.015625F;
      float f4 = ((float)this.field_146581_h + p_146575_3_ - 0.0F) * 0.02F;
      float f5 = (float)(this.field_146579_r + this.height + this.height + 24) / this.field_146578_s;
      float f6 = (f5 - 20.0F - ((float)this.field_146581_h + p_146575_3_)) * 0.005F;
    
      if (f6 < f4)
      {
      f4 = f6;
      }
    
      if (f4 > 1.0F)
      {
      f4 = 1.0F;
      }
    
      f4 *= f4;
      f4 = f4 * 96.0F / 255.0F;
      tessellator.setColorOpaque_F(f4, f4, f4);
      tessellator.addVertexWithUV(0.0D, (double)this.height, (double)this.zLevel, 0.0D, (double)(f1 * f3));
      tessellator.addVertexWithUV((double)k, (double)this.height, (double)this.zLevel, (double)((float)k * f3), (double)(f1 * f3));
      tessellator.addVertexWithUV((double)k, 0.0D, (double)this.zLevel, (double)((float)k * f3), (double)(f2 * f3));
      tessellator.addVertexWithUV(0.0D, 0.0D, (double)this.zLevel, 0.0D, (double)(f2 * f3));
      tessellator.draw();
      }
    
      /**
      * Draws the screen and all the components in it.
      */
      public void drawScreen(int p_73863_1_, int p_73863_2_, float p_73863_3_)
      {
      this.func_146575_b(p_73863_1_, p_73863_2_, p_73863_3_);
      Tessellator tessellator = Tessellator.instance;
      short short1 = 274;
      int k = this.width / 2 - short1 / 2;
      int l = this.height + 50;
      float f1 = -((float)this.field_146581_h + p_73863_3_) * this.field_146578_s;
      GL11.glPushMatrix();
      GL11.glTranslatef(0.0F, f1, 0.0F);
      this.mc.getTextureManager().bindTexture(field_146576_f);
      GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
      this.drawTexturedModalRect(k, l, 0, 0, 155, 44);
      this.drawTexturedModalRect(k + 155, l, 0, 45, 155, 44);
      tessellator.setColorOpaque_I(16777215);
      int i1 = l + 200;
      int j1;
    
      for (j1 = 0; j1 < this.field_146582_i.size(); ++j1)
      {
      if (j1 == this.field_146582_i.size() - 1)
      {
      float f2 = (float)i1 + f1 - (float)(this.height / 2 - 6);
    
      if (f2 < 0.0F)
      {
      GL11.glTranslatef(0.0F, -f2, 0.0F);
      }
      }
    
      if ((float)i1 + f1 + 12.0F + 8.0F > 0.0F && (float)i1 + f1 < (float)this.height)
      {
      String s = (String)this.field_146582_i.get(j1);
    
      if (s.startsWith("[C]"))
      {
      this.fontRendererObj.drawStringWithShadow(s.substring(3), k + (short1 - this.fontRendererObj.getStringWidth(s.substring(3))) / 2, i1, 16777215);
      }
      else
      {
      this.fontRendererObj.fontRandom.setSeed((long)j1 * 4238972211L + (long)(this.field_146581_h / 4));
      this.fontRendererObj.drawStringWithShadow(s, k, i1, 16777215);
      }
      }
    
      i1 += 12;
      }
    
      GL11.glPopMatrix();
      this.mc.getTextureManager().bindTexture(field_146577_g);
      GL11.glEnable(GL11.GL_BLEND);
      GL11.glBlendFunc(GL11.GL_ZERO, GL11.GL_ONE_MINUS_SRC_COLOR);
      tessellator.startDrawingQuads();
      tessellator.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F);
      j1 = this.width;
      int k1 = this.height;
      tessellator.addVertexWithUV(0.0D, (double)k1, (double)this.zLevel, 0.0D, 1.0D);
      tessellator.addVertexWithUV((double)j1, (double)k1, (double)this.zLevel, 1.0D, 1.0D);
      tessellator.addVertexWithUV((double)j1, 0.0D, (double)this.zLevel, 1.0D, 0.0D);
      tessellator.addVertexWithUV(0.0D, 0.0D, (double)this.zLevel, 0.0D, 0.0D);
      tessellator.draw();
      GL11.glDisable(GL11.GL_BLEND);
      super.drawScreen(p_73863_1_, p_73863_2_, p_73863_3_);
      }
    }
    
    4.) Все работает (см. спойлер "рис. 2"), но при нажатии 'ESC' или после показа всего содержимого файла клиент пытается вернуть нас в игровой мир (что невозможно, т.к. мы зашли через меню в это окно) и, естественно, клиент крашится из-за ошибки.
    [​IMG]
    Вопрос: что нужно изменить, чтобы после этого окна мы выходили в главное меню игры, а не в несуществующий мир (как прописанно по дефолту)?
    P.S.: знаю, что кнопки "Настройки" и "Выйти из игры" улетели - это пофиксить несложно =)[DOUBLEPOST=1436360740,1436359021][/DOUBLEPOST]Решил проблему!
    Заменил следующий код:
    Код:
    private void func_146574_g()
      {
      this.mc.thePlayer.sendQueue.addToSendQueue(new C16PacketClientStatus(C16PacketClientStatus.EnumState.PERFORM_RESPAWN));
      this.mc.displayGuiScreen((GuiScreen)null);
      }
    На этот:
    Код:
    private void func_146574_g()
      {
      this.mc.displayGuiScreen(new GuiMainMenu ());
      }
    
     
  20. Volt_:-()

    Volt_:-() Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    Volt
    Молодец :)[DOUBLEPOST=1436361456,1436361248][/DOUBLEPOST]Зачем теме надо было передвинуть надпись "MINECRAFT" если на фото его вообще нет? (Ты удалил?).
     
  21. Blooderino

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

    Баллы:
    66
    Volt_:-(), отрисовку лого менял. Я сделал так, чтобы логотип считывался с одной строки, т.к. так легче его редактировать. Поэтому с дефолтным были проблемы, т.к. он коряво отображался. Меня немного это выбесило и я удалил оригинал =)
    Кстати, можно сделать так, чтобы английские сплэши, поэма о конце игры грузились с английским языком, а русские - с русским языком?
     

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