Вместо стандартной кнопки картинка 1.6.4

96
1
Привет, не подскажите ли вы как сделать вместо кнопки обычной, картинку кнопку? Ну, я пыталась приписать к обычной кнопки вывод изображения, потом поняла что так не выйдет и нужно создавать что-то типо новой кнопки с изображением. Можете подтолкнуть где искать или как сделать новую кнопку (если ещё подскажите как к ней картинку прикрепить, то я на десятом небе от счастья буду, правда наверно я наглею, что прямо спрашиваю как сделать) Спасибо большое

Я кстати о кнопках в меню, в настройках и т.д
 
Создала класс, всё сделала как ты сказал
Код:
package newbuttonmod;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.util.ResourceLocation;

@SideOnly(Side.CLIENT)
public class NewButton extends GuiButton{

        protected int width;
        protected int height;
        public int xPosition;
        public int yPosition;
        public String displayString;
        public int id;
        public boolean enabled;
        public boolean drawButton;
        protected boolean field_82253_i;
        
        public NewButton(int par1, int par2, int par3, String par4Str) {
        super(par1, par2, par3, 200, 20, par4Str);
        }


        public void GuiButton(int par1, int par2, int par3, int par4, int par5, String par6Str)
        {
            this.width = 200;
            this.height = 20;
            this.enabled = true;
            this.drawButton = true;
            this.id = par1;
            this.xPosition = par2;
            this.yPosition = par3;
            this.width = par4;
            this.height = par5;
            this.displayString = par6Str;
        }

        protected int getHoverState(boolean par1)
        {
            byte b0 = 1;
            if (!this.enabled)
            {
                b0 = 0;
            }
            else if (par1)
            {
                b0 = 2;
            }
            return b0;
        }

        public void drawButton(Minecraft par1Minecraft, int par2, int par3)
        {
            if (this.drawButton)
            {
                FontRenderer fontrenderer = par1Minecraft.fontRenderer;
                par1Minecraft.getTextureManager().bindTexture(new ResourceLocation("textures/gui/widgets.png"));
                GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
                this.field_82253_i = par2 >= this.xPosition && par3 >= this.yPosition && par2 < this.xPosition + this.width && par3 < this.yPosition + this.height;
                int k = this.getHoverState(this.field_82253_i);
                this.drawTexturedModalRect(this.xPosition, this.yPosition, 0, 46 + k * 20, this.width / 2, this.height);
                this.drawTexturedModalRect(this.xPosition + this.width / 2, this.yPosition, 200 - this.width / 2, 46 + k * 20, this.width / 2, this.height);
                this.mouseDragged(par1Minecraft, par2, par3);
                int l = 14737632;
                
                if (!this.enabled)
                {
                    l = -6250336;
                }
                else if (this.field_82253_i)
                {
                    l = 16777120;
                }

                this.drawCenteredString(fontrenderer, this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 8) / 2, l);
            }
        }

        protected void mouseDragged(Minecraft par1Minecraft, int par2, int par3) {}
        public void mouseReleased(int par1, int par2) {}
        public boolean mousePressed(Minecraft par1Minecraft, int par2, int par3)
        {
            return this.enabled && this.drawButton && par2 >= this.xPosition && par3 >= this.yPosition && par2 < this.xPosition + this.width && par3 < this.yPosition + this.height;
        }
        public boolean func_82252_a()
        {
            return this.field_82253_i;
        }
        public void func_82251_b(int par1, int par2) {}
    }

Воооот.. В главном классе написала так: 
Код:
   MinecraftForge.EVENT_BUS.register(new NewButton(0, 0, 0, null));

Правильно ведь?
[merge_posts_bbcode]Добавлено: 28.11.2014 00:33:41[/merge_posts_bbcode]

Оу, minecraft с этим говнокодом не запускается даже, хотя ошибок нет
 
minecraftsrv написал(а):
Этож гуи, какой же эвент то.
Упс, действительно, глупанула
[merge_posts_bbcode]Добавлено: 28.11.2014 01:10:20[/merge_posts_bbcode]

Так, ну, с этим всё ясно, а как добавить её (кнопку), пыталась сделать так в GuiMainMenu:
Код:
   this.buttonList.add(new NewButton(3, this.width / 2 - 150, par1 + par2 * 1, I18n.getString("menu.multiplayer")));
NewButtom - это сама кнопка (файл кнопки), всё с ним норм, импортнула.

Правда майн крашится

Даже если я стандартный new GuiButton на new NewButton поменяю, то тоже крашит, в краше ошибок не указано, моды не успевают подгрузиться
 
Ну и нафига копировать ВЕСЬ класс!?
ТвойКласс extends GuiButton{}.

Код:
public class GuiButtonTexture extends GuiButton{

public GuiButtonTexture(int par1, int par2, int par3, String par4Str) {
        super(par1, par2, par3, 200, 20, par4Str);
}

private ResourceLocation buttonTexture = new ResourceLocation("textures/gui/widgets.png"); //Тут указываешь путь к своей текстуре

    public void drawButton(Minecraft par1Minecraft, int par2, int par3)
        {
            if (this.drawButton)
            {
                FontRenderer fontrenderer = par1Minecraft.fontRenderer;
                par1Minecraft.getTextureManager().bindTexture(buttonTexture);
                GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
                this.field_82253_i = par2 >= this.xPosition && par3 >= this.yPosition && par2 < this.xPosition + this.width && par3 < this.yPosition + this.height;
                int k = this.getHoverState(this.field_82253_i);
                this.drawTexturedModalRect(this.xPosition, this.yPosition, 0, 46 + k * 20, this.width / 2, this.height);
                this.drawTexturedModalRect(this.xPosition + this.width / 2, this.yPosition, 200 - this.width / 2, 46 + k * 20, this.width / 2, this.height);
                this.mouseDragged(par1Minecraft, par2, par3);
                int l = 14737632;
                
                if (!this.enabled)
                {
                    l = -6250336;
                }
                else if (this.field_82253_i)
                {
                    l = 16777120;
                }

                this.drawCenteredString(fontrenderer, this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 8) / 2, l);
            }
        }
}
Добавлять кнопку нужно в initGui.
 
Аааа, теперь ясно, спасибо большое, пойду искать где там initGui
 
Agravaine написал(а):
В твоём гуи.
[merge_posts_bbcode]Добавлено: 28.11.2014 10:26:43[/merge_posts_bbcode]

В твоём гуи.
А дополнить файлы minecraft можно, ну, например  в GuiMainMenu приписать кнопочку?
 
А вообще проще вместо:
Код:
private ResourceLocation buttonTexture = new ResourceLocation("textures/gui/widgets.png"); //Тут указываешь путь к своей текстуре
Лучше написать:
Код:
public ResourceLocation buttonTexture = new ResourceLocation("textures/gui/widgets.png"); //Тут указываешь путь к своей текстуре
И таким образом ты получишь динамичную кнопку, у которой есть дефольтная текстура, но если тебе надо другую
текстуру, ты сможешь переопределить buttonTexture
 
Dragon2488 написал(а):
А вообще проще вместо:
Код:
private ResourceLocation buttonTexture = new ResourceLocation("textures/gui/widgets.png"); //Тут указываешь путь к своей текстуре
Лучше написать:
Код:
public ResourceLocation buttonTexture = new ResourceLocation("textures/gui/widgets.png"); //Тут указываешь путь к своей текстуре
И таким образом ты получишь динамичную кнопку, у которой есть дефольтная текстура, но если тебе надо другую
текстуру, ты сможешь переопределить buttonTexture
Мне нужно две кнопки (одна большая, другая поменьше) и их размеры примерно 80 на 30 и 120 на 40. Вооот... я пыталась менять в minecraft исходниках, получалась лажа
 
Назад
Сверху