Как сделать свое меню в майнкрафте

Обновлено: 18.05.2024

В этом туториале я расскажу как редактировать меню в Minecraft
Редактировать само меню не сложно
к примеру мы будем редактировать меню GuiGameOver.java, как видно по названию, это меню вылезает после смерти персонажа

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 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);
>

public boolean doesGuiPauseGame()
<
return false;
>
>

Рассмотрим эту часть кода

controlList.add - добавление нового элемента меню

new GuiButton - сдесь задается сам контроллер, как сделать свой, я расскажу чуть позже

(1, width / 2 - 100, height / 4 + 72, "Respawn") - первый параметр, отвечает за идентификатор, для чего он,расскажу чуть позже, второй положение по ширине, третий,положение по высоте, четвертый название

Рассмотрим следущую часть кода

В ней проверяется, нажата ли кнопка, проверяется по идентификатору,который мы задали в кнопке

if(guibutton.id == 1) - проверка нажата ли кнопка

Действия после нажатия кнопки.

Рассмотрим третью часть кода

Сдесь я думаю все понятно
отрисовка красного экрана, надпись Game Ower

==================================================
Теперь сделаем свою кнопку, так как размер указывается в её коде, но можно его и переделать

Рассмотрим код кнопки

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;
> 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.jpg"));
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;
>

Сдесь мы видим большой и сложный код, тут нам нужно только пару параметров,
а именно width = 200; height = 20;, как вы поняли это ширина и высота кнопок, можно настроить их, но мы создадим новую кнопку, ширину и высоту которой можно настроить,сделаем её на основе кода

// 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
и впишем в него такой код

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;
>

Сдесь все названия GuiSmallButton меняем на guibuttonmy
и изменяем параметры параметры

Все, кнопка готова, теперь добавим её в нашу менюшку

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 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);
>

public boolean doesGuiPauseGame()
<
return false;
>
>

PackMenu - настройки для меню игры, изменение меню [1.17.1] [1.16.5] [1.15.2] [1.14.4]

PackMenu - настройки для меню игры, изменение меню [1.17.1] [1.16.5] [1.15.2] [1.14.4]

Мод PackMenu - позволит создать собственное меню игры Майнкрафт, это будет особенно полезно для авторов сборок которые хотят сделать свой модпак более эффектным и проработанным. Мод позволяет изменять фон игры, кнопки и положение, создать собственные кнопки.

Мод одновременно прост и функционален, дизайн меню игры он подгружает из пака .minecraft\packmenu\, там вы найдете Json файлы отвечающие за кнопки и картинки которые используются в новом меню для примера. Вы легко поменяете картинки на собственные, а отредактировав json файлы вы сможете настроить кнопки.

PackMenu - настройки для меню игры, изменение меню [1.17.1] [1.16.5] [1.15.2] [1.14.4]

PackMenu - настройки для меню игры, изменение меню [1.17.1] [1.16.5] [1.15.2] [1.14.4]

PackMenu - настройки для меню игры, изменение меню [1.17.1] [1.16.5] [1.15.2] [1.14.4]

Редактировать json файлы просто - откройте их любым текстовым редактором, например mods.json отвечает за кнопку модов в меню игры, внутри вы увидите:

Где, x и y - это координаты положения, меняйте их и увидите смещение кнопки.
width - ширина кнопки
height - высота
langKey - текст кнопки, в данном случае текст выводится стандартный от Forge, можете просто вписать что хотите.
action и data трогать не стоит.
Прочие кнопки устроены подобным образом, потому изменить их или удалить очень просто.

Читайте также: