Retirer des Items d'un joueur

Thomas_080

Bucheron
18 Mars 2019
25
0
14
27
Bonjour à tous je suis en train de créer un bedwars, j'ai tout fini sauf un petit quelque chose;
j'ai fait que lorsque l'on interragi avec un vilageois ça nous ouvre un inventaire avec plusieurs items à acheter,
par exemple si le joueur veut acheter 16 laine a 4 fer ; j'ai vérifié que si le joueur à 4 fer dans son inventaire je lui donne...mais je trouve pas comment faire pour lui retirer

PS: petites infos: Spigot 1.13; Java(Eclipse)
Merci par avance
Thomas
 

Belphhegor

Mappeur & Dev
20 Mai 2013
77
13
102
En gros, si cela te convient :

( Ton ItemStack) .setAmount [ ( Ton ItemStack ) .getAmount() - 4 ]
À condition de vérifier que getAmount() >= 4 héhé

Il est possible que tu doives ajouter ce bout de code dans un morceau plus grand qui vérifie certaines contraintes pour assurer l'intégrité de ce retrait !
 
Dernière édition:

Thomas_080

Bucheron
18 Mars 2019
25
0
14
27
Je doit donc creer un Itemstack genre :
Itemstack iron = new ItemStack(Material.iron);
Puis mettre iron .setAmount(???
Enfin je voit oas trop^^
PS pour véfifier si le joueur à tant d'iron j'ai fait ifplayer.getInventory().contains(Material.IRON, 4){...
 

Detobel36

Créateur de plugins (PhoenixRebirth)
Support
17 Août 2012
10 531
24
2 247
347
27
Bruxelles - Belgique
www.phoenix-rebirth.fr
Salut,

@Thomas_080 que tu débutes en Java, ok..
Mais la c'est quand même la base.

Tu ne peux pas développer en Java si tu ne comprend pas ce qu'est un objet, une instance, une fonction, une méthode, une boucle, une condition, une constante et une variables.
Si tu n'as pas au moins ces bases là, on va pas pouvoir faire grand chose pour toi... Il existe pleins de tutoriel pour apprendre Java (ici par exemple: https://openclassrooms.com/fr/courses/26832-apprenez-a-programmer-en-java

Je doit donc creer un Itemstack genre :
Non, tu dois récupérer l'item que la personne à dans son inventaire.


Cordialement,
Detobel36
 

Thomas_080

Bucheron
18 Mars 2019
25
0
14
27
Hummmm merci de ta réponse mais...
Si je vient ici c'est que je ne trouve / comprends pas ailleurs...
Je demande juste ça c'est pas grand chose je suppose...
 

Detobel36

Créateur de plugins (PhoenixRebirth)
Support
17 Août 2012
10 531
24
2 247
347
27
Bruxelles - Belgique
www.phoenix-rebirth.fr
Salut,

Si je vient ici c'est que je ne trouve / comprends pas ailleurs...
Sauf que la c'est pas que tu ne comprend pas l'API spigot... Ce que tu ne comprend pas c'est le logique Java. Et ça c'est pas vraiment le sujet du forum ici.
Qu'on t'aide au niveau de la compression de l'API Spigot/Bukkit... c'est logique. Mais si tu as du mal avec Java il y a d'autres forum pour ça.

Pour répondre concrètement à ta question:
PHP:
Player p; // Le joueur sur lequel tu veux faire tes tests
final Inventory inv = p.getInventory(); // On récupère l'inventaire du joueur
final ItemStack ironItem = new ItemStack(Material.IRON_INGOT);
final int prix = 4;

if(inv.containsAtLeast(ironItem, prix)) { // On vérifie qu'il a assez d'item
    int itemThatMustBeRemove = prix; // On compte le nombre d'item supprimé
    while(itemThatMustBeRemove > 0) { // Tant que le joueur n'a pas tout payé
        final int indexItem = inv.first(Material.IRON_INGOT); // On regarde où est le fer dans l'inventaire
        final ItemStack invItem = inv.getItem(indexItem); // Récupérer l'item dans son inventaire
        final int nbrItem = invItem.getAmount(); // Nombre d'item à cet emplacement
        itemThatMustBeRemove -= nbrItem; // On indique le nombre d'item que l'on va retirer
        if(nbrItem <= itemThatMustBeRemove) { // Si il y a le compte bon ou pas assez
            inv.clear(indexItem); // On supprime les items à cet emplacement
        } else { // S'il y a assez d'item à un emplacement
            // On supprime le nombre d'item qu'il faut encore supprimer
            invItem.setAmount(invItem.getAmount()-itemThatMustBeRemove);
        }
    }
}
Il y a une boucle car il est possible que les lingots soient dans des slots différents. Il faut donc peut être parcourir plusieurs ItemStack.

Attention: le code n'a pas été test ni même vérifié par un quelconque environnement d'IDE.


Cordialement,
Detobel36
 

Detobel36

Créateur de plugins (PhoenixRebirth)
Support
17 Août 2012
10 531
24
2 247
347
27
Bruxelles - Belgique
www.phoenix-rebirth.fr
Salut,

A mon avis il passe à 124 car il part dans les négatifs... et du coup il boucle 128 - 4...
Comme j'ai dit, je n'ai pas testé le code.

A toi de mettre des messages de débug et/ou d'utiliser un débugger pour comprendre d'où ça vient. Mais la logique est là ;)


Cordialement,
Detobel36
 
  • J'aime
Reactions: Belphhegor