Résolu Probleme Event PickedUp Item
-
Salut, j’ai créé un nouvel inventaire, je souhaiterais que quand on a son inventaire de base, remplit, ca ramasse les items et les mette dans mon nouvel inventaire. J’ai utilisé un l’event [size=smallPlayerEvent.ItemPickupEvent], mes méthodes sont bien j’ai testé avec un println, mais ca ne marche pas:
[font=Courier New@SubscribeEvent ]**public void **itemPickedUp(PlayerEvent.ItemPickupEvent event){ System.***out***.println(**"1"**); EntityPlayer player = event.**player**; EntityItem item = event.**pickedUp**; **minefusContainer **= **new **MinefusContainerPlayer(player, player.**inventory**, ExtendedPlayer.*get*(player).**inventory**); **if**(player.**inventory**.getFirstEmptyStack() == -1){ System.***out***.println(**"2"**); **if**(**minefusInventory**.getFirstEmptyStack() == -1){ System.***out***.println(**"3-1"**); }**else**{ System.***out***.println(**"3-2"**); **int **slotId = **minefusInventory**.getFirstEmptyStack(); **if**(**minefusInventory**.isItemValidForSlot(slotId, event.**pickedUp**.getEntityItem()) == **true**){ System.***out***.println(**"4"**); **minefusContainer**.putStackInSlot(slotId, event.**pickedUp**.getEntityItem()); event.**pickedUp**.setDead(); } } } }
:::
[23:01:03] [Server thread/INFO] [STDOUT]: [com.google.kujaff42530.moddofus.eventHandlers.MinefusEventHandler:itemPickedUp:94]: 1[23:01:03] [Server thread/INFO] [STDOUT]: [com.google.kujaff42530.moddofus.eventHandlers.MinefusEventHandler:itemPickedUp:99]: 2
[23:01:03] [Server thread/INFO] [STDOUT]: [com.google.kujaff42530.moddofus.eventHandlers.MinefusEventHandler:itemPickedUp:103]: 3-2
[23:01:03] [Server thread/INFO] [STDOUT]: [com.google.kujaff42530.moddofus.eventHandlers.MinefusEventHandler:itemPickedUp:106]: 4
::: -
Il manque des crochets dans tes if.
EDIT : en fait non, c’est juste l’indexation qui m’a troublé.
-
Non il n’en manque aucun.
-
Fait un system.out.println montrant le contenu de l’inventaire ainsi que l’item contenu dans l’entité.
-
Mon code:
@SubscribeEvent public void itemPickedUp(PlayerEvent.ItemPickupEvent event){ System.out.println("1"); EntityPlayer player = event.player; EntityItem item = event.pickedUp; minefusContainer = new MinefusContainerPlayer(player, player.inventory, ExtendedPlayer.get(player).inventory); if(player.inventory.getFirstEmptyStack() == -1){ System.out.println(player.inventory.getFirstEmptyStack()); if(minefusInventory.getFirstEmptyStack() == -1){ System.out.println(minefusInventory.getFirstEmptyStack()); }else{ System.out.println(minefusInventory.getFirstEmptyStack()); int slotId = minefusInventory.getFirstEmptyStack(); if(minefusInventory.isItemValidForSlot(slotId, event.pickedUp.getEntityItem()) == true){ System.out.println(event.pickedUp.getEntityItem().getDisplayName()); minefusContainer.putStackInSlot(slotId, event.pickedUp.getEntityItem()); event.pickedUp.setDead(); } } } }
Les logs:
[20:04:42] [Server thread/INFO] [STDOUT]: [com.google.kujaff42530.moddofus.eventHandlers.MinefusEventHandler:itemPickedUp:95]: 1 -1 0 [20:04:42] [Server thread/INFO] [STDOUT]: [com.google.kujaff42530.moddofus.eventHandlers.MinefusEventHandler:itemPickedUp:108]: Sand
-
Le contenu n’est pas sauvegardé.
-
Quel contenu ? Comment je dois procéder alors ?
-
@‘sosoh’:
Quel contenu ? Comment je dois procéder alors ?
Ton entityExtendedProperties n’est pas sauvegardé.
-
Et donc je dois faire comment, je la sync ?
-
@‘sosoh’:
Et donc je dois faire comment, je la sync ?
NBTTagCompound playerData = new NBTTagCompound(); ((ExtendedEntityPropTuto)(event.entity.getExtendedProperties(ExtendedEntityPropTuto.EXT_PROP_NAME))).saveNBTData(playerData); proxy.storeEntityData(((EntityPlayer) event.entity).getDisplayName(), playerData); ExtendedEntityPropTuto.saveProxyData((EntityPlayer) event.entity);
-
Jai fait ca mais ca ne marche pas non plus:
[font=Courier New**if**](**minefusInventory**.isItemValidForSlot(slotId, event.**pickedUp**.getEntityItem()) == **true**){ System.***out***.println(**"Nom item" **+ event.**pickedUp**.getEntityItem().getDisplayName()); ItemStack itemStack = event.**pickedUp**.getEntityItem(); **minefusContainer**.putStackInSlot(slotId, itemStack); NBTTagCompound playerData = **new **NBTTagCompound(); ((ExtendedPlayer)(player.getExtendedProperties(ExtendedPlayer.***EXT_PROP_MINEFUSINV***))).saveNBTData(playerData); **proxy**.*storeEntityData*(player.getDisplayName(), playerData); ExtendedPlayer.*saveProxyData*(player); event.**pickedUp**.setDead(); }
-
Il faut utiliser l’entityExtendedProperties que tu as récupérer auparavant car là tu enregistres l’EEP qui était déjà enregistré.
-
Je n’ai récupéré aucune ExtendedProperties auparavant. Je ne comprends pas
-
@‘sosoh’:
Je n’ai récupéré aucune ExtendedProperties auparavant. Je ne comprends pas
et là ?
ExtendedPlayer.get(player).inventory
-
Cette méthode fait la meme chose que celle dans mon code:
[font=Courier New**public static final **]ExtendedPlayer get(EntityPlayer player) { **return **(ExtendedPlayer) player.getExtendedProperties(***EXT_PROP_MINEFUSINV***); }
%(#000000)[[font=Courier New]((ExtendedPlayer)(player.getExtendedProperties(ExtendedPlayer.***EXT_PROP_MINEFUSINV***])))
Donc ca revient au meme non ?
-
@‘sosoh’:
Cette méthode fait la meme chose que celle dans mon code:
[font=Courier New**public static final **]ExtendedPlayer get(EntityPlayer player) { **return **(ExtendedPlayer) player.getExtendedProperties(***EXT_PROP_MINEFUSINV***); }
%(#000000)[[font=Courier New]((ExtendedPlayer)(player.getExtendedProperties(ExtendedPlayer.***EXT_PROP_MINEFUSINV***])))
Donc ca revient au meme non ?
Non, puisque en premier tu récupère l’EEP puis tu le modifie, puis tu le récupère encore et tu le sauvegardes.
Exemple :
-tu récupère la date du jour
-tu changes la date
-tu récupère la date du jour
-tu la sauvegarde dans une variableau final, dans ta variable il y aura la date du jour et non la date modifiée.