Questions pour Dé-à-Coudre

LEZIKO

Architecte en herbe
2 Novembre 2021
93
2
69
19
Bonjour, je suis actuellement sur le développement d'un plugin dé-à-coudre et je suis développeur débutant. J'ai réalisé quelques plugins déjà donc j'ai des bases. Je coince sur mon plugin pour faire jouer les joueurs chacun leur tours mais parfois des joueurs peuvent jouer 2 fois d'affilé avec ce que j'ai fait, donc pour l'instant j'ai le fait la salle d'attente, après le chrono tout le monde est tp mais voilà maintenant je souhaite les faire jouer chacun leur tour. Je précise que la liste que j'ai appelé temp c'est la liste temporaire dans laquelle je met les joueurs pour tp le dernier élément, le retirer puis quand la liste est vide on reremplit la liste avec la liste de base (daclist). Je met en pièce jointe ce que j'ai fait, merci d'avance :)
 

Fichiers joints

  • unknown.png
    unknown.png
    54.4 KB · Affichages: 83
Dernière édition:

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 139
163
464
247
21
Mìlhüsa
Bonsoir,

Préfère nommer ta classe principale avec le nom du plugin, parce que ce n'est pas vraiment un Main puisque c'est un autre programme qui t'appelle. De plus ta variable temp n'est pas vraiment temporaire, et c'est un peu obscure d'abréger Player en plrs.

Après pour parcourir une liste en boucle tu peux prendre un indice, l'incrémenter d'un à chaque fois, et récupérer le reste de la division euclidienne de ton indice par la taille de ta liste pour éviter un débordement ; si ta liste est de taille n = 3 :
Java:
// 0 = (0 × 3) + 0
0 / 3 == 0
0 % 3 == 0

// 1 = (0 × 3) + 1
1 / 3 == 0
1 % 3 == 1

// 2 = (0 × 3) + 2
2 / 3 == 0
2 % 3 == 2

// 3 = (1 × 3) + 0
3 / 3 == 1
3 % 3 == 0

// 4 = (1 × 3) + 1
4 / 3 == 1
4 % 3 == 1

Ou sinon plus simple pour l'incrémentation :
Java:
i += 1;
if(i == n) {
   i = 0;
}

// 0 <= i < n

Et le mieux serait de créer une classe afin de pouvoir créer des parties à un autre emplacement et avec une sous-partie des joueurs connectés :
Java:
public class Game {
    private final List<Player> players;
    private final Location divingPlatform;
    private int nextIndex;
    
    public Game(List<Player> players, Location divingPlatform) {
        if(players.isEmpty()) {
            throw new IllegalArgumentException("`players` must not be empty");
        }
        
        if(divingPlatform == null || divingPlatform.getWorld() == null) {
            throw new IllegalArgumentException("`divingPlatform.getWorld()` must not be null");
        }
        
        this.players = players;
        this.divingPlatform = divingPlatform;
        this.nextIndex = 0;
    }
    
    public Player teleportNextPlayer() {
        Player p = players.get(this.nextIndex);
        this.nextIndex = (this.nextIndex + 1) % this.players.size();
        
        if(!p.teleport(this.divingPlatform)) {
            throw new RuntimeException("teleportation was denied by another plugin");
        }
        
        p.sendTitle("§3À toi de jouer !", "", 20, 40, 20);
        return p;
    }
}

Game game = new Game(Bukkit.getOnlinePlayers(), MyPlugin.playLocation);
Player teleported = game.teleportNextPlayer();
// ...

Tu peux aussi télécharger le code source de Spigot afin d'avoir les noms des paramètres au lieu de s, s1, i, i1 et i2 ; positionne ton curseur sur le nom d'une fonction de Bukkit (style sendTitle), puis appuie sur CTRL + B, puis clique sur « Download sources » qui devrait être apparu en haut du nouvel onglet qui s'est ouvert.

Cordialement,
ShE3py