Редактировать само меню не сложно
к примеру мы будем редактировать меню GuiGameOver.java, как видно по названию, это меню вылезает после смерти персонажа
GuiGameOver.java
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) braces deadcode
package net.minecraft.src;
import java.util.List;
import net.minecraft.client.Minecraft;
import org.lwjgl.opengl.GL11;
// Referenced classes of package net.minecraft.src:
// GuiScreen, GuiButton, EntityPlayerSP, GuiMainMenu
public class GuiGameOver extends GuiScreen
{
public GuiGameOver()
{
}
public void initGui()
{
controlList.clear();
controlList.add(new GuiButton(1, width / 2 - 100, height / 4 + 72, "Respawn"));
controlList.add(new GuiButton(2, width / 2 - 100, height / 4 + 96, "Title menu"));
if(mc.session == null)
{
((GuiButton)controlList.get(1)).enabled = false;
}
}
protected void keyTyped(char c, int i)
{
}
protected void actionPerformed(GuiButton guibutton)
{
if(guibutton.id != 0);
if(guibutton.id == 1)
{
mc.thePlayer.respawnPlayer();
mc.displayGuiScreen(null);
}
if(guibutton.id == 2)
{
mc.changeWorld1(null);
mc.displayGuiScreen(new GuiMainMenu());
}
}
public void drawScreen(int i, int j, float f)
{
drawGradientRect(0, 0, width, height, 0x60500000, 0xa0803030);
GL11.glPushMatrix();
GL11.glScalef(2.0F, 2.0F, 2.0F);
drawCenteredString(fontRenderer, "Game over!", width / 2 / 2, 30, 0xffffff);
GL11.glPopMatrix();
drawCenteredString(fontRenderer, (new StringBuilder()).append("Score: &e").append(mc.thePlayer.getScore()).toString(), width / 2, 100, 0xffffff);
super.drawScreen(i, j, f);
}
public boolean doesGuiPauseGame()
{
return false;
}
}
Рассмотрим эту часть кода
public void initGui()
{
controlList.clear();
controlList.add(new GuiButton(1, width / 2 - 100, height / 4 + 72, "Respawn"));
controlList.add(new GuiButton(2, width / 2 - 100, height / 4 + 96, "Title menu"));
if(mc.session == null)
{
((GuiButton)controlList.get(1)).enabled = false;
}
}
В ней идет отрисовка кнопок
controlList.add(new GuiButton(1, width / 2 - 100, height / 4 + 72, "Respawn"));
controlList.add - добавление нового элемента меню
new GuiButton - сдесь задается сам контроллер, как сделать свой, я расскажу чуть позже
(1, width / 2 - 100, height / 4 + 72, "Respawn") - первый параметр, отвечает за идентификатор, для чего он,расскажу чуть позже, второй положение по ширине, третий,положение по высоте, четвертый название
Рассмотрим следущую часть кода
protected void actionPerformed(GuiButton guibutton)
{
if(guibutton.id != 0);
if(guibutton.id == 1)
{
mc.thePlayer.respawnPlayer();
mc.displayGuiScreen(null);
}
if(guibutton.id == 2)
{
mc.changeWorld1(null);
mc.displayGuiScreen(new GuiMainMenu());
}
}
if(guibutton.id == 1) - проверка нажата ли кнопка
{
mc.thePlayer.respawnPlayer();
mc.displayGuiScreen(null);
}
Действия после нажатия кнопки.
Рассмотрим третью часть кода
public void drawScreen(int i, int j, float f)
{
drawGradientRect(0, 0, width, height, 0x60500000, 0xa0803030);
GL11.glPushMatrix();
GL11.glScalef(2.0F, 2.0F, 2.0F);
drawCenteredString(fontRenderer, "Game over!", width / 2 / 2, 30, 0xffffff);
GL11.glPopMatrix();
drawCenteredString(fontRenderer, (new StringBuilder()).append("Score:&e").append
(mc.thePlayer.getScore()).toString(), width / 2, 100, 0xffffff);
super.drawScreen(i, j, f);
}
отрисовка красного экрана, надпись Game Ower
==================================================
Теперь сделаем свою кнопку, так как размер указывается в её коде, но можно его и переделать
Рассмотрим код кнопки
GuiButton.java
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) braces deadcode
package net.minecraft.src;
import net.minecraft.client.Minecraft;
import org.lwjgl.opengl.GL11;
// Referenced classes of package net.minecraft.src:
// Gui, RenderEngine
public class GuiButton extends Gui
{
public GuiButton(int i, int j, int k, String s)
{
this(i, j, k, 200, 20, s);
}
public GuiButton(int i, int j, int k, int l, int i1, String s)
{
width = 200;
height = 20;
enabled = true;
enabled2 = true;
id = i;
xPosition = j;
yPosition = k;
width = l;
height = i1;
displayString = s;
}
protected int getHoverState(boolean flag)
{
byte byte0 = 1;
if(!enabled)
{
byte0 = 0;
} else
if(flag)
{
byte0 = 2;
}
return byte0;
}
public void drawButton(Minecraft minecraft, int i, int j)
{
if(!enabled2)
{
return;
}
FontRenderer fontrenderer = minecraft.fontRenderer;
GL11.glBindTexture(3553 /*GL_TEXTURE_2D*/, minecraft.renderEngine.getTexture("/gui/gui.png"));
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
boolean flag = i >= xPosition && j >= yPosition && i < xPosition + width && j < yPosition + height;
int k = getHoverState(flag);
drawTexturedModalRect(xPosition, yPosition, 0, 46 + k * 20, width / 2, height);
drawTexturedModalRect(xPosition + width / 2, yPosition, 200 - width / 2, 46 + k * 20, width / 2, height);
mouseDragged(minecraft, i, j);
if(!enabled)
{
drawCenteredString(fontrenderer, displayString, xPosition + width / 2, yPosition + (height - 8) / 2, 0xffa0a0a0);
} else
if(flag)
{
drawCenteredString(fontrenderer, displayString, xPosition + width / 2, yPosition + (height - 8) / 2, 0xffffa0);
} else
{
drawCenteredString(fontrenderer, displayString, xPosition + width / 2, yPosition + (height - 8) / 2, 0xe0e0e0);
}
}
protected void mouseDragged(Minecraft minecraft, int i, int j)
{
}
public void mouseReleased(int i, int j)
{
}
public boolean mousePressed(Minecraft minecraft, int i, int j)
{
return enabled && i >= xPosition && j >= yPosition && i < xPosition + width && j < yPosition + height;
}
protected int width;
protected int height;
public int xPosition;
public int yPosition;
public String displayString;
public int id;
public boolean enabled;
public boolean enabled2;
}
public GuiButton(int i, int j, int k, int l, int i1, String s)
{
width = 200;
height = 20;
enabled = true;
enabled2 = true;
id = i;
xPosition = j;
yPosition = k;
width = l;
height = i1;
displayString = s;
}
GuiSmallButton.java
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) braces deadcode
package net.minecraft.src;
// Referenced classes of package net.minecraft.src:
// GuiButton, EnumOptions
public class GuiSmallButton extends GuiButton
{
public GuiSmallButton(int i, int j, int k, String s)
{
this(i, j, k, null, s);
}
public GuiSmallButton(int i, int j, int k, int l, int i1, String s)
{
super(i, j, k, l, i1, s);
enumOptions = null;
}
public GuiSmallButton(int i, int j, int k, EnumOptions enumoptions, String s)
{
super(i, j, k, 120, 20, s);
enumOptions = enumoptions;
}
public EnumOptions returnEnumOptions()
{
return enumOptions;
}
private final EnumOptions enumOptions;
}
Создадим файл с названием guibuttonmy.java
и впишем в него такой код
guibuttonmy.java
package net.minecraft.src;
public class guibuttonmy extends GuiButton
{
public guibuttonmy(int i, int j, int k, String s, int h, int w)
{
this(i, j, k, null, s, h, w);
}
public guibuttonmy(int i, int j, int k, int l, int i1, String s)
{
super(i, j, k, l, i1, s);
enumOptions = null;
}
public guibuttonmy(int i, int j, int k, EnumOptions enumoptions, String s, int h, int w)
{
super(i, j, k, h, w, s);
enumOptions = enumoptions;
}
public EnumOptions returnEnumOptions()
{
return enumOptions;
}
private final EnumOptions enumOptions;
}
и изменяем параметры параметры
public guibuttonmy(int i, int j, int k, String s, int h, int w)
{
this(i, j, k, null, s, h, w);
}
public guibuttonmy(int i, int j, int k, EnumOptions enumoptions, String s, int h, int w)
{
super(i, j, k, h, w, s);
enumOptions = enumoptions;
}
Все, кнопка готова, теперь добавим её в нашу менюшку
new menu
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) braces deadcode
package net.minecraft.src;
import java.util.List;
import net.minecraft.client.Minecraft;
import org.lwjgl.opengl.GL11;
// Referenced classes of package net.minecraft.src:
// GuiScreen, GuiButton, EntityPlayerSP, GuiMainMenu
public class GuiGameOver extends GuiScreen
{
public GuiGameOver()
{
}
public void initGui()
{
controlList.clear();
controlList.add(new GuiButton(1, width / 2 - 100, height / 4 + 72, "Respawn"));
controlList.add(new GuiButton(2, width / 2 - 100, height / 4 + 96, "Title menu"));
controlList.add(new guibuttonmy(3, width / 2 - 100, height / 4 + 120, "Title menu 2",120,20));
if(mc.session == null)
{
((GuiButton)controlList.get(1)).enabled = false;
}
}
protected void keyTyped(char c, int i)
{
}
protected void actionPerformed(GuiButton guibutton)
{
if(guibutton.id != 0);
if(guibutton.id == 1)
{
mc.thePlayer.respawnPlayer();
mc.displayGuiScreen(null);
}
if(guibutton.id == 2)
{
mc.changeWorld1(null);
mc.displayGuiScreen(new GuiMainMenu());
}
if(guibutton.id == 3)
{
mc.changeWorld1(null);
mc.displayGuiScreen(new GuiMainMenu());
}
}
public void drawScreen(int i, int j, float f)
{
drawGradientRect(0, 0, width, height, 0x60500000, 0xa0803030);
GL11.glPushMatrix();
GL11.glScalef(2.0F, 2.0F, 2.0F);
drawCenteredString(fontRenderer, "Game over!", width / 2 / 2, 30, 0xffffff);
GL11.glPopMatrix();
drawCenteredString(fontRenderer, (new StringBuilder()).append("Score: &e").append(mc.thePlayer.getScore()).toString(), width / 2, 100, 0xffffff);
super.drawScreen(i, j, f);
}
public boolean doesGuiPauseGame()
{
return false;
}
}
Результат
Удачи вам
В следующем уроке я расскажу как сделать свое меню