Problème GuiTextField dans un inventaire custom.
-
Il y a un npe sur une des classes de Minecraft. Ce qui est assez étrange comme il n’y a aucune référence à ton code.
Tu as modifié quelque chose dans le code de mc ? -
Je ne comprend pas pourquoi ce crash, mais pourquoi as tu laissé tout les trucs en rapport avec le texte field dans la méthode draw (il faut le définir UNE fois dans le méthode initGui et c’est bon).
“MinecraftServer mc1 = FMLServerHandler.instance().getServer();” Essayé ça sur un serveur, le jeu crashera parce que le gui n’est que sur le client -
Peut-être que son crash est causé par l’installation de mod incompatible.
-
@‘robin4002’:
Il y a un npe sur une des classes de Minecraft. Ce qui est assez étrange comme il n’y a aucune référence à ton code.
Tu as modifié quelque chose dans le code de mc ?Non, je n’ai pas modifié le code de mc

@‘AymericRed’:Je ne comprend pas pourquoi ce crash, mais pourquoi as tu laissé tout les trucs en rapport avec le texte field dans la méthode draw (il faut le définir UNE fois dans le méthode initGui et c’est bon).
“MinecraftServer mc1 = FMLServerHandler.instance().getServer();” Essayé ça sur un serveur, le jeu crashera parce que le gui n’est que sur le clientEffectivement, mais je le test bien sur un serveur et le serveur ne crash pas mais que le jeux, et j’enléve le text field da,s la méthoe draw
@‘Plaigon’:Peut-être que son crash est causé par l’installation de mod incompatible.
Hum bizzare car avant ce ne crashé pas
En tout cas merci de vos réponse, je continue a cherché mais cane marche toujours pas. -
Bah pour être sûr, enlève les tous et remets les. Sa ne te coûte rien…
-
D’accord, merci mais ceci ne resoue pas le problème que quand on click sur validé , cela ne produit rien et aussi qu’on ne peux pas changé le text dans le Gui

-
Pour le bouton, normal, tu lui as donné 32 comme id et dans la fonction onActionPerformed, tu vérifies si l’id est 0…
-
Ben justement, je n’ai mis aucun if, donc ca ne risque pas d’être causer pas ca.
-
Ah oui autan pour moi
-
Je me permet d’up le message car j’ai regardé dans la class GuiRepair, sauf que maintenant il n’y a plus le GuiTextField, et le button valide est en double, voici mon code :
[font=Courier Newpackage ]fr.ph1823.MyLife.Gui.Amandes%(#cc7832)[; ] %(#629755)[*/** *]%(#629755)[* * Created by ph1823 - Minecraft on 29/02/2016. *]%(#629755)[* */ *] import com.mojang.authlib.GameProfile%(#cc7832)[; ]import cpw.mods.fml.client.FMLClientHandler%(#cc7832)[; ]import cpw.mods.fml.server.FMLServerHandler%(#cc7832)[; ]import fr.ph1823.MyLife.GloryRP%(#cc7832)[; ]import fr.ph1823.MyLife.Gui.Amandes.inv.InventoryBackPack%(#cc7832)[; ]import fr.ph1823.MyLife.Item.Search%(#cc7832)[; ]import net.minecraft.client.gui.*%(#cc7832)[; ]import net.minecraft.client.gui.inventory.GuiContainer%(#cc7832)[; ]import net.minecraft.client.resources.I18n%(#cc7832)[; ]import net.minecraft.entity.player.EntityPlayer%(#cc7832)[; ]import net.minecraft.entity.player.InventoryPlayer%(#cc7832)[; ]import net.minecraft.item.ItemStack%(#cc7832)[; ]import net.minecraft.nbt.NBTBase%(#cc7832)[; ]import net.minecraft.server.MinecraftServer%(#cc7832)[; ]import net.minecraft.util.IChatComponent%(#cc7832)[; ]import net.minecraft.util.ResourceLocation%(#cc7832)[; ] import org.lwjgl.input.Keyboard%(#cc7832)[; ]import org.lwjgl.opengl.GL11%(#cc7832)[; ]import fr.ph1823.MyLife.Gui.Amandes.inv.container.*%(#cc7832)[; ] import java.awt.*%(#cc7832)[; ]import java.io.IOException%(#cc7832)[; ]import java.net.URI%(#cc7832)[; ]import java.util.ArrayList%(#cc7832)[; ]import java.util.List%(#cc7832)[; ] public class Amendes extends GuiContainer { private GuiTextField g%(#cc7832)[; ] public static final ResourceLocation *texture *= new ResourceLocation("guicustom","textures/a.png")%(#cc7832)[; ] protected InventoryBackPack inv%(#cc7832)[; ] protected InventoryPlayer playerInv%(#cc7832)[; ] public int rows%(#cc7832)[; ] public Amendes(InventoryPlayer playerInv, InventoryBackPack inv) { super(new ContainerBackPack(playerInv, inv))%(#cc7832)[; ] this.playerInv = playerInv%(#cc7832)[; ] this.inv = inv%(#cc7832)[; ] this.allowUserInput = %(#cc7832)[false; ] %(#808080)[// Calculate the number of rows ] this.rows = inv.getSizeInventory() / 9%(#cc7832)[; ] %(#808080)[// Height of the GUI using the number of rows ] this.ySize = 114 + this.rows * 18%(#cc7832)[; ] } protected List buttonList = new ArrayList()%(#cc7832)[; ] %(#bbb529)[@Override ] public void initGui() { super.initGui()%(#cc7832)[; ] Keyboard.*enableRepeatEvents*(true)%(#cc7832)[; ] FontRenderer f = this.mc.fontRenderer%(#cc7832)[; ] int i = (this.width - this.xSize) / 2%(#cc7832)[; ] int j = (this.height - this.ySize) / 2%(#cc7832)[; ] g = new GuiTextField(f, 55,230, 100,100)%(#cc7832)[; ] this.g = new GuiTextField(this.fontRendererObj, i + 62, j + 24, 103, 12)%(#cc7832)[; ] this.g.setTextColor(-1)%(#cc7832)[; ] this.g.setDisabledTextColour(-1)%(#cc7832)[; ] this.g.setEnableBackgroundDrawing(false)%(#cc7832)[; ] this.g.setMaxStringLength(40)%(#cc7832)[; ] %(#808080)[// g.drawTextBox(); ]%(#808080)[ // this.buttonList.add(g); ] this.buttonList.add(new GuiButton(32, this.width / 2 - 100, i+ 24, 200, 20, "Valide") { %(#bbb529)[@Override ] public void mouseReleased(int x, int y) { mc.currentScreen.confirmClicked(true, 1)%(#cc7832)[; ] playerInv.closeInventory()%(#cc7832)[; ] EntityPlayer p1 = playerInv.player%(#cc7832)[; ] MinecraftServer mc1 = FMLServerHandler.*instance*().getServer()%(#cc7832)[; ] for(GameProfile g1 : mc1.func_152357_F()) { if(g.getText().equals(g1.getName())) { EntityPlayer p = mc1.getEntityWorld().func_152378_a(g1.getId())%(#cc7832)[; ] p.inventory.addItemStackToInventory(new ItemStack(GloryRP.*MenotesItem*,1))%(#cc7832)[; ] } else { IChatComponent msg = IChatComponent.Serializer.*func_150699_a*("§4Erreur : la personne demandé n'existe pas.")%(#cc7832)[; ] p1.addChatMessage(msg)%(#cc7832)[; ] } } } })%(#cc7832)[; ] } %(#bbb529)[@Override ] public void onGuiClosed() { super.onGuiClosed()%(#cc7832)[; ] Keyboard.*enableRepeatEvents*(false)%(#cc7832)[; ] } %(#bbb529)[@Override ] protected void drawGuiContainerForegroundLayer(int x, int y) { %(#808080)[//super.drawGuiContainerForegroundLayer(x, y); ] GL11.*glEnable*(GL11.*GL_LIGHTING*)%(#cc7832)[; ] int k%(#cc7832)[; ] for (k = 0; k < this.buttonList.size(); ++k) { ((GuiButton) this.buttonList.get(k)).drawButton(this.mc, x, y)%(#cc7832)[; ] } } %(#808080)[/* @Override ]%(#808080)[ protected void drawGuiContainerForegroundLayer(int x, int y) { ]%(#808080)[ Keyboard.enableRepeatEvents(true); ] // this.fontRendererObj.drawString(I18n.format(this.inv.getInventoryName(), new Object[0), 8, 6, 4210752); ] %(#808080)[ int k; ] %(#808080)[ for (k = 0; k < this.buttonList.size(); ++k) ]%(#808080)[ { ]%(#808080)[ ((GuiButton)this.buttonList.get(k)).drawButton(this.mc, x, y); ]%(#808080)[ } ] // this.fontRendererObj.drawString(this.playerInv.hasCustomInventoryName() ? this.playerInv.getInventoryName() : I18n.format(this.playerInv.getInventoryName(), new Object[0), 8, this.ySize - 96 + 2, 4210752); ]%(#808080)[ }*/ ] %(#bbb529)[@Override ] protected void actionPerformed(GuiButton button) { this.mc.currentScreen.confirmClicked(true, 1)%(#cc7832)[; ] playerInv.closeInventory()%(#cc7832)[; ] EntityPlayer p1 = playerInv.player%(#cc7832)[; ] p1.closeScreen()%(#cc7832)[; ] IChatComponent msg1 = IChatComponent.Serializer.*func_150699_a*("§4Erreur : la personne demandé n'existe pas. id : " + button.id)%(#cc7832)[; ] p1.addChatMessage(msg1)%(#cc7832)[; ] MinecraftServer mc1 = FMLServerHandler.*instance*().getServer()%(#cc7832)[; ] for (GameProfile g1 : mc1.func_152357_F()) { if (g.getText().equals(g1.getName())) { EntityPlayer p = mc1.getEntityWorld().func_152378_a(g1.getId())%(#cc7832)[; ] p.inventory.addItemStackToInventory(new ItemStack(GloryRP.*MenotesItem*, 1))%(#cc7832)[; ] } else { IChatComponent msg = IChatComponent.Serializer.*func_150699_a*("§4Erreur : la personne demandé n'existe pas.")%(#cc7832)[; ] p1.addChatMessage(msg)%(#cc7832)[; ] } } } %(#629755)[*/** *]%(#629755)[* * Fired when a key is typed. This is the equivalent of KeyListener.keyTyped(KeyEvent e). *]%(#629755)[* */ *] %(#bbb529)[@Override ] protected void keyTyped(char p_73869_1_, int p_73869_2_) { super.keyTyped(p_73869_1_, p_73869_2_ )%(#cc7832)[; ] if(this.g.textboxKeyTyped(p_73869_1_, p_73869_2_)) { this.g.setFocused(!this.g.isFocused())%(#cc7832)[; ] } %(#808080)[// this.field_146308_f.setFocused(!this.field_146308_f.isFocused()); ] } %(#bbb529)[@Override ] protected void drawGuiContainerBackgroundLayer(float prt, int x, int y) { %(#808080)[// super.drawGuiContainerBackgroundLayer(); ] GL11.*glColor4f*(1.0F, 1.0F, 1.0F, 1.0F)%(#cc7832)[; ] this.mc.getTextureManager().bindTexture(*texture*)%(#cc7832)[; ] %(#808080)[// Centering GUI ] int k = (this.width - this.xSize) / 2%(#cc7832)[; ] int l = (this.height - this.ySize) / 2%(#cc7832)[; ] %(#808080)[// Drawing the first part of the GUI (slots of the backpack) ] this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.rows * 18 + 17)%(#cc7832)[; ] %(#808080)[// And after the slots from the player's inventory ] this.drawTexturedModalRect(k, l + this.rows * 18 + 17, 0, 126, this.xSize, 96)%(#cc7832)[; ] } %(#bbb529)[@Override ] public void updateScreen() { super.updateScreen()%(#cc7832)[; ] g.updateCursorCounter()%(#cc7832)[; ] } %(#bbb529)[@Override ] protected void mouseClicked(int mouseX, int mouseY, int mouseButton) { super.mouseClicked(mouseX, mouseY, mouseButton)%(#cc7832)[; ] this.g.mouseClicked(mouseX, mouseY, mouseButton)%(#cc7832)[; ] } %(#bbb529)[@Override ] public void drawScreen(int i, int j, float f) { super.drawScreen(i, j, f)%(#cc7832)[; ] GL11.*glDisable*(GL11.*GL_LIGHTING*)%(#cc7832)[; ] GL11.*glDisable*(GL11.*GL_BLEND*)%(#cc7832)[; ] g.drawTextBox()%(#cc7832)[; ] } } -
g = new GuiTextField(f, 55,230, 100,100); this.g = new GuiTextField(this.fontRendererObj, i + 62, j + 24, 103, 12);-> pourquoi le mettre 2 fois avec des valeurs différentes ?
this.g.setTextColor(-1); this.g.setDisabledTextColour(-1); this.g.setEnableBackgroundDrawing(false);-> Pourquoi tout ça ?
@Override protected void keyTyped(char p_73869_1_, int p_73869_2_) { super.keyTyped(p_73869_1_, p_73869_2_ ); if(this.g.textboxKeyTyped(p_73869_1_, p_73869_2_)) { this.g.setFocused(!this.g.isFocused()); } // this.field_146308_f.setFocused(!this.field_146308_f.isFocused()); }-> Tu as juste à mettre this.g.textboxKeyTyped(p_73869_1_, p_73869_2_)
this.buttonList.add(new GuiButton(32, this.width / 2 - 100, i+ 24, 200, 20, "Valide") { @Override public void mouseReleased(int x, int y) { mc.currentScreen.confirmClicked(true, 1); playerInv.closeInventory(); EntityPlayer p1 = playerInv.player; MinecraftServer mc1 = FMLServerHandler.instance().getServer(); for(GameProfile g1 : mc1.func_152357_F()) { if(g.getText().equals(g1.getName())) { EntityPlayer p = mc1.getEntityWorld().func_152378_a(g1.getId()); p.inventory.addItemStackToInventory(new ItemStack(GloryRP.MenotesItem,1)); } else { IChatComponent msg = IChatComponent.Serializer.func_150699_a("§4Erreur : la personne demandé n'existe pas."); p1.addChatMessage(msg); } } } });@Override protected void actionPerformed(GuiButton button) { this.mc.currentScreen.confirmClicked(true, 1); playerInv.closeInventory(); EntityPlayer p1 = playerInv.player; p1.closeScreen(); IChatComponent msg1 = IChatComponent.Serializer.func_150699_a("§4Erreur : la personne demandé n'existe pas. id : " + button.id); p1.addChatMessage(msg1); MinecraftServer mc1 = FMLServerHandler.instance().getServer(); for (GameProfile g1 : mc1.func_152357_F()) { if (g.getText().equals(g1.getName())) { EntityPlayer p = mc1.getEntityWorld().func_152378_a(g1.getId()); p.inventory.addItemStackToInventory(new ItemStack(GloryRP.MenotesItem, 1)); } else { IChatComponent msg = IChatComponent.Serializer.func_150699_a("§4Erreur : la personne demandé n'existe pas."); p1.addChatMessage(msg); } } }-> Tu as 2 fonctions qui sont appelées lorsque tu cliques
-> “this.mc.currentScreen.confirmClicked(true, 1);” -> pourquoi ?
-> “MinecraftServer mc1 = FMLServerHandler.instance().getServer();” -> tu essaies s’accéder au serveur côté client
-> “p.inventory.addItemStackToInventory(new ItemStack(GloryRP.MenotesItem, 1));” -> tu essaies d’ajouter un item côté client ce qui risque de créer un item fantôme
-> “} else {
IChatComponent msg = IChatComponent.Serializer.func_150699_a(”§4Erreur : la personne demandé n’existe pas.");p1.addChatMessage(msg);
}" -> je pense que ceci devrait être appelé à la fin de la boucle sinon tu risques de spamer un peuGL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_BLEND);-> pourquoi ?
PS : pense à faire du nettoyage car tu as beaucoup de commentaires
-
Bon déjà il manque
g.drawTextBox(); dans ta classe et dans la fonction drawSreen(), juste avant le super.drawScreen(); comme ça t’es sur qu’il sera au premier plan, pas après.
et on appelle pas une méthode g ça veux rien dire, m’enfin tu fais comme tu veux