SOLVED 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 variable

    au final, dans ta variable il y aura la date du jour et non la date modifiée.