Войти или зарегистрироваться

Мод [1.7.10] Заходим на сервер по клику на кнопку "Мультиплеер"

Alex2772

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Alex2772
Скринщот_1.png
Отличная фишка для серверов с одним сервером на один клиент. Игроки могут узнать онлайн вашего сервера, не заходя в меню выбора сервера (которого нет :creeper:)
Плюхи:
  • Нет привязки к servers.dat
  • Русифицированные + кастомные сплешы ("Happy birthday, Notch!" -> "С Днём рождения, Notch!")
  • Можно жёстко задать текст сплеша вместо "олсо трай террария", "крипер из а спай" и т.д.
  • Вместо кнопки "Мультиплеер" будет показываться количество игроков на сервере
  • Полностью изменяемые тексты для меню, а также изменяемые цвета индикатора онлайна
  • Вместо кнопки "Minecraft Realms" - "Наш сайт"
  • У форджа отпадает желание добавлять свою информацию (но лайтлоадер все равно рисует свою курицу справа)
UPD #1:
  • Фикс бага с клиентами с Forge
  • Обучил Minecraft этикету, теперь он здоровается в сплеше (если надо)
  • Автообновление онлайна (интервал задаётся в bee.class, по умолчанию 10 сек.)
UPD #2:
  • Теперь можно задать текст для кнопки "Зайти на сервер" во время обновления. Укажите none, чтобы значение индикатора онлайна обновлялось "на лету"
  • Можно добавить ещё одну кнопку (для форума). Укажите none, чтобы она не появлялась.
Настройки
Изменять настройки с помощью InClassTranslator
Ссылки для скачивания находятся внизу поста.
Открываем и смотрим:
Скринщот_3.png
  1. Текст слева - текст слева внизу (где был "Minecraft 1.7.10")
  2. Текст справа - текст справа внизу (где был копирайт)
  3. Кастом сплеш - сплеш (если указать helloPlayer - напишет "Привет, %имя%!")
  4. §aНаш сайт - кнопка "Наш сайт"
  5. Дальше идут кастомные сплеши -_-
  6. §7Зайти на сервер - мало ли, не загрузилось
  7. SuperServer - можете не изменять (указывался в качестве параметра для экземпляра класса ServerData)
Листаем дальше:
Скринщот_4.png
  1. 192.168.1.62 - IP сервера
  2. 25555 - порт сервера
  3. http://mysuperproject.ru - сайт сервера (укажите none - кнопка не появится)
  4. §a - цвет цифр у индикатора онлайна
  5. §2 - цвет разделителя (слеша) у индикатора онлайна
Новые значения:
  1. http://forum.mysuperproject.ru/ -ссылка для дополнительной кнопки (укажите none - кнопка не появится)
  2. §7Обновление... - значение для кнопки захода на сервер во время обновления (укажите none, чтобы оставался индикатор во время обновление онлайна "на лету")
  3. §1Форум - текст для дополнительной кнопки
После настройки закидываем в главный джарник Minecraft'а и радуемся :nerd:


Объяснять, как декомпилировать Minecraft я не буду, ибо в интернете тысячи гайдов по этому поводу. Я расскажу как сделать заход на сервер по клику (если вы не хотите использовать чужие классы).
  1. Для начала откроем класс net.minecraft.client.gui.GuiMainMenu
  2. id кнопки "Мультиплеер" - 2 (в Minecraft 1.7.10), значит ищем условие if (p_146284_1_.id == 2) в методе actionPerformed().
  3. Мы видим, что вызывается метод this.mc.displayGuiScreen, и в качестве параметра GuiScreen указывается экземпляр класса GuiMultiplayer.
  4. Мы меняем с new GuiMultiplayer() на new GuiConnecting(). Если ругается (подчёркивает) GuiConnecting(), просто наведите на него мышкой, появится контекстное меню и выберите Add import.
  5. В параметрах GuiConnecting() укажите:
    1. this
    2. this.mc
    3. new ServerData(). Если ругается, проделайте тоже самое, что и с GuiConnecting().
  6. new ServerData() - это экземпляр класса ServerData, который будет хранить данные для подключения к серверу. В его параметрах укажите:
    1. "Название сервера"
    2. "IP_СЕРВЕРА:ПОРТ"
  7. Компилируем Minecraft и любуемся на своё творение..)
Как надо:
Код:
this.mc.displayGuiScreen(new GuiConnecting(this, this.mc, new ServerData("SuperServer", "localhost:25565")));
Как не надо :creeper::
Код:
this.mc.displayGuiScreen(new подключитсяКСерву(new Сервер(айпи: localhost, порт: 25565)));
Ничего сложного :rolleyes:
//Если у Вас не получается, извините, юзайте готовые классы, я для кого компилировал?)
Ту-Ду:
  1. Добавить возможность добавлять ещё одну кнопку (для форума)
  2. Чтобы было на сплеше написано " Привет, %ник%!"
ЗЫ: Могут появится проблемы с улучшенными гуи и прочими творениями зарубежных программистов. Лучше делайте что-то своё, чтобы ваш проект стал уникальным. Установить, например, BetterGUI может любой школьник, а вот "сделать что-то своё", или хотя-бы делать на чьей-то основе (для чего я и выкладываю сурцы своих работ) - это уже другое дело. Не злоупотребляйте донатом, люди не любят, чтобы везде висело "> Донат <", "Донат услуги - хттп://суперпроект.ру/донат" и тому подобные вещи. Не продавайте админки, модерки - это в целом ухудшит представление о вашем проекте, если вы даёте управлять сервером за деньги. Люди не будут донатить и вообще играть на таких серверах. На качественно сделанных серверах люди сами начнут донатить, а не делать это только благодаря надписи "данат эта харашо данатте пажалуста на нащих серверах эта помащ нам таким образам ви падержываите ващ любимый сирвир) > данат < "

Хост лёг, осталось только 1.7.10: http://rubukkit.org/threads/1-6-4-1...-knopku-multipleer.105390/page-7#post-1380380
Установка:
  1. Распакуйте все файлы в любую папку;
  2. Измените, как Вам надо, bee.class/blt.class;
  3. Залейте с заменой все классы в главный джарник Minecraft
//Если я создал тему не в том разделе, переносите куда хотите.
 
Последнее редактирование:
А что мешает несколько кнопок сделать? Я так до 4х помещал). Еще была идея с выпадающим боксом запилить.
 
Можно добавить кнопку для форума. Сурцы есть, ручки есть, ну и знания жабы тоже есть..)
А с выпадающим боксом тоже идея неплохая. Но мне кажется выпадающий бокс делать если серверов больше 3-х, а так разделить плоскость на 2 части и засунуть туда кнопки, типа Hi-Tech #1 */* ; Hi-Tech #2 */*. Но у меня хайтеч один, мне это не надо) :rolleyes:
 
было бы неплохо сделать авто-обновление онлайна
 
Прикручу в следующем обновлении. Хотя, что уж там дописывать? Создаём новый поток и туда вставлем апдейтор инфы о сервере и заморозку (на 20 секунд сойдёт). А сейчас разбираюсь со скинами в Minecraft 1.7.10 на лаунчере от @alexandrage. Чёт не пашет -_-
 
на 1.6.4 есть?
 
Пока нет. Завтра сделаю, если время будет..)
В связи с проблемами на Minecraft 1.7.10 в связке с Forge заходит только со второго раза. Когда делал подобный класс для своего проекта (тогда он был на 1.6.4) такой проблемы не было даже в связке с Forge.
 
Попробую обновится, если получится напишу в шапку
 
если можете, добавьте пожалуйста автообновление онлайна, или напишите код какой добавить..
Обнову запилю, код обновления каждые пять сек залью в шапку.
@RedFoo_17, скиньте свои либы авторизации. Может, в них проблема? :) Или вы используйте либы от Сашка?
 
Alex2772, а когда ты сделаешь 1.6.4?
 
Хочу профиксить баг с заходом на сервер с Forge, на 1.6.4 такого бага не было
 
---- Minecraft Crash Report ----
// Why did you do that?

Time: 22.06.15 15:21
Description: Initializing game

java.lang.NumberFormatException: For input string: "2..:: "
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.valueOf(Unknown Source)
at net.minecraft.client.gui.GuiMainMenu.getOnlineMaxOnline(GuiMainMenu.java:633)
at net.minecraft.client.gui.GuiMainMenu.func_73969_a(GuiMainMenu.java:269)
at net.minecraft.client.gui.GuiMainMenu.func_73866_w_(GuiMainMenu.java:242)
at net.minecraft.client.gui.GuiScreen.func_146280_a(GuiScreen.java:255)
at net.minecraft.client.Minecraft.func_147108_a(Minecraft.java:808)
at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:562)
at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:878)
at net.minecraft.client.main.Main.main(SourceFile:148)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Stacktrace:
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.valueOf(Unknown Source)
at net.minecraft.client.gui.GuiMainMenu.getOnlineMaxOnline(GuiMainMenu.java:633)
at net.minecraft.client.gui.GuiMainMenu.func_73969_a(GuiMainMenu.java:269)
at net.minecraft.client.gui.GuiMainMenu.func_73866_w_(GuiMainMenu.java:242)
at net.minecraft.client.gui.GuiScreen.func_146280_a(GuiScreen.java:255)
at net.minecraft.client.Minecraft.func_147108_a(Minecraft.java:808)
at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:562)

-- Initialization --
Details:
Stacktrace:
at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:878)
at net.minecraft.client.main.Main.main(SourceFile:148)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)

я как понял, данный класс не поддерживает спец.символы
upload_2015-6-22_21-52-51.png
 
Он их поддерживает, но некоторые значения (например порт сервера) специально сделаны String'ами (да бы ICT их увидел), а в некоторых участках кода они преобразуются в целые числа.
Над вторым багом я работаю, щас спину фикс для клиентов с форджем.
Если человек что-то фиксит, то он рак?)
Код:
if (user.getAction()=="fixes") user.setRank("Рак");
Я правильно понимаю? :)
 
Он их поддерживает, но некоторые значения (например порт сервера) специально сделаны String'ами (да бы ICT их увидел), а в некоторых участках кода они преобразуются в целые числа.
Над вторым багом я работаю, щас спину фикс для клиентов с форджем.

Если человек что-то фиксит, то он рак?)
Код:
if (user.getAction()=="fixes") user.setRank("Рак");
Я правильно понимаю? :)
В курсе, что в новых версиях форжа новый метод?
 
Назад
Верх