Welcome to Bukkit France

Inscrivez-vous maintenant pour profiter d'un accès total à tout le contenu offert par la meilleur communauté Bukkit française ! Une fois inscrit et connecté, vous pourrez contribuez à la communauté en postant vos propres sujets et questions ou en répondant à ceux existants. Vous pourrez aussi customiser votre profil, recevoir des points de réputations, communiquer avec les autres membres via le chat, et plus encore! 

  • Annonces

    • Pskyco

      Bukkit France passe sous Discord !   20/02/2016

      Bukkit France est désormais passé sur Discord, au revoir donc notre vieux Teamspeak ! Téléchargez le client et venez nous rejoindre sur notre salon en suivant les instructions suivantes.
      M-à-j du 25/02/2017 : Désormais, seuls les comptes actifs sur le forum se verront donner l'accès au Discord, ce dernier n'est pas une plateforme d'aide de la même manière que le chat.

Rechercher dans la communauté: Affichage des résultats pour les étiquettes 'java'.

  • Rechercher par étiquettes

    Saisir les étiquettes en les séparant par une virgule.
  • Rechercher par auteur

Groupe


Discord


Deviantart


Facebook


GitHub


Minecraft


Mail


Site Web


Skype


Steam


Tumblr


Twitter


Youtube


AIM


Bukkitorg


Centres d'intérêt


Google+


Google Talk


Yahoo

58 résultats trouvés

  1. Créer son propre launcher personalisé de zéro, tutoriels vidéos Bien le bonjour chers développeurs de Bukkit France !   J'ai créé une série de tutoriels vidéos sur Youtube permettant la création d'un launcher Minecraft à partir de rien (c'est vous qui créez les sources) et donc entièrement personnalisable.   Ils sont basé sur mes librairies open-source que vous pouvez retrouver là : https://github.com/Litarvan/   Bon visionnage ^^   Attention, pour la vidéo deux prenez bien l'OpenLauncherLib 2.1, pour la trois il faudra après regarder la vidéo 4.1. Aussi, les liens de téléchargement sont dans la description de la première vidéo. Et GSON est intégré à SUpdate depuis la 3.1 (entièrement compatible) Et, vos avez le droit de vendre un launcher fait avec ce tutoriel sans me citer ni rien me verser, tant que vous ne vous appropriez pas les libs.   Épisode 1 : http://youtube.com/watch?v=37a3vK_M6-A   Épisode 2 : http://youtube.com/watch?v=V2Q6KcYB2Cw   Épisode 3 (optionnel) : http://youtube.com/watch?v=J2HiK0Rnx50     Mises à jour !   Épisode 4.1 : http://youtube.com/watch?v=54jKg_oNsQA   Pour tout problème, une FAQ est disponible ici : https://www.dropbox.com/s/dlgauk2fxgs27e1/TheShark34%20-%20Livre%20de%20Support%20%28Decembre%202015%29.pdf?dl=0
  2. Salut à tous, je vous propose aujourd'hui un tutoriel sur la face cachée de Bukkit, NMS. Acronymes de net.minecraft.server, ces trois lettres peuvent sembler bien austères mais nous allons voir que c'est un outil puissant quand on sait s'en servir.   Ce tutoriel est valable seulement pour spigot 1.9 et spigot 1.10. (Dans une certaine mesure pour la 1.10)     1)NMS, késako ? Comme dit plus haut, NMS est l'acronyme de net.minecraft.server. Cette face "cachée" de Bukkit désigne en fait le coeur de tout serveur. Cet outil permet des choses que l'API Bukkit ne permet pas directement, au prix d'un peu plus de complexité. 2)À quoi ça sert ? Tout cela peut vous sembler intéressant, mais vous ne savez (peut-être)pas encore ce que cela permet. Ci-dessous je vous donc une liste (non exhaustive, encore heureux !) de ce que permet NMS: Modification d'absolument toutes les entités de Minecraft. De l'objet droppé au zombie en passant par l'enderman. Cela, sans mod et relativement simplement. Nous verrons ce point plus loin. Modification des blocs et des items de Minecraft, leur propriétés du moins. Par exemple, l'on peut rendre un bloc de terre plus résistant que de l'obsidienne. À voir. Utilisation des paquets pour permettre des choses...incroyables. Vous pouvez par exemple utiliser la barre du boss pour montrer des messages, créer des particules(ex: particule d'eau, fumée), etc. Attention, les paquets sont le mouton noir de NMS;en effet, l'on peut faire le bien(particules...), ou le mal(faire crasher un joueur, causer d'énormes lags, etc.).   3)Comment on s'en sert ? Je vous avais prévenu, NMS est relativement complexe à manipuler. D'une part car la team Bukkit a choisi de garder l'obfuscation du client pour la plupart de ses méthodes, et d'autres car il faut beaucoup utiliser des notions avancées du Java, telles que la réflexion.     Pour les mobs dont les pathfinders ne sont pas dans le constructeur, vous pouvez donc tout simplement redéfinir les méthodes r() et/ou o() pour redéfinir certains pathfinders. Dans notre cas on veut simplement l'empêcher d'attaquer le joueur, donc on redéfinit la méthode o() sans appel à super.o(). Ca ressemble à ça: @Override protected void o(){ this.goalSelector.a(6, new PathfinderGoalMoveThroughVillage(this, 1.0D, false)); this.targetSelector.a(1, new PathfinderGoalHurtByTarget(this, true, new Class[]{EntityPigZombie.class})); //Cette ligne est commenté pour des buts pédagogiques mais peut être supprimée. //this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget(this, EntityHuman.class, true)); if(this.world.spigotConfig.zombieAggressiveTowardsVillager) { this.targetSelector.a(3, new PathfinderGoalNearestAttackableTarget(this, EntityVillager.class, false)); } this.targetSelector.a(3, new PathfinderGoalNearestAttackableTarget(this, EntityIronGolem.class, true)); } Nous ne voulons pas redéfinir les pathfinders de base (se promener, etc.), donc on ne redéfinit pas la méthode r(). Attention toutefois, un tel zombie vous attaquera si vous l'attaquez. De plus, il sera hostile aux villageois.   Lors de l'ajout d'un pathfinder, la méthode a(int, PathfinderGoal) est appelée. Le premier argument est la priorité (tout pathfinder concurrent (deux pathfinders de mouvement...) sera écrasé par un pathfinder de priorité plus haute (=valeur plus faible)), le deuxième est le pathfinder en lui-même. Les pathfinders étant délicats, je vous encourage à me contacter en cas de besoin.   Pour les mobs dont les pathfinders sont dans le constructeur, utilisez ce bout de code que vous mettrez dans votre constructeur pour nettoyer les pathfinders précédent. Ajoutez ensuite les anciens pathfinders sauf ceux que vous souhaitez retirer. Faites cuire à 120° et voilà, c'est prêt ! try { Field bField = PathfinderGoalSelector.class.getDeclaredField("b"); bField.setAccessible(true); Field cField = PathfinderGoalSelector.class.getDeclaredField("c"); cField.setAccessible(true); bField.set(goalSelector, new UnsafeList<PathfinderGoalSelector>()); bField.set(targetSelector, new UnsafeList<PathfinderGoalSelector>()); cField.set(goalSelector, new UnsafeList<PathfinderGoalSelector>()); cField.set(targetSelector, new UnsafeList<PathfinderGoalSelector>()); } catch (Exception exc) {exc.printStackTrace();} Ce bout de code (au-dessus) permet en fait de nettoyer les sélecteurs de leurs pathfinders, via réflexion encore une fois.   A noter: si vous souhaitez simplement ajouter des pathfinders et non en supprimer, utilisez simplement super.r() et super.o() pour enregistrer les pathfinders de base de votre entité. Et voilà des zombies qui ne sont pas prêts de nous embêter :-). Bien sûr, vous pouvez modifier de la sorte beacoup d'entités dans le jeu et libre à vous d'étudier le code source de NMS pour en apprendre davantage. Sachez par exemple que vous pouvez créer vos propres pathfinders, qui permettront aux entités de faire ce que vous leur dites. Dans certains cas, il peut aussi être utile de redéfinir la méthode de mise à jour qui est appelé tous les ticks sur l'entité (le nom de la méthode est m() en 1.9). Vous pouvez par exemple diviser (ou plutot randomiser) par 4 la fréquence de spawn de vos zombies, en écrasant la méthode canSpawn(s_ en 1.8, merci l'obfu...) comme ceci: @Override public boolean s_() { return super.bR() && this.random.nextInt(4) == 0; }   6)Fin J'avais pour but de vous exposer les bases de NMS, à l'aide d'exemples et d'explications. Si ce tuto vous a éclairé, j'en suis le premier satisfait. N'hésitez pas à commenter, sur ce qui va et ce qui ne va pas ;-).
  3.       Bonjour ! Cette nuit, j'ai appris à utiliser JRebel, et je peux pas laisser cet outil au fond du grenier. Impossible. JRebel est un outil permettant la mise à jour des classes d'une application Java sans avoir à relancer ladite application. Il a été développé dans l'optique de récupérer le temps perdu à déployer les applications Java sur ses serveurs distants, en effectuant le lien direct entre serveur et IDE. Qui veut dire mise à jour des classes veut dire modification instantanée du code ! Et nous, développeurs de plugins principalement, savons que relancer le serveur après chaque modification est une grande perte de temps. Voilà de quoi régler le problème Ce tutoriel vous guidera dans la mise en place de JRebel. La plupart des instructions sont spécifiques à l'IDE utilisé, je vous renverrai donc vers la documentation officielle en anglais. Si vous êtes débrouillards, JRebel sera mis en place en une vingtaine de minutes maximum ! Etape 1: Inscription Etape 2: Installation Etape 3: Configuration du serveur Etape 4: Configuration du plugin Etape 5: Synchronisation Site de JRebel: https://zeroturnaround.com/software/jrebel/   Etape 1: Inscription Avant toute chose, vous devez savoir que JRebel est en grande partie payant. Heureusement, il existe une version gratuite de l'outil, réservée à l'usage personnel et non commercial. Suivez les instructions présentes sur cette page pour créer votre compte gratuitement: http://my.jrebel.com/ Une fois votre compte créé, vous obtiendrez une clé de licence que vous pouvez dès à présent copier.   Etape 2: Installation JRebel est très facile à utiliser lorsqu'il est installé au sein de votre IDE. Il est disponible sous la forme de plugin pour Eclipse, IntelliJ et NetBeans. Cliquez sur le lien vers votre IDE si vous ne savez pas comment installer le plugin. Une fois installé, il vous sera demandé d'ajouter votre clé de licence précédemment copiée pour activer JRebel.   Etape 3: Configuration du serveur Votre serveur doit pouvoir être géré par JRebel afin de mettre à jour le code. Pour cela, il vous faut modifier votre script de lancement et y désigner le chemin vers JRebel. Vous devez au préalable télécharger le JAR de JRebel. Commencez par obtenir la dernière archive .zip à l'adresse suivante: https://zeroturnaround.com/software/jrebel/download/prev-releases/ Placez ensuite le fichier jrebel.jar dans le dossier de votre serveur, à côté du script de lancement (pour plus de facilité). Vous n'avez pas besoin du reste de l'archive. Maintenant, ouvrez votre script de lancement, et ajoutez les arguments suivants à la commande: -javaagent:jrebel.jar -Drebel.remoting_plugin=true -Drebel.remoting_port=5151 (Vous pouvez bien entendu modifier le port comme bon vous semble) Voici à quoi ressemble mon fichier au final: java -javaagent:jrebel.jar -Drebel.remoting_plugin=true -Drebel.remoting_port=5151 -jar spigot-1.9.2.jar PAUSE Lancez maintenant votre serveur. Si tout s'est bien passé, votre console devrait ressembler à ceci au démarrage: Si ce n'est pas le cas, JRebel n'est pas démarré. Votre serveur est maintenant prêt à recevoir les mises à jour. Dernière étape: préparer votre plugin !   Etape 4: Configuration de votre plugin dans l'IDE Pour que JRebel puisse mettre à jour votre plugin, il est nécessaire d'y ajouter une configuration spécifique à JRebel. Rien de compliqué, vraiment. Cette étape est à reproduire pour chaque plugin que vous souhaitez mettre à jour en temps réel.   Pour résumer, vous devez obtenir deux fichiers: rebel.xml et rebel-remote.xml, aux côtés du fichier plugin.yml. Chaque IDE doit être configuré afin de pouvoir envoyer la mise à jour au serveur.   Les détails concernant la configuration de votre IDE sont ici: http://zeroturnaround.com/software/jrebel/learn/ rubrique "Remote server setup" en dessous de l'IDE. L'idée est de configurer un serveur distant (bien qu'ici il ne le soit pas) sur le bon port (ici, 5151). Notez qu'il est aussi possible de mettre en place JRebel ailleurs qu'en local. L'étape 1 de la page de documentation est déjà accomplie (configuration du serveur), passez directement à l'étape 2. Si le fichier rebel.xml n'est pas présent, référez-vous à l'étape 4 de la documentation.   N'ayant configuré JRebel que sur IntelliJ, je ne peux pas aider sur les autres IDE, mais le site officiel est tout de même assez clair.   Etape 5: Effectuer les changements et synchroniser les classes Tout est prêt ! Si votre serveur est toujours lancé, arrêtez-le, vous allez pouvoir envoyer votre plugin prêt à être mis à jour. Compilez (une dernière fois ?) votre plugin afin de prendre en compte la configuration JRebel et installez-le sur votre serveur, comme d'habitude. Lancez enfin le serveur. Désormais, tout se passe dans votre IDE. Effectuez quelques changements de code (la mise à jour est flagrante avec le changement des couleurs des messages), et compilez votre plugin pour mettre à jour les classes (pas besoin de créer le .jar). Suivez la dernière étape de la documentation (qui se résume à cliquer sur un bouton) pour synchroniser les données avec le serveur. Votre console affichera alors divers messages concernant les modifications effectuées, et votre plugin sera mis à jour ! Le résultat lorsque l'on met à jour les classes. (Obfusqué pour ne pas spoil mes projets)   JRebel vous informera lorsque l'instance d'un objet déjà créé ne pourra pas être mise à jour. Les Runnable déjà lancés achèveront leur code initial. Les boucles attendront d'êtres achevées avant d'être mises à jour.   J'espère avoir été un minimum clair dans ce guide, même si je vous ai beaucoup renvoyé vers la documentation officielle, faute de ne pas avoir tous les IDE installés sur mon ordinateur. N'hésitez pas à poser vos questions ! Et laisse un J'aime si ça marche pour toi  
  4. Bonjour à tous !   J'ai récemment fait une petite classe qui m'est très utile, donc je me suis dit que je pourrais la partager avec des gens Cette classe sert donc à créer et utiliser de multiples fichiers de configuration très simplement ainsi que de faire des configs par défaut.   Le code :   Pour créer un nouveau fichier de config, faites le par exemple dans votre onEnable(); public static ConfigFile config; @Override public void onEnable() { this.config = new ConfigFile(this, "ma-config.yml"); } N'oubliez pas de mettre votre ma-config.yml dans votre projet :   Dès lors, vous pourrez utiliser ceci pour récupérer votre config : MyPlugin.config.get() Ceci pour définir des choses dedans : MyPlugin.config.set("my-path", myValue); Et ceci pour la sauvegarder et l'actualiser : MyPlugin.config.reload(); Voilà, c'est tout !   J'ai aussi fait une alternative qui ne nécessite pas de reload (qui est utilisée disons "en temps réel"), mais qui est un peu moins optimisée, dans lequel les méthodes utilisent directement le fichier sans passer par une variable.   Existe aussi en enum :   Et voilà !   Allez, salut !   Cordialement, PYRRH4.
  5. Bonjour, je viens présenter ici le début de ma nouvelle série sur la création de Plugins Bukkit Mes compétences en Java et dans l'API Bukkit sont très grandes, et je voulais les partager avec d'autres gens pour leur permettre, à leur tour, de créer des plugins.   Voici la liste des épisodes qui sont en ligne pour le moment !   Épisode 01 - Les Bases : https://youtu.be/3fIwgEbCcmA   Épisode 02 - Les Événements : https://youtu.be/ahsFegT5kDg       Je sais qu'il existe déjà pas mal de tutoriels sur ce sujet, mais la plupart sont très mal expliqués, les développeurs n'étaient pas très bons, ou alors ne sont pas à jour.
  6. Bon, alors, pour mon premier tuto, je vais essayer de vous expliquer comment lire, et surtout comprendre les tracebacks.   le sommaire, trop-trop classe :    Qu'est ce que c'est qu'un traceback La théorie Quelques exemples "Pourquoi mon plugin il bugge saytronul" Informations utiles dans un traceback Erreurs fréquentes   Donc, d'abord, on va s'interesser a l'origine des tracebacks. Un traceback, c'est le truc qui est dans vos logs et qui montre plein de lignes INCOMPRÉHENSIBLES (pour l'instant ): Généralement, dans vos logs, ils s'affichent avec une ligne ERROR ou SEVERE, et beaucoup de lignes at machin.bidule ...   Par exemple, on peut trouver en tracebacks :  Je vous l'accorde, c'est pas très digeste.   Donc, justement, on va essayer de se pencher un peu sur ces tracebacks pour savoir ce qu'il ne va pas. Vous allez voir, c'est pas si dur.   Regardons ensemble les informations que l'on peut trouver dans un traceback.  Alors, déjà, la 1ere ligne nous aide un peu  [HEURE ERROR]: Could not pass event InventoryClickEvent to CrackBurnServerSwitcher v1.0 Ici, on peut remarquer deux choses : L'événement qui a provoqué le bug, et le plugin en cause. L'événement ? Késako ? C'est super simple. En fait, dans minecraft, la plupart des plugins sont conçus pour répondre a des situations : un joueur casse un bloc, un jouer bouge, un mob spawn, un joueur change un objet de son inventaire de place, un joueur craft, une personne se connecte ou se déconnecte, un mob meurt... Les plugins vont pouvoir agir sur ces événements : les annuler, changer des valeurs... Par exemple, se connecter à un serveur déclenchera l'événement  PlayerJoinEvent Un plugin permettant de bannir des joueurs recevra l'événement et vérifiera si oui ou non le joueur est banni. Si oui, il le kickera du serveur. Si non, il ne touche pas à l'événement. (C'est un aperçu basique du système de fonctionnement des events, il y a bien plus a dire mais ca ne rentre pas dans le cadre de ce tuto.)    Donc, en lisant le nom de l'événement, on peut généralement déduire quelle partie du plugin plante. Dans notre exemple, InventoryClickEvent correspond a l'événement soulevé quand un joueur clique sur un item de son inventaire (Inventory = Inventaire; Click = clic; Event = événement, pas dur  ) Le plugin qui plante est CrackBurnServerSwitcher, avec en version "v1.0".    Sur cet exemple [HEURE ERROR]: Could not pass event PlayerMoveEvent to Factions v2.8.7Beta C'est l'événement PlayerMoveEvent qui a fait planté Factions version 2.8.7Beta Bon, après, il faut voir quelle est l'erreur détaillée : Dans tout le charabia, c'est la ligne qui commence par Caused by: org.bukkit.event.EventException at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[craftbukkit-1.9.2.jar:git-Bukkit-420b983] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit-1.9.2.jar:git-Bukkit-420b983] at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit-1.9.2.jar:git-Bukkit-420b983] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit-1.9.2.jar:git-Bukkit-420b983] at net.minecraft.server.v1_9_R1.PlayerConnection.a(PlayerConnection.java:595) [craftbukkit-1.9.2.jar:git-Bukkit-420b983] at net.minecraft.server.v1_9_R1.PacketPlayInFlying.a(SourceFile:126) [craftbukkit-1.9.2.jar:git-Bukkit-420b983] at net.minecraft.server.v1_9_R1.PacketPlayInFlying$PacketPlayInPosition.a(SourceFile:57) [craftbukkit-1.9.2.jar:git-Bukkit-420b983] at net.minecraft.server.v1_9_R1.PlayerConnectionUtils$1.run(SourceFile:13) [craftbukkit-1.9.2.jar:git-Bukkit-420b983] at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_31] at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_31] at net.minecraft.server.v1_9_R1.SystemUtils.a(SourceFile:45) [craftbukkit-1.9.2.jar:git-Bukkit-420b983] at net.minecraft.server.v1_9_R1.MinecraftServer.D(MinecraftServer.java:679) [craftbukkit-1.9.2.jar:git-Bukkit-420b983] at net.minecraft.server.v1_9_R1.DedicatedServer.D(DedicatedServer.java:361) [craftbukkit-1.9.2.jar:git-Bukkit-420b983] at net.minecraft.server.v1_9_R1.MinecraftServer.C(MinecraftServer.java:635) [craftbukkit-1.9.2.jar:git-Bukkit-420b983] at net.minecraft.server.v1_9_R1.MinecraftServer.run(MinecraftServer.java:539) [craftbukkit-1.9.2.jar:git-Bukkit-420b983] at java.lang.Thread.run(Unknown Source) [?:1.8.0_31] Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(Unknown Source) ~[?:1.8.0_31] at java.util.ArrayList.get(Unknown Source) ~[?:1.8.0_31] at com.massivecraft.factions.engine.EngineExploit.netherportalTrapUpdate(EngineExploit.java:190) ~[?:?] at sun.reflect.GeneratedMethodAccessor48.invoke(Unknown Source) ~[?:?] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_31] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_31] at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:300) ~[craftbukkit-1.9.2.jar:git-Bukkit-420b983] Donc, ici, pourquoi factions a t'il planté ?    Regardons la ligne en détail :  Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 IndexOutOfBoundsException : Tiens, Index en dehors des limites ? L'index, en programmation, c'est ce qui pointe le n-ieme terme d'une liste. Par exemple, si dans un panier vous avez 1 myrtille, 1 pomme et 1 poires dans l'ordre, le fruit d'index 1 sera la pomme (ca commence a 0 :p), le fruit d'index 2 la poire, et si on demande au programme le fruit d'index 3, il plante car il n'existe pas. C'est exactement pareil ici : sauf que le panier est vide. On le voit Grace aux informations avant la fin de la ligne : Index voulu : 0, Taille de la liste : 0. Oops.   Bon, la, c'est un erreur dans le programme, on peut rien y faire sans contacter le développeur du plugin.   Par contres, certaines erreurs peuvent êtres résolues simplement, et par vous meme : Tout ce qui concerne yaml ou yml prévient d'un soucis de lecture de votre configuration. Vérifiez qu'il n'y ait pas de tabs dans le fichier.   [Liste d'erreurs a augmenter en fonction des idées]    
  7. Tuto packet, supprimé.

    J'ai décidé de supprimer, ce tutoriel car le site ne mérite pas mon travail. Vous pourrez retrouver le tutoriel ici, plus simple à comprendre.    
  8. Simplifier ses ItemStack's

    Bonjour.   Qui n'en a jamais eu marre de devoir faire des codes un peu long juste pour créer un ItemStack ? Exemple: ItemStack item = new ItemStack(Material.WOOL, 5, (byte) 4);        ItemMeta meta = item.getItemMeta();        meta.setDisplayName("Nom custom");        List<String> lore = new ArrayList<String>();        lore.add("Lore 1");        lore.add("Lore 2");        meta.setLore(lore);        meta.addEnchant(Enchantment.DAMAGE_ALL, 4, true);        item.setItemMeta(meta);Et bien je me suis amusé à faire une class pour simplifier tout ça. (Merci @Lucidiax de m'avoir aidé à régler un problème ).   La fameuse class:   Ensuite, pour l'utiliser c'est très simple. ItemStack newitem = new EasyItemStack(material).setLore("lala").build() etc;Ou ItemStack newitem = new EasyItemStack(material, nombre).addEnchant(Enchant, level, respect ou pas les enchant de base de mc).build();Ou encore ItemStack newitem = new EasyItemStack(material, nombre, data).setName("lala").build(); // (byte) data en intOu bien                 ItemStack itemstack = new EasyItemStack(Material.SKULL_ITEM, (byte) 3)                        .setOwner("Notch")                        .addEnchant(Enchantment.DURABILITY, 2, false)                        .setLore(Arrays.asList("Your lore"))                        .addFlag(ItemFlag.HIDE_ENCHANTS)                        .build();Donc au final on peut avoir quelque chose qui ressemble à ça:         ItemStack newitem = new EasyItemStack(Material.WOOL, 5, (byte) 15).setName("Nom custom").addEnchant(Enchantment.DAMAGE_ALL, 5, true).addEnchant(Enchantment.FIRE_ASPECT, 2, true).addFlag(ItemFlag.HIDE_POTION_EFFECTS).setLore(lore).build();Et en plus propre:         ItemStack newitem = new EasyItemStack(Material.WOOL, 5, (byte) 15).setName("Nom custom")                .addEnchant(Enchantment.DAMAGE_ALL, 5, true)                .addEnchant(Enchantment.FIRE_ASPECT, 2, true) .addFlag(ItemFlag.HIDE_POTION_EFFECTS)                .setLore(lore)                .build();Voilà, j'espère que cette class vous sera utile, n'hésitez pas à me dire les éventuels bugs, proposition et autre. A bientôt
  9. Salut à tous ! Un petit tutoriel pour vous présenter un utilitaire que j'apprécie particulièrement : Lombok. Je l'ai déjà découvert grâce aux sources de BungeeCord il y a quelques temps, et je n'arrive plus à m'en passer aujourd'hui. Il permet de clarifier énormément vos projets et avoir un code bien plus lisible, ainsi que de gagner beaucoup de temps ... En plus il est fonctionnel sur la plupart des grands IDE Java et n'alourdit pas vos JARs. Mais je vous présenterai ses fonctionnalités une fois qu'il sera installé ! C'est partit.   Je précise, comme il s'agit d'un utilitaire qui n'est pas, je trouve, destiné aux débutants, je ne préciserai pas certains détails, comme comment ajouter une dépendance à son projet ou ce qu'est une annotation. Donc ceux qui débutent, je vous conseil Google. I) Installer lombok
  10. \--[iNTRODUCTION]--/   Bonjour Développeur ! Ce tutoriel va vous expliquer comment afficher le Pseudo du joueur dans un GUI, dans un message défilant, ou n'importe où !   \--[PRÉ-REQUIS]--/ Ce tutoriel est compatible avec Minecraft 1.6 ou 1.7!   \--[sOMMAIRE]--/   1] Explications 2] Exemples 3] Effets secondaires   1] Explications Minecraft.getMinecraft().getSession().getUsername()Ce code permet de récupérer le pseudo du joueur depuis n'importe quel endroit du code. Vous pouvez l'ajouter dans un texte comme ceci par exemple : String monTexte = "Bienvenue, " + Minecraft.getMinecraft().getSession().getUsername();2] Exemples Nous allons maintenant le tester ! Rendons-nous dans la classe Minecraft.java qui se trouve dans le package net.minecraft.client. Puis, faîtes Ctrl + F (pour chercher quelque chose dans un fichier) et puis vous cherchez : Display.setTitleVous devriez tomber sur quelque chose comme ça : Display.setTitle("Minecraft 1.7.0");C'est la ligne définissant le titre de la fenêtre principale du jeu. Vous pouvez par exemple rajouter le pseudo : + Minecraft.getMinecraft().getSession().getUsername()Ce qui nous donne : Display.setTitle("Minecraft " + Minecraft.getMinecraft().getSession().getUsername());Comme on se trouve directement dans la classe Minecraft, on peut épurer ce code en faisant : Display.setTitle("Minecraft " + this.session.getUsername());Et voilà le résultat : Maintenant vous pouvez le reproduire sur les GUI par exemple ! 3] Effets secondaires Il n'y a pas d'effets secondaires, le pseudo qui est affiché CHANGE selon le joueur bien sur ! C'est tout pour cette astuce ! Merci de l'avoir lu ! Si vous avez besoin d'une autre astuce vous pouvez me faire part de votre idée dans les commentaires ! - DiaZ0te
  11. Les sets d'outils   Cette œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Pas de Modification 3.0 non transposé . Tout partage implique que vous citiez l'auteur original.   -[iNTRODUCTION]-   Salut tout le monde ! En ce moment la plupart des demandes d'aide ont rapport avec les GUI. Contrairement à ce que croivent la plupart d'entre vous, ce n'est vraiment pas compliqué. Mais un tutoriel sera surement fort utile. Ce tutoriel fonctionne pour la 1.7, la 1.8, et surement (peut-être avec quelques modifications) pour la 1.6, où même peut-être pour la 1.5, ou moins. Dans ce tutoriel on va créer un nouveau set d'outils   -[sOMMAIRE]-   A] Partie A : Création de l'item [A 1] Préparation A] Création des outils 2] Création aprofondie A] Enregistrement B] Craft des outils C] Durabilité 3] Les textures et noms A] Textures des items B] Noms des items   B] Partie B : Craftbukkit / Spigot [b   1] Préparation A] Création des outils 2] Création aprofondie A] Enregistrement B] Craft des outils C] Durabilité       A] Partie A : Création des outils [A   2] Préparation A] Création des outils   Pour commencer a créer votre set d'outils , rendez-vous dans la class Item.java. Celle-ci se situe dans le package net.minecraft.item   1] Item.java   a] l'épée itemRegistry.addObject(ID, "NOM", (new ItemSword(Item.ToolMaterial.MINERAIS)).setUnlocalizedName("NOM_").setTextureName("NOM_TEXTURE"));b] la pelle itemRegistry.addObject(ID, "NOM", (new ItemSpade(Item.ToolMaterial.MINERAIS)).setUnlocalizedName("NOM_").setTextureName("NOM_TEXTURE"));c] la pioche itemRegistry.addObject(ID, "NOM", (new ItemPickaxe(Item.ToolMaterial.MINERAIS)).setUnlocalizedName("NOM_").setTextureName("NOM_TEXTURE"));d] la hache itemRegistry.addObject(ID, "NOM", (new ItemAxe(Item.ToolMaterial.MINERAIS)).setUnlocalizedName("NOM_").setTextureName("NOM_TEXTURE"));e] la hoe itemRegistry.addObject(ID, "NOM", (new ItemHoe(Item.ToolMaterial.MINERAIS)).setUnlocalizedName("NOM_").setTextureName("NOM_TEXTURE"));2] Aide pour le item.java   ID remplacez par l'id de votre item NOM remplacez par le nom de votre item NOM_ remplacez par le nom IN GAME de votre item NOM_TEXTURE remplacez par le nom de la texture de votre item   ATTENTION vous avez une erreur , c'est normal , nous allons y remédier !   2] Création aprofondie   A] Enregistrement     Maintenant , nous allons enregistrer nos items pour que minecraft puisse les reconnaitre ! Ainsi , nous pourrons aussi créer le craft ! Rendez vous dans la class Items.java située dans le package net.minecraft.init   A] Items.java     a] l'épée public static final Item NOM = (Item)Item.itemRegistry.getObject("NOM");b] la pelle public static final Item NOM = (Item)Item.itemRegistry.getObject("NOM");c] la pioche public static final Item NOM = (Item)Item.itemRegistry.getObject("NOM");d] la hache public static final Item NOM = (Item)Item.itemRegistry.getObject("NOM");e] la hoe public static final Item NOM = (Item)Item.itemRegistry.getObject("NOM");2] Aide pour le items.java   NOM remplacez par le nom de votre item   B] Craft des outils       Maintenant , nous allons faire le craft de nos items ! Rendez vous dans la class RecipesTool.java située dans le package net.minecraft.item.crafting   Pour plus de simplicité , j'ai ranger le code pour m'y retrouver   ATTENTION Vous devez avoir créer un "minerais" ! Si ce n'est pas le cas , aller en bas du tutoriel !   a] Tout d'abord, ajoutons le minerais à mettre pour réaliser le craft {Blocks.planks, Blocks.cobblestone, Items.iron_ingot, Items.diamond, Items.gold_ingot},a.1] Pour ajouter le minerais, faites comme ceci : {Blocks.planks, Blocks.cobblestone, Items.iron_ingot, Items.diamond, Items.gold_ingot, Items.MINERAIS},b] Maintenant, passons aux outils {Items.wooden_pickaxe, Items.stone_pickaxe, Items.iron_pickaxe, Items.diamond_pickaxe, Items.golden_pickaxe},                {Items.wooden_shovel, Items.stone_shovel, Items.iron_shovel, Items.diamond_shovel, Items.golden_shovel},                {Items.wooden_axe, Items.stone_axe, Items.iron_axe, Items.diamond_axe, Items.golden_axe},                {Items.wooden_hoe, Items.stone_hoe, Items.iron_hoe, Items.diamond_hoe, Items.golden_hoe}};b.1] Pour ajouter le craft d'un outils , faites comme ceci : {Items.wooden_pickaxe, Items.stone_pickaxe, Items.iron_pickaxe, Items.diamond_pickaxe, Items.golden_pickaxe, Items.NOM_PIOCHE},                {Items.wooden_shovel, Items.stone_shovel, Items.iron_shovel, Items.diamond_shovel, Items.golden_shovel, Items.NOM_PELLE},                {Items.wooden_axe, Items.stone_axe, Items.iron_axe, Items.diamond_axe, Items.golden_axe, Items.NOM_HACHE},                {Items.wooden_hoe, Items.stone_hoe, Items.iron_hoe, Items.diamond_hoe, Items.golden_hoe, Items.NOM_HOE}};c] L'épée : le craft de l'épée se situe dans la class RecipesWeapons.java dans le package ( Net.minecraft.item.crafting )   c.1] Tout d'abord, ajoutons le minerais à mettre pour réaliser le craft {Blocks.planks, Blocks.cobblestone, Items.iron_ingot, Items.diamond, Items.gold_ingot},c.2] Pour ajouter le minerais, faites comme ceci : {Blocks.planks, Blocks.cobblestone, Items.iron_ingot, Items.diamond, Items.gold_ingot, Items.MINERAIS},b] Maintenant, passons au craft de l'épée this.recipeItems = new Object[][] {{Blocks.planks, Blocks.cobblestone, Items.iron_ingot, Items.diamond, Items.gold_ingot, Items.obsi, Items.zinc, Items.mercure, Items.saphir}, {Items.wooden_sword, Items.stone_sword, Items.iron_sword, Items.diamond_sword, Items.golden_sword}};   Pour le craft de l'épée , c'est très simple , faites comme ceci : this.recipeItems = new Object[][] {{Blocks.planks, Blocks.cobblestone, Items.iron_ingot, Items.diamond, Items.gold_ingot, Items.obsi, Items.zinc, Items.mercure, Items.saphir}, {Items.wooden_sword, Items.stone_sword, Items.iron_sword, Items.diamond_sword, Items.golden_sword, Items.NOM_EPEE}};   B] Durablilité     Maintenant, nous allons faire la durabilité de nos outils ! Pour cella , rendez vous dans la class Item.java située dans le package net.minecraft.item !   Vers la ligne 900 vous devriez trouver ça : public static enum ToolMaterial    {        WOOD("WOOD", 0, 0, 59, 2.0F, 0.0F, 15),        STONE("STONE", 1, 1, 131, 4.0F, 1.0F, 5),        IRON("IRON", 2, 2, 250, 6.0F, 2.0F, 14),        EMERALD("EMERALD", 3, 3, 1561, 8.0F, 3.0F, 10),        GOLD("GOLD", 4, 0, 32, 12.0F, 0.0F, 22);a] Durabilité de l'item   Pour la durabilité,   ajouter une ligne avec ceci : MINERAIS("MINERAIS", 4, 0, 32, 12.0F, 0.0F, 22);ATTENTION Mettez une virgule a la place du point-virgule a celui de l'or car comme vous pouvez le voir, il y a un Static FINAL   2] Aide pour la durabilité   MINERAIS remplacez par le nom de votre minerais   32 remplacez par la durabilité de votre outils 12.0 remplacez par la vitesse de minage de votre outil 0.0 remplacez par les dégâts de votre outils, 22 remplacez par la rareté de l'enchantement sur votre item ( plus ne nombre est bas, plus les enchantements sont rares )   3] Modification de la class item.java ( new.minecraft.item )   Maintenant, vous pouvez retourner près de la déclaration de vos outils et changer .MINERAIS en .LeNomDeVotreMinerais       3] Les textures et noms   A] Textures des items     Pour les textures de vos items , c'est TRES simple , il vous suffit d'ouvrir le 1.7.X.jar qui se situe dans   VotreDossierMCP->Jar->1.7.X -> 1.7.X.jar   quand celui-ci est ouvert , aller dans   Assets -> Minecraft -> textures -> items   Là , posez vos textures   ATTENTION Nommez bien vos texture comme dans la déclaration de vos outils !     B] Noms des items   Pour les noms de vos items , c'est TRES simple , il vous suffit d'ouvrir le 1.7.X.jar qui se situe dans   VotreDossierMCP->Jar->1.7.X -> 1.7.X.jar   quand celui-ci est ouvert , aller dans   Assets -> Minecraft -> lang   Ouvrez en_US.lang   Là , allez OU vous voulez et mettez ceci : item.NOM.name=NOM 2] Aide pour les noms des outils   Pour vous aidez,   dans la déclaration de votre item , il y avait un setUnlocalizedName("NOM")   reprenez ce nom et mettre le apres le item.   ensuite, après le = mettez le nom de l'item IN GAME     B] Partie B : Craftbukkit / Spigot [b         BIENTOT
  12. Bonjour à tous !   Tu es développeur de plugin Bukkit et tu es face à une erreur des plus banales mais, cette dernière se révèle difficile à résoudre ? C'est souvent les premiers signes d'une erreur à la con. Afin de les éviter, je vous conseille de suivre ce petit guide, retraçant l'histoire des plus grandes erreurs à la con.   Ma fonction, - ou ma condition -, ne s’exécute pas.   Pas de panique ! JAVA dispose d'un outil incroyable : le log console. Afin de repérer à quel niveau ta fonction ne s’exécute plus, introduit des lignes de log (numérotées) régulièrement. public void maFonction() { System.out.println("Hello World! (1)"); if(ta_condition) { // action System.out.println("Hello World! (2)"); else { // action System.out.println("Hello World! (3)"); } System.out.println("Hello World! (4)");}Ce traçage te permettra de localiser l'endroit où le code s'arrête. Il ne te reste plus qu'à te focaliser sur les lignes concernées puis rechercher l'erreur efficacement avec une concentration optimale.   Mon évènement ne s'exécute pas !   Grand classique ! Vérifie que ton évènement est correctement déclaré là où il doit l'être ! Tout commence par l'ajout de [email protected] avant ta fonction évènement. Ensuite, enregistre ton évènement dans ta classe principale, dans la fonction onEnable(). Pour cela, insère la ligne suivante : Bukkit.getPluginManager().registerEvents(new LaClasseDeTonEvent(), this);Ma commande ne s'exécute pas !   Il s'agit d'une erreur dans le même style que la précédente. Tu as sans doute oublié d'enregistrer ta commande lors du lancement du plugin. Pour cela, copie la ligne suivante en la complétant, dans la fonction onEnable() de ta classe principale. getCommand("le_nom_de_ta_commande").setExecutor(new classe_de_ta_commande());Ma configuration ne se sauvegarde pas !   Là, une erreur qui m'arrive régulièrement. Après avoir modifié ton fichier via l'outil YamlConfiguration, n'oublie pas de faire une sauvegarde. File f = new File("plugins/MonPlugin/customConfig.yml");YamlConfiguration yc = YamlConfiguration.load(f);yc.set("radius", 10);yc.set("material", Material.GRASS.toString());yc.set("username", "Jiheyr");yc.save(f);Lorsque tu sauvegardes une configuration dans un fichier, tu dois gérer les exceptions par le biais d'un bloc try/catch. Ce bloc n'est pas présente dans le code ci-dessus.   Une erreur est survenue dans le plugin.yml !   Le plus souvent, c'est un caractère inapproprié qui corrompt ledit fichier. Veille à la suppression de toutes les tabulations, accents et apostrophes ;-)   Faites attention à la casse !   Chose importante lorsque vous utilisez des énumérations, c'est de veiller à la casse. Supposons que le code suivant soit le vôtre : public Material isGrass(YamlConfiguration yc) { Material m = Material.valueOf(yc.getString("material")); return m;}Si dans votre fichier de configuration, la ligne "material" a pour valeur "grass", la fonction retournera une erreur NullPointException. Il faut donc que la valeur respecte la casse, ainsi on doit saisir "GRASS". Dans certain cas, la casse est très importante. Je vous conseille donc, pour ce qui est de ce cas, de remplacer yc.getString("material") par yc.getString("material").toUpperCase() ! ;-)   Null Pointer Exception à la con.   L'Erreur avec un grand 'E'. Pensez-toujours à mettre des conditions dès qu'il le faut pour vérifier que vous ne travaillez avec aucun argument null. Imaginez la commande /tp UnknowNickname ! SI vous ne pensez pas à vérifier que le pseudo entré existe, il y a de forte chance pour ce risque d'erreurs surviennent régulièrement. Prenez soin de vérifier vos variables, surtout lorsque vous manipulez des informations relatives aux joueurs, aux blocs et aux inventaires.   Un élément de ma liste n'est pas traité par ma boucle for !   Admettons le code suivant. List<Material> list = new ArrayList<Material>();list.add(Material.GRAVEL);list.add(Material.GOLD_ORE);list.add(Material.DIRT);for(int i = 0; i < list.size(); i++) { Material m = list.get(i); if(m.toString().startsWith("G")) { System.out.println(m.toString() + " :: true"); list.remove(m); }}Après avoir exécuter le code, les lignes suivantes nous sont renvoyées : GRAVEL :: trueProblème. Le code aurait également du retourner la même ligne avec GOLD_ORE. Que s'est-il passé ? Et bien, en supprimant le GRAVEL (index: 0) de votre liste, cette dernière a décalé les valeurs. Ainsi, le GOLD_ORE se trouva en position index 0. Or, la boucle incrémente l'indice pour passer au Material d'indice 1 : La DIRT. Si vous utilisez ce genre de boucle for, prenez garde ! Insérez une décrémentation de l'indice après la fonction remove ________   C'est tout pour le moment, j'ai sans doute oublié de nombreux autres bogues. Ou bien, il se peut aussi que des conneries soient présentes dans ma correction de conneries. Paradoxale. Je vous invite donc à soumettre vos bugs les plus communs, pour que l'on rédige tous ensemble ce petit guide du débutant et de l'expérimenté fatigué.   Bonne journée à tous ~
  13. Bonjour,   Afin de suivre ce tutoriel, il est nécessaire d'avoir un niveau correct en réalisation de plugin Bukkit. Nous allons apprendre à créer un projectile qui suit sa cible, un projectile capable de modifier sa trajectoire. Pour cela, je vous demande de bien vouloir créer les variables Projectile projectile et Entity target ! Ensuite, enregistrez ce couple Projectile/Entity dans une Map<Projectile, Entity> couples. Enfin, créez une méthode run() qui se lance très fréquemment. (< 1 seconde)   Voilà, le côté complexe de la chose. Manipulons les vecteurs. import java.util.Map;import java.util.Map.Entry;import java.util.TimerTask;import org.bukkit.entity.Entity;import org.bukkit.entity.Projectile;import org.bukkit.util.Vector;public class <nom_de_ta_classe> extends TimerTask { @Override public void run() { Map<Projectile, Entity> couples = <ta_variable_couple>; for(Entry<Projectile, Entity> e : couples.entrySet()) { Projectile projectile = e.getKey(); Entity target = e.getValue(); if(projectile != null && !projectile.isOnGround() && target != null && !target.isValid()) { Vector projectileVector = projectile.getLocation().toVector(); Vector targetVector = target.getLocation().toVector(); // On calcule la direction du projectile vers la cible en faisons une soustraction des deux vecteurs. Vector direction = targetVector.subtract(projectileVector).normalize(); // On conserve la vitesse. double speed = projectile.getVelocity().length(); projectile.setVelocity(direction.multiply(speed)); } } }Comprenons ensemble. Tout d'abord, admettons que la tâche se lance toutes les demi-secondes. Lors de chaque exécution de la fonction, de nouvelles trajectoires sont calculées pour chaque projectile. On vérifie tout d'abord que le projectile, tout comme la cible, est en parfait état. Ils existent, sont en vie, et le projectile n'a encore rien touché. On soustrait les trajectoires du projectile et de la cible, puis en n'oublie pas de multiplier la direction obtenue par la norme du vecteur du projectile. Enfin, on applique la nouvelle trajectoire au projectile. Votre cible pourra courir ou bien se téléporter, le projectile fusera toujours dans l'air dans sa direction, à moins qu'il ne rencontre auparavant un bloc dans lequel il ira plonger.   [ATTENTION] Je n'ai pas inclus la gestion de la suppression automatique des couples dont le projectile a atteint sa cible.   J'espère que ce tutoriel sera utile à ceux se trouvant dans le besoin, et j'espère également que les plus expérimentés d'entre vous seront me prodiguer quelques conseils afin d'optimiser ce code si besoin.   Merci à tous ~   Tutoriel réalisé à partir du code de NathanWolf.
  14. Bonjour communauté de Bukkit.fr ! Pour tout les dev fainéant comme moi cette astuce vous sera utile     Nous allons voir comment créer une annotation @Enable !   Exemple :  package tuto;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface RegisterEvent { }Attention Cette annotation est à mettre au dessus de la class voulue (d'ou le ElementType.Type) et vous devez quand même implémenter Listener :   Le chargement : /** * Enregistre toute les class contenant l'annotation RegisterEvents * * @param plugin * @param loader */ private static void registerEventsAnnotation(JavaPlugin plugin, ClassLoader loader) { Reflections r = UtilReflect.getClassAnnotationReflection(loader); Set<Class<?>> annotated = r.getTypesAnnotatedWith(RegisterEvent.class); for (Class clazz : annotated) { try { if (Listener.class.isAssignableFrom(clazz)) plugin.getServer().getPluginManager().registerEvents((Listener) registerInstance(clazz), plugin); } catch (IllegalArgumentException | InstantiationException | IllegalAccessException e) { e.printStackTrace(); continue; } } }Et voila ! vous n'aurez plus jamais a enregistrer vos events !
  15. Ça fais plusieurs jours que je regarde du streaming code sur se site, https://www.livecoding.tv et j'y adore, tellement que je stream même mon code moi même. C'est un site sympathique, toujours en BETA mais très cool, vous pouvez streamer dessus gratuitement et rapidement. En n'importe quel language de programmation temps que c'est à propos de code Le site est Anglais, mais vous avez le droits de stream en n'importe quel langue, même que vous avez meme pas besoins de parler, vous pouvez juste stream si ça vous plait.   C'est très fun, vous pouvez regarder et parler avec des vraies développeurs avec de l'experience professionnel, hier, je regardais et parlais avec un dev qui fais un jeux qui sorte bientôt sur Steam. il était vraiment sympa son jeux 3d et tout codez sous Unity et est vraiment virtuel et realiste.    J'espère voir des membres de bukkit.fr dessus très bientôt     Voici le site: https://www.livecoding.tv
  16. Version (serveur) : 1.7.2/1.7.5/1.7.10/1.8 API utilisée : Spigot IDE utilisé : Eclipse Explications du problème rencontré : Lorsque je démare mon serveur, j'appercois une erreur me disant que mon plugin n'a pas pu être charger. Recherches effectuées : J'ai cherché sur plusieurs site, chacun me disait plus ou moins la même chose. Mais j'ai bon essayé tout ce qu'ils disait, rien ne marchait... Code d'erreur : Erreur: Informations supplémentaires :   Alors voilà, je pense que vous l'avez deviné, l'erreur se trouve ligne 14 dans ma 2ème class. La 14ème ligne: String ts = this.plugin.getConfig().getString("infos.ts");   C'est probablement la que ce trouve l'erreur, car quand je remplace cette ligne par String ts = "Ceci est une phrase"; , tout fonctionne bien.   L'erreur serais le "this.plugin.getConfig().GetString("infos.ts");" vu que j'essaie d'appeller une fonction de JavaPlugin, qui se trouve dans ma 1er class.   Donc, pour en arrivé à "this.plugin...." j'ai fais:   J'ai défini public InfoCommands iCmd = new InfoCommands(this);dans ma class principale,         J'ai ensuite fait mon Constructor dans ma 2ème class: public InfoCommands(Util util) {        this.plugin = util;    }     et j'ai ajouté private Util plugin;au dessus du constructor         Donc logiquement, je peux utilisé this.plugin pour appellé une fonction qui se trouve dans ma class principale, non ?   Et bha faut croire que non, je ne sais pas pourquoi...   A partire de là, je reste bloqué, je ne vois pas d'oû le problème pourait venir, c'est pour cela que je poste ici...       En espérant avoir de l'aide le plus rapidement possible.
  17. Version (serveur) : 1.8 API utilisée : Spigot IDE utilisé : Eclipse Explications du problème rencontré : Problème avec une int enfin je pense Recherches effectuées : ... Code d'erreur : [19:06:23] [server thread/ERROR]: Could not load 'plugins\Sign-info-connection.jar' in folder 'plugins' org.bukkit.plugin.InvalidPluginException: java.lang.IllegalArgumentException: Plugin already initialized! at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:135) ~[spigot.jar:git-Spigot-b1e6da1-1092acb] at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:329) ~[spigot.jar:git-Spigot-b1e6da1-1092acb] at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:251) [spigot.jar:git-Spigot-b1e6da1-1092acb] at org.bukkit.craftbukkit.v1_8_R1.CraftServer.loadPlugins(CraftServer.java:290) [spigot.jar:git-Spigot-b1e6da1-1092acb] at net.minecraft.server.v1_8_R1.DedicatedServer.init(DedicatedServer.java:152) [spigot.jar:git-Spigot-b1e6da1-1092acb] at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java:494) [spigot.jar:git-Spigot-b1e6da1-1092acb] at java.lang.Thread.run(Unknown Source) [?:1.8.0_31] Caused by: java.lang.IllegalArgumentException: Plugin already initialized! at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:122) ~[spigot.jar:git-Spigot-b1e6da1-1092acb] at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:66) ~[spigot.jar:git-Spigot-b1e6da1-1092acb] at fr.ph1823.UNO.CountDown.<init>(CountDown.java:34) ~[?:?] at fr.ph1823.UNO.Main.<init>(Main.java:47) ~[?:?] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_31] at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_31] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_31] at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:1.8.0_31] at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_31] at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:76) ~[spigot.jar:git-Spigot-b1e6da1-1092acb] at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:131) ~[spigot.jar:git-Spigot-b1e6da1-1092acb] ... 6 more Caused by: java.lang.IllegalStateException: Initial initialization at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:125) ~[spigot.jar:git-Spigot-b1e6da1-1092acb] at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:66) ~[spigot.jar:git-Spigot-b1e6da1-1092acb] at fr.ph1823.UNO.Main.<init>(Main.java:42) ~[?:?] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_31] at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_31] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_31] at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:1.8.0_31] at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_31] at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:76) ~[spigot.jar:git-Spigot-b1e6da1-1092acb] at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:131) ~[spigot.jar:git-Spigot-b1e6da1-1092acb] ... 6 more Code : Informations supplémentaires : (screen par exemple)Le plugin marché très bien mais depuis 2semaines il me met cet erreur je ne comprend pas pourquoi justement l'endroit de la configuration renvoit un int donc sa devrait pas le faire. Merci de votre aide
  18. Bonjoue à tous, Je me permet de demander votre aide suite à un problème rencontré lors du developpement de mon petit plugin bukkit. Eclipse me met un icone Attention avec un commentaire sur getPlayer(String), commande périmée d'après lui. Lorsque que je tente de lancer mon .jar sur un serveur CraftBukkit, il me donne un message d'erreur en entrant la commande. Est-ce que quelqu'un a déjà rencontré ce soucis ? Merci de votre aide.     Version (serveur) : 1.8 API utilisée : bukkit-1.8-R0.1-SNAPSHOT IDE utilisé : Eclipse Explications du problème rencontré : Le 'getPlayer(String)' m'empèche d'éxécuter mon plugin Recherches effectuées : Une question équivalente a été posée sur Stackoverflow, mais je ne suis pas arrivé à fixer ce problème. Code d'erreur Eclipse : The method getPlayer(String) from the type Server is deprecatedCode d'erreur Serveur :
  19. [Lib Java] GalkinsSound

    GalkinsSound est une library simple écrit en Java permettant simplement de lancer une musique via un URL ou un chemin local. La library n'est pas encore finie mais propose plusieurs petites méthodes. Comment l'utiliser ? (Je préviens que je suis en train de l'orienter objet et que je dois donc corriger des bugs) Pour l'utiliser via une interface graphique : 1. Téléchargez le code source : https://github.com/Galkins/GalkinsSound/archive/master.zip 2. Regardez l'exemple fourni sous le nom "JPanelExample.java". Pour l'utiliser via autre chose : En cours d'écriture... Télécharger / Sources : Library : https://galkins.fr/dl/GalkinsSound.jar Sources : https://github.com/Galkins/GalkinsSound Pour plus de contenu, rendez-vous sur http://galkins.fr/.
  20. Version (serveur) : 1.8 API utilisée : Spigot IDE utilisé : Eclipse Explications du problème rencontré : Bonjour, je me demande si il est possible de register une abstract class ? oui vous savez la class mère , le seul problème c'est que si je register l'event à l'intérieur de cette class hé bien à chaque fois que j'appel un nouvel objet ça me la register ce qui est assez problématique car pour un joueur , l'event se déclenche 2 fois Recherches effectuées : Un peu partout Code d'erreur : Aucun Code : Voici ma abstract class : Comme vous pouvez le voir j'ai placé un broadcastmessage test ... et quand j'appel le gadget comme ceci : new DimentionalTnt(p); que je l'utilise , ça marche et que j'appel un autre gadget : new BatBlaster(p); ça marche , j'ai que un "test" mais si je rappel une fois l'autre gadget new DimentionalTnt(p); cette fois ci , j'ai 2 "test"
  21. Faction

    Version (serveur) : 1.8 API utilisée : Bukkit IDE utilisé : Eclipse Bonjour, je voudrais récupérer la faction d'un joueur, la description de celle-ci et d'autre chose via un autre plugin. Mais le problème je ne sais pas comment m'y prendre.    J'espère que j'ai été clair même si c'est un peu court.   Excellente après-midi et merci d'avance pour vos réponses !
  22. Version (serveur) : 1.8 API utilisée : Spigot IDE utilisé : Eclipse Explications du problème rencontré : Ben enfaîte l'entité enfin je pense qu'elle spawn mais on ne le voit pas ou alors elle ne spawn pas mais car je fait chargé plusieurs chunck je commence a avoir des chute de fps quand je revient a coordonée du spawn. Recherches effectuées : google, bukkit, ironcraft Code d'erreur : Aucun Sorry ;( Code : Informations supplémentaires : Merci de votre aide
  23. Aide Bungee Cord

    Bonjour    Problème : Mon Bungee cord me mets qu'il lui faut java 7 pour démarrer alors que je l'ai installé  Hébergeur : Vps 6Go de Ram Version: Dernière version de Bungee Cord Recherche effectué: Google , Bukkit ... Système d'exploitation : Linux: Debian 7 64bis   Comme dis dans la présentation du problème Bungee Cord ne veux pas démarrer et il me dis : :~/bungee# java -Xmx256m -jar BungeeCord.jar                       Exception in thread "main" java.lang.UnsupportedClassVersionError: net/md_5/bungee/api/ProxyServer : Unsupported major.minor version 51.0        at java.lang.ClassLoader.defineClass1(Native Method)        at java.lang.ClassLoader.defineClass(ClassLoader.java:643)        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)        at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)        at java.net.URLClassLoader.access$000(URLClassLoader.java:73)        at java.net.URLClassLoader$1.run(URLClassLoader.java:212)        at java.security.AccessController.doPrivileged(Native Method)        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)        at java.lang.ClassLoader.loadClass(ClassLoader.java:323)        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)        at java.lang.ClassLoader.loadClass(ClassLoader.java:268)Could not find the main class: net.md_5.bungee.Bootstrap. Program will exit.  Alors que j'ai éffectué cette commande dans le root  apt-get install openjdk-7-jre
  24. Présentation de Zyfarok

    Bonjour à toutes et à tous, je me surnomme Zyfarok et je suis créateur du Projet OligoCube.       Je suis un étudiant de 17ans en 1ère années de bachelor d'Informatique à l'EPFL (à Lausanne en suisse, mais je suis français ^^). J'adore l'informatique, les jeux vidéos et la musique.     J'ai appris le java sur le site du zéro mais j'avais il y a 6 mois que peu pratiqué, aujourd'hui j'ai des cours de Java à l'EPFL (et donc je pratique régulièrement). J'ai aussi appris l'HTML (et CSS) et le PhP sur le site du même nom (maintenant openclassroom).    Je joue à Minecraft depuis au moins 3 ans (peut-être 4 je sais plus).    Je travail actuellement sur un projet de serveur Minecraft : OligoCube (RPG/PvP/Architecture, voir OligoCube.fr)    Je suis ici pour présenter mon projet, recruter (des codeurs (Java/NodeJS), des graphistes (textures), des builder et des simples joueurs), observer les autres projets et aider les autres dans la mesure de mes connaissances (Principalement Java).
  25. Version (serveur) : 1.7.10 API utilisée : Bukkit // Spigot // CraftBukkit IDE utilisé : Eclipse Explications du problème rencontré : Je ne sais pas comment avoir le score de tous les joueur tuer par team en java Recherches effectuées :GOOGLE.FR http://minecraft.gamepedia.com/Scoreboard#Objectives Code d'erreur : PAS DE CODE D'ERREUR Code :   Informations supplémentaires : Merci de m'aider