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

Dabiceps_

Aventurier
25 Février 2022
2
0
1
23
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 ?
 

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 087
157
455
247
21
Mìlhüsa
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.