Aller au contenu

Du Skript Au Java #3 - Les variables en fonction d'un joueur (ou autre)


Messages recommandés

  • 6 mois après...
Posté(e)

Et pour l'utiliser par exemple dans un broadcast ?

 

public class Commands implements Listener{

   @EventHandler
   public void onCommands(PlayerCommandPreprocessEvent e){
       Player p = e.getPlayer();
         String msg = e.getMessage();
         String[] args = msg.split(" ");

         if(args[1].equalsIgnoreCase("/broadcast")){
             if(args[2] == null){
                 p.sendMessage("§cErreur : essaie /broadcast [message]");
                 p.getServer().broadcastMessage("&8[&6&lANNONCE&8] &bVous venez de faire un broadcast");
             }
         }
   }

 

Avec l'arg 1

 

Exemple skript:

 

broadcast "annonce, %player%: %message% PS: Le message et le player en java je veut savoir

Posté(e)

Bukkit.getServer().broadcastMessage("annonce, " + e.getPlayer().getName() + ": " + message);

Le message c'est toi qui choisis. Si c'est dans un évent chat tu peux le récupérer avec

message = e.getMessage();

mais si c'est une commande tu peux le récupérer avec les arguments

Posté(e)
Et pour l'utiliser par exemple dans un broadcast ?

 

public class Commands implements Listener{

   @EventHandler
   public void onCommands(PlayerCommandPreprocessEvent e){
       Player p = e.getPlayer();
         String msg = e.getMessage();
         String[] args = msg.split(" ");

         if(args[1].equalsIgnoreCase("/broadcast")){
             if(args[2] == null){
                 p.sendMessage("§cErreur : essaie /broadcast [message]");
                 p.getServer().broadcastMessage("&8[&6&lANNONCE&8] &bVous venez de faire un broadcast");
             }
         }
   }

 

Avec l'arg 1

 

Exemple skript:

 

broadcast "annonce, %player%: %message% PS: Le message et le player en java je veut savoir

CommandExecutor > CommandPrepocessEvent. C'est 100 fois mieux.

Posté(e)

package fr.pulpac.broadcast;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class CommandBroadcast implements CommandExecutor {

   @Override
   public boolean onCommand(CommandSender sender, Command cmd, String msg, String[] args) {


       if(args.length == 0){
           p.sendMessage("§cErreur: Vous avez oubliez votre message");
       }

       if(args.length >= 1){

           StringBuilder broadcast = new StringBuilder("");

           for(String morceau : args){
               broadcast.append(morceau);
           }

           Bukkit.broadcastMessage("§8[§6§lANNONCE§8] §c§b" + broadcast);
       }
       if(sender instanceof Player){

           Player p = (Player)sender;
       }

       return false;
   }

}

 

Pour introduire le pseudo et l'arg ?

Et j'ai un problème sur le p.sendMessage :/ je comprend pas

Posté(e)
Et j'ai un problème sur le p.sendMessage :/ je comprend pas

Normal tu n'as pas défini ta variable p. Essaye :

 

sender.sendMessage(String);

 

Si tu veux vraiment que ce soit un joueur, tu dois caster ta variable :

 

if(sender instanceof Player){ # On vérifie que c'est un joueur.
   Player p = (Player) sender; # On créer une nouvelle variable locale en castant le sender en player.

Posté(e)

Fix:

Player p = (Player)sender;

 

Export:

jar creation failled

 

 

JAR creation failed. See details for additional information.

Class files on classpath not found or not accessible for: 'Broadcast/src/fr/pulpac/broadcast/CommandBroadcast.java'

Posté(e)

Mon plugin.yml:

 

main: fr.pulpac.broadcast
author: NeverAskMe, Pulpac
name: broadcast
version: 1.0
commands:
broadcast:
 description: Permet d'afficher une annonce sur le serveur
 permission: annonce.use
 permission-message: §cVous n'avez pas la permission d'éxécuter cette commande.

 

et le main:

 

J'en ai pas

Posté(e)

omfg xD c'est la que je suis content de faire du skript xD

 

public class WolvMC extends JavaPlugin implements Listener {

       static HashMap<String, Integer> points = new HashMap<String, Integer>();

   @Override
    public void onEnable() {

       }

     @EventHandler
     public void onJoin(PlayerJoinEvent e) {
         Integer pts = 1; //Normalement je charge de mon fichier de config mais là c'est un exemple
         points.put(e.getPlayer().getName(), pts);
     }

}

 

CONTRE

on join:
   set {points.%player%} to 1

 

ya quand meme une énorme différence xD

  • J'aime 1
  • 8 mois après...
Posté(e)

Excellent tuto !

J'ai deux petites question:

- Comment modifier le nombre de points d'un joueur ? Par exemple, rajouter 1 au nombre de points qu'il a déjà ?

- Lorsque tu transfère ta valeur hashmap sur une variable pour l'enregistrer, cette variable ne risque t-elle pas de changer dès qu'une autre valeur hashmap sera transférée sur celle-ci ?

Merci professeur ! :p

Posté(e)

Merci pour les infos ;)

Moi qui ais fait un add-on pour skript sans connaitre le JAVA, sa m'aurais bien aider de comprendre les tableau de cette maniere plutot que de fouiller les doc pour essayer de comprendre ce qu'il falais faire ^^

Posté(e)
Excellent tuto !

J'ai deux petites question:

- Comment modifier le nombre de points d'un joueur ? Par exemple, rajouter 1 au nombre de points qu'il a déjà ?

- Lorsque tu transfère ta valeur hashmap sur une variable pour l'enregistrer, cette variable ne risque t-elle pas de changer dès qu'une autre valeur hashmap sera transférée sur celle-ci ?

Merci professeur ! :p

Pour modifier le nombre de points, tu dois d'abord récupérer la variable du HashMap, ensuite tu la modifie et enfin tu la remet dans le HashMap:

int p = poins.get(player.getName());
++p;
points.put(player.getName(), p);

 

Pour la 2ème question je ne suis pas sûr d'avoir bien compris ^^

Posté(e)

Merci !

Pour la 2ème question:

     @EventHandler
     public void onLeave(PlayerQuitEvent e) {
         Player p = e.getPlayer(); //Je crée une variable pour raccourcir le code
         if(points.containsKey(p.getName())) {
             Integer pts = points.get(p.getName());
             //Là j'utilise ma fonction pour sauvegarder les points
         }
     }

}

 

La variable pts change à chaque fois qu'on sauvegarde les points d'un joueur, et c'est une variable unique (ce n'est pas une liste).

Après avoir sauvegardé les points d'un joueur A, ce dernier ne risque t-il pas d'avoir les points du dernier joueur (joueur B) à qui on a sauvegardé les points juste après ? La variable pts ne peut contenir qu'une seule valeur et elle est utilisée à chaque sauvegarde...

Posté(e)

Non c'est une variable locale. Elle est déclarée dans la fonction et sera effacée à la fin de la fonction. Et imaginons que l’événement se passe en même temps il n'y aura pas de conflit de variable.

Cette variable est l'équivalent de {_variable} en skript.

Posté(e)

D'accord, mais alors comment récupérer ses points de la dernière fois lorsqu'on se connecte si c'est une variable temporelle ? Comment ces points sont stockés ?

Et si on la définit lorsqu'un joueur se connecte...

 Integer pts = 1; 

...juste avant de la mettre dans une hashmap...

 points.put(e.getPlayer().getName(), pts); 

...le nombre de points du joueur sera remplacé par 1, non ?

Merci pour tes réponses ! :D (je suis embêtant, hein ^^)

Posté(e)

Pour les stocker il faut utiliser un fichier, par exemple un .yml.

Pour le

Integer pts = 1

c'était juste pour dire que c'est à cet endroit qu'il faut charger les points, sinon bien sûr ce sera 1 ^^.

  • 1 mois après...

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.