Créer un gui et un container sur un bloc (type coffre)
-
Merci beaucoup, je vais voir ça de ce pas

-
Vérifie toutes les fonctions en rapport avec les tile entity, et envoie tes codes (de préférence via des liens pastebin pour ne pas spammer), on ne peut pas deviner tes codes !
-
Bonjour Robin,
Je me permet de laisser un message d’une part pour vous remercier de vôtre tuto qui est très bien mais qui manque un poil d’explication (je débute c’est sans doute pour ça).
Mais aussi car j’ai une erreur dans le code.
J’ai relu mais je n’arrive pas à trouver mon erreur, voici mon problème :Quand j’ajoute
NetworkRegistry.instance().registerGuiHandler(this.instance, new GuiHandlerPlacard());Il ne reconnait pas l’instance et la souligne en rouge.
Pourriez-vous m’aider ? Merci pour vôtre aide, encore une fois pour vôtre/vos tutos qui m’aident vraiment.
Bonne journée.
-
Dans ta classe principale, ajoute :
@Instance("modid") public static NomDaTaClassePrincipale instance;Il faut bien suivre les tutoriels, c’est écrit dans un des premiers tutoriel : http://www.minecraftforgefrance.fr/showthread.php?tid=60
Il est vrai que ce tutoriel n’est pas beaucoup détaillé, j’ai beaucoup “balancé des codes”, étant donner que je peux tourner tranquillement maintenant (faut encore que je configure pas mal de truc sur mon ordinateur, et encore je pense que le processeur de cette ordinateur va avoir du mal), je vais pouvoir faire une version en vidéo en 1.7 avec plus de détail et d’explication.
-
C’est déjà fait
@Instance("TAL") public static Devmain instance;J’ai remplacé votre code par :
NetworkRegistry.instance().registerGuiHandler(NetworkRegistry.instance(), new GuiHandlerPlacard());Et ça marche. Donc je ne sais pas trop…
Après une question plus personnel, j’ai suivis vôtre tuto pour faire un container particulier. Il ne suivrait pas la taille de l’inventaire ni d’un coffre “classic” mais serait de type 7 par 7 cases (Soit 2 case de moins que l’inventaire en longueur mais 1 ligne de cases en hauteur).
Vous pouvez m’expliquer s’il vous plait comment construire ce code à moins qu’il est possible de modifier le code du coffre en lui même.
Et puis ce sera l’occasion aux apprentis codeurs (comme moi) de pouvoir créer des containers indépendamment du code fourni par Mojang. Je ne vous oblige pas bien entendu et je comprendrais ce refus.
Merci pour cette réponse rapide.
Bonne journée.PS : Je viens de m’apercevoir d’un problème quand je veux placer un bloc à l’intérieur du bloc il disparaît…
-
NetworkRegistry.instance(), c’est pas bon, tu peux m’envoyer toutes tes classes via des liens pastebin ?
Si tu veux modifier la taille, c’est dans le container qu’il faut changer ça. Il y a plusieurs boucle for, c’est celle-ci qui ajoute les slots :
for(int i = 0; i < 6; i++) { for(int j = 0; j < 9; j++) { this.addSlotToContainer(new Slot(teChest, j + i * 9, 8 + j * 18, 18 + i * 18)); } }C’est ce code qui génère les slots, 96 ici, si tu veux faire 77 il suffit d’adapter les boules for.
Il te faut aussi adapter le container :
private ItemStack[] inventory = new ItemStack[72];72 était le nombre total de slot, si tu as un nombre trop petit tu vas avoir un OutOfBoundException (et 9×6 ça fait que 54, je sais pas pourquoi j’ai mit 72 x), 54 devrait fonctionner) donc 49 pour toi comme tu veux mettre 7*7 slots.
Il ne faut pas non plus oublier d’adapter l’image du gui.
-
Parfait, vous êtes exceptionnel !
Je vous envoie mes classes par messages privés ne sachant le faire par des PasteBin.
Merci encore pour les containers ! -
NetworkRegistry.instance().registerGuiHandler(this.instance, new GuiHandlerPlacard());
doit être dans la classe principale, dans la fonction init et non dans le client proxy, ce qui explique l’erreur, et le problème de syncro client ? serveur. -
Décidément j’enchaîne les problèmes sur ce sujet. J’ai créé un second block conteneur. Quand je l’ouvre, il fonctionne bien. Mais du coup, mon premier bloc ne s’ouvre plus. Il n’y a aucune réactions.
-
Fait voir ton gui handler ?
-
Le GuiHandler du bloc qui ne s’ouvre plus.
package _fearZ.mod; import _fearZ.mod.tileentity.TileEntityArmoirePh; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import cpw.mods.fml.common.network.IGuiHandler; public class GuiHandlerArmoirePh implements IGuiHandler { @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity te = world.getBlockTileEntity(x, y, z); if(te instanceof TileEntityArmoirePh) { return new ContainerArmoirePh(player.inventory, (TileEntityArmoirePh)te); } return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity te = world.getBlockTileEntity(x, y, z); if(te instanceof TileEntityArmoirePh) { return new GuiArmoirePh(player.inventory, (TileEntityArmoirePh)te); } return null; } }Celui de mon nouveau bloc
package _fearZ.mod.gui.handler; import _fearZ.mod.containers.ContainerMChest; import _fearZ.mod.gui.GuiMChest; import _fearZ.mod.tileentity.TileEntityMChest; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import cpw.mods.fml.common.network.IGuiHandler; public class GuiHandlerMChest implements IGuiHandler { @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity te = world.getBlockTileEntity(x, y, z); if (te instanceof TileEntityMChest) { return new ContainerMChest(player.inventory, (TileEntityMChest)te); } return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity te = world.getBlockTileEntity(x, y, z); if (te instanceof TileEntityMChest) { return new GuiMChest(player.inventory, (TileEntityMChest)te); } return null; } } -
C’est un guiHandler par mod, logiquement.
-
package _fearZ.mod; import _fearZ.mod.containers.ContainerMChest; import _fearZ.mod.gui.GuiMChest; import _fearZ.mod.tileentity.TileEntityMChest; import _fearZ.mod.tileentity.TileEntityArmoirePh; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import cpw.mods.fml.common.network.IGuiHandler; public class GuiHandler implements IGuiHandler { @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity te = world.getBlockTileEntity(x, y, z); if(te instanceof TileEntityArmoirePh) { return new ContainerArmoirePh(player.inventory, (TileEntityArmoirePh)te); } if (te instanceof TileEntityMChest) { return new ContainerMChest(player.inventory, (TileEntityMChest)te); } return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity te = world.getBlockTileEntity(x, y, z); if(te instanceof TileEntityArmoirePh) { return new GuiArmoirePh(player.inventory, (TileEntityArmoirePh)te); } if (te instanceof TileEntityMChest) { return new GuiMChest(player.inventory, (TileEntityMChest)te); } return null; } } -
Ah d’accord. Merci pour l’info. je savais pas… ou peut-être ais-je mal lu le tuto.
-
J’ai suivie le tutoriel, vérifier mon code avec celui du github du tuto et tout à l’aire bon même éclipse ne dit rien, aucun message d’erreur, rien du tout, mais rien ne se passe quand je fait un clic droit sur mon block.
lien du code :
classe principale
GuiHandler
Class du block
Le GUI
Le container
Le TileEntityPouvez vous me dire où est mon erreur .
-
Étrange, le System.out.println(“BoxChest - ac”); s’affiche t-il dans la console ?
-
non justement,je l’avait mis afin de voir à quelle étape ça ne marchait pas
-
Dans ce cas ça veut dire que ta condition if(metadata <= 6 && metadata >= 11) n’est pas remplit, il faut que tu cherches pourquoi. (fait par exemple un player.addChatMessage(String.valueOf(metadata)); pour vérifier le metadata du bloc).
-
C’est en effet la condition qui a planté, je sais pas pourquoi car la syntaxe est bonne, et la condition (la valeur du metadata) aussi
18h30 :
je pense que je vais passer par un complément ou ( “||” ) ce ui me donneif(metadata == 6 || metadata == 7 || metadata == 8 || metadata == 9 || metadata == 10 || metadata == 11)le truc c’est que la condition est bien plus lourde niveau écriture
18h45 :
C’est bon c’était ça, c’est quand même bizzard que la condition est buggé comme ça -
if(metadata >= 6 && metadata <= 11)
Comme ça, ça devrait fonctionner. Avec la condition que tu avais avant tu disais “si le metadata est inférieur ou égale à 6 et qu’il est supérieur ou égale à 11 alors” ce qui ne peut pas arriver comme il existe aucun nombre qui remplit cette condition.
