вызов гуи

Версия Minecraft
1.7.10
451
13
34
Всем привет.
сделал гуи, забиндил клавишу.
как его вызывать, если клавиша была нажата?
туплю нереально сильно, ибо первый раз вообще с гуи работаю.
заранее всем спасибо.
 
Хм.. У меня какая-то проблема. Gui не вызывается. Не могу понять проблемы.
Код:
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.util.StatCollector;

public class GuiGuide extends GuiScreen {

    public int ticks;
    public static int maxTicks = 24;
    public static boolean init;
    public static boolean[] colors = new boolean[9];
    
    
    @Override
    public void initGui() {
        super.initGui();
        init = false;
        buttonList.clear();

    }
    
    @Override
    public void drawScreen(int mouseX, int mouseY, float partialTicks) {
        ScaledResolution res = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
        int w = res.getScaledWidth();
        int h = res.getScaledHeight();
        
        drawDefaultBackground();
        if(init) {
            String text = "GUI GUIDE";
            mc.fontRenderer.drawString(text, w / 2 - (mc.fontRenderer.getStringWidth(text) / 2), h / 2 - 75, 0xFF0000);
            
            super.drawScreen(mouseX, mouseY, partialTicks);
        }
    }
    
    @Override
    public boolean doesGuiPauseGame() {
        return false;
    }
    
    @Override
    protected void actionPerformed(GuiButton buttonClicked) {
        switch(buttonClicked.id) {
        }
    }
    
    public void setColor(String color) {
    }
    
    private void exit(boolean exit) {
        if(exit) {
            mc.thePlayer.closeScreen();
        }
    }
    
    @Override
    public void updateScreen() {
        super.updateScreen();
        if(ticks < maxTicks) {
            ++ticks;
        }
    }
    
    @Override
    public void drawWorldBackground(int i) {
        if (mc.theWorld != null) {
            ScaledResolution res = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
            int w = res.getScaledWidth();
            int h = res.getScaledHeight();
            
            int scaleX = Math.min(ticks * 14, w / 6 - 30);
            int scaleY = Math.min(ticks * 5, h / 6 + 20);

            if(scaleX == w / 6 - 30 && scaleY == h / 6 + 20 && !init) {
                ticks = maxTicks;
                init = true;
            }
            
            drawGradientRect(w / 2 - scaleX - 30, h / 2 - scaleY - 20, w / 2 + scaleX + 30, h / 2 + scaleY - 20, -1072689136, -804253680);
        } else {
            drawBackground(i);
        }
    }
}



Код:
import cpw.mods.fml.common.network.IGuiHandler;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;

public class GuiRegister implements IGuiHandler {
    @Override
    public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
        return null;
    }

    @Override
    public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
        if(ID == 1) {
            return new GuiGuide();
        }
        return null;
    }

}


Код:
public class Render {
    Minecraft mc = Minecraft.getMinecraft();
@SubscribeEvent
    public void onRender(PlayerTickEvent event) {
        if(Keyboard.isKeyDown(Keyboard.KEY_Y)) {
         mc.displayGuiScreen(new GuiGuide());
            }
        }
    }
 
ТС, не слушай BestFoxy, чушь говорит. И так, чтобы решить твою задачу нужно определится с тем, какое гуи ты открываешь. GuiContainer или GuiScreen, если первый вариант, то для начала надо отправить пакет на сервер, и там через player.openGui(modObj, guiId, world, player.posX, player.posY, player.posZ). В случаи если это не контейнер, то на клиенте player.openGui(modObj, guiId, world, player.posX, player.posY, player.posZ). Хочу так же отметить, то что у тебя должная быть имплементация от IGuiHandler(свой GuiHandler в общем). А теперь перейдём к событию, InputEvent.KeyInputEvent тебе нужно. Оно регистрируется через FML шину. В методе с данным событием должна быть проверка на нажатие клавиши. Пример:
Java:
public static final KeyBinding OPEN_GUI_BTN = new KeyBinding("Открыть меню", Keyboard.KEY_G, "Категория МОЁ");

@SubscribeEvent
public void onKeyInput(InputEvent.KeyInputEvent e) {
    if (OPEN_GUI_BTN.isKeyPressed) {
        player.openGui(modObj, guiId, world, player.posX, player.posY, player.posZ);
    }
    // Или
    if (OPEN_GUI_BTN.isKeyPressed) {
        NetworkHandler.sendToServer(new SPacketOpenGui(guiId));
    }
    // Или
    if (Keyboard.isKeyDown(Keyboard.KEY_G)) {
        player.openGui(modObj, guiId, world, player.posX, player.posY, player.posZ);
    }
    // Или
    if (Keyboard.isKeyDown(Keyboard.KEY_G)) {
        NetworkHandler.sendToServer(new SPacketOpenGui(guiId));
    }
}
 
Назад
Сверху