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

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

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

  1. Jonick

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

    Баллы:
    68
    Skype:
    jonick-9009
    Такого не может быть)
    Может быть с actionPerformed накосячил
     
  2. Хостинг MineCraft
    <
  3. Vanterkraft

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

    Баллы:
    88
    Skype:
    Deska_Sava
    Так и вышло, в id кнопки не изменил
     
  4. dirt34

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

    Баллы:
    143
    Skype:
    alucid2
    Имя в Minecraft:
    dirt34
    Ребята подскажите как правильно сделать панораму!!!
     
  5. Teror2

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

    Баллы:
    103
    Имя в Minecraft:
    Teror2
    Выйдет ли поставить задержку перед повторным отрытием настроек графики? http://prntscr.com/8c9lm6
     
  6. the0mega4

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

    Баллы:
    61
    Имя в Minecraft:
    the0mega4
    Привет не подскажешь как сделать чтобы таймер быль на кнопке возродится то есть после смерти быль бы таймер после которова можно была бы возродится
     
  7. Vanterkraft

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

    Баллы:
    88
    Skype:
    Deska_Sava
    В начало темы посмотри на "выключение кнопки" и в deathgui найди и измени кнопку.
     
  8. Vanterkraft

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

    Баллы:
    88
    Skype:
    Deska_Sava
    @Gammer , скины классов с ошибками + описание ошибок. Ты подключения делал(наводишь и смотришь что тебе предлагает эклипс)
     
  9. Laco5t

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

    Баллы:
    61
    Имя в Minecraft:
    Lacost
    Как сделать задержку на кнопку ?
     
  10. 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]
     
  11. SkillDie

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

    Баллы:
    76
    Skype:
    speedfor34
    Имя в Minecraft:
    BlackGamer99
    Крашит при запуске
     
  12. PsyhopatMC

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

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

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

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

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

    Баллы:
    78
    Skype:
    ilyxxxaa
    Имя в Minecraft:
    Psyhopat
    Ну меня такой вариант устроил, полностью, работает все на ура.[DOUBLEPOST=1493996657,1493971818][/DOUBLEPOST]

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

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

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