- Баллы
- 88
- Имя в Minecraft
- EvilEnginer
Эта модификация совместима с Optifine и BetterFonts на версии 1.7.10, и с Optifine на версии 1.8 скриншоты в конце темы. 
Здравствуйте господа в этом гайде я вам расскажу как сделать красивые прозрачные кнопки как на скриншотах. Кнопки становятся такими в главном меню игры, паузы, выбора сервера, одиночной игры и в настройках. Цвет текста при наведении мыши на кнопку может быть абсолютно любым, а так же можно регулировать прозрачность кнопки до и после наведения мыши на неё и толщину границы.
Итак начнём:
Предисловие: Если вы не любите ванильный MCP, то можете использовать ForgeGradle
. Как ставить ForgeGradle я учить не буду - гугл научит.
Пункт I. Установка кодерпака (ванильная версия Minecraft).
1) Скачиваем Minecraft Coder Pack для Minecraft 1.7.10
2) Скачиваем Eclipse отсюда
3) Распаковываем скачанный архив c кодерпаком в любую папку запускаем скрипт decompile.bat
Перед запуском скрипта decompile.bat убедитесь что у вас скачан и установлен лицензионный minecraft в папку
C:\Users\[ваше имя пользователя Windows]\AppData\Roaming\.minecraft
В имени пользователя НЕ ДОЛЖНО быть русских букв.
4) Как декомпиляция завершится запускаем Eclipse, а в качестве рабочей области указываем папку Eclipse из архива с кодерпаком. Всё, кодер пак уставлен.
Пункт II. Кодинг.
a) Делаем кнопки прозрачными
1) В Eclipse в Proejct Explorer ищем пакет net.minecraft.client.gui из него открываем файл GuiButton.java
2) Едем вниз и видим метод public void drawButton. Заменяем этот метод целиком на этот
и сохраняем результат... Видим ошибку метод drawBorderedRect не определён.
3) Открываем файл Gui.java из этого же пакета после строки 16 вставляем следующий код
ошибки нет
запускаем нашу работу и любуемся результатом.
4) Поясняю как изменить цвет текста при наведении мыши на кнопку и прозрачность.
Блок Код (Text). Файл GuiButton.java. Коды цветов HTML
Рассмотрим случай - мышь наведена на кнопку.
Строка 15 из блока с кодом параметр 0x90FFFFFF - толщина границы. 0x90000000 - прозрачность.
Строка 16 параметр 0x00FF00 цвет текста в данном случае зелёный.
Если мышь не наведена на кнопку
То аналогично строки 20 и 21 отвечают за начальный вид кнопки
б) Двигаем кнопки влево и рисуем прямоугольник.
1) Для того, чтобы нарисовать прямоугольник с градиентом, ищем метод drawScreen в файле GuiMainMenu.java и вставляем после Tessellator var4 = Tessellator.instance код
2) Чтобы сделать расположение кнопок таким же как на скриншоте ищем метод addSingleplayerMultiplayerButtons в файле GuiMainMenu.java удаляем его и заменяем на этот:
Ищём код выше
this.buttonList.add(..."menu.options"...);
this.buttonList.add(..."menu.quit"...);
и заменяем его на этот
в) Делаем слайдер в опциях и в музыке красивым (fix oт gamerforEA):
1) Открываем GuiOptionsSlider.java из пакета net/minecraft/client/gui
2) Ищем this.drawTexturedModalRect этих строк ровно две в этом файле
3) Комментируем их и заменяем на эту:
4) Открываем GuiScreenOptionsSounds.java из пакета net/minecraft/client/gui
5) Ищем this.drawTexturedModalRect этих строк ровно две в этом файле
6) Комментируем их и заменяем на эту:
г) Фикс кнопки "блокировать сложность" от MrGiperCreeper
д) И напоследок...
Демонстрация работоспособности на лицензии на версии 1.7.10 с Minecraft Forge, Optifine, и Better Fonts и на версии 1.8 с Optifine.
Для того чтобы получилось так же как у меня используйте этот гайд от skoniks
Там всё по аналогии.
По поводу различных версий Майна. Для Vanilla например тут:
код может различаться лишь переменными, this.field_146128_h например. В свою очередь, код для Minecraft Forge одинаковый. Так как разрабочики Forge их деобусцировали заранее, во всех версиях кодерпаков дабы не путаться.
Собственно вот и всё. Прошу вас поставить мне лойс если этот гайд оказался для вас полезным
.
Здравствуйте господа в этом гайде я вам расскажу как сделать красивые прозрачные кнопки как на скриншотах. Кнопки становятся такими в главном меню игры, паузы, выбора сервера, одиночной игры и в настройках. Цвет текста при наведении мыши на кнопку может быть абсолютно любым, а так же можно регулировать прозрачность кнопки до и после наведения мыши на неё и толщину границы.
Итак начнём:
Предисловие: Если вы не любите ванильный MCP, то можете использовать ForgeGradle
Пункт I. Установка кодерпака (ванильная версия Minecraft).
1) Скачиваем Minecraft Coder Pack для Minecraft 1.7.10
2) Скачиваем Eclipse отсюда
3) Распаковываем скачанный архив c кодерпаком в любую папку запускаем скрипт decompile.bat
Перед запуском скрипта decompile.bat убедитесь что у вас скачан и установлен лицензионный minecraft в папку
C:\Users\[ваше имя пользователя Windows]\AppData\Roaming\.minecraft
В имени пользователя НЕ ДОЛЖНО быть русских букв.
4) Как декомпиляция завершится запускаем Eclipse, а в качестве рабочей области указываем папку Eclipse из архива с кодерпаком. Всё, кодер пак уставлен.
Пункт II. Кодинг.
a) Делаем кнопки прозрачными
1) В Eclipse в Proejct Explorer ищем пакет net.minecraft.client.gui из него открываем файл GuiButton.java
2) Едем вниз и видим метод public void drawButton. Заменяем этот метод целиком на этот
Код:
public void drawButton(Minecraft mc, int mouseX, int mouseY)
{
if (this.visible)
{
FontRenderer var4 = mc.fontRendererObj;
mc.getTextureManager().bindTexture(buttonTextures);
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
boolean flag = mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height; //Flag, tells if your mouse is hovering the button
int var5 = this.getHoverState(this.hovered);
GlStateManager.enableBlend();
GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
GlStateManager.blendFunc(770, 771);
if (flag) // Mouse hovering button
{
drawBorderedRect(this.xPosition, this.yPosition, this.xPosition + this.width, this.yPosition + this.height, 1, 0x90FFFFFF, 0x90000000); //Here 0x(some numbers and letters) Html color code - google it
this.drawCenteredString(var4, this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 8) / 2, 0x00FF00);
}
else //Mouse not hovering button
{
drawBorderedRect(this.xPosition, this.yPosition, this.xPosition + this.width, this.yPosition + this.height, 1, 0x90FFFFFF, 0x60000000);
drawCenteredString(var4, displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 8) / 2, 0xFFCCCC);
}
this.mouseDragged(mc, mouseX, mouseY);
}
}
Код:
public void drawButton(Minecraft mc, int mx, int my)
{
if (this.visible)
{
GL11.glColor4f(1F, 1F, 1F, 1F);
boolean changed = mx >= this.xPosition && my >= this.yPosition && mx < this.xPosition + this.width && my < this.yPosition + this.height;
GL11.glEnable(GL11.GL_BLEND);
OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, 1, 0);
int color = changed ? 0x90000000 : 0x60000000; // changed;not_changed
this.drawBorderedRect(this.xPosition, this.yPosition, this.xPosition + this.width, this.yPosition + this.height, 1, 0x90FFFFFF, color);
color = this.enabled ? (changed ? 0x00FF00 : 0xFFCCCC) : 0xFF0000; // changed;not_changed;not_enabled
this.drawCenteredString(mc.fontRenderer, this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 8) / 2, color);
this.mouseDragged(mc, mx, my);
}
}
Код:
public void drawButton(Minecraft mc, int mx, int my)
{
if (this.visible)
{
GL11.glColor4f(1F, 1F, 1F, 1F);
boolean changed = mx >= this.xPosition && my >= this.yPosition && mx < this.xPosition + this.width && my < this.yPosition + this.height;
GL11.glEnable(GL11.GL_BLEND);
OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, 1, 0);
int color = changed ? 0x90000000 : 0x60000000; // changed;not_changed
this.drawBorderedRect(this.xPosition, this.yPosition, this.xPosition + this.width, this.yPosition + this.height, 1, 0x90FFFFFF, color);
color = this.enabled ? (changed ? 0x00FF00 : 0xFFCCCC) : 0xFF0000; // changed;not_changed;not_enabled
this.drawCenteredString(mc.fontRenderer, this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 8) / 2, color);
this.mouseDragged(mc, mx, my);
}
}
3) Открываем файл Gui.java из этого же пакета после строки 16 вставляем следующий код
Код:
public void drawBorderedRect(int x, int y, int x1, int y1, int size, int borderC, int insideC)
{
drawRect(x + size, y + size, x1 - size, y1 - size, insideC);
drawRect(x + size, y + size, x1, y, borderC);
drawRect(x, y, x + size, y1 - 1, borderC);
drawRect(x1, y1 - 1, x1 - size, y + size, borderC);
drawRect(x, y1 - size, x1, y1, borderC);
}
запускаем нашу работу и любуемся результатом.4) Поясняю как изменить цвет текста при наведении мыши на кнопку и прозрачность.
Блок Код (Text). Файл GuiButton.java. Коды цветов HTML
Рассмотрим случай - мышь наведена на кнопку.
Строка 15 из блока с кодом параметр 0x90FFFFFF - толщина границы. 0x90000000 - прозрачность.
Строка 16 параметр 0x00FF00 цвет текста в данном случае зелёный.
Если мышь не наведена на кнопку
То аналогично строки 20 и 21 отвечают за начальный вид кнопки
б) Двигаем кнопки влево и рисуем прямоугольник.
1) Для того, чтобы нарисовать прямоугольник с градиентом, ищем метод drawScreen в файле GuiMainMenu.java и вставляем после Tessellator var4 = Tessellator.instance код
Код:
drawRect(0, 1000, 155, 0, Integer.MIN_VALUE);
this.drawGradientRect(0, 0, this.width, this.height, -2130706433, 16777215);
this.drawGradientRect(0, 0, this.width, this.height, 0, Integer.MIN_VALUE);
2) Чтобы сделать расположение кнопок таким же как на скриншоте ищем метод addSingleplayerMultiplayerButtons в файле GuiMainMenu.java удаляем его и заменяем на этот:
Код:
private void addSingleplayerMultiplayerButtons(int p_73969_1_, int p_73969_2_)
{
this.buttonList.add(new GuiButton(1, this.width / - 200 + 15, p_73969_1_ - 30, 130, 20, I18n.format("menu.singleplayer", new Object[0])));
this.buttonList.add(new GuiButton(2, this.width / -200 + 15, p_73969_1_ - 5 , 130, 20, I18n.format("menu.multiplayer", new Object[0])));
this.buttonList.add(this.field_175372_K = new GuiButton(14, this.width / - 200 + 15, p_73969_1_ + 20, 130, 20, I18n.format("menu.online", new Object[0])));
}
Код:
private void addSingleplayerMultiplayerButtons(int var3, int p_73969_2_)
{
this.buttonList.add(new GuiButton(1, this.width / - 200 + 15, var3 - 30, 130, 20, I18n.format("menu.singleplayer", new Object[0])));
this.buttonList.add(new GuiButton(2, this.width / -200 + 15, var3 - 5 , 130, 20, I18n.format("menu.multiplayer", new Object[0])));
this.buttonList.add(new GuiButton(6, this.width / - 200 + 15, var3 + 20, 130, 20, I18n.format("Mods", new Object[0])));
}
this.buttonList.add(..."menu.options"...);
this.buttonList.add(..."menu.quit"...);
и заменяем его на этот
Код:
this.buttonList.add(new GuiButton(0, this.width / - 200 + 15, var3 + 45, 130, 20, I18n.format("menu.options", new Object[0])));
this.buttonList.add(new GuiButton(4, this.width / - 200 + 15, var3 + 70, 130, 20, I18n.format("menu.quit", new Object[0])));
Код:
this.buttonList.add(new GuiButton(0, this.width / -200 + 15, i + 45, 130, 20, I18n.format("menu.options", new Object[0])));
this.buttonList.add(new GuiButton(4, this.width / -200 + 15, i + 70, 130, 20, I18n.format("menu.quit", new Object[0])));
в) Делаем слайдер в опциях и в музыке красивым (fix oт gamerforEA):
1) Открываем GuiOptionsSlider.java из пакета net/minecraft/client/gui
2) Ищем this.drawTexturedModalRect этих строк ровно две в этом файле
3) Комментируем их и заменяем на эту:
Код:
this.drawBorderedRect(this.xPosition + (int)(this.sliderValue * (float)(this.width - 8)), this.yPosition, this.xPosition + (int)(this.sliderValue * (float)(this.width - 8)) + 8, this.yPosition + this.height, 1, 0x90FFFFFF, 0x90000000);
Код:
this.drawBorderedRect(this.xPosition + (int)(this.field_146156_o * (float)(this.width - 8)), this.yPosition, this.xPosition + (int)(this.field_146156_o * (float)(this.width - 8)) + 8, this.yPosition + this.height, 1, 0x90FFFFFF, 0x90000000);
5) Ищем this.drawTexturedModalRect этих строк ровно две в этом файле
6) Комментируем их и заменяем на эту:
Код:
this.drawBorderedRect(this.xPosition + (int)(this.field_146156_o * (float)(this.width - 8)), this.yPosition, this.xPosition + (int)(this.field_146156_o * (float)(this.width - 8)) + 8, this.yPosition + this.height, 1, 0x90FFFFFF, 0x90000000);
Код:
this.drawBorderedRect(this.xPosition + (int)(this.field_146156_o * (float)(this.width - 8)), this.yPosition, this.xPosition + (int)(this.field_146156_o * (float)(this.width - 8)) + 8, this.yPosition + this.height, 1, 0x90FFFFFF, 0x90000000);
г) Фикс кнопки "блокировать сложность" от MrGiperCreeper
д) И напоследок...
Демонстрация работоспособности на лицензии на версии 1.7.10 с Minecraft Forge, Optifine, и Better Fonts и на версии 1.8 с Optifine.
Для того чтобы получилось так же как у меня используйте этот гайд от skoniks
Там всё по аналогии.
По поводу различных версий Майна. Для Vanilla например тут:
Код:
if (flag) // Mouse hovering button
{
drawBorderedRect(this.field_146128_h, this.field_146129_i, this.field_146128_h + this.field_146120_f, this.field_146129_i + this.field_146121_g, 1, 0x90FFFFFF, 0x90000000); //Here 0x(some numbers and letters) Html color code - google it
this.drawCenteredString(var4, this.displayString, this.field_146128_h + this.field_146120_f / 2, this.field_146129_i + (this.field_146121_g - 8) / 2, 0x00FF00);
}
else //Mouse not hovering button
{
drawBorderedRect(this.field_146128_h, this.field_146129_i, this.field_146128_h + this.field_146120_f, this.field_146129_i + this.field_146121_g, 1, 0x90FFFFFF, 0x60000000);
drawCenteredString(var4, displayString, this.field_146128_h + this.field_146120_f / 2, this.field_146129_i + (this.field_146121_g - 8) / 2, 0xFFCCCC);
}
this.mouseDragged(mc, mx, my);
Собственно вот и всё. Прошу вас поставить мне лойс если этот гайд оказался для вас полезным
.
Последнее редактирование:
