Résolu 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 !
-
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()); });
-
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; } }
-
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