Aide plugin pour rôle (lg uhc par ex)

Btlgeuse

Aventurier
7 Février 2024
16
0
1
22
C'est des accents graves « ` » pour les blocs de code, donc probablement Alt gr 7 + Espace à taper (vu que par ex. Alt gr 7 + Maj A donne « À »). Après c'est plutôt pour les extraits de code, si tu envoies tout autant zipper le dossier dans une pièce jointe.

GGame.java
Java:
public final List<GPlayer> players;
public final Map<GPlayer, GCharacter> characters;

public GGame(List<GPlayer> players) {
    this.players = players;
    Collection<? extends Player> player = null;
    this.characters = dealCharacters(player);
}
Ça devrait crasher non ? Tu fais dealCharacters(null).

Diff:
 public final List<GPlayer> players;
-public final Map<GPlayer, GCharacter> characters;

 public GGame(List<GPlayer> players) {
-    this.players = players;
+    this.players = new ArrayList<>(players.size());
-    Collection<? extends Player> player = null;
-    this.characters = dealCharacters(player);
+    dealCharacters(players).forEach((player, character) -> this.players.add(new GPlayer(player.getUniqueId(), character)));
 }
(en rouge les lignes à enlever, en vert les lignes à rajouter, en blanc les lignes à laisser)
Un GPlayer contient déjà sa carte, donc pas besoin de Map<K, V>.

GAutostart.java
Java:
Player player = main.getPlayer().get(i);
Location spawn = main.getSpawns().get(i);
player.teleport(spawn);
player.getInventory().clear();
player.setFoodLevel(20);
player.setHealth(20);
player.updateInventory();
Tu devrais aussi réinitialiser l'expérience, les effets de potions, et le curseur du joueur (il me semble que si un joueur prend un item en main/dans sa souris, cet item n'est pas considéré comme étant dans son inventaire et il le gardera, à tester).

GMain.java
Diff:
 WorldBorder wb = world.getWorldBorder();
 wb.setCenter(0, 0);
 wb.setSize(100);
-
-Bukkit.getScheduler().runTaskTimer(this, new Runnable() {
-  @Override
-  public void run() {
-    if(wb.getSize() >= 50) {
-      wb.setSize(wb.getSize()-1.0);
-    }
-  }
-}, 0, 20);
+wb.setSize(50, 50);
Tu réinventes la roue. Renomme aussi GMain en style GPlugin car c'est un plugin, pas une classe principale.
Code:
 java public GGame(List<GPlayer> players) {
        this.players = new ArrayList<>(players.size());
        dealCharacters(players).forEach((player, character) -> this.players.add(newGPlayer(player.getUniqueId, character)));
    }
Code:
 public GCharacter getPlayerCharacter(GPlayer player) {
        return characters.get(player);
    }
J'ai un problème pour le dealCharacters(players)
et pour le deuxième, j'ai un problème avec le characters.get(player)
 

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 139
163
464
247
21
Mìlhüsa
Pour la 1re il manque une espace après le new, pour la 2de tu n'as plus de variable characters, il faut utiliser player.character.

Bon après tu devrais avoir des messages d'erreurs dans l'IDE ou avec un mvn compile, l'idée c'est quand même de les lire.
 

Btlgeuse

Aventurier
7 Février 2024
16
0
1
22
Pour la 1re il manque une espace après le new, pour la 2de tu n'as plus de variable characters, il faut utiliser player.character.

Bon après tu devrais avoir des messages d'erreurs dans l'IDE ou avec un mvn compile, l'idée c'est quand même de les lire.
j'ai lu mais c'est à dire que pour le 1 le problème de base c'est que le dealCharacters n'est pas applicable pour l'argument dedans et pour le second c'est le get(player) qui est undefined pour le GCharacter
 

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 139
163
464
247
21
Mìlhüsa
Pour le 1 c'est ta classe qui distribue les cartes donc tu as une List<Player> (entités) en entrée (pas déjà ta liste List<GPlayer> avec les cartes déjà distribuées).

Pour le 2, tu veux récupérer un GCharacter à partir d'un gcharacter.get(gplayer) ? Ça n'a pas de sens, soit tu récupères la carte d'un joueur (gplayer.character), soit les joueurs ayant une carte, mais je ne vois pas comment tu veux transformer (une carte + un joueur) en (une carte).
 

Btlgeuse

Aventurier
7 Février 2024
16
0
1
22
Pour le 1 c'est ta classe qui distribue les cartes donc tu as une List<Player> (entités) en entrée (pas déjà ta liste List<GPlayer> avec les cartes déjà distribuées).

Pour le 2, tu veux récupérer un GCharacter à partir d'un gcharacter.get(gplayer) ? Ça n'a pas de sens, soit tu récupères la carte d'un joueur (gplayer.character), soit les joueurs ayant une carte, mais je ne vois pas comment tu veux transformer (une carte + un joueur) en (une carte).
Je récupère les joueurs ayant un role
et j'ai un problème au niveau du player.getUniqueId
this.game = new GGame(this.getServer().getPlayers());
avec un problème au niveau du constructeur GGame(List<GPLayer>) is undefined
 
Dernière édition:

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 139
163
464
247
21
Mìlhüsa
Une simple boucle du coup :
Java:
// dans GGame
public List<GPlayer> getPlayers(GCharacter character) {
  List<GPlayer> players = new ArrayList<>();
  for(GPlayer player : this.players) {
    if(player.character == character) {
      players.add(player);
    }
  }
  
  return players;
}
 

Btlgeuse

Aventurier
7 Février 2024
16
0
1
22
Une simple boucle du coup :
Java:
// dans GGame
public List<GPlayer> getPlayers(GCharacter character) {
  List<GPlayer> players = new ArrayList<>();
  for(GPlayer player : this.players) {
    if(player.character == character) {
      players.add(player);
    }
  }
 
  return players;
}
Merci vrm meme si je dois surement t'embeter mais dcp que faire pour le problème au niveau du player.getUniqueId
this.game = new GGame(this.getServer().getPlayers());
avec un problème au niveau du constructeur GGame(List<GPLayer>) is undefined
 

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 139
163
464
247
21
Mìlhüsa
Merci vrm meme si je dois surement t'embeter mais dcp que faire pour le problème au niveau du player.getUniqueId
Quel problème ?

Java:
this.game = new GGame(this.getServer().getPlayers());
avec un problème au niveau du constructeur GGame(List<GPLayer>) is undefined
A priori Server#getPlayers() n'existe pas ? (le hashtag est juste une notation Javadoc pour les fonctions que tu verras à la place des points)
 

Btlgeuse

Aventurier
7 Février 2024
16
0
1
22
Quel problème ?


A priori Server#getPlayers() n'existe pas ? (le hashtag est juste une notation Javadoc pour les fonctions que tu verras à la place des points)
getUniqueId est indéfini dans le GPlayer
et pour le deuxième je fais quoi puisque tu avais dis de mettre le
this.game = new GGame(this.getServer().getPlayers());
dans le start sauf qu'il est mis 1) que le getServer n'est pas défini et 2) si je crée une méthode le il faut changer ou créer le constructeur dans GGame
 

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 139
163
464
247
21
Mìlhüsa
getUniqueId est indéfini dans le GPlayer
Entity#getUniqueId() renvoie l'identifiant unique d'une entité, ce qui correspond au champ uuid pour un GPlayer.

et pour le deuxième je fais quoi puisque tu avais dis de mettre le
Java:
this.game = new GGame(this.getServer().getPlayers());
dans le start sauf qu'il est mis 1) que le getServer n'est pas défini et 2) si je crée une méthode le il faut changer ou créer le constructeur dans GGame
Ce bout de code était à mettre dans ta classe héritière de JavaPlugin, si tu la mets dans une autre classe que n'auras pas accès à Plugin#getServer() via this.
Tu dois probablement remplacer this par GPlugin.instance.