Туториал по кнопкам и прочему GUI (вопрос)

Версия Minecraft
1.12.2
Поднимать тему можно раз в сутки
Дайте ссылок на туториалы как делать GUI в майнкрафте, мне конкретно нужно сделать кнопку на экране при открытии чата, а при нажатии вылазит меню с кнопками и строками для ввода.
 

timaxa007

Модератор
5,831
409
672
и строками для ввода.
Такой не разу не видел урок. Подобное самому приходиться понимать.
GuiModelView2.java
Java:
@SideOnly(Side.CLIENT)
public class CreateAreaGui extends GuiScreen {

    private static final ResourceLocation texture = new ResourceLocation(TeleportationToArenasMod.MODID, "textures/gui/createArea.png");

    private static double sax, say, saz, sbx, sby, sbz;
    private static float pitchA, yawA, pitchB, yawB;
    private static int rax, ray, raz, rbx, rby, rbz;

    protected int xSize = 176;
    protected int ySize = 155;
    protected int guiLeft;
    protected int guiTop;

    final GuiTextField[] inputField = new GuiTextField[3*2+5*2];
    final char[] allow_char = new char[]{'0','1','2','3','4','5','6','7','8','9','.','-'};
    int actField = -1;

    @Override
    public void initGui() {
        guiLeft = (width - xSize) / 2;
        guiTop = (height - ySize) / 2;


        if (inputField[0] == null) {
            inputField[0] = new GuiTextField(fontRendererObj, width - 70, 14 * 2, 68, 12);
            inputField[0].setMaxStringLength(10);
            inputField[0].setText(String.valueOf(rax));
        } else
            inputField[0].xPosition = width - 70;

        if (inputField[1] == null) {
            inputField[1] = new GuiTextField(fontRendererObj, width - 70, 14 * 3, 68, 12);
            inputField[1].setMaxStringLength(10);
            inputField[1].setText(String.valueOf(ray));
        } else
            inputField[1].xPosition = width - 70;

        if (inputField[2] == null) {
            inputField[2] = new GuiTextField(fontRendererObj, width - 70, 14 * 4, 68, 12);
            inputField[2].setMaxStringLength(10);
            inputField[2].setText(String.valueOf(raz));
        } else
            inputField[2].xPosition = width - 70;


        if (inputField[3] == null) {
            inputField[3] = new GuiTextField(fontRendererObj, width - 70, 14 * 7, 68, 12);
            inputField[3].setMaxStringLength(10);
            inputField[3].setText(String.valueOf(rbx));
        } else
            inputField[3].xPosition = width - 70;

        if (inputField[4] == null) {
            inputField[4] = new GuiTextField(fontRendererObj, width - 70, 14 * 8, 68, 12);
            inputField[4].setMaxStringLength(10);
            inputField[4].setText(String.valueOf(rby));
        } else
            inputField[4].xPosition = width - 70;

        if (inputField[5] == null) {
            inputField[5] = new GuiTextField(fontRendererObj, width - 70, 14 * 9, 68, 12);
            inputField[5].setMaxStringLength(10);
            inputField[5].setText(String.valueOf(rbz));
        } else
            inputField[5].xPosition = width - 70;


        if (inputField[6] == null) {
            inputField[6] = new GuiTextField(fontRendererObj, 2, 14 * 2, 68, 12);
            inputField[6].setMaxStringLength(10);
            inputField[6].setText(String.valueOf(sax));
        } else
            inputField[6].xPosition = 2;

        if (inputField[7] == null) {
            inputField[7] = new GuiTextField(fontRendererObj, 2, 14 * 3, 68, 12);
            inputField[7].setMaxStringLength(10);
            inputField[7].setText(String.valueOf(say));
        } else
            inputField[7].xPosition = 2;

        if (inputField[8] == null) {
            inputField[8] = new GuiTextField(fontRendererObj, 2, 14 * 4, 68, 12);
            inputField[8].setMaxStringLength(10);
            inputField[8].setText(String.valueOf(saz));
        } else
            inputField[8].xPosition = 2;

        if (inputField[9] == null) {
            inputField[9] = new GuiTextField(fontRendererObj, 2, 14 * 5, 68, 12);
            inputField[9].setMaxStringLength(10);
            inputField[9].setText(String.valueOf(pitchA));
        } else
            inputField[9].xPosition = 2;

        if (inputField[10] == null) {
            inputField[10] = new GuiTextField(fontRendererObj, 2, 14 * 6, 68, 12);
            inputField[10].setMaxStringLength(10);
            inputField[10].setText(String.valueOf(yawA));
        } else
            inputField[10].xPosition = 2;

        if (inputField[11] == null) {
            inputField[11] = new GuiTextField(fontRendererObj, 2, 14 * 9, 68, 12);
            inputField[11].setMaxStringLength(10);
            inputField[11].setText(String.valueOf(sbx));
        } else
            inputField[11].xPosition = 2;

        if (inputField[12] == null) {
            inputField[12] = new GuiTextField(fontRendererObj, 2, 14 * 10, 68, 12);
            inputField[12].setMaxStringLength(10);
            inputField[12].setText(String.valueOf(sby));
        } else
            inputField[12].xPosition = 2;

        if (inputField[13] == null) {
            inputField[13] = new GuiTextField(fontRendererObj, 2, 14 * 11, 68, 12);
            inputField[13].setMaxStringLength(10);
            inputField[13].setText(String.valueOf(sbz));
        } else
            inputField[13].xPosition = 2;

        if (inputField[14] == null) {
            inputField[14] = new GuiTextField(fontRendererObj, 2, 14 * 12, 68, 12);
            inputField[14].setMaxStringLength(10);
            inputField[14].setText(String.valueOf(pitchB));
        } else
            inputField[14].xPosition = 2;

        if (inputField[15] == null) {
            inputField[15] = new GuiTextField(fontRendererObj, 2, 14 * 13, 68, 12);
            inputField[15].setMaxStringLength(10);
            inputField[15].setText(String.valueOf(yawB));
        } else
            inputField[15].xPosition = 2;

        buttonList.clear();
        buttonList.add(new GuiButton(0, guiLeft + xSize - 26, guiTop + 6 + 22 * 0, 20, 20, "x"));
        buttonList.add(new GuiButton(1, guiLeft + xSize - 46, guiTop + ySize - 26, 40, 20, "create"));
        buttonList.add(new GuiButton(2, guiLeft + xSize - 94, guiTop + ySize - 26, 40, 20, "reset"));

        buttonList.add(new GuiButton(3, guiLeft + 6, guiTop + 22 * 1, 100, 20, "set point spawn A"));
        buttonList.add(new GuiButton(4, guiLeft + 6, guiTop + 22 * 2, 100, 20, "set point spawn B"));

        buttonList.add(new GuiButton(5, guiLeft + 6, guiTop + 10 + 22 * 3, 100, 20, "set point region A"));
        buttonList.add(new GuiButton(6, guiLeft + 6, guiTop + 10 + 22 * 4, 100, 20, "set point region B"));

        Keyboard.enableRepeatEvents(true);
    }

    @Override
    public void onGuiClosed() {
        Keyboard.enableRepeatEvents(false);
    }

    @Override
    public void updateScreen() {
        if (actField != -1) inputField[actField].updateCursorCounter();
    }

    @Override
    public void actionPerformed(GuiButton btn) {
        if (btn.enabled) {
            switch(btn.id) {
            case 0:
                mc.displayGuiScreen(null);
                mc.setIngameFocus();
                break;
            case 1:
                CreateAreaMessage message = new CreateAreaMessage();
                message.dim = mc.thePlayer.dimension;

                message.sax = sax;
                message.say = say;
                message.saz = saz;
                message.pitchA = pitchA;
                message.yawA = yawA;

                message.sbx = sbx;
                message.sby = sby;
                message.sbz = sbz;
                message.pitchB = pitchB;
                message.yawB = yawB;

                message.rax = rax;
                message.ray = ray;
                message.raz = raz;

                message.rbx = rbx;
                message.rby = rby;
                message.rbz = rbz;

                TeleportationToArenasMod.network.sendToServer(message);

                sax = say = saz = sbx = sby = sbz = 0D;
                pitchA = yawA = pitchB = yawB = 0F;
                rax = ray = raz = rbx = rby = rbz = 0;

                mc.displayGuiScreen(null);
                mc.setIngameFocus();
                break;
            case 2:
                inputField[0].setText(String.valueOf(rax));
                inputField[1].setText(String.valueOf(ray));
                inputField[2].setText(String.valueOf(raz));

                inputField[3].setText(String.valueOf(rbx));
                inputField[4].setText(String.valueOf(rby));
                inputField[5].setText(String.valueOf(rbz));

                inputField[6].setText(String.valueOf(sax));
                inputField[7].setText(String.valueOf(say));
                inputField[8].setText(String.valueOf(saz));
                inputField[9].setText(String.valueOf(pitchA));
                inputField[10].setText(String.valueOf(yawA));

                inputField[11].setText(String.valueOf(sbx));
                inputField[12].setText(String.valueOf(sby));
                inputField[13].setText(String.valueOf(sbz));
                inputField[14].setText(String.valueOf(pitchB));
                inputField[15].setText(String.valueOf(yawB));
                break;

            case 3:
                sax = mc.thePlayer.posX;
                say = mc.thePlayer.posY;
                saz = mc.thePlayer.posZ;
                pitchA = mc.thePlayer.rotationPitch;
                yawA = mc.thePlayer.rotationYaw;

                inputField[6].setText(String.valueOf(sax));
                inputField[7].setText(String.valueOf(say));
                inputField[8].setText(String.valueOf(saz));
                inputField[9].setText(String.valueOf(pitchA));
                inputField[10].setText(String.valueOf(yawA));
                break;

            case 4:
                sbx = mc.thePlayer.posX;
                sby = mc.thePlayer.posY;
                sbz = mc.thePlayer.posZ;
                pitchB = mc.thePlayer.rotationPitch;
                yawB = mc.thePlayer.rotationYaw;

                inputField[11].setText(String.valueOf(sbx));
                inputField[12].setText(String.valueOf(sby));
                inputField[13].setText(String.valueOf(sbz));
                inputField[14].setText(String.valueOf(pitchB));
                inputField[15].setText(String.valueOf(yawB));
                break;

            case 5:
                rax = (int)mc.thePlayer.posX;
                ray = (int)mc.thePlayer.posY;
                raz = (int)mc.thePlayer.posZ;

                inputField[0].setText(String.valueOf(rax));
                inputField[1].setText(String.valueOf(ray));
                inputField[2].setText(String.valueOf(raz));
                break;

            case 6:
                rbx = (int)mc.thePlayer.posX;
                rby = (int)mc.thePlayer.posY;
                rbz = (int)mc.thePlayer.posZ;

                inputField[3].setText(String.valueOf(rbx));
                inputField[4].setText(String.valueOf(rby));
                inputField[5].setText(String.valueOf(rbz));
                break;

            }
        }
    }

    @Override
    public void keyTyped(char character, int key) {
        switch(key) {
        case Keyboard.KEY_ESCAPE:
            mc.displayGuiScreen(null);
            mc.setIngameFocus();
            break;
        case Keyboard.KEY_TAB:
        case Keyboard.KEY_RETURN:
        case Keyboard.KEY_NUMPADENTER:
            ++actField;
            if (actField >= inputField.length) actField = 0;
            for (int i = 0; i < inputField.length; ++i)
                inputField[i].setFocused(i == actField ? true : false);
            break;
        case Keyboard.KEY_UP:break;
        case Keyboard.KEY_DOWN:break;
        default:
            if (actField != -1) {

                if (inputField[actField].getText().equals("0")) inputField[actField].setText("");

                inputField[actField].textboxKeyTyped(character, key);

                if (inputField[actField].getText().length() > 0) {
                    char[] chs = inputField[actField].getText().toCharArray();
                    String text = "";
                    for (char ch : chs)
                        for (char c : allow_char)
                            if (c == ch) text += ch;

                    inputField[actField].setText(text);
                }

                if (inputField[actField].getText().length() <= 0) inputField[actField].setText("0");

            }
            break;
        }
    }

    @Override
    public void mouseClicked(int mouseX, int mouseY, int state) {
        int k = -1;
        for (int i = 0; i < inputField.length; ++i) {
            inputField[i].mouseClicked(mouseX, mouseY, state);
            boolean flag = mouseX >= inputField[i].xPosition && mouseX < inputField[i].xPosition + inputField[i].width && mouseY >= inputField[i].yPosition && mouseY < inputField[i].yPosition + inputField[i].height;
            if (flag) k = i;
        }
        actField = k;
        super.mouseClicked(mouseX, mouseY, state);
    }

    @Override
    public boolean doesGuiPauseGame() {
        return false;
    }

    @Override
    public void drawScreen(int mouseX, int mouseY, float parTick) {
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
        drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);

        GL11.glDisable(GL11.GL_TEXTURE_2D);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glColor4f(0.25F, 0.25F, 0.25F, 0.625F);
        drawTexturedModalRect(0, 0, 0, 0, 102, height);
        drawTexturedModalRect(width - 84, 0, 0, 0, 84, height);
        GL11.glDisable(GL11.GL_BLEND);
        GL11.glEnable(GL11.GL_TEXTURE_2D);

        for (GuiTextField fild : inputField) fild.drawTextBox();

        mc.fontRenderer.drawStringWithShadow("Region Point A", width - 77, 3 + 14 * 1, 0xFFFFFF);
        mc.fontRenderer.drawStringWithShadow("x", width - 70 - 10, 1 + 14 * 2, 0xFFFFFF);
        mc.fontRenderer.drawStringWithShadow("y", width - 70 - 10, 1 + 14 * 3, 0xFFFFFF);
        mc.fontRenderer.drawStringWithShadow("z", width - 70 - 10, 1 + 14 * 4, 0xFFFFFF);

        mc.fontRenderer.drawStringWithShadow("Region Point B", width - 77, 3 + 14 * 6, 0xFFFFFF);
        mc.fontRenderer.drawStringWithShadow("x", width - 70 - 10, 1 + 14 * 7, 0xFFFFFF);
        mc.fontRenderer.drawStringWithShadow("y", width - 70 - 10, 1 + 14 * 8, 0xFFFFFF);
        mc.fontRenderer.drawStringWithShadow("z", width - 70 - 10, 1 + 14 * 9, 0xFFFFFF);

        mc.fontRenderer.drawStringWithShadow("Spawn Point A", 3, 3 + 14 * 1, 0xFFFFFF);
        mc.fontRenderer.drawStringWithShadow("x", 75, 1 + 14 * 2, 0xFFFFFF);
        mc.fontRenderer.drawStringWithShadow("y", 75, 1 + 14 * 3, 0xFFFFFF);
        mc.fontRenderer.drawStringWithShadow("z", 75, 1 + 14 * 4, 0xFFFFFF);
        mc.fontRenderer.drawStringWithShadow("pitch", 75, 1 + 14 * 5, 0xFFFFFF);
        mc.fontRenderer.drawStringWithShadow("yaw", 75, 1 + 14 * 6, 0xFFFFFF);

        mc.fontRenderer.drawStringWithShadow("Spawn Point B", 3, 3 + 14 * 8, 0xFFFFFF);
        mc.fontRenderer.drawStringWithShadow("x", 75, 1 + 14 * 9, 0xFFFFFF);
        mc.fontRenderer.drawStringWithShadow("y", 75, 1 + 14 * 10, 0xFFFFFF);
        mc.fontRenderer.drawStringWithShadow("z", 75, 1 + 14 * 11, 0xFFFFFF);
        mc.fontRenderer.drawStringWithShadow("pitch", 75, 1 + 14 * 12, 0xFFFFFF);
        mc.fontRenderer.drawStringWithShadow("yaw", 75, 1 + 14 * 13, 0xFFFFFF);

        super.drawScreen(mouseX, mouseY, parTick);
    }

}
2020-03-05_02.57.45.png
 
Сверху