Plugin Résolu Besoin d'aide pour une "Diamond Limit"...

  • Auteur de la discussion Auteur de la discussion ShayFox_
  • Date de début Date de début
Ce que tu veux faire, c'est avoir un nombre entier (int) associé à chaque joueur.
Le plus simple serait de rajouter une variable à la classe (composition), mais tu ne peux pas modifier les classes de Bukkit/Minecraft.

La solution est d'utiliser un tableau associatif (Map<K, V>), qui permet d'associer une clef unique (le joueur) à une valeur (le nombre de diamants minés). Cela suit le même principe qu'une liste, sauf qu'au lieu d'accéder aux éléments par son indice (sa position), on le fait par un autre type.

Java:
Map<Player, Integer> map = new WeakHashMap<>();

@EventHandler(ignoreCancelled = true)
public void onBlockBreak(BlockBreakEvent e) {
    if(e.getBlock().getType() != Material.DIAMOND_ORE)
        return;
   
    Player player = e.getPlayer();
   
    int mined = map.getOrDefault(player, 0);
    map.put(player, ++mined);
   
    if(mined >= 6)
        // todo: replace diamond by iron
}


https://www.jmdoudoux.fr/java/dej/chap-collections.htm#collections-5
Je me demandais, est-ce que les diamants minés se sauvegardent si on deco/reco du serveur ? Sinon, que fait-il faire ?
 
Oui en cas de reconnexion, cependant la mémoire n'est jamais sauvegardée donc une fois que le serveur s'est éteint toutes les données en mémoire sont perdues. Il faut sauvegarder les données sur le disque dur à chaque modification ou éventuellement périodiquement.