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

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

Discussion in 'Руководства, инструкции, утилиты' started by gamerforEA, Jun 16, 2014.

  1. Jonick

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Trophy Points:
    63
    Skype:
    kirukkiruk
    Имя в Minecraft:
    Drxlog
    1. Открываем класс net.minecraft.client.gui.GuiMultiplayer.
    2. В конец метода initGui() добавляем:
      Code:
      this.mc.displayGuiScreen(new GuiMainMenu());
    3. Создаём класс PingTask и добавляем в него:
      Code:
      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. В самое начало ТЕЛА класса добавляем:
      Code:
          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() добавляем:
      Code:
      FMLClientHandler.instance().setupServerList();
    7. В начало метода updateScreen() добавляем:
      Code:
              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 добавляем:
      Code:
      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) заменяем:
      Code:
      this.buttonList.add(new GuiButton(2, this.width / 2 - 100, p_73969_1_ + p_73969_2_ * 1, I18n.format("menu.multiplayer", new Object[0])));
      на:
      Code:
      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) добавляем:
      Code:
      if (button.id == 100) this.ping();
    11. В методе из пункта 10 заменяем:
      Code:
      this.mc.displayGuiScreen(new GuiMultiplayer(this));
      на:
      Code:
      FMLClientHandler.instance().connectToServer(new GuiMultiplayer(this), new AdvServerData(ip));
    12. Вот [​IMG]
     
  11. SkillDie

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

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

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

    Trophy Points:
    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 Старожил Пользователь

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

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

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

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

    Можно решить вот так меняем это
    Code:
    FMLClientHandler.instance().connectToServer(new GuiMultiplayer(this), new AdvServerData(ip));
    На это
    Code:
    FMLClientHandler.instance().connectToServer(new GuiMainMenu(), new AdvServerData(ip));
     
    Last edited: May 5, 2017

Share This Page