Souris qui n'apparait pas dans un GUI



  • Bonjour, j'ai crée un GUI simple qui affiche une petite texture en haut à gauche de l'écran.
    Cependant, j'aimerai que la souris soit visible (pour cliquer sur des boutons par exemple), mais la souris n’apparaît pas et je comprends pas trop pourquoi.

    Gui

    public class GuiLobby extends GuiScreen {
    	
    	Minecraft mc = Minecraft.getMinecraft();
    	
    	@Override
    	public void drawScreen(int x, int y, float ticks)
    	{
    		mc.getTextureManager().bindTexture(new ResourceLocation(Base.MODID, "textures/gui/texture.png"));
    		mc.ingameGUI.drawTexturedModalRect(0, 0, 0, 0, 50, 50);
    		
    		super.drawScreen(x, y, ticks);
    
    	}
    	
    	@Override
    	public void initGui()
    	{
    		super.initGui();
    	}
    	
    	@Override
    	protected void actionPerformed(GuiButton B)
    	{
    
    	}
    	
    	@Override
    	protected void keyTyped(char typedChar, int KeyCode) throws IOException 
    	{
    		super.keyTyped(typedChar, KeyCode);
    	}
    	
    	@Override
    	protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException 
    	{
    		super.mouseClicked(mouseX, mouseY, mouseButton);
    	}
    	 
    	@Override
    	public void updateScreen() 
    	{
    		super.updateScreen();
    	}
    

    Merci d'avance !


  • Moddeurs confirmés Rédacteurs Administrateurs

    Je comprends donc pourquoi tu as ce souci.

    En faisant ça tu ouvres le gui dans le thread de netty, ce qui cause des problèmes.
    Il faut faire ainsi pour ouvrir le gui dans le thread de Minecraft :

                IThreadListener thread = FMLCommonHandler.instance().getWorldThread(ctx.netHandler);
                thread.addScheduledTask(() -> {
                     Minecraft.getMinecraft().displayGuiScreen(new GuiLobby());
                });
    

  • Moddeurs confirmés Rédacteurs Administrateurs

    Bonsoir,

    Tu ouvres comment le gui ?



  • Bonsoir,
    avec une commande qui envoi un packet et qui ouvre le GUI.

    Commande

    public class Commands extends CommandBase {
    	
        @Override
        public String getName() {
            return "gui";
        }
        
    	@Override
    	public String getUsage(ICommandSender sender) {
    		return null;
    	}
        
        @Override
        public boolean checkPermission(MinecraftServer server, ICommandSender sender) {
            return true;
        }
        
        @Override
        public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
            if(sender instanceof EntityPlayer) {;
            	if(args[0].matches("lobby")) {
            		Base.network.sendTo(new PacketGui(args[0], "", ""), (EntityPlayerMP) sender);
            	}
    

    Packet

    public class PacketGui implements IMessage {
    	
    private static String arg1, arg2, arg3;
    
    public PacketGui() { }
    
    public PacketGui(String arg1, String arg2, String arg3) {
    	this.arg1 = arg1;
    	this.arg2 = arg2;
    	this.arg3 = arg3;
    }
    
    @Override
    public void fromBytes(ByteBuf buf) {
    	arg1 = ByteBufUtils.readUTF8String(buf);
    	arg2 = ByteBufUtils.readUTF8String(buf);
    	arg3 = ByteBufUtils.readUTF8String(buf);
    }
    
    @Override
    public void toBytes(ByteBuf buf) {
    	ByteBufUtils.writeUTF8String(buf, arg1);
    	ByteBufUtils.writeUTF8String(buf, arg2);
    	ByteBufUtils.writeUTF8String(buf, arg3);
    }
    
    public static class Handler implements IMessageHandler<PacketGui, IMessage> {
    
    @SideOnly(Side.CLIENT)
    @Override
    public IMessage onMessage(PacketGui message, MessageContext ctx) {
    	
    	if(arg1.equals("lobby")) {
    		Minecraft.getMinecraft().displayGuiScreen(new GuiLobby());
    	}
            return null;
    }
    }
    

  • Moddeurs confirmés Rédacteurs Administrateurs

    Je comprends donc pourquoi tu as ce souci.

    En faisant ça tu ouvres le gui dans le thread de netty, ce qui cause des problèmes.
    Il faut faire ainsi pour ouvrir le gui dans le thread de Minecraft :

                IThreadListener thread = FMLCommonHandler.instance().getWorldThread(ctx.netHandler);
                thread.addScheduledTask(() -> {
                     Minecraft.getMinecraft().displayGuiScreen(new GuiLobby());
                });
    


  • @robin4002 Merci, effectivement ça fonctionne maintenant


Log in to reply