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

Туториал Делаем кнопки "Зайти на сервер", "Обновить" и отображение кол-ва игроков в гл. меню.

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

  1. Laco5t

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

    Баллы:
    61
    Имя в Minecraft:
    Lacost
    Как сделать задержку на кнопку ?
     
  2. DRXLOG

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

    Баллы:
    63
    Skype:
    kirukkiruk
    Имя в Minecraft:
    Drxlog
    1. Открываем класс net.minecraft.client.gui.GuiMultiplayer.
    2. В конец метода initGui() добавляем:
      Код:
      this.mc.displayGuiScreen(new GuiMainMenu());
    3. Создаём класс PingTask и добавляем в него:
      Код:
      package net.minecraft.client.gui;
      
      import java.util.concurrent.FutureTask;
      import java.util.concurrent.Callable;
      import net.minecraft.client.multiplayer.ServerData;
      import net.minecraft.client.network.ServerPinger;
      
      public class PingTask extends FutureTask<PingTask.AdvServerData>
      {
          private boolean isOnline = false;
          public PingTask(final String ip, final ServerPinger pinger)
          {
              super(new Callable<PingTask.AdvServerData>()
              {
                  @Override
                  public AdvServerData call()
                  {
                      AdvServerData data = new AdvServerData(ip);
                      try
                      {
                          pinger.ping(data);
                          data.isOnline = true;
                      }
                      catch (Exception e)
                      {
                          data.isOnline = false;
                      }
                      return data;
                  }
              });
          }
        
          public static class AdvServerData extends ServerData
          {
              public boolean isOnline;
              public AdvServerData(String ip)
              {
                  super("", ip, true);
              }
          }
      }
    4. Открываем класс net.minecraft.client.gui.GuiMainMenu.
    5. В самое начало ТЕЛА класса добавляем:
      Код:
          private static final String defText = "Зайти на сервер";
          private static final String disabledText = "Сервер выключен";
          private static final String pingingText = "Пингование сервера...";
          private static final String ip = "mc.hypixel.net:25565";
          private ServerPinger pinger = new ServerPinger();
          private PingTask pingTask;
          private GuiButton joinButton;
    6. В конец метода GuiMainMenu() добавляем:
      Код:
      FMLClientHandler.instance().setupServerList();
    7. В начало метода updateScreen() добавляем:
      Код:
              this.pinger.pingPendingNetworks();
              if (this.pingTask != null && this.pingTask.isDone())
              {
                  try
                  {
                      AdvServerData data = this.pingTask.get();
                      if (data.isOnline)
                      {
                          if (Strings.isNullOrEmpty(data.populationInfo)) this.joinButton.displayString = pingingText;
                          else
                          {
                              this.joinButton.displayString = defText + " [" + data.populationInfo + "§f]";
                              this.pingTask = null;
                          }
                      }
                      else this.joinButton.displayString = disabledText;
                  }
                  catch (Exception e)
                  {
                  }
              }
    8. После метода из пункта 7 добавляем:
      Код:
      public void onGuiClosed()
          {
              this.pinger.clearPendingNetworks();
          }
          
          private void ping()
          {
              if (this.pingTask != null && !this.pingTask.isCancelled()) this.pingTask.cancel(false);
              Thread t = new Thread(this.pingTask = new PingTask(ip, this.pinger));
              t.setDaemon(true);
              t.start();
              this.joinButton.displayString = pingingText;
          }
    9. В методе addSingleplayerMultiplayerButtons(int, int) заменяем:
      Код:
      this.buttonList.add(new GuiButton(2, this.width / 2 - 100, p_73969_1_ + p_73969_2_ * 1, I18n.format("menu.multiplayer", new Object[0])));
      на:
      Код:
      boolean needPing = this.joinButton == null;
      this.buttonList.add(this.joinButton = new GuiButton(2, this.width / 2 - 100, p_73969_1_ + p_73969_2_, needPing ? pingingText : this.joinButton.displayString));
      if (needPing) this.ping();
      GuiButton updateButton = new GuiButton(100, this.width / 2 + 102, p_73969_1_ + p_73969_2_, "Обновить");
      updateButton.width = 50;
      this.buttonList.add(updateButton);
    10. В начале метода actionPerformed(GuiButton) добавляем:
      Код:
      if (button.id == 100) this.ping();
    11. В методе из пункта 10 заменяем:
      Код:
      this.mc.displayGuiScreen(new GuiMultiplayer(this));
      на:
      Код:
      FMLClientHandler.instance().connectToServer(new GuiMultiplayer(this), new AdvServerData(ip));
    12. Вот [​IMG]
     
  3. SkillDie

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

    Баллы:
    76
    Крашит при запуске
     
  4. PsyhopatMC

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

    Баллы:
    78
    Автор если не затруднит поправь шапку.
    Есть вариант получше чем предложил ты.
    Вот эта строка
    FMLClientHandler.instance().connectToServer(new GuiMultiplayer(this), new AdvServerData(ip));
    открывает доп гуи, если человек не попал на сервер ему откроет меню выбора серверов.(А нам это не надо:D)
    рекомендую делать вот что
    this.mc.displayGuiScreen(new GuiConnecting(this, this.mc, new AdvServerData(ip)));
    все тоже самое но после безуспешного подключения, игрок попадет не в меню выбора сервера а в главное меню.
     
  5. Автор темы
    gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Именно на этот случай сделан второй пункт туториала. Я когда-то пробовал ваш варинт, но чем-то он мне не понравился (чем именно, уже не помню, всё же много времени прошло).
     
  6. PsyhopatMC

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

    Баллы:
    78
    Ну меня такой вариант устроил, полностью, работает все на ура.


    собственно я понял че к чему. Он выдает нулку при первом конекте. :D

    Можно решить вот так меняем это
    Код:
    FMLClientHandler.instance().connectToServer(new GuiMultiplayer(this), new AdvServerData(ip));
    На это
    Код:
    FMLClientHandler.instance().connectToServer(new GuiMainMenu(), new AdvServerData(ip));
     
    Последнее редактирование: 5 май 2017
  7. Nicklaus

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

    Баллы:
    66
    Имя в Minecraft:
    cnway
    кто сделает за деньги пишите
     
  8. Alexwin3

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

    Баллы:
    103
    Имя в Minecraft:
    Alexwin32
    Вопрос!
    Как поменять цвет 0/9000 ?
    А именно,количество игроков на сервере,сам слеш и максимальное кол-во слотов...
     
  9. Автор темы
    gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    1. Убираем цветовые коды из записи количества игроков.
    2. Делим запись на 2 строки по символу '/'.
    3. Меняем цвет так, как пожелаем.
     
  10. Alexwin3

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

    Баллы:
    103
    Имя в Minecraft:
    Alexwin32
    Спасибо!Думаю многим новичкам пригодится....Пример был бы кстати!
     
  11. Автор темы
    gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
  12. Alexwin3

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

    Баллы:
    103
    Имя в Minecraft:
    Alexwin32
    И еще вопрос!
    Я убрал кнопки выбора языка,теперь нужно сделать его по дефолту русским,и что бы он был в HD как на скрине!
    Вопрос: Как это риализовать?
    1-Изображение стороннего лаунчера...
    2-Лаунчер над которым я работаю...
    P.S. ascii.png Заменил на HD
    P.S.S В assets/minecraft/lang файл en_US.lang полностью русифицирован
     

    Вложения:

    • ef78664b52.jpg
      ef78664b52.jpg
      Размер файла:
      191,3 КБ
      Просмотров:
      61
    • bb51687571.jpg
      bb51687571.jpg
      Размер файла:
      150,5 КБ
      Просмотров:
      60
  13. Автор темы
    gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    С en_US шрифт никак не связан. Нужно или заменять Unicode шрифт, или патчить FontRenderer (это делает мой мод ClientFixer).
     
  14. VaNnOrus

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

    Баллы:
    123
    Омг... рукалицо.jpg

    Не знаю излечит ли клинический случай, но вот, стоит почитать и попытаться осознать:
    То, над чем тут ведется работа называется "клиент".
    Поди еще и комплексы игровых серверов обзываешь "лаунчерами"...
     
  15. VaNnOrus

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

    Баллы:
    123
    Тупизм тут только ты свой показываешь называя лаучером то, что лаунчером не является и даже не пытаясь понять, что клиент игры - это не лаунчер.
     
  16. SkillDie

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

    Баллы:
    76
    Не обращай внимания :D Со временем Никогда не поймет.
     
  17. SkillDie

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

    Баллы:
    76
    Не просто понимаешь, лаунчер это программа запуска игры. В нем ты вводишь данные для авторизации и т.д.
    А клиент это уже сама игра. В данном случае ты правишь не лаунчер а клиент. :)
     
  18. VaNnOrus

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

    Баллы:
    123
    Просто предельно возможный уровень так называемого проекта, который может быть сделан таким разработчиком, который не видит разницы между программой, которая запускает игру, и самой игрой - конечен и заранее известен. Обречен он, если угодно.
    Я понимаю, что все когда-то чему-то учатся, что-то начинают в первый раз, но не надо объективную критику, не суть в какой она была форме (просто одного фейспалма уже не хватает, когда называют клиент (а то и проект) лаунчером), воспринимать в штыки и начинать в ответ еще наезды какие-то устраивать. Нужно прочитать, погуглить, изучить матчасть и принять как данность то, что ты был не прав и, опционально, поблагодарить за ликбез. Что такое "ликбез" думаю не надо объяснять? Погугли таки, если что...
     
  19. SlenderMix

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

    Баллы:
    76
    Имя в Minecraft:
    HIDDEN
    @slenxermix
     
  20. Crazy_JluMoH

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

    Баллы:
    66
    Имя в Minecraft:
    CrazyJluMoH
    Кто может нормально обьяснить под майн 1.7.10? А то у меня есть ряд причин по которым я не могу сделать кнопочку :( 1. Я не понял 2. Я не понял
     

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