Wytrem

Développeur
  • Compteur de contenus

    1007
  • Inscription

  • Dernière visite

  • Days Won

    48

Tout ce qui a été posté par Wytrem

  1. C'est un peu excessif, il se passe encore des choses http://forum.ironcraft.fr/discover/
  2. Belle API, chapeau ! Bon retour parmi nous :D
  3. Bonjour, chacun peut exprimer son avis à propos d'un CV, de manière constructive, et l'auteur du CV peut évidemment y répondre. Une fois que c'est chose faite, il est inutile de partir en débats stériles et agressifs. Les potentiels "client" ne sont pas naïfs, il liront les avis et feront des comparaisons à d'autres CVs pour se rendre compte eux-même de la qualité du service proposé. Et même s'ils l'étaient, on ne peut que les avertir en donnant simplement notre avis sur le sujet en question. Essayons tous de faire preuve d'un peu de recul et de maturité.
  4. Modifier Craftbukkit/Spigot Cette œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas dUtilisation Commerciale - Pas de Modification 3.0 non transposé . Tout partage implique que vous citiez l'auteur original. -[INTRODUCTION]- Bonjour à tous ! Les serveurs Minecraft, au même titre que les clients se divisent en deux catégories : vanilla et modifié. De nos jours, (presque) personne n'utilise le serveur vanilla, tellement les possibilités offertes par CraftBukkit sont vastes et facilement accessibles. Dans ce tuto, on ne va s'intéresser qu'aux serveurs dérivés de CraftBukkit. -[PRÉ-REQUIS]- Un IDE (nous utiliserons eclipse dans ce tutoriel) ; Git Un executeur bash. -[SOMMAIRE]- 1] Généralités 2] Obtention des sources A] Version 1.7.10 B] Version 1.8 (et dernières) C] Compiler 1] Généralités CraftBukkit est une extension du serveur vanilla qui a pour seule vocation de permettre l'utilisation de plugins (et c'est déjà bien comme objectif !). Un serveur CraftBukkit est structuré de la manière suivante : une API et son implémentation. L'API est l'ensemble des interfaces, celles dont vous vous servez pour écrire un plugin (par exemple Player, Spider, Server, etc.), et elle s'appelle Bukkit. Ces interfaces seules n'ont évidemment pas vocation à faire fonctionner un serveur, c'est pourquoi la création d'un serveur nécessite l'implémentation de ces interfaces, qui est le rôle de CraftBukkit. Par exemple, Bukkit contient l'interface Player, qui contient la méthode sendChatToPlayer(String), et CraftBukkit contient CraftPlayer (qui est normalement inutilisé par les plugins) qui contient l'implémentation de sendChatToPlayer(String), c'est à dire tout ce qu'il faut faire pour mener à bien l'envoi du message (packet, etc.). Spigot, quand à lui, est un CraftBukkit modifié, c'est à dire qu'il reprend toutes les fonctionnalités de CraftBukkit (l'API Bukkit, les plugins) et en améliore les performances, ce qui en fait le serveur le plus largement utilisé actuellement. Nous nous consacrerons à sa modification dans la suite. 2] Obtention des sources En raison de problèmes juridiques, le téléchargement des sources de Spigot est un peu plus compliqué qu'avant, en particulier pour les versions antérieures à la 1.8. A] Version 1.7.10 Vous devrez télécharger l'archive disponible ici, puis extrayez son contenu. Vous devriez obtenir un dossier appelé « Spigot-master ». Pour importer le projet dans Eclipse, cliquez sur « Import... » dans le menu « File ». Une boîte modale s'ouvre, choisissez « Existing Maven Project » puis cliquez sur « Next ». Sélectionnez ensuite le dossier Spigot-master précédemment désarchivé, puis validez. Vous voici maintenant avec les sources de Spigot version 1.7.10, que nous allons pouvoir modifier. B] Version 1.8 (et plus récentes) Deux choix s'offrent à vous : vous pouvez télécharger les sources directement depuis le dépôt officiel via git (à vos risques et périls), ou préférer BuildTools (recommandé). Nous prendrons ici l'exemple de sortie de BuildTools. Après avoir exécuté BuildTools.jar, la console devrait afficher : Si ça n'est pas le cas, reportez vous à la page officielle. Pour importer le projet dans eclipse, vous devrez répéter la même opération que celle détaillée ci-dessus, en sélectionnant le dossier Spigot créé par BuildTools : Si des erreurs surviennent pendant ou après l'import, essayez de les résoudre en acceptant la proposition de votre IDE (en général, Eclipse propose l'installation de nouveaux connecteurs ou la mise à jour du projet). Sinon, ignorez-les et testez la compilation. C] Compiler Cette partie est commune à toutes les versions. Pour compiler votre Spigot, il faut faire un clic droit sur le projet spigot-parent, puis cliquer sur « Run as -> Maven build... ». Une boîte modale s'ouvre, entrez les termes « clean install » dans le champ appelé « Goals », puis validez en cliquant sur « Run ». La console va apparaître. La compilation peut prendre un certain temps selon les capacités de votre ordinateur. Si vous voyez un message semblable apparaître : La compilation a réussi ! Le fichier exécutable se trouve dans le dossier « Spigot/Spigot-Server/target/spigot-VERSION.jar ». Sinon, postez vos erreurs ci-dessous.
  5. 1.x

    On va voir, peut-être cet été x)
  6. 1.x

    On va voir, peut-être cet été x)
  7. Afficher un message central Cette uvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas dUtilisation Commerciale - Pas de Modification 3.0 non transposé . Tout partage implique que vous citiez l'auteur original. -[iNTRODUCTION]- Salut tout le monde ! Nous allons expliquer dans cette astuce comment afficher un message au centre de l'écran. Vous verrez, ça n'est pas bien compliqué. -[PR-REQUIS]- -[sOMMAIRE]- 1] Explications pas à pas 2] Résultat final 1] Explications pas à pas Les messages du chat sont reçus par packets lors de la phase de jeu « play ». Lors de leur réception, la méthode NetHandlerPlayerClient.handleChat(S02PacketChat) est appelée. Elle affiche simplement le message reçu dans le chat (via la GuiIngame) : public void handleChat(S02PacketChat packetChat) // Un peu de renommage ne fait pas de mal { this.gameController.ingameGUI.getChatGUI().func_146227_a(packetChat.func_148915_c()); } Ce que nous allons faire, est simplement empêcher le message d'être affiché dans le chat s'il commence par « ~ » ou par «[bROADCAST] ». Le texte non formatté du message (sans les couleurs et autres) peut être récupéré sur le IChatComponent renvoyé par S02PacketChat.func_148915_c(). Nous allons donc remplacer la méthode par : public void handleChat(S02PacketChat packetChat) { /** * Le message qui a été reçu. */ IChatComponent chatComponent = packetChat.func_148915_c(); /** * Le texte non formatté reçu. */ String unformattedText = chatComponent.getUnformattedText(); // Si il s'agit d'un broadcast if (unformattedText.startsWith(" ~") || unformattedText.startsWith("[BROADCAST] ")) { // On l'affiche en tant que tel this.gameController.ingameGUI.showCenterMessage(chatComponent.getFormattedText()); } else { // Sinon on affiche le message dans le chat this.gameController.ingameGUI.getChatGUI().func_146227_a(chatComponent); } } Il nous faut ensuite créer la méthode showCenterMessage(String) dans GuiIngame. public void showCenterMessage(String formattedText) { } Pour la faire fonctionner, nous aurons besoin de 2 fields, qu'il nous faut déclarer au dessus : /** * Dans cette variable sera stocké le message à afficher. */ private String displayedCenterMessage = null; /** * Le temps restant du message à afficher (en ticks). */ private int centerMessageTimer = 0; Nous pouvons maintenant remplir la méthode. Comme vous pouvez le constater, elle ne fait que remplir les fields. public void showCenterMessage(String formattedText) { displayedCenterMessage = formattedText; centerMessageTimer = 3 * 20; // 3 * 20 ticks = 3 secondes } Ensuite, il faut afficher le texte entré dans displayedCenterMessage. Pour cela, nous nous rendons dans GuiIngame.renderGameOverlay, et en dessous du if suivant : if (!this.mc.playerController.enableEverythingIsScrewedUpMode()) On peut ajouter le code de rendu : if (displayedCenterMessage != null) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); // Transparence du message int alpha = centerMessageTimer < 10 ? ((int) (centerMessageTimer * 25)) : 255; // Couleur de base du message (simplement blanc auquel on a ajouté la transparence) int color = 0xffffff | ((alpha & 255) << 24); // On dessine le message centré avec la couleur calculée this.mc.fontRenderer.drawString(displayedCenterMessage, (var6 - this.mc.fontRenderer.getStringWidth(displayedCenterMessage)) / 2, var7 / 2 - 15, color); } Il ne nous reste maintenant plus qu'à décrémenter le timer et à vider la variable displayedCenterMessage si le temps est écoulé. Nous nous rendons dans GuiIngame.updateTick, et nos ajoutons ce code tout au début de la fonction : // Si on est en train d'afficher un message... if (this.centerMessageTimer > 0) { // On réduit le temps restant this.centerMessageTimer--; // Et si le temps est écoulé... if (this.centerMessageTimer == 0) { // On arrête d'afficher le message displayedCenterMessage = null; } } Et c'est tout ! 2] Résultat final Dans NetHandlerPlayerClient.handleChat(S02PacketChat) : public void handleChat(S02PacketChat packetChat) { /** * Le message qui a été reçu. */ IChatComponent chatComponent = packetChat.func_148915_c(); /** * Le texte non formatté reçu. */ String unformattedText = chatComponent.getUnformattedText(); // Si il s'agit d'un broadcast if (unformattedText.startsWith(" ~") || unformattedText.startsWith("[BROADCAST] ")) { // On l'affiche en tant que tel this.gameController.ingameGUI.showCenterMessage(chatComponent.getFormattedText()); } else { // Sinon on affiche le message dans le chat this.gameController.ingameGUI.getChatGUI().func_146227_a(chatComponent); } } Dans GuiIngame : /** * Dans cette variable sera stocké le message à afficher. */ private String displayedCenterMessage = null; /** * Le temps restant du message à afficher (en ticks). */ private int centerMessageTimer = 0; public void showCenterMessage(String formattedText) { displayedCenterMessage = formattedText; centerMessageTimer = 3 * 20; // 3 * 20 ticks = 3 secondes } Dans GuiIngame.renderGameOverlay : if (displayedCenterMessage != null) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); // Transparence du message int alpha = centerMessageTimer < 10 ? ((int) (centerMessageTimer * 25)) : 255; // Couleur de base du message (simplement blanc auquel on a ajouté la transparence) int color = 0xffffff | ((alpha & 255) << 24); // On dessine le message centré avec la couleur calculée this.mc.fontRenderer.drawString(displayedCenterMessage, (var6 - this.mc.fontRenderer.getStringWidth(displayedCenterMessage)) / 2, var7 / 2 - 15, color); } Dans GuiIngame.updateTick : // Si on est en train d'afficher un message... if (this.centerMessageTimer > 0) { // On réduit le temps restant this.centerMessageTimer--; // Et si le temps est écoulé... if (this.centerMessageTimer == 0) { // On arrête d'afficher le message displayedCenterMessage = null; } } Merci d'avoir suivi cette astuce, n'hésitez pas à laisser vos commentaires !
  8. Salut, ah euh je ne l'ai plus sur mon ordi... C'est une vieille version, pourquoi ne pas passer en 1.8 ?
  9. Le seul lien c'est de coder une application pour aider à jouer à Dofus c'est tout x)
  10. Sympa ! Ça lit tout seul les fichiers du jeu ou il faut rentrer les familiers à la mano ? PS : si jamais, j'ai toujours voulu faire un bot à détection de pixel, ça m'intéresse beaucoup en analyse d'images, si ça te dit.
  11. +1 Bonne année pleine de code, de koupains, d'amour et de bonheur !
  12. Moi je veux bien le faire juste pour le fun.
  13. Hey, je serai ravi de bosser sur un port vanilla, et je suis curieux de voir votre code de plus près. Mais je ne trouve pas les classes de l'API sur le github (package lib.craftstudio) ou la dépendance qui correspondrait dans le build.gradle, j'ai mal cherché ?
  14. 1.7.x

    Tout sur les blocs ! Cette uvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas dUtilisation Commerciale - Pas de Modification 3.0 non transposé . Tout partage implique que vous citiez l'auteur original. -[iNTRODUCTION]- Bonjour à tous ! Dans ce tutoriel, nous allons explorer les méandres des objets les plus importants dans Minecraft : les blocs ! -[sOMMAIRE]- 1] Mais au fait, c'est quoi un bloc ? 2] Bases du système 3] Créer un bloc A] Un bloc simple B] Les textures et les noms C] Les méta-données D] Quelques méthodes utiles E] Ajouter un bloc avec un rendu complexe 4] Astuces pratiques A] Créer un minerai B] Créer un bloc orientable C] Créer une plante D] Créer un onglet dans le menu créatif E] La génération 5] Entités de blocs (TileEntities) 6]Astuces pratique 2 A]Créer une nouvelle table de craft B]Créer un four C]Créer un coffre 1] Mais au fait, c'est quoi un bloc ? Cette méthode statique est appelé lors du lancement du client Minecraft (depuis le constructeur Minecraft() Bootstrap.func_151354_b()). C'est ici que sont instanciés tous les blocs. Et pour répondre à notre question de départ, on pourra dire simplement qu'un bloc est une instance de la classe Block (captain obvious). 2] Bases du système C'est donc depuis cette classe (grâce au modifieur public), que nous pourrons récupérer les instances de nos blocs précédemment déclarés dans Block. Comme nous l'avons dit précédemment, un bloc est une instance d'une classe fille de Block. Si vous vous rendez dans cette dernière, vous y verrez beaucoup de méthodes, pour la plupart vide. La majorité d'entre elles correpond à des évenements qui surviennent en jeu (quand un joueur casse un, qu'il marche dessus, qu'il clique dessus, etc.). Nous reviendrons plus en détails sur ces méthodes dans la partie 3C. Chaque bloc a donc sa propre classe, et ce pour permettre un paramétrage fin. En résumé, les redéfinitions de méthodes (overrides) sont le nerf de la guerre pour créer des blocs ! 3] Créer un bloc A] Un bloc simple B] Les textures et les noms C] Les méta-données D] Quelques méthodes utiles E] Ajouter un bloc avec un rendu complexe 4] Astuces pratiques Nous voilà maintenant arrivés à la partie que je pense que vous attendiez le plus ! Avant de rentrer dans le vif du sujet, je voudrais quand même préciser quelque chose : libre à vous de copier « brutalement » les codes présentés ici sans aucunement chercher la compréhension, mais je vous conseille d'abord de lire ce qui a été dit au dessus. A] Créer un minerai B] Créer un bloc orientable C] Créer une plante Bientôt... E] La génération 5] Entités de blocs (TileEntities) Par défaut, un bloc de monde n'est pas une entité, en ce sens qu'il ne dispose pas des fonctionnalités utiles de celles, comme par exemple la sauvegarde d'informations spécifiques via NBT. Mais certains blocs aux fonctionnalités particulières on besoin de ces fonctionnalités, comme par exemple les coffres ou les dispensers. Alors, quand on les pose dans un monde, il ne sont plus « seulement » des cubes, mais aussi des entités qui intéragissent avec leur environnement. Voyons comment créer ça ! A] Créer une TileEntity B] Les méthodes disponibles C] Lui attribuer un rendu spécial
  15. Très sympa, bravo !
  16. État : Résolu J'ouvre le bal ! Lorsqu'on entre le code suivant dans un message, les spoilers s'imbriquent automatiquement les uns dans les autres, sans qu'on leur ait rien demandé : [spoiler] [/spoiler] [spoiler] [/spoiler] [spoiler] [/spoiler] [spoiler] [/spoiler] Exemple :
  17. TheShark34, lalalala, xD
  18. Bienvenue !
  19. Bienvenue !
  20. Vanilla

    Hauteur et largeur du repère.
  21. Salut ! Quand j'ai vu le titre du topic, je n'ai pas trop réfléchi à la section et je me suis dit « tiens, encore un type qui veut de l'aide pour importer les animations CraftStudio dans Minecraft », mais le fait que ça soit Ama ça m'a un peu étonné. Ensuite j'ai ouvert la page, et ma machoire inférieure s'est décollée au fur et à mesure qu'avançait ma lecture (heureusement qu'il n'y avait pas de mouches dans le coin). Bref, tout ça pour dire que, non de non, bravo pour ça !!! C'est un problème compliqué et, d'après les vidéos, vous l'avez résolu avec brio !!! Félicitations !! Je n'avais pas réussi, et j'ai hâte de voir comment vous vous y êtes pris ! Si vous avez besoin d'aide (ce dont je doute vu ce que vous montrez), n'hésitez pas !
  22. La plupart des mécaniques sont communes aux jeux même s'ils sont différents : physique, rendu, réseau, interfaces, etc. Tu pourrais faire des tutos généraux sur ces sujets puis montrer leur application dans un jeu que tu créerais spécifiquement pour ces tutoriels ! Si tu as besoin d'aide n'hésite pas en tout cas.
  23. Salut, bon courage pour cette longue aventure qu'est la rédaction d'un gros tuto ! :P Essaye quand même d'être plus précis dans tes explications, ça aidera beaucoup à la compréhension.
  24. 1.x

    Oui en effet, on était (ou est toujours pour certains) en période d'exams et assez occupés x)
  25. Très intéressant, j'aime beaucoup le principe de développement gratuit mais opensource et sous réserve d'acceptation !