-
@Xemnys a dit dans Problème avec le Gui & Container [1.7.10] :
Je n’ai pas coupé le code, je n’ai juste pas tout pris le code (les imports et autres)
Imprimes ta classe sur une feuille de papier et coupe-là juste après les importations. Tu aura exactement le résultat qu’ici, c’est pour ça que j’ai dit “Dommage d’avoir coupé les importations”.
Cela correspond à ça :
if (this.tileForge.isBurning())
tileForge est donc null, tu peux envoyer le code de ton guihandler ? -
D’accord, voici le code du GuiHandler :
import cpw.mods.fml.common.network.IGuiHandler; import fr.irisium.irisiummod.container.ContainerForge; import fr.irisium.irisiummod.gui.GuiForge; import fr.irisium.irisiummod.tileentity.TileEntityForge; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; public class GuiHandler implements IGuiHandler { public GuiHandler (){ } @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { if(ID == 0){ TileEntityForge tileEntityForge = (TileEntityForge) world.getTileEntity(x, y, z); return new ContainerForge(player.inventory, tileEntityForge); } return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { if(ID == 0){ TileEntityForge tileEntityForgeContainer = (TileEntityForge) world.getTileEntity(x, y, z); return new GuiForge(player.inventory, tileEntityForgeContainer); } return null; } }Merci d’avoir pris du temps pour répondre à mon problème,
Cordialement, Xemnys -
Aucun problème ici, le seul moyen d’avoir un NPE est que
world.getTileEntity(x, y, z)renvoie null.Et en remontant à la classe de ton bloc, en effet à aucun moment tu n’indiques que ton bloc a un tile entity (il faut implémenter les méthodes
hasTileEntityetcreateTileEntity -
Bonsoir,
J’ai fait comme vous me l’avez dit, d’ajouter les méthodes hasTileEntity et createTileEntity dans la classe du block mais c’est toujours les mêmes crash-report.
Mais en regardant le crash-report, j’ai remarquer qu’il y a un soucis dans la ligne du “onBlockActivated” dans la classe BlockForgeMod.Merci d’avoir pris le temps de m’aider,
Cordialement, Xemnys -
Tu as mis quoi dans ces deux fonctions ?
Ton tile entity est bien enregistré ? https://www.minecraftforgefrance.fr/topic/995/ajouter-une-entité-à-votre-bloc-tile-entity -
Voici ce que j’ai mis dans les deux fonctions :
@Override public boolean hasTileEntity(int metadata) { return true; } @Override public TileEntity createTileEntity(World world, int metadata) { if(metadata == 0) { return new TileEntityForge(); } else if(metadata == 1) { return new TileEntityForge(); } else if(metadata == 2) { return new TileEntityForge(); } return null; }Et oui j’ai bien enregistrer le TileEntity.
-
J’ai fait des modifications dans la ligne “onBlockActivated” voici le code :
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9) { if (world.isRemote) { return true; } else { TileEntityForge tileentityforge = (TileEntityForge)world.getTileEntity(x, y, z); if (tileentityforge != null) { player.openGui(IrisiumMod.instance, 0, world, x, y, z); } return true; } }Mais cette fois, quand on fait un clique droit sur le block, rien ne se passe. Pas de crash juste le gui qui ne veut pas s’ouvrir.
Cordialement, Xemnys.
-
Bonsoir,
Petite mise à jour au niveau du block, sur un court temps j’ai réussi à accéder au block mais après avoir cassé le block et l’avoir reposé. Je n’arrive plus à y accéder.
Cordialement, Xemnys.
-
Tu peux mettre directement comme ceci, sans check de metadata :
@Override public TileEntity createTileEntity(World world, int metadata) { return new TileEntityForge(); }Il y a une erreur dans les logs où quelque chose ?
-
C’est bon tout marche bien, merci beaucoup de ton aide
Cordialement, Xemnys