Créer un item container (type backpack / sac à dos)
-
@‘SCAREX’:
Je pense que ce qu’il se passe c’est que l’item en main du joueur disparaît ou alors le joueur change son slot utilisé, or ce n’est pas censé arriver, as-tu une idée de comment le joueur pourrait changer son slot utilisé ou déplacer l’ItemStack ?
J’ai vraiment aucune idée sur ce coup là… Par contre mon hypothèse est fausse : le crash ne survient pas lorsque deux sacs s’ouvrent. Je connais désormais la raison, certaines personnes s’amusent à ouvrir et fermer très rapidement leurs sacs. Après ça le serveur crash quasiment à coup sûr…
-
Tu peux verifier à chaque tick si le joueur a toujours le sac en main et ne change pas de slot en cours, s’il change tu fermes le sac
-
Il faut ajouter un null check pour corriger ce NPE.
Et dans le container dans la fonction canInteractWith il devrait avoir return player.getHeldItem() != null && player.getHeldItem().getItem() == ClassePrincipale.leSac; et non return true;
-
Merci je teste cela.

-
Sac :
@Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { player.openGui(ModAltisCraft.instance, 1, world, (int) player.posX, (int) player.posY, (int) player.posZ); return stack; }Mod :
@Mod(modid="altiscraft.MODID", name="AltisCraft.fr", version="1.0.0") public class ModAltisCraft { public static final String MODID = "altiscraft"; @Mod.Instance("altiscraft.MODID") public static ModAltisCraft instance; public static final int guiIDMenu = 0; public static final int GuiSac = 1;Et le Gui ne s’ouvre pas de l’aide s’il vous plaît ?

-
As-tu enregistré ton guiHandler ? Si oui, envoi ton guiHandler
Envoyé de mon SM-G920F en utilisant Tapatalk
-
Mod :
@Mod.EventHandler public void init(FMLInitializationEvent event) { NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler()); }GuiHandler :
package fr.altiscraft.benjaminloison.gui; import cpw.mods.fml.common.network.IGuiHandler; import fr.altiscraft.benjaminloison.common.ConteneurSac; import fr.altiscraft.benjaminloison.common.InventaireSac; import fr.altiscraft.benjaminloison.common.Sac; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; public class GuiHandler implements IGuiHandler { @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { switch (ID) { case 0: if (player.getHeldItem() == null || !(player.getHeldItem().getItem() instanceof Sac)) return null; return new ConteneurSac(player.inventory, new InventaireSac(player.getHeldItem(), 54)); } return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { switch (ID) { case 0: if (player.getHeldItem() == null || !(player.getHeldItem().getItem() instanceof Sac)) return null; return new GuiSac(player.inventory, new InventaireSac(player.getHeldItem(), 54)); } return null; } } -
Normal, tu demandes l’id 1 mais ton guiHandler c’est case 0
Envoyé de mon SM-G920F en utilisant Tapatalk
-
player.openGui(ModAltisCraft.instance, 0, world, (int) player.posX, (int) player.posY, (int) player.posZ); ``` ne change rien :/ et ```java public static final int GuiSac = 0; ``` non plus :/ -
@Mod.Instance("altiscraft.MODID") public static ModAltisCraft instance;…
C’est soit :@Mod.Instance(ModAltisCraft.MODID) public static ModAltisCraft instance;soit
@Mod.Instance("altiscraft") public static ModAltisCraft instance;Mais pas le mélange des deux …
-
Avec ça ```java
@Mod.Instance(ModAltisCraft.MODID)
public static ModAltisCraft instance;J'ai ce crash : java.lang.NullPointerException: Initializing game at cpw.mods.fml.common.network.NetworkRegistry.registerGuiHandler(NetworkRegistry.java:219) at fr.altiscraft.benjaminloison.common.ModAltisCraft.init(ModAltisCraft.java:574) Avec la ligne 574 : ```java NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler());Je comprends pas le NPE

-
Ah en fait cette ligne est fausse aussi :
@Mod(modid=“altiscraft.MODID”, name=“AltisCraft.fr”, version=“1.0.0”)
Du-coup les deux erreurs se compensaient …
ça devrait être :
@Mod(modid=ModAltisCraft.MODID, name=“AltisCraft.fr”, version=“1.0.0”)mais ça veut aussi dire que l’erreur ne vient pas de là.
-
C’est bon j’arrive à relancer le jeu mais ça n’ouvre toujours pas mon Sac

-
Renvoi toutes tes classes
Envoyé de mon SM-G920F en utilisant Tapatalk
-
@‘robin4002’:
mais ça veut aussi dire que l’erreur ne vient pas de là.
je m’en doutais. Essayes de mettre des System.out.println par ci par là.
-
player.openGui(ModAltisCraft.instance, 0, world, (int) player.posX, (int) player.posY, (int) player.posZ); ``` Est censé lire ça ? ```java public static final int GuiSac = 0; ``` Non ? -
? Pas compris. De plus SCAREX t’as demandé de renvoyer tout ton code.
-
Le code est trop long, voici un pastbin: http://pastebin.com/brE9q503
-
Pourquoi tu as deux gui handler ?
C’est un gui handler par mod. ça explique pourquoi ça ne fonctionne pas … Le deuxième écrase le premier. -
Et comment on peut fusionner ça :
@Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity tile = world.getTileEntity(x, y, z); if(tile instanceof TileEntityPoubelle) { return new ContainerPoubelle((TileEntityPoubelle)tile, player.inventory); } return null; } ``` et ça ? ```java @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { switch (ID) { case 0: if (player.getHeldItem() == null || !(player.getHeldItem().getItem() instanceof Sac)) return null; System.out.println("Test2"); return new ConteneurSac(player.inventory, new InventaireSac(player.getHeldItem(), 54)); } return null; }