Mon premier plugin sous Sponge

PHP:
@EventHandler
public void onJoin(PlayerJoinEvent e){

    Player p = e.getPlayer();
    int
    int maxPlayers = Bukkit.getServer().getMaxPlayers();

    if( 1){
        p.sendMessage("§2Il y a §6"+onlinePlayers+" §2connecté sur §6"+maxPlayers+" §2connectés.";
    }else if(onlinePlayers >= 2){
        p.sendMessage("§2Il y a §6"+onlinePlayers+" §2connectés sur §6"+maxPlayers+" §2connectés.";

    }


}
Wow, t'aimes bien te faire chier toi.
Tiens je t'ai optimisé ton bout de code :
PHP:
@EventHandler
public void onJoin(PlayerJoinEvent e){

    Player p = e.getPlayer();
    int logPlayers = Bukkit.getServer().getOnlinePlayers();

    p.sendMessage("§2Il y a §6" + ((logPlayers > 1) ? logPlayers + " §2connectés" : logPlayers + " §2connecté") + " sur §6100 §2connectés.");
    // Une ternaire suffit à tout faire rentrer en une ligne. Inutile de pousser le serveur en lui demandant l'affichage des connectés, il suffit de le marquer.
}
 
Dernière édition:
Wow, t'aimes bien te faire chier toi.
Tiens je t'ai optimisé ton bout de code :
PHP:
@EventHandler
public void onJoin(PlayerJoinEvent e){

    Player p = e.getPlayer();
    int logPlayers = Bukkit.getServer().getOnlinePlayers();

    p.sendMessage("§2Il y a §6" + ((logPlayers > 1) ? logPlayers + " §2connectés" : logPlayers + " §2connecté") + " sur §6100 §2connectés.");
    // Une ternaire suffit à tout faire rentrer en une ligne. Inutile de pousser le serveur en lui demandant l'affichage des connectés, il suffit de le marquer.
}
Je ne connaissait pas cett façon mais pour un début c'est plus simple!!
 
Je ne connaissait pas cett façon mais pour un début c'est plus simple!!
Non en soit ta méthode est mieux la mienne dans certains ça peut être vraiment illisible mais là en l'occurance tu gagnes quelques lignes de la mémoire et c'est toujours ça
 
Non en soit ta méthode est mieux la mienne dans certains ça peut être vraiment illisible mais là en l'occurance tu gagnes quelques lignes de la mémoire et c'est toujours ça
Moi mon bute c'était de l'aider a amélioré son plugin mais il travail sous sponge. Et moi sponge je connait pas car niveau serveur il ce vale!
 
J'ai un petit problème ma commande doit être tapé par un joueur alors j'ai fait:
Code:
        @Override
        public CommandResult process(CommandSource commandSource, String arguments) throws CommandException {
            if(commandSource instanceof Player) {
                Player player = (Player) commandSource;
             
            } else {
                commandSource.sendMessage(Texts.of("La commande doit être tapé par un joueur"));
            }
            return null;
        }

Voila l'erreur:
Code:
[18:57:31] [Server thread/INFO]: La commande doit être tapé par un joueur
[18:57:31] [Server thread/ERROR]: Encountered an unexpected exception
java.lang.NullPointerException
    at net.minecraft.command.ServerCommandManager.func_71556_a(SourceFile:81) ~[cl.class:?]
    at net.minecraft.server.dedicated.DedicatedServer.func_71333_ah(DedicatedServer.java:400) ~[po.class:?]
    at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:365) ~[po.class:?]
    at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:598) ~[MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:478) [MinecraftServer.class:?]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_65]
[18:57:31] [Server thread/ERROR]: This crash report has been saved to: C:\Users\admin\Desktop\serveur_test\.\crash-reports\crash-2015-11-22_18.57.31-server.txt
J'avoue que je comprends pas, car j'ai vu la même chose dans un autre code et ça fonctionne.
 
Dernière édition:
Bonjour je reviens au nouvelle.
Donc je progresse dans mon dev de /home et /sethome tout seul^^. J'ai juste un petit problème quand je fais /sethome et /home j'ai cette erreur:
Code:
[19:06:49] [Server thread/FATAL] [FML/]: Exception caught executing FutureTask: java.util.concurrent.ExecutionException: java.lang.NullPointerException
java.util.concurrent.ExecutionException: java.lang.NullPointerException
   at java.util.concurrent.FutureTask.report(Unknown Source) ~[?:1.8.0_65]
   at java.util.concurrent.FutureTask.get(Unknown Source) ~[?:1.8.0_65]
   at net.minecraftforge.fml.common.FMLCommonHandler.callFuture(FMLCommonHandler.java:715) [FMLCommonHandler.class:?]
   at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:656) [MinecraftServer.class:?]
   at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:364) [po.class:?]
   at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:598) [MinecraftServer.class:?]
   at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:478) [MinecraftServer.class:?]
   at java.lang.Thread.run(Unknown Source) [?:1.8.0_65]
Caused by: java.lang.NullPointerException
   at net.minecraft.command.ServerCommandManager.func_71556_a(SourceFile:81) ~[cl.class:?]
   at net.minecraft.network.NetHandlerPlayServer.func_147361_d(NetHandlerPlayServer.java:812) ~[rj.class:?]
   at net.minecraft.network.NetHandlerPlayServer.func_147354_a(NetHandlerPlayServer.java:791) ~[rj.class:?]
   at net.minecraft.network.play.client.C01PacketChatMessage.func_180757_a(SourceFile:37) ~[lu.class:?]
   at net.minecraft.network.play.client.C01PacketChatMessage.func_148833_a(SourceFile:9) ~[lu.class:?]
   at net.minecraft.network.PacketThreadUtil$1.onProcessPacket(SourceFile:59) ~[ih.class:?]
   at net.minecraft.network.PacketThreadUtil$1.run(SourceFile:13) ~[ih.class:?]
   at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_65]
   at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_65]
   at net.minecraftforge.fml.common.FMLCommonHandler.callFuture(FMLCommonHandler.java:714) ~[FMLCommonHandler.class:?]
   ... 5 more

J'ai pourtant aucune erreur dans Eclipse!!! Quelqu'un sait d'où ça vient ? Ces erreurs ne bloque pas le jeu, mais j'aime pas en avoir.

-----

On peut aussi sauvegarder le monde ou on est ? Comme ça si je suis dans le Nether, je peux revenir dans mon "home" qui n'est pas dans le monde normal.
Pour le moment je fais comme ça:
Code:
World world = player.getWorld();
Location<World> loc = new Location<World>(world, cX, cY, cZ);
Mais je ne sais pas comment sauvegarder le nom du world.

Autre chose, j'ai toujours ce problème de sauvegarde de mes home, j'aimerais faire quelque chose comme ça:)
Code:
home {
  default {
  pseudo=SimonBHB
  x=-8
  y=66
  z=13
  }
  home_2 {
  pseudo=SimonBHB
  x=-8
  y=66
  z=13
  }
}

Donc je me suis dit que je pourrais faire de cette manière:
Code:
int cX = homes.getNode("home", nameHome, "x").getInt();
Mais ça écrase toujours les autres données, quelqu'un à la solution ?
 
Dernière édition:
Ce serai plus simple d'en trouver une en ayant le code en entier. Moi aussi je débute dans le développement sponge, mais je n'ai pas encore eu le temp de faire de vrai plugins, mais je compte fair un plugin de /register et /login.
Tu pourrait me donner le code entier, parce que cette ligne a l'air bonne, ça peut venir du reste...
 
Donc j'ai créé mon plugin de sethome et il fonctionne!!!
Il reste de petit détail qui m'énerve à régler. Par exemple si je tape le début de la commande j'aimerais bien que la liste des arguments(les home) s'écrivent tout seul comme avec les pseudos... et ça ne le fait pas, ça doit être possible^^.
Autre chose, si on définie une commande qui s'exécute quand on clique sur le texte ou une infobulle et qu'on rajoute du texte avec append, la commande est encore active et moi ça me va pas(mon sujet pour le problème)!!!

-----------

Sinon je sais pas si c'était pareil avec Bukkit, mais sous Sponge comme dit plus haut on peut définir une commande qui quand on clique sur un mot ou une ligne dans le chat exécute la commande.
Pour pas me casser la tête et gagner du temps, j'ai donc créé des commandes pour changer le gamemode des joueurs, leur vie, faim et j'ai tout regroupé dans une autre ainsi on gère tout en quelque clic^^. Ainsi on tape /tool et ça nous affiche la liste des commandes disponible:
CVLORHQWEAA11e8.jpg:large


et quand on clique par exemple sur la commande pour la vie, ça va nous exécuter la commande qui gère la vie des joueurs:
151202114324839544.jpg


J'ai aussi fait une commande /position, ainsi quand on est dans un endroit cool et qu'on veut y revenir, on tape /pos ou position ce qui va nous afficher notre position dans le chat et plus tard on a juste a recliquer sur la ligne pour nous téléporter vers la position. Je trouve ça très pratique.

J'ai aussi fait une home death pour revenir ou on est mort, le problème c'est que si on meure dans la lave, on va encore être téléporter dedans, donc j'ai juste fait une condition pour pas nous téléporter dedans. J'aimerais bien réussir à me téléporter juste à coté, mais je suis nul en math^^.

Pour finir un autre truck cool, quand je liste mes home, on peut cliquer dessus pour nous téléporter vers eux, mais ce qui est top c'est que si on clique sur le X, on peut le supprimer, donc même pas besoin de taper les commandes ou presque^^
151202115617948964.jpg


-------

Bref tu as du le remarquer, je fais tout pour écrire le moins possible avec mes commandes^^. Si tu as des idées ou tu peux m'aider à régler mon petit problème au début de ce message ça serait très gentil. Si je peux je t'aiderais aussi.
 
Est ce que tu a Skype ?
Je pourrais sûrement t'aider et je serai très content de l'être aussi !
Ton plugin de /home a l'air très bien, j'aimerais bien l'essayer. Le problème de la commande, je me demande si c'est vraiment possible, car pour l'instant aucun des plugins sponge ne supporte l'auto-complétion, donc je pense que c'est juste que forge n'est encore qu'en développement... Je vais me renseigner et essayer aussi.
Mon Skype : q.azerty_2
 
vient sur simonbhb.fr:25568 pour tester mes plugin en 1.8 et on en parle.

J'ai réussi sur une commande à lister les arguments disponible, mais pas à les auto-compléter

PS: c'est pas une PUB, juste un serveur de test.