Créer un gui et un container sur un bloc (type coffre)
-
As-tu remplis ta fonction getLocalGuiContainer dans le GuiHandler ? Si non, mets-y exactement pareil que pour le serveur en changeant le return par le gui de ton bloc.
Ce qui donne :
@Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity te = world.getTileEntity(x, y, z); if(te instanceof TonTileEntity) return new GuiDetonBloc(player.inventory, (TonTileEntity)te); return null; } -
j’ai sa :
@Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { if(ID == 0){ TileEntityFourArc tileEntityFourArc = (TileEntityFourArc) world.getTileEntity(x, y, z); return new ContainerFourArc(player.inventory, tileEntityFourArc); } return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { if(ID == 0){ TileEntityFourArc ContainerFourArc = (TileEntityFourArc) world.getTileEntity(x, y, z); return new GuiFourArc(player.inventory, ContainerFourArc); } return null; }en faisant comme tu me dit sa me met des erreurs
-
Tu as un NPE, à mon avis c’est ton instance qui est null, envoie ta classe principale.
-
je pense que j’ai oublié des choses dans la classe principale
package com.bowser.robotic.common; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.common.MinecraftForge; import com.bowser.robotic.proxy.CommonProxy; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; @Mod(modid = "roboticmod", name = "Mod Robotic", version = "1.0.0") public class Robotic { public static final String modid = "roboticmod"; @Instance("roboticmod") public static Robotic instance; @SidedProxy(clientSide = "com.bowser.robotic.proxy.ClientProxy", serverSide = "com.bowser.robotic.proxy.CommonProxy") public static CommonProxy proxy; //blocks public static Block cuivreOre; public static Block blockCable; public static Block boisResine; public static Block feuillesResine; public static Block pousseResine; public static Block fourArc; public static Block lithiumOre; //items public static Item copperIngot; public static Item lithiumDust; @EventHandler public void preInit(FMLPreInitializationEvent event) { //Blocks cuivreOre = new OreCuivre(Material.rock).setBlockName("cuivreore").setBlockTextureName("roboticmod:orecuivre").setCreativeTab(CreativeTabs.tabBlock).setHardness(3.0F).setResistance(5.0F); GameRegistry.registerBlock(cuivreOre, "block_cuivre"); lithiumOre = new LithiumOre(Material.rock).setBlockName("lithiumore").setBlockTextureName("roboticmod:orelithium").setCreativeTab(CreativeTabs.tabBlock).setHardness(4.0F).setResistance(5.0F); GameRegistry.registerBlock(lithiumOre, "block_lithium"); //blocks+techne fourArc = new FourArcBlock(Material.rock, false).setBlockName("fourarc").setBlockTextureName("roboticmod:fourarcbreak").setCreativeTab(CreativeTabs.tabBlock).setHardness(3.0F).setResistance(5.0F); GameRegistry.registerBlock(fourArc, "four_arc"); blockCable = new BlockElectricCable().setBlockName("blockPipe").setCreativeTab(CreativeTabs.tabBlock); GameRegistry.registerBlock(blockCable, "block_cable"); //arbre de Resine boisResine = new BoisResine().setBlockTextureName("roboticmod:resine_bois").setBlockName("resine_bois"); feuillesResine = new FeuillesResine().setBlockTextureName("roboticmod:feuilles").setBlockName("resine_feuilles"); pousseResine = new PousseResine().setBlockTextureName("roboticmod:pousse").setBlockName("resine_pousse"); GameRegistry.registerBlock(boisResine , "resine_bois"); GameRegistry.registerBlock(feuillesResine , "resine_feuilles"); GameRegistry.registerBlock(pousseResine, "resine_pousse"); //items copperIngot = new CopperIngot().setUnlocalizedName("copperingot").setTextureName("roboticmod:copperingot").setCreativeTab(CreativeTabs.tabMaterials); GameRegistry.registerItem(copperIngot, "copper_ingot"); lithiumDust = new LithiumDust().setUnlocalizedName("lithiumdust").setTextureName("roboticmod:lithiumdust").setCreativeTab(CreativeTabs.tabMaterials); GameRegistry.registerItem(lithiumDust, "lithium_dust"); //recipe furnace basic GameRegistry.addSmelting(cuivreOre, new ItemStack(copperIngot, 1), 0f); } @EventHandler public void init(FMLInitializationEvent event) { proxy.registerRender(); proxy.registerTileEntityRender(); GameRegistry.registerTileEntity(TileEntityFourArc.class, "FourArc"); //generator GameRegistry.registerWorldGenerator(new WorldGeneratorCopper(), 0); //generation Arbres a Resine GameRegistry.registerWorldGenerator(new WorldGeneration(), 0); GameRegistry.registerTileEntity(TileEntityPipe.class, "Pipe"); } @EventHandler public void postInit(FMLPostInitializationEvent event) { } } -
En fait non, ton instance est bonne, je viens de relire le crash, le npe n’est pas sur l’instance, mais ici :
at cpw.mods.fml.common.network.NetworkRegistry.getLocalGuiContainer(NetworkRegistry.java:263)
Donc le problème vient bien du GuiHandle que tu n’as visiblement pas enregistré.
Donc enregistre ton gui handler de la methode init de ta classe principale et ça sera bon. -
Désoler mais je sais pas du tout comment faire

j’ai regarder le tuto et j’ai adapté ( comme sa change en 1.7.10 )donc dans Init de la classe principale sa donne
proxy.registerGuiHandler(this.instance, new GuiHandler());donc dans CommonProxy il me dit de mettre :
public void registerGuiHandler(Robotic instance, GuiHandler guiHandler) { }je dois mettre quelque chose dedans ? parce que sa ne marche toujours pas enfin toujours la meme erreur donc a pirori je l’ai mal enregistré
-
Non, il faut que tu enregistre le GuiHandler dans la fonction init de ta classe principale, regarde le tutoriel
-
c’est bon j’ai réussi
dans la classe principale on a :%(#555555)[[font=Arial, tahoma, sans-serif]proxy.registerGuiHandler(this.instance, new GuiHandler());]et dans le CommonProxy :
public void registerGuiHandler(Robotic instance, GuiHandler guiHandler) { // TODO Auto-generated method stub NetworkRegistry.INSTANCE.registerGuiHandler(Robotic.modid, new GuiHandler()); }En tout cas merci de votre aide a tous
-
Tu peux directement mettre le “NetworkRegistry.INSTANCE.registerGuiHandler(Robotic.modid, new GuiHandler());” dans ta fonction init.
-
Ok bon a savoir merci en tout cas
-
Plop!
Hum, je sais pas si le tuto est entièrement compatible 1.7.10 mais moi de mon côté j’ai quelques erreurs:
Méthode readFromNBT(NBTTagCompound) du TileEntity:
“The method getTagList(String, int) in the type NBTTagCompound is not applicable for the arguments (String)”
“The method tagAt(int) is undefined for the type NBTTagList”Méthodes decrStackSize(int, int) et setInventorySlotContents(int, ItemStack) du TileEntity:
“The method onInventoryChanged() is undefined for the type TileEntityBigChest”Méthode drawGuiContainerForegroundLayer(int, int) du GUI:
“fontRenderer cannot be resolved or is not a field”
“The method isInvNameLocalized() is undefined for the type IInventory”
“The method getString(String) is undefined for the type I18n”Vàla, en espérant qu’il y ait une solution

-
Non, il n’est pas fait pour la 1.7.
Regarde ici :
https://github.com/FFMT/Privatizer/tree/master/privatizer_src/fr/mcnanotech/privatizer/common
TileEntityPrivateChest et ContainerPrivateChest devrait t’aider. -
Merci pour cette réponse rapide ^^
Je vais y jeter un coup d’oeil.
Est-ce que le tuto sera mis à jour pour la 1.7 ou bien il passera directement en 1.8?
EDIT: Au fait, “massive” work

-
Je ne sais pas, ça dépendra de mon temps.
Ah oui en effet, mais maintenant c’est trop tard pour changer le nom du commit ^^
-
Salut, comment rajouter un bouton sur le gui ? Et faire que quand on clique dessus ca fait quelque chose ?
-
C’est le même principe que pour ajouter des boutons dans un menu de Minecraft. Tu peux aussi regarder le gui de l’enclume (GuiRepair)
Attention si les actions que tu veux faire doit être fait côté serveur, il faut utiliser un paquet. -
Je veux faire que si dans le slot 1 on a un objet precis alors ca le supprime et ca mets un autre item dans un autre slot
-
Tu n’es pas obliger de passer par un bouton pour ça, tu peux passer par la fonction update() du tile entity. Mais si tu veux vraiment le faire depuis un bouton, il te faudra un paquet.
Dans mod privatizer depuis un bloc avec un gui et un container on peut modifier le mot de passe d’un bloc via une zone de texte et un bouton confirmer.
La déclaration du bouton : https://github.com/FFMT/Privatizer/blob/master/privatizer_src/fr/mcnanotech/privatizer/client/GuiPrivateEditor.java#L47-L49Et l’action du bouton : https://github.com/FFMT/Privatizer/blob/master/privatizer_src/fr/mcnanotech/privatizer/client/GuiPrivateEditor.java#L105-L112
-
J’ai réussis a mettre le bouton et tout, mais je ne trouves pas comment faire que ça check les slots, et que ça te donne la potions et que ça supprime les ingrédients… Tu peux m’aider ?
-
Envoie ton code et explique précisément ce que tu cherche à faire.