Laco5t
Активный участник
- Баллы
- 61
- Имя в Minecraft
- Lacost
Как сделать задержку на кнопку ?
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
this.mc.displayGuiScreen(new GuiMainMenu());
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);
}
}
}
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;
FMLClientHandler.instance().setupServerList();
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)
{
}
}
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;
}
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);
if (button.id == 100) this.ping();
this.mc.displayGuiScreen(new GuiMultiplayer(this));
FMLClientHandler.instance().connectToServer(new GuiMultiplayer(this), new AdvServerData(ip));
Крашит при запуске
- Открываем класс net.minecraft.client.gui.GuiMultiplayer.
- В конец метода initGui() добавляем:
Java:this.mc.displayGuiScreen(new GuiMainMenu());- Создаём класс PingTask и добавляем в него:
Java:public class PingTask extends FutureTask<PingTask.AdvServerData> { private boolean isOnline = false; public PingTask(final String ip, final OldServerPinger pinger) { super(new Callable<PingTask.AdvServerData>() { @Override public AdvServerData call() { AdvServerData data = new AdvServerData(ip); try { pinger.func_147224_a(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); } } }- Открываем класс net.minecraft.client.gui.GuiMainMenu.
- В самое начало ТЕЛА класса добавляем:
Java: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 OldServerPinger pinger = new OldServerPinger(); private PingTask pingTask; private GuiButton joinButton;- В конец метода GuiMainMenu() добавляем:
Java:FMLClientHandler.instance().setupServerList();- В начало метода updateScreen() добавляем:
Java:this.pinger.func_147223_a(); 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) { } }- После метода из пункта 7 добавляем:
Java:public void onGuiClosed() { this.pinger.func_147226_b(); } 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; }- В методе addSingleplayerMultiplayerButtons(int, int) заменяем:
на:Java:this.buttonList.add(new GuiButton(2, this.width / 2 - 100, p_73969_1_ + p_73969_2_ * 1, I18n.format("menu.multiplayer", new Object[0])));
Java: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);- В начале метода actionPerformed(GuiButton) добавляем:
Java:if (p_146284_1_.id == 100) this.ping();- В методе из пункта 10 заменяем:
на:Java:this.mc.displayGuiScreen(new GuiMultiplayer(this));
Java:FMLClientHandler.instance().connectToServer(new GuiMultiplayer(this), new AdvServerData(ip));
)Ну меня такой вариант устроил, полностью, работает все на ура.Именно на этот случай сделан второй пункт туториала. Я когда-то пробовал ваш варинт, но чем-то он мне не понравился (чем именно, уже не помню, всё же много времени прошло).

FMLClientHandler.instance().connectToServer(new GuiMultiplayer(this), new AdvServerData(ip));
FMLClientHandler.instance().connectToServer(new GuiMainMenu(), new AdvServerData(ip));
Вопрос!
Как поменять цвет 0/9000 ?
А именно,количество игроков на сервере,сам слеш и максимальное кол-во слотов...
Спасибо!Думаю многим новичкам пригодится....Пример был бы кстати!
- Убираем цветовые коды из записи количества игроков.
- Делим запись на 2 строки по символу '/'.
- Меняем цвет так, как пожелаем.
Ну с примером сейчас возиться не стану, но вот пара подсказок:Спасибо!Думаю многим новичкам пригодится....Пример был бы кстати!
И еще вопрос!Ну с примером сейчас возиться не стану, но вот пара подсказок:
С en_US шрифт никак не связан. Нужно или заменять Unicode шрифт, или патчить FontRenderer (это делает мой мод ClientFixer).И еще вопрос!
Я убрал кнопки выбора языка,теперь нужно сделать его по дефолту русским,и что бы он был в HD как на скрине!
Вопрос: Как это риализовать?
1-Изображение стороннего лаунчера...
2-Лаунчер над которым я работаю...
P.S. ascii.png Заменил на HD
P.S.S В assets/minecraft/lang файл en_US.lang полностью русифицирован
Омг... рукалицо.jpg1-Изображение стороннего лаунчера...
2-Лаунчер над которым я работаю...
То, над чем тут ведется работа называется "клиент".Лаунчер (англ. Launcher) — программа, предоставляющая пользователю возможность войти в свой аккаунт, а также загрузить и запустить клиент игры.
В чем собственно заключается суть твоего сообщения?
Я вроде как написал именно (конкретно про лаунчер,в нем изменяются сами классы (кнопки,расположение кнопок,связка авторизации через сайт,дизайн через xml файлы лаунчера)
Клиент я сам не трогал (Моды,конфиги к ним),они настроены корректно клиент (Лаунчер и модификации) + связаны с сервером.
Если есть какие либо претензии,то прошу писать мне в личку,а не показывать свой тупизм обращаясь ко мне!
Не обращай вниманияТупизм тут только ты свой показываешь называя лаучером то, что лаунчером не является и даже не пытаясь понять, что клиент игры - это не лаунчер.
Со временем Не просто понимаешь, лаунчер это программа запуска игры. В нем ты вводишь данные для авторизации и т.д.Я и не собирался понимать,мне это не к чему!самое главное понял тот человек который мне помог,и я сделал то что хотел и даже больше...Спасибо автору!
А хейтить,рофлить и прочее это ваша учесть!

Просто предельно возможный уровень так называемого проекта, который может быть сделан таким разработчиком, который не видит разницы между программой, которая запускает игру, и самой игрой - конечен и заранее известен. Обречен он, если угодно.Я и не собирался понимать,мне это не к чему!самое главное понял тот человек который мне помог,и я сделал то что хотел и даже больше...Спасибо автору!
А хейтить,рофлить и прочее это ваша учесть!
1. Я не понял 2. Я не понял