Кнопки

Версия Minecraft
1.7.10
35
1
10
Думаю из приложенных картинок все понятно.
Вопрос лишь в том, как это реализовать?
Безымянный.png
Безымянный2.png


Дополнение:
При нажатии на кнопку, меняться определенное значение(В данном случае текст).
При нажатии на кнопку справа это значение меняется TEXT 3.
Нажав же кнопку слева появляется предыдущие значение.

Код:
public class UICustomize extends GuiScreen {
    
    
    private GuiDevButton prevColor;
    private GuiDevButton nextColor;
    private int color = 0;

    
    
    
    
    /**
     *
     * Adds the buttons (and other controls) to the screen in question.
     */
    public void initGui()
    {
        this.buttonList.clear();
            this.buttonList.add(this.prevColor = new GuiDevButton(12, 50, 10, 100, 20, "<"));
            this.buttonList.add(this.nextColor = new GuiDevButton(13, 50, 30, 100, 20, ">"));
            this.prevColor.enabled = this.color >= 0;
               this.nextColor.enabled = this.color < 3;
            this.buttonList.add(new GuiDevButton(1488, 50, this.height / 2 , 100, 20, I18n.format("Exit", new Object[0])));
    
    }
    

    protected void actionPerformed(GuiButton p_146284_1_)
    {
        int colorA;
        colorA = color;
        
        
        switch (p_146284_1_.id)
        {
           case 12:
    
               --colorA;
               Test.netHandler.sendToServer(new MessageTestPacket(colorA));
               break;
           case 13:
  
               ++colorA;
               Test.netHandler.sendToServer(new MessageTestPacket(colorA));
               break;
           case 1488:
               this.mc.displayGuiScreen(null);
               break;
        }
    }


    
    /**
     * Draws the screen and all the components in it.
     */
    public void drawScreen(int p_73863_1_, int p_73863_2_, float p_73863_3_)
    {
        ScaledResolution sr = new ScaledResolution(this.mc, this.mc.displayWidth, this.mc.displayHeight);
        GL11.glPushMatrix();
        GL11.glPopMatrix();
        super.drawScreen(p_73863_1_, p_73863_2_, p_73863_3_);
    }
    

    
    /**
     * Returns true if this GUI should pause the game when it is displayed in single-player
     */
    public boolean doesGuiPauseGame()
    {
        return false;
    }


}
 
Последнее редактирование:
Решение
Наверное, что-то этого, тут одна кнопка, но основа должна быть понятна:
Java:
public class TestGui extends GuiScreen {

    static final String[] values = new String[] {
            "One",
            "Hex",
            "Octigun",
            "Sixer",
            "Purpure"
    };

    private int id;
    private GuiButton button;

    @Override
    public void initGui() {
        buttonList.clear();
        buttonList.add(button = new GuiButton(0, width - 70, 170, 60, 20, values[id]));
    }

    @Override
    public void actionPerformed(GuiButton btn) {
        if (btn.enabled) {
            switch(btn.id) {
            case 0:
                ++id;
                if (id >= values.length) id = 0;
                button.displayString =...

timaxa007

Модератор
5,831
409
672
Нет, не понятно. То что я понял - делай проверку или используй готовое поле, которое связанное с фокусом наведения на кнопку и рендери нужную текстуру или часть текстуры.
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
Максимально не понятно.
Стрелочка это наведение мышки или нажатие? (скорее второе, раз нужна кнопка).
В классе гуи есть методы типа mouseClicked, оверрайдишь и добавляешь свою логику (мышь в таком-то положении (над кнопкой) - поменять значение переменной, от которой зависит рендер твоего текста или что там у тебя).
Вообще были же там вроде какие-то готовые классы типа GuiButton, хотя нормально ими пользоваться было сложновато, я не помню крч.

Но вообще алгоритм по подробнее - делаешь класс с позицией-размерами кнопки, айдишником (ну или можно коллбек в него-же запихать и при создании давать лямбду с действием), потом в гуишке список таких классов, по которому циклом проходишься в mouseClicked, проверяешь да вызываешь тот коллбек (ну или отдельный метод в который передаёшь айдишник).

Соре, накатывать чтото копиабельное невероятно лень и если ты по описанию нафигачить код не сможешь, то жди что там дальше ответят крч
 

timaxa007

Модератор
5,831
409
672
Наверное, что-то этого, тут одна кнопка, но основа должна быть понятна:
Java:
public class TestGui extends GuiScreen {

    static final String[] values = new String[] {
            "One",
            "Hex",
            "Octigun",
            "Sixer",
            "Purpure"
    };

    private int id;
    private GuiButton button;

    @Override
    public void initGui() {
        buttonList.clear();
        buttonList.add(button = new GuiButton(0, width - 70, 170, 60, 20, values[id]));
    }

    @Override
    public void actionPerformed(GuiButton btn) {
        if (btn.enabled) {
            switch(btn.id) {
            case 0:
                ++id;
                if (id >= values.length) id = 0;
                button.displayString = values[id];
                break;
            }
        }
    }

    @Override
    public void keyTyped(char character, int key) {
        switch(key) {
        case Keyboard.KEY_ESCAPE:
            mc.displayGuiScreen((GuiScreen)null);
            mc.setIngameFocus();
            break;
        default:
            break;
        }
    }

    @Override
    public void drawScreen(int mouseX, int mouseY, float parTick) {
        super.drawScreen(mouseX, mouseY, parTick);
    }

}
---
И ещё можно немного посмотреть пример у ванильной книги для писания и чтения.
 
Последнее редактирование:
Сверху