Problème ajout d'ItemStack dans l'inventaire


  • Rédacteurs

    Voilà, le problème est très simple, j'ai créé ce bloc qui s'appelle sceau parce que c'est un bloc pour tester au propre le code qui bug

    
    public class BlockSceau extends Block {
    
    public BlockSceau() {
    super(Material.iron);
    this.setUnlocalizedName("sceau");
    }
    
    @Override
    public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ)
    {
    if(!world.isRemote && player.getHeldItem() != null && (player.getHeldItem().getItem() == Items.water_bucket || player.getHeldItem().getItem() == Items.bucket))
    {
    if(player.getHeldItem().getItem() == Items.bucket)
    {
    if(–player.inventory.mainInventory[player.inventory.currentItem].stackSize <= 0)
    {
    player.inventory.mainInventory[player.inventory.currentItem] = new ItemStack(Items.water_bucket, 1, 0);
    }
    else
    {
    if(!player.inventory.addItemStackToInventory(new ItemStack(Items.water_bucket)))
    {
    player.dropPlayerItemWithRandomChoice(new ItemStack(Items.water_bucket, 1, 0), false);
    }
    }
    return true;
    }
    else if(player.getHeldItem().getItem() == Items.water_bucket)
    {
    if(–player.inventory.mainInventory[player.inventory.currentItem].stackSize <= 0)
    {
    player.inventory.mainInventory[player.inventory.currentItem] = new ItemStack(Items.bucket, 1, 0);
    }
    else
    {
    if(!player.inventory.addItemStackToInventory(new ItemStack(Items.bucket)))
    {
    player.dropPlayerItemWithRandomChoice(new ItemStack(Items.bucket, 1, 0), false);
    }
    }
    return true;
    }
    }
    return true;
    }
    }
    
    

    Et donc le problème est que lorsque j'ai plusieurs sceaux vides stackés et que je fais clique droit ça m'enlève bien un sceau vide mais le sceau plein n'apparaît nul part dans mon inventaire mais y est bien présent, en effet si je fait un /kill les sceaux d'eau dropent et je peux les ramasser comme si de rien n'était



  • Essaie sans le if (!world.isRemote), si çà ne marche pas sans, à la fin de ton code fait un player.detectAndSendChanges



  • Et essaie aussi à la suite de ton code qui donne le seau cette méthode, on sait jamais 😃
    player.inventory.markDirty();


  • Rédacteurs

    Ah bah oui, ça marche sans le !world.isRemote, c'est tout bête.
    Merci

    EDIT : player.inventory.markDirty() ne marche pas, j'avais déjà essayé