Rechercher dans la communauté

Affichage des résultats pour les étiquettes 'Modding'.

  • Rechercher par étiquettes

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

Type du contenu


Forums

  • Communauté
    • Avant Tout
    • Annonces
    • Présentation des Membres
    • Vos Projets
    • Recrutements
  • Tutoriels
    • La base
    • Vanilla
    • Forge
    • Bukkit
    • Astuces
    • Autre
    • En attente de validation
    • En cours de rédaction
  • Créations
    • Minecraft
    • Jeux & Logiciels
    • Web
    • Suggestions
  • Le Coin Graphique
    • Galeries Personnelles
    • Galeries Publiques
    • Demandes Graphiques
  • Taverne
    • Général
    • Jeux Vidéos
    • Programmation

39 résultats trouvés

  1. Compiler correctement Spigot ! Cette oeuvre 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]- Hellow ! J'ai vu pas mal de monde avoir des problèmes avec ça, et ayant marre de me répéter, du coup j'ai décidé de faire un mini-tuto sur le sujet ! -[SOMMAIRE]- 1]Pré-requis 2]Installation du JDK 3]Compiler Spigot 1]Pré-requis Commençons par le commencement ! Logique n'est-ce pas ? Plus sérieusement, voici la liste des pré-requis pour ce tutoriel. Les sources de Spigot, que vous aurez au préalable importées dans votre workspace Eclipse ! Sources 1.7.10 disponibles ici, et pour la 1.8 c'est juste là ! Comme dis au-dessus, Eclipse. Une installation de Java, ainsi que de JDK ! (C.F étape 2) Un ordinateur, parce que c'est quand même plus pratique, ainsi qu'un clavier et une souris ! De la musique pour se motiver un coup ! #NoNi Un cerveau ! Après cette liste assez longue des éléments nécessaires, passons à la partie 2 ! 2]Installation du JDK Pour les personnes ayant déjà JDK, vous pouvez passer cette partie ! Dans le cas contraire, cette étape sera nécessaire. Si vous voulez être sur de votre installation, désinstallez vos anciennes installations de Java, puisque JDK et JRE sont fournis dans le même logiciel ! Commencez par télécharger JDK aux liens suivants: Pour JDK 8, c'est ce lien: Lien Pour JDK 7, c'est celui-là: Lien Une fois le fichier téléchargé, et exécuté, suivez les différentes étapes de l'installation: Et voilà, Java est installé ! 3]Compiler Spigot Si vous souhaitez modder votre Spigot, des tutoriels existent un peu partout sur Internet, et même sur Ironcraft: Deux autres tutoriels réalisés par chaos90, pour créer des bâtons magiques ! et Et trois tutoriels, encore par chaos !Il est partout ce mec ! Les deux premiers pour des blocs et le dernier pour des haches de combat . et J'espère moi-même pouvoir vous proposer des tutoriels de modding Client / Spigot . (EDIT 07/05/17: Bah c'est pas gagné mon pote x)) Une fois le modding terminé... Une fois que vous avez fini de modder, il va bien falloir retrouver votre travail sous une autre forme, les fichiers .java sont pas forcément très utiles pour lancer un serveur.. Ouvrez Eclipse, si ce dernier ne l'est déjà pas. Sélectionnez votre workspace habituelle, celle où vous avez importées les sources de Spigot. Dans votre barre de projets, autrement appellé "Package Explorer", vous devriez avoir ceci: Faites un clic droit dessus, et ceci devrait apparaître: Sélectionnez puis. Une jolie fenêtre va s'ouvrir: Remplissez pour avoir comme moi: puis cliquez sur ce bouton:., qui vous amènera sur cet onglet: Cliquez sur pour afficher ceci: Cliquez sur Add, puis suivez les trois étapes affichées comme ci-dessous: De retour sur cette fenêtre, vous devez obtenir ce résultat: Cliquez sur Apply, puis Run et le tour est joué ! Si vous avez suivi ces étapes à la lettre, un jolivous attendra ! Si jamais vous obtenez cette erreur: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project spigot: Failed to clean project: Failed to delete C:\Users\Valentin\Downloads\Spigot-master\Spigot-master\Spigot-Server\target\classes -> [Help 1] Tentez de recompiler jusqu'à ce que l'erreur disparaisse .. C'est la fin de ce tutoriel, j'espère qu'il vous aura plu ! N'hésitez pas à laisser un petit commentaire, si vous avez un problème ou même une idée pour améliorer le tutoriel !
  2. Vanilla

    Merci à chaos90 pour son aide par rapport à ce tutoriel! ArmorHUD en Vanilla Cette uvre est mise à disposition selon les termes de laLicence Creative Commons Attribution - Pas dUtilisation Commerciale - Pas de Modification 3.0 non transposé. Tout partage implique que vous citiez l'auteur original. -[iNTRODUCTION]- Nous sommes partis pour un tutoriel pour afficher un ArmorHUD en Vanilla ( code by dermenslof puis modifié par chaos90 ) -[TUTORIEL]- On va commencer par insérer un petit bout de code juste au dessus du ce code ci: public void renderGameOverlay(float par1, boolean par2, int par3, int par4) Nous allons donc ajouter ceci: private void drawItemInToScreen(ItemStack is, int x, int y, float par3, boolean overlay) // On demande au jeu d'afficher l'item sur l'écran { if (is != null) { float an = (float)is.animationsToGo - par3; //On lui dit d'effectuer toute animation par rapport à l'item if (an > 0.0F) { GL11.glPushMatrix(); float dec = 1.0F + an / 5.0F; GL11.glTranslatef((float)(x + 8), (float)(y + 12), 0.0F); GL11.glScalef(1.0F / dec, (dec + 1.0F) / 2.0F, 1.0F); GL11.glTranslatef((float)(-(x + 8)), (float)(-(y + 12)), 0.0F); } itemRenderer.renderItemAndEffectIntoGUI(this.mc.fontRenderer, this.mc.getTextureManager(), is, x, y); //On lui dit de prendre la texture de l'item et de l'afficher sur l'écran if (an > 0.0F) GL11.glPopMatrix(); if (overlay) itemRenderer.renderItemOverlayIntoGUI(this.mc.fontRenderer, this.mc.getTextureManager(), is, 16, y); // Même chose qu'au dessus! } } Nous allons ensuite modifier quelques éléments: if (!this.mc.playerController.enableEverythingIsScrewedUpMode()) // <------- ATTENTION CETTE FONCTION EXISTE DEJA JUSTE A REMPLACER { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(widgetsTexPath); InventoryPlayer var31 = this.mc.thePlayer.inventory; this.zLevel = -90.0F; this.drawTexturedModalRect(var6 / 2 - 91, var7 - 22, 0, 0, 182, 22); this.drawTexturedModalRect(var6 / 2 - 91 - 1 + var31.currentItem * 20, var7 - 22 - 1, 0, 22, 24, 22); this.mc.getTextureManager().bindTexture(icons); GL11.glEnable(GL11.GL_BLEND); OpenGlHelper.glBlendFunc(775, 769, 1, 0); this.drawTexturedModalRect(var6 / 2 - 7, var7 / 2 - 7, 0, 0, 16, 16); OpenGlHelper.glBlendFunc(770, 771, 1, 0); this.mc.mcProfiler.startSection("bossHealth"); this.renderBossHealth(); this.mc.mcProfiler.endSection(); if (this.mc.playerController.shouldDrawHUD()) { this.func_110327_a(var6, var7); } this.mc.mcProfiler.startSection("actionBar"); GL11.glEnable(GL12.GL_RESCALE_NORMAL); RenderHelper.enableGUIStandardItemLighting(); for (var11 = 0; var11 < 9; ++var11) { var12 = var6 / 2 - 90 + var11 * 20 + 2; var13 = var7 - 16 - 3; this.renderInventorySlot(var11, var12, var13, par1); } Puis, juste en dessous de ces nouveaux éléments, rajouter ceci, qui va faire afficher au jeu le HUD: ItemStack is; //render itemArmor for (int i = 0; i < 4; ++i) { is = this.mc.thePlayer.inventory.armorItemInSlot(4 - i - 1); if (is == null) continue; drawItemInToScreen(is, 0, i * 17, par1, true); this.mc.fontRenderer.drawString("§f§l" + (is.getMaxDamage() - is.getItemDamageForDisplay()), 18, i * 17 + 5, 0); } //render itemInHand is = this.mc.thePlayer.inventory.getCurrentItem(); if (is != null) { Item i = is.getItem(); boolean outils = i instanceof Item; if (!i.isItemTool(is) || outils && !(i instanceof ItemArmor)) { drawItemInToScreen(is, 40, 1 * 5, par1, false); GL11.glDisable(GL11.GL_BLEND); this.mc.fontRenderer.drawString("" + "§n§lDurabilité :§r§c§l " + (is.getMaxDamage() - is.getItemDamageForDisplay()) + " §r§n§lQuantité :§r§c§l " + is.stackSize, 60, 1 * 5 + 5, 553648127); } } RenderHelper.disableStandardItemLighting(); GL11.glDisable(GL12.GL_RESCALE_NORMAL); this.mc.mcProfiler.endSection(); GL11.glDisable(GL11.GL_BLEND); } -[CONCLUSION]- Voilà, votre HUD s'affiche désormais! Je ne me suis pas amuser à tout décoder, mais si l'envie vous en viens, n'hésitez pas! /!\ Je me répète, mais le code est de dermenslof , puis modifié par chaos90, pas de moi! Sur ce, bon jeu avec votre ArmorHUD EDIT de Dermenslof: j'assume rien du tout, à la base c'est mon code mais pas les modifs apportées totalement aberrantes (genre: boolean outils = i instanceof Item; et j'en passe)
  3. Créer une nouvelle Armure ! -[iNTRODUCTION]- Dans ce tutoriel nous allons voir comment créé de nouvelles armures ! -[PR-REQUIS]- Un MCP décompilé en 1.7 ! Un Spigot en 1.7 ! -[sOMMAIRE]- 1]Côté MCP -Client- 2]Côté Spigot -Serveur- 1]MCP -Client- Pour commencer, nous allons ouvrir la class Item.java ( elle se trouve dans net.minecraft.item ) ! Allez à la ligne 268 qui dois ressembler à sa ! itemRegistry.addObject(2267, "record_wait", (new ItemRecord("wait")).setUnlocalizedName("record").setTextureName("record_wait")); On vas décomposer un peu les informations ! 2267 est l'ID de l'Item "record_wait" est le nom de que l'on donne à l'item ( pas dans le jeu seulement dans Eclipse ) .setUnlocalizedName("record") est le nom de l'item en jeu ! ( Il s'appelleras en vérité name.record.item ) ! .setTextureName("record_wait") est le nom que vous avez donnez à la textures ! Voilà ! A présent allez à la ligne et déclarons nos pièce d'armure en utilisant se format là : itemRegistry.addObject(ID, "a_helmet", (new ItemArmor(ItemArmor.ArmorMaterial.NOMDEVOTREMATERIAL, 5, 0)).setUnlocalizedName("a_helmet").setTextureName("a_helmet")); Nous allons nous pencher sur cette partie là ! (new ItemArmor(ItemArmor.ArmorMaterial.NOMDEVOTREMATERIAL, 5, 0)) On peut la décomposer ainsi ! NOMDEVOTREMATERIAL est le nom du material utilisé ! 5 est l'ID de votre Materiaux ! 0 correspond à la pièce d'armure qu'esr votre item ( 0=casque, 1=plastron, 2=jambière, 3=bottes ) ! Donc comme vous le savez il faut 4 pièces d'armures dans Minecraft ! Il vas encore falloir créé 3 items en adaptant les valeurs que l'ont viens de voir Vous aurez automatiquement une erreur sur le "NOMDEVOTREMATERIAL" c'est normal nous n'avons pas encore déclarer de matériaux nous y viendrons ! Maintenant que nous avons déclarer nos petites pièces d'armures nous pouvons ouvrir la class Items.java ( net.minecraft.init ) ! Nous allons redéclarer nos belles pièces d'armures dedans ! public static final ItemArmor a_helmet = (ItemArmor)Item.itemRegistry.getObject("a_helmet"); public static final ItemArmor a_chestplate = (ItemArmor)Item.itemRegistry.getObject("a_chestplate"); public static final ItemArmor a_leggings = (ItemArmor)Item.itemRegistry.getObject("a_leggings"); public static final ItemArmor a_boots = (ItemArmor)Item.itemRegistry.getObject("a_boots"); Là on déclare nos armures pour pouvoir les utiliser partout dans Eclipse ( grâce au "public" qui nous permet de les rappellez partout ) ! Maintenant nous allons déclarer la résistance, l'enchantabilité, ect.. De l'armure ! Ouvrez la class ItemArmor.java ! Cherchez la partie qui ressemble à sa ! ( Elle se trouve vers la fin ) ! C'est se qui permet de gérer toutes les caractéristiques de l'armure ! CLOTH("CLOTH", 0, 5, new int[]{1, 3, 2, 1}, 15), CHAIN("CHAIN", 1, 15, new int[]{2, 5, 4, 1}, 12), IRON("IRON", 2, 15, new int[]{2, 6, 5, 2}, 9), GOLD("GOLD", 3, 7, new int[]{2, 5, 3, 1}, 25), DIAMOND("DIAMOND", 4, 33, new int[]{3, 8, 6, 3}, 10); On peut le décomposer ainsi : 0 est L'ID du materiaux donc je parler plus tôt ! 5 la durabilité de l'amure ! {1, 3, 2, 1} correspond au nombre de demi armures que sa vous ajouterais (1=Casque, 3=Plastron, 2=Jambière, 1=Bottes) ! 15 est le niveau d'enchantabilité ( plus il est haut plus on auras de chance d'avoir de bon enchantement ! Maintenant nous allons créé notre propre matériaux en utilisant les données vu juste au dessus Un exemple ! A("A", 5, 50, new int[] {3, 8, 6, 3}, 10); // A=Nom, A=Nom, 5=ID du Material, {3, 8, 6, 3}=Protection, 10=Enchantabilité On le place sous DIAMOND ! Et on ramplace le ;de DIAMOND par une, !! Voilà notre matérial est créé ! N'oubliez pas d'allez mettre le nom de votre material dans vos Item créé dans la class Item.java Astuce ( merci a Riikog pour les valeurs ) : Il peut vous arriver d'avoir un bugg que votre armure vous rend invinsible ! Voici des valeurs optimiser qui outre passe se bugg : A("A", 5, 50, new int[] { 3, 8, 6, 3 }, 10), B("B", 6, 55, new int[] { 4, 8, 6, 3 }, 10), C("C", 7, 60, new int[] { 4, 9, 6, 3 }, 10), D("D", 8, 65, new int[] { 4, 9, 7, 3 }, 10); Vous pouvez tester votre armure mais elle n'auras pas de texture quand vous l'aurez enfilez ! Pour sa rien de plus simple ! Prennez vos textures de models d'armures et vous les renommez ainsi : nomduminerais_layer_1 pour celui avec le casque, plastron, bottes et nomduminerais_layer_2 pour celui avec les jambières ! Ensuite ouvrez la class RenderBiped.java ! ( Dans net.minecraft.client.renderer.entity ) A la ligne : private static final String[] bipedArmorFilenamePrefix = new String[] {"leather", "chainmail", "iron", "diamond", "gold"}; Ajoutez un virgule après "gold" et mettez y le nom de vos layer ( a_layer_1 je met "a" ) En gros ce morceaux de code marche en regardant la valeur donnée et en cherchant des les textures dans le dossier assets/minecraft/textures/models/armor/x_layer_1/ Maintenant vous allez me demander pour mettre vos textures dans le projet Eclipse ! Vous allez dans votre dossier qui contient le mcp, allez dans le dossiers "jars", puis "versions", la vous ouvrez votre version.jar avec WinRaR et suivez les routes ci-dessous pour les différentes textures ! Ajoutez dans textures d'items ( dans l'inventaire ) c'est assets/minecraft/textures/item Ajoutez des textures pour un model ( rendu en F5 ) c'estassets/minecraft/textures/models/armor/x_layer_1/ Voila pour la partie MCP ! 1]Spigot -Serveur- [En cours d'écriture]
  4. Les GUIs dans Minecraft 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 ! En ce moment la plupart des demandes d'aide ont rapport avec les GUI. Contrairement à ce que croient 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. -[sOMMAIRE]- 1] Préparation 2] Les éléments de GUI 3] Les GUI Containers 4] Créer votre propre objet Gui (composant) 5] Codes et astuces ! 1] Préparation Donc, premièrement, pour créer un menu, il faut créer un GuiScreen, pour ça, il faut créer notre classe qui extends de GuiScreen : public class MonGui extends GuiScreen { } C'est si simple que ça ! Donc, il y a deux méthodes importantes, les voicis : initGui() : @Override public void initGui() { super.initGui(); } Cette méthode n'est exécutée que lorsque le Gui est créé, (quand le Gui s'affiche ou que la fenêtre est redimensionnée) drawScreen(int mouseX, int mouseY, float partialTicks) : @Override public void drawScreen(int mouseX, int mouseY, float partialTicks) { super.drawScreen(mouseX, mouseY, partialTicks); } Le nom des arguments parlent d'eux mêmes ! Cette méthode est exécutée le plus souvent possible (à chaque tour de MC, pour info si les FPS sont à 65 par exemple, cette méthode sera exécutée 65 par seconde !) Voilà ! C'est tout pour cette préparation ! 2] Les éléments de GUI Donc, on va voir les différents éléments de Gui et comment les utiliser ! GuiButton : Pour créer un bouton il suffit de l'enregistrer dans la liste de bouton dans la méthode initGui, comme ceci : this.buttonList.add(new GuiButton(x, y, WIP)); 3] Les GUI Containers 4] Créer votre propre objet Gui (composant) 5] Codes et astuces WORK IN PROGRESS
  5. 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 !
  6. Vanilla

    je sais que tout le monde attendent à ce que quelqu'un fasse un tutoriel en VANILLA pour le StatusEffectHUD alors je l'ai fais et je vous le fais partager StatusEffectHUD en Vanilla -[iNTRODUCTION]- Bonjour à tous ! Dans ce tutoriel, nous allons faire un StatusEffectHUD commençons sans attendre -[sOMMAIRE]- 1]Création d'un "if" 2]Création d'un "for" 3]LesIcônes 4] Afficher les niveaux des effets 1]Création d'un "if" Tout d'abord on va aller dans le GuiIngame.java puis on va aller dans RenderGameOverlay mettre nos codes en dessus de ces 3 int : int var11; int var12; int var13; qui est en dessus de ce if : if (!this.mc.thePlayer.isPotionActive(Potion.confusion)) { float var10 = this.mc.thePlayer.prevTimeInPortal + (this.mc.thePlayer.timeInPortal - this.mc.thePlayer.prevTimeInPortal) * par1; if (var10 > 0.0F) { this.func_130015_b(var10, var6, var7); } } donc maintenant on va mettre notre if qui va dire que si il y a plus de 5 potion d'activer ça les empiles mais pour ça il faut déja mettre notre Collection pour les potions et aussi un int les voici : Collection ph1 = this.mc.thePlayer.getActivePotionEffects(); int ph2 = 33; j'ai mis ph pour PotionHUD maintenant le if c'est : if (ph1.size() > 5) //si les effect de potion activé est supérieur a 5 alors ... { ph2 = 132 / (ph1.size() - 1); ... il s'empile avec ces valeurs } 2]Création d'un "for" pour le "for" on va mettre tout ce qu'il faut pour que les effect de potion s'affiche avec le temps l'icone et le nom de la potion donc pour ça le "for" sera : for (Iterator ph3 = this.mc.thePlayer.getActivePotionEffects().iterator(); ph3.hasNext(); var2 += ph2) { donc ici on a crée un Iterator qui va donc nous permettre d'avencer sauf que normalement vous avez une erreur sur me var2 et nous allons ajouter en même un autre var qui nous servira plus bas donc plus haut avant le if il suffis de mettre ceci : int var2 = 0; int var1 = 0; donc maintenant dans notre for on va rajouter quelque variables pour qu'il aille chercher les effets de potions : PotionEffect ph4 = (PotionEffect)ph3.next(); Potion ph5 = Potion.potionTypes[ph4.getPotionID()]; // ici on va chercher le type de potion qui est actif GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); pour le text c'est avec le niveaux des potion donc c'est plus bas maintenant on a just le nom de la potion qui s'affiche maintenant on veut sa durée : this.mc.fontRenderer.drawStringWithShadow(Potion.getDurationString(ph4), var1 + 10 + 18, var2 + 6 + 10, 8355711); //ici on affiche la duré de l'effet en court ce qui nous donne pour le moment ceci : //début du code PotionEffectHUD int var1 = 0; int var2 = 0; int ph2 = 33; Collection ph1 = this.mc.thePlayer.getActivePotionEffects(); if (ph1.size() > 5) { ph2 = 132 / (ph1.size() - 1); } for (Iterator ph3 = this.mc.thePlayer.getActivePotionEffects().iterator(); ph3.hasNext(); var2 += ph2) { PotionEffect ph4 = (PotionEffect)ph3.next(); Potion ph5 = Potion.potionTypes[ph4.getPotionID()]; GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.fontRenderer.drawStringWithShadow(Potion.getDurationString(ph4), var1 + 10 + 18, var2 + 6 + 10, 8355711); } //fin code PotionEffectHUD 3] LesIcônes maintenant il faut afficher certaine chose comme le contour (ou pas si vous voulez pas il suffis de retirer le code que je vais vous donner) et les icônes donc pour les icônes on va déjà rajouter un bindTexture tout en haut du GuiIngame.java : protected static final ResourceLocation inventory = new ResourceLocation("textures/gui/container/inventory.png"); voilà et dans notre "for" on va rajouter en dessus de : GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); on va mettre : this.mc.getTextureManager().bindTexture(inventory); // ici on va chercher la texture maintenant on va chercher les icônes dans ce .png donc on ajouter un if : if (ph5.hasStatusIcon()) { int ph6 = ph5.getStatusIconIndex(); this.drawTexturedModalRect(var1 + 6, var2 + 7, 0 + ph6 % 8 * 18, 198 + ph6 / 8 * 18, 18, 18); //on va chercher l'icône et on le place ou il faut } si vous voulez le contour il suffis d'ajouter cette ligne au dessus du if des icônes : this.drawTexturedModalRect(var1, var2, 0, 166, 140, 32); // ici on affiche le contour si vous avez envis d'enlever le contour il suffis d'enlever cette ligne 4] Afficher les niveaux des effets donc pour afficher le niveaux des effets on va déja rajouter en dessus de notre deuxième if pour afficher les icônes un String qui va chercher le nom en fonction de leur ID : String ph7 = I18n.format(ph5.getName()/*ici il cherche le nom*/, new Object[0]); maintenant que on a ça on va pouvoir afficher le niveau pour cela rien de plus simple on fais des "if" et des "else if" donc on commence par le niveau 2 car le niveau 1 ne s'affiche pas donc on met : if (ph4.getAmplifier() == 1) // si la potion a un niveau de 1 qui est le niveau 2 car le niveau 1 c'est 0 alors .... { ph7 = ph7 + " II" ;// ... on affiche a coté du nom de la potion "II" } et maintenant on va faire ça pour 4 niveaux donc en dessus de ça on ajoute : else if (ph4.getAmplifier() == 2)// si la potion a un niveau de 2 qui est 3 alors ... { ph7 = ph7 + " III"; // on affiche a coté du nom de la potion "III" } else if (ph4.getAmplifier() == 3) // si la potion a un niveau de 3 qui est 4 alors ... { ph7 = ph7 + " IV"; // on affiche a coté du nom de la potion "IV" } maintenant que on a ça il faut le placer donc en dessous du if on ajoute : this.mc.fontRenderer.drawStringWithShadow(ph7, var1 + 10 + 18, var2 + 6, 16777215); //ici on place le nom de la potion ou il faut ce qui nous donne au finale tout ceci : //début du code PotionEffectHUD int var1 = 0; int var2 = 0; int ph2 = 33; Collection ph1 = this.mc.thePlayer.getActivePotionEffects(); if (ph1.size() > 5) { ph2 = 132 / (ph1.size() - 1); } for (Iterator ph3 = this.mc.thePlayer.getActivePotionEffects().iterator(); ph3.hasNext(); var2 += ph2) { PotionEffect ph4 = (PotionEffect)ph3.next(); Potion ph5 = Potion.potionTypes[ph4.getPotionID()]; GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(inventory); this.drawTexturedModalRect(var1, var2, 0, 166, 140, 32); if (ph5.hasStatusIcon()) { int ph6 = ph5.getStatusIconIndex(); this.drawTexturedModalRect(var1 + 6, var2 + 7, 0 + ph6 % 8 * 18, 198 + ph6 / 8 * 18, 18, 18); } String ph7 = I18n.format(ph5.getName(), new Object[0]); if (ph4.getAmplifier() == 1) { ph7 = ph7 + " II" ; } else if (ph4.getAmplifier() == 2) { ph7 = ph7 + " III"; } else if (ph4.getAmplifier() == 3) { ph7 = ph7 + " IV"; } this.mc.fontRenderer.drawStringWithShadow(ph7, var1 + 10 + 18, var2 + 6, 16777215); this.mc.fontRenderer.drawStringWithShadow(Potion.getDurationString(ph4), var1 + 10 + 18, var2 + 6 + 10, 8355711); } //fin code PotionEffectHUD voilà le tutoriel est terminé bon jeu avec votre StatusEffectHUD !
  7. Vanilla

    Bonjour a tous, pour commencer, désolé de la mise en page mais je n'ai jamais fait de tutoriel ici. Aujourd'hui, nous allons créer une nouvelle armure. Le matériel : - MCP ( Minecraft Coder Pack ) de la version que vous voulez - Eclipse - Un ordinateur ... Ajout de l'armure : Tout d'abord, rendez-vous dans la classe Item.java Rendez-vous à la fin de la déclaration des items Ensuite, ajoutez ce code : ! Ajoutez le dans Item.java ! itemRegistry.addObject(ID, "NOM", (new ItemArmor(ItemArmor.ArmorMaterial.MINERAIS, 5, 0)).setUnlocalizedName("NOM").setTextureName("NOM-TEXTURE")); itemRegistry.addObject(ID, "NOM", (new ItemArmor(ItemArmor.ArmorMaterial.MINERAIS, 5, 1)).setUnlocalizedName("NOM").setTextureName("NOM-TEXTURE")); itemRegistry.addObject(ID, "NOM", (new ItemArmor(ItemArmor.ArmorMaterial.MINERAIS, 5, 2)).setUnlocalizedName("NOM").setTextureName("NOM-TEXTURE")); itemRegistry.addObject(ID, "NOM", (new ItemArmor(ItemArmor.ArmorMaterial.MINERAIS, 5, 3)).setUnlocalizedName("NOM").setTextureName("NOM-TEXTURE")); Maintenant , ajoutons nos armures dans Items.java public static final ItemArmor NOM = (ItemArmor)Item.itemRegistry.getObject("NOM"); public static final ItemArmor NOM = (ItemArmor)Item.itemRegistry.getObject("NOM"); public static final ItemArmor NOM = (ItemArmor)Item.itemRegistry.getObject("NOM"); public static final ItemArmor NOM = (ItemArmor)Item.itemRegistry.getObject("NOM"); Là, votre armure est créée mais elle n'a pas encore de durabilité La durabilité de votre armure : Donc, rendez-vous dans : ItemArmor.java En dessous de celle du diamant, ajoutez cette ligne : MINERAIS("MINERAIS", 8, 50, new int[]{8, 13, 11, 8}, 6); Vous pouvez remarquer qu'il y a une erreur. Pour y remédier, il suffit de remplacer CA : DIAMOND("DIAMOND", 4, 33, new int[]{3, 8, 6, 3}, 10); PAR CA : DIAMOND("DIAMOND", 4, 33, new int[]{3, 8, 6, 3}, 10), ! Ajoutez toujours votre minerais en dernier ! Ici, on va s'occuper de la durabilité et de la résistance des objets MINERAIS("MINERAIS", 7, 50, new int[]{8, 13, 11, 8}, 6); Remplacez MINERAIS par le nom de votre minerais ! TOUJOURS EN MAJUSCULES ! Le 7 représente son ordre (si le diamant est 4 alors votre minerais devient 5) Là, le 50 représente la durabilité de l'armure Le 8 est la résistance du casque Le 13 est la résistance du plastron Le 11 est la résistance du pantalon Le 8 (le dernier) est la résistance des bottes Le 6, c'est l'enchantement de l'armure (plus c'est bas, plus les enchantements sont rares) Mon exemple : SAPPHIRE("SAPPHIRE", 8, 55, new int[]{9, 18, 17, 6}, 9); Maintenant, vous pouvez remplacer dans votre code le '.MINERAIS' par '.VOTREMINERAIS' Comme ceci : itemRegistry.addObject(ID, "NOM", (new ItemArmor(ItemArmor.ArmorMaterial.SAPPHIRE, 5, 0)).setUnlocalizedName("NOM").setTextureName("NOM-TEXTURE")); itemRegistry.addObject(ID, "NOM", (new ItemArmor(ItemArmor.ArmorMaterial.SAPPHIRE, 5, 1)).setUnlocalizedName("NOM").setTextureName("NOM-TEXTURE")); itemRegistry.addObject(ID, "NOM", (new ItemArmor(ItemArmor.ArmorMaterial.SAPPHIRE, 5, 2)).setUnlocalizedName("NOM").setTextureName("NOM-TEXTURE")); itemRegistry.addObject(ID, "NOM", (new ItemArmor(ItemArmor.ArmorMaterial.SAPPHIRE, 5, 3)).setUnlocalizedName("NOM").setTextureName("NOM-TEXTURE")); Donner une texture quand l'armure est sur vous : Petite astuce : Si vous ne trouvez pas le RenderBiped.java, crivez le puis sélectionnez le puis -> Clique droit -> Open declaration Pour finir , rendez-vous dans la classe : RenderBiped.java Là, vous voyez cette ligne ( normalement ) private static final String[] bipedArmorFilenamePrefix = new String[] {"leather", "chainmail", "iron", "diamond", "gold"}; A la fin, mettez une virgule ( , ) puis entre ( " " ), le nom de votre armure Exemple : Si vos textures d'armure s'appellent : Sapphire_layer_1 et Sapphire_layer_2 Entre les ( " " ) mettez : Sapphire Exemple : private static final String[] bipedArmorFilenamePrefix = new String[] {"leather", "chainmail", "iron", "diamond", "gold", "sapphire"}; Et voilà, vous avez votre armure ! Il ne vous reste que a mettre vos textures ! Infos supplémentaires : En cas de non-compréhension , ajoutez moi sur skype , je vous aiderai comme je peut Mon skype : Anthony.delfleur
  8. Créer son propre launcher personalisé de zéro, tutoriels vidéos Bien le bonjour chers utilisateurs d'Ironcraft ! 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
  9. Mise à jour Minicraft Quest / Manager Bonjour, notre serveur utilise le Mod Vanilla [Minicraft Quest] & [Minicraft Manager] par Diwaly. Le projet est en version 1.8.8 et les sources sont disponibe sur Bitbucket, J'ai demandé la permission au Dev de mettre à jour son projet. J'ai besoin d'un Dev pour rendre le projet compatible en version 1.11.2 Les client doit être modifié avec des source disponible sur bitbucket, quelques modifications sont nécéssaire ca les sources sont concus pour un client 1.8 Le serveur spigot 1.11.2 doit aussi être modifié avec les sources fournie dans le bitbucket, Un fichier texte explique les modifications a apporter au client et au serveur. 2 plugins doivent être modifié pour fonctionner avec le spigot 1.11.2 et ajout des nouveaux blocks et mobs. Prerequisite: Utilisation de MCP Moding Java Vanilla Manipulation de packets Utilisation de Eclipse Connaissance de l'API Spigot Connaissance SQL Sources et documentation: Minicraft Manager Minicraft Quest Projet sur Curse Site Web du Dev La paye / Délais: J'ai un budget d'environ 200-250 Euros pour compléter les travaux Les travaux doivent être complété dans un Délais de 1 mois Contact: Email: nicecube@hotmail.com Skype: marc.andre.b Discord serveur MCQC * J'ai une bonne idée de comment débuter le projet avec la mise a jour du client mais je n'ai pas les connaissances requise pour effectuer les modifications
  10. Vanilla

    Esque vous vouliez toujours avoir un bloc comme un trampoline ? alors ce tuto est fais pour vous Un Bloc sauteur ! -[iNTRODUCTION]- Bonjour à tous ! Dans ce tutoriel, nous allons faire un bloc qui vous fais sauter ! -[sOMMAIRE]- 1]Création du Bloc 2]Création du BlocSauteur.java 3]CraftBukkit 1]Création du Bloc Bon pour crée un bloc on fais comme d'habitude ce n'est pas nouveau il suffis de mettre dans Block et Blocks : Block.java blockRegistry.addObject(ID, "NOM_DU_BLOC", (new BlockSauteur()).setHardness(1.0F).setStepSound(SON).setBlockName("NOM_DU_BLOC").setBlockTextureName("TEXTURE_DU_BLOC")); Blocks.java public static final Block NOM_DU_BLOC = (Block)Block.blockRegistry.getObject("NOM_DU_BLOC"); 2]Création du BlockSauteur.java Ici on va faire le BlockSauteur.java pour que le joueur sois vachement plus rapide quand il marche sur se Bloc pour ça on va commencer par crée notre class sans rien dessus : package votre_package; public class BlockSauteur{ } ensuite on va déja rajouter un extends du Block.java,mettre un nouveau public ou on va rajouter un material et un emplacement dans le creativetab qui sera celui des Blocs package votre_package; import net.minecraft.block.Block;import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; public class BlockSauteur extends Block { public BlockSauteur() { super(Material.rock); this.setCreativeTab(CreativeTabs.tabBlock); //creative tab, on met le bloc dans l'onglet bloc du creatif } } Maintenant il faut ajouter certaine fonction par exemple pour entrer en contact avec le bloc pour qu'il nous fasse sauter. Nous somme obligé mettre minimum 1 pixel pour entrer dedans voici comment on fais : public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1, int par2, int par3, int par4) { return AxisAlignedBB.getBoundingBox((double)par2, (double)par3, (double)par4, (double)(par2 + 1), (double)((float)(par3 + 1) - 0.125F), (double)(par4 + 1)); //ici on dit que on peu se faire aspirer de 1 pixel par le bloc } et ensuite il suffis de mettre le saut : public void onEntityCollidedWithBlock(World par1, int par2, int par3, int par4, Entity par5) { par5.motionY += 2D; } Alors là on peu remarqué que le joueur saute que si on saute sur le bloc se que nous ne voulons pas alors nous alons rajouter cette ligne par5. par5.ticksExisted = 10; //tout les 10 ticks il saute maintenant ça saute tout le temps mais on perd des dégâts de chute donc on va éviter ça on ajoute : par5.fallDistance *= 0D; // on perd 0 dégats de chute en retombant sur le bloc maintenant si on veut rajouter un bruit de piston : par1.playSoundAtEntity(par5, "tile.piston.in", 1.0F, 1.0F); // bruit de piston joué a l'entity se trouvant a proximité a présent notre bloc est bon mais vous allez me dire comment on fais pour sortir du bloc sans perdre des dégats de chute c'est très simple nous alons entrer un "if" if(par5.onGround && par5.isSneaking()) // si le joueur sneak sur le sol alors { par5.motionY += 0; // fais sauter le joueur a 0 bloc de haut par5.fallDistance += 0D; // on perd 0 dégats de chute en retombant sur le bloc } else //sinon { par5.ticksExisted = 10; par5.motionY += 2D; fais sauter le joueur par1.playSoundAtEntity(par5, "tile.piston.in", 1.0F, 1.0F); // bruit de piston joué a l'entity se trouvant a proximité par5.fallDistance += 0D; // on perd 0 dégats de chute en retombant sur le bloc } se qui nous donne au final : package votre_package; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MovementInput; import net.minecraft.world.World; public class BlockSauteur extends Block { public BlockSauteur() { super(Material.rock); this.setCreativeTab(CreativeTabs.tabBlock); } public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1, int par2, int par3, int par4) { return AxisAlignedBB.getBoundingBox((double)par2, (double)par3, (double)par4, (double)(par2 + 1), (double)((float)(par3 + 1) - 0.125F), (double)(par4 + 1)); } public void onEntityCollidedWithBlock(World par1, int par2, int par3, int par4, Entity par5) { if(par5.isSneaking()) // si le joueur sneak alors { par5.motionY += 0; // fais sauter le joueur a 0 bloc de haut par5.fallDistance += 0D; // on perd 0 dégats de chute en retombant sur le bloc } else //sinon { par5.ticksExisted = 10; par5.motionY += 2D; fais sauter le joueur par1.playSoundAtEntity(par5, "tile.piston.in", 1.0F, 1.0F); // bruit de piston joué a l'entity se trouvant a proximité par5.fallDistance += 0D; // on perd 0 dégats de chute en retombant sur le bloc } } } 3]CraftBukkit pour craftbukkit je vous donne tout c'est la même chose Block.java REGISTRY.a(ID, "NOM_DU_BLOC", (new BlockSauteur()).c(1.0F).a(k).c("NOM_DU_BLOC").d("TEXTURE_DU_BLOC")); Blocks.java public static final Block NOM_DU_BLOC = (Block) Block.REGISTRY.a("NOM_DU_BLOC"); et enfin le BlockSauteur.java (1.7.2) package net.minecraft.server; import net.minecraft.server.AxisAlignedBB; import net.minecraft.server.Block; import net.minecraft.server.CreativeModeTab; import net.minecraft.server.Entity; import net.minecraft.server.Material; import net.minecraft.server.World; public class BlockSauteur extends Block { public BlockSauteur() { super(Material.STONE); this.a(CreativeModeTab.; } public AxisAlignedBB a(World world, int i, int j, int k) { return AxisAlignedBB.a().a((double) i, (double) j, (double) k, (double) (i + 1), (double) ((float) (j + 1) - (float) 0.125F), (double) (k + 1)); } public void a(World world, int i, int j, int k, Entity entity) { if(entity.isSneaking()) { entity.motY += 0D; // on fais sauter le joueur entity.fallDistance += 0D; // on perd 0 dégâts de chute } else { entity.motY += 2D; // on fais sauter le joueur entity.fallDistance += 0D; // on perd 0 dégâts de chute entity.ticksLived = 10; // on saute tout les 10 ticks } } } BlockSauteur.java (1.7.10) package net.minecraft.server; import net.minecraft.server.AxisAlignedBB; import net.minecraft.server.Block; import net.minecraft.server.CreativeModeTab; import net.minecraft.server.Entity; import net.minecraft.server.Material; import net.minecraft.server.World; public class BlockSauteur extends Block { public BlockSauteur() { super(Material.STONE); this.a(CreativeModeTab.; } public AxisAlignedBB a(World world, int i, int j, int k) { float f = 0.125F; return AxisAlignedBB.a((double) i, (double) j, (double) k, (double) (i + 1), (double) ((float) (j + 1) - f), (double) (k + 1)); } public void a(World world, int i, int j, int k, Entity entity) { if(entity.isSneaking()) { entity.motY += 0D; // on fais sauter le joueur entity.fallDistance += 0D; // on perd 0 dégâts de chute } else { entity.motY += 2D; // on fais sauter le joueur entity.fallDistance += 0D; // on perd 0 dégâts de chute entity.ticksLived = 10; // on saute tout les 10 ticks } } } Et voilà j'espère que ça vous a plus bon jeu avec votre nouveau bloc
  11. Vanilla

    Hache de Combat -[iNTRODUCTION]- Bonjour à tous ! Dans ce tutoriel, nous allons faire une une hache de combat -[sOMMAIRE]- 1]Création de l'item 2]Création du ItemHacheDeCombat.java 3]Création du EnumHacheDeCombat 3]CraftBukkit 1]Création de l'item la création d'un item c'est pas quelque chose de compliqué il suffis de faire comme ceci : Item.java itemRegistry.addObject(ID, "NOM", (new ItemHacheDeCombat(Item.EnumHacheDeCombat.DIAMOND)).setUnlocalizedName("NOM").setTextureName("NOM_TEXTURE"))); il y a une erreur c'est normal pour le moment Items.java public static final Item NOM = (Item)Item.itemRegistry.getObject("NOM"); 2] Création du ItemHacheDeCombat.java donc comme je fais toujours on part de rien d'un class comme ceci : package votre_package; public class ItemHacheDeCombat { } donc ici on va tout de suite faire un extends de Item, ajouter un public qui va nous diriger vers notre enum un maxStackSize, déclarer notre enum et une durabilité qui sera dans notre enum : package votre_package; public class ItemHacheDeCombat extends Item { private float field_150934_a; private final EnumHacheDeCombat field_150933_b; public ItemHacheDeCombat(Item.EnumHacheDeCombat par1) { this.field_150933_b = par1; // déclaration du enum this.maxStackSize = 1; // stackable pas 1 this.setMaxDamage(par1.getMaxUses()); // durabilité se trouvant dans notre enum this.setCreativeTab(CreativeTabs.tabCombat); // on met notre hache dans le tab Combat du créatif this.field_150934_a = 4.0F + par1.getDamageVsEntity(); } } erreur pour le momentr c'est totalement normal maintenant on va crée quelque public comme l'enchante, une autre déclaration de l'enum si il est réparrable le maxITemUseDuration si l'item est en 3D, quand on casse un bloc si retire de la durabilité parreil pour les entité et faire en sorte que ça casse du bois comme une hache : public float func_150931_i() { return this.field_150933_b.getDamageVsEntity(); // l'item est fais pour tapé des entité } public float func_150893_a(ItemStack par1, Block par2) { Material var3 = par2.getMaterial(); return var3 != Material.wood && var3 != Material.plants && var3 != Material.vine && var3 != Material.field_151572_C ? 1.0F : 1.5F; // l'item peu cassé du bois comme une hache } public boolean hitEntity(ItemStack par1ItemStack, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase) // si on tape une entité l'item perd de la durabilité { par1ItemStack.damageItem(1, par3EntityLivingBase); return true; } public boolean onBlockDestroyed(ItemStack par1, World par2, Block par3, int par4, int par5, int par6, EntityLivingBase par7) // si on casse un bloc avec l'item perd de la durabilité { if ((double)par3.getBlockHardness(par2, par4, par5, par6) != 0.0D) { par1.damageItem(2, par7); } return true; } public boolean isFull3D() { return true; } public int getMaxItemUseDuration(ItemStack par1ItemStack) { return 72000; } public int getItemEnchantability() { return this.field_150933_b.getEnchantability(); // l'item est enchantable } public String func_150932_j() { return this.field_150933_b.toString(); // déclaration de notre enum que on fera apres } public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) { return this.field_150933_b.func_150995_f() == par2ItemStack.getItem() ? true : super.getIsRepairable(par1ItemStack, par2ItemStack); // l'item est réparrable } public Multimap getItemAttributeModifiers() { Multimap var1 = super.getItemAttributeModifiers(); var1.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(field_111210_e, "Weapon modifier", (double)this.field_150934_a, 0)); return var1; } ce qui nous donne au final : package votre_package; import com.google.common.collect.Multimap; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.EnumAction; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; public class ItemHacheDeCombat extends Item { private float field_150934_a; private final EnumHacheDeCombat field_150933_b; public ItemHacheDeCombat(Item.EnumHacheDeCombat par1) { this.field_150933_b = par1; this.maxStackSize = 1; this.setMaxDamage(par1.getMaxUses()); this.setCreativeTab(CreativeTabs.tabCombat); this.field_150934_a = 4.0F + par1.getDamageVsEntity(); } public float func_150931_i() { return this.field_150933_b.getDamageVsEntity(); } public float func_150893_a(ItemStack par1, Block par2) { Material var3 = par2.getMaterial(); return var3 != Material.wood && var3 != Material.plants && var3 != Material.vine && var3 != Material.field_151572_C ? 1.0F : 1.5F; } public boolean hitEntity(ItemStack par1ItemStack, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase) { par1ItemStack.damageItem(1, par3EntityLivingBase); return true; } public boolean onBlockDestroyed(ItemStack par1, World par2, Block par3, int par4, int par5, int par6, EntityLivingBase par7) { if ((double)par3.getBlockHardness(par2, par4, par5, par6) != 0.0D) { par1.damageItem(2, par7); } return true; } public boolean isFull3D() { return true; } public int getMaxItemUseDuration(ItemStack par1ItemStack) { return 72000; } public int getItemEnchantability() { return this.field_150933_b.getEnchantability(); } public String func_150932_j() { return this.field_150933_b.toString(); } public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) { return this.field_150933_b.func_150995_f() == par2ItemStack.getItem() ? true : super.getIsRepairable(par1ItemStack, par2ItemStack); } public Multimap getItemAttributeModifiers() { Multimap var1 = super.getItemAttributeModifiers(); var1.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(field_111210_e, "Weapon modifier", (double)this.field_150934_a, 0)); return var1; } } 3] Création du EnumHacheDeCombat (dans Item.java pour client) donc pour le client l'enum se trouve dans Item tout en bas pour les outils et épée nous allons en crée une donc il suffis de copier et de coller voilà : public static enum EnumHacheDeCombat { WOOD("WOOD", 0, 0, 59, 3.0F, 0.0F, 15), STONE("STONE", 1, 1, 131, 5.0F, 1.0F, 5), IRON("IRON", 2, 2, 250, 7.0F, 2.0F, 14), DIAMOND("DIAMOND", 3, 3, 1561, 8.0F, 2.5F, 10), GOLD("GOLD", 4, 0, 32, 12.0F, 0.0F, 22); private final int harvestLevel; private final int maxUses; private final float efficiencyOnProperMaterial; private final float damageVsEntity; private final int enchantability; private static final Item.EnumHacheDeCombat[] $VALUES = new Item.EnumHacheDeCombat[]{WOOD, STONE, IRON, DIAMOND, GOLD}; private static final String __OBFID = "CL_00000042"; private EnumHacheDeCombat(String par1Str, int par2, int par3, int par4, float par5, float par6, int par7) { this.harvestLevel = par3; this.maxUses = par4; this.efficiencyOnProperMaterial = par5; this.damageVsEntity = par6; this.enchantability = par7; } public int getMaxUses() { return this.maxUses; } public float getEfficiencyOnProperMaterial() { return this.efficiencyOnProperMaterial; } public float getDamageVsEntity() { return this.damageVsEntity; } public int getHarvestLevel() { return this.harvestLevel; } public int getEnchantability() { return this.enchantability; } public Item func_150995_f() { return this == WOOD ? Item.getItemFromBlock(Blocks.planks) : (this == STONE ? Item.getItemFromBlock(Blocks.cobblestone) : (this == GOLD ? Items.gold_ingot : (this == IRON ? Items.iron_ingot : (this == DIAMOND ? Items.diamond : null)))); } } et normalement toutes les erreur devrai disparaître 4]CraftBukkit Item : REGISTRY.a(ID, "NOM", (new ItemHacheDeCombat(EnumHacheDeCombat.DIAMOND)).c("NOM").f("NOM_TEXTURE")); Items : public static final Item NOM = (Item)Item.REGISTRY.a("NOM"); ItemHacheDeCombat.java package net.minecraft.server; import net.minecraft.util.com.google.common.collect.Multimap; public class ItemHacheDeCombat extends Item { private float damage; private final EnumHacheDeCombat b; public ItemHacheDeCombat(EnumHacheDeCombat enumtoolmaterial) { this.b = enumtoolmaterial; this.maxStackSize = 1; this.setMaxDurability(enumtoolmaterial.a()); this.a(CreativeModeTab.j); this.damage = 4.0F + enumtoolmaterial.c(); } public float i() { return this.b.c(); } public float getDestroySpeed(ItemStack itemstack, Block block) { Material material = block.getMaterial(); return material != Material.WOOD && material != Material.PLANT && material != Material.REPLACEABLE_PLANT ? 1.0F : 1.5F; } public boolean a(ItemStack itemstack, EntityLiving entityliving, EntityLiving entityliving1) { itemstack.damage(1, entityliving1); return true; } public boolean a(ItemStack itemstack, World world, Block block, int i, int j, int k, EntityLiving entityliving) { if ((double) block.f(world, i, j, k) != 0.0D) { itemstack.damage(2, entityliving); } return true; } public int d_(ItemStack itemstack) { return 72000; } public int c() { return this.b.e(); } public String j() { return this.b.toString(); } public boolean a(ItemStack itemstack, ItemStack itemstack1) { return this.b.f() == itemstack1.getItem() ? true : super.a(itemstack, itemstack1); } public Multimap k() { Multimap multimap = super.k(); multimap.put(GenericAttributes.e.a(), new AttributeModifier(f, "Weapon modifier", (double) this.damage, 0)); return multimap; } } EnumHacheDeCombat.java package net.minecraft.server; public enum EnumHacheDeCombat { WOOD("WOOD", 0, 0, 59, 3.0F, 0.0F, 15), STONE("STONE", 1, 1, 131, 5.0F, 1.0F, 5), IRON("IRON", 2, 2, 250, 7.0F, 2.0F, 14), DIAMOND("DIAMOND", 3, 3, 1561, 8.0F, 2.5F, 10), GOLD("GOLD", 4, 0, 32, 12.0F, 0.0F, 22); private final int f; private final int g; private final float h; private final float i; private final int j; private static final EnumHacheDeCombat[] k = new EnumHacheDeCombat[] { WOOD, STONE, IRON, DIAMOND, GOLD}; private EnumHacheDeCombat(String s, int i, int j, int k, float f, float f1, int l) { this.f = j; this.g = k; this.h = f; this.i = f1; this.j = l; } public int a() { return this.g; } public float b() { return this.h; } public float c() { return this.i; } public int d() { return this.f; } public int e() { return this.j; } public Item f() { return this == WOOD ? Item.getItemOf(Blocks.WOOD) : (this == STONE ? Item.getItemOf(Blocks.COBBLESTONE) : (this == GOLD ? Items.GOLD_INGOT : (this == IRON ? Items.IRON_INGOT : (this == DIAMOND ? Items.DIAMOND : null)))); } } voilà bon jeu avec vos haches de combats
  12. Créer un KeyBinding ! Cette uvre est mise à disposition selon les termes de laLicence Creative Commons Attribution - Pas dUtilisation Commerciale - Pas de Modification 3.0 non transposé. Tout partage implique que vous citiez l'auteur original. -[INTRODUCTION]- Salut à toi, cher lecteur ! Aujourd'hui je vais vous apprendre à créer un KeyBinding ! Ce KeyBinding servira à créer une touche pour faire /help, mais on peut effecteur beaucoup d'autres choses. -[SOMMAIRE]- 1]Coder pas à pas 2]Résultat final 1]Coder pas à pas Définition d'un KeyBinding: Pour simplier la chose, un KeyBinding est une touche de Minecraft. Développement: Commencez par lancer Eclipse avec votre workspace MCP ! Une fois ceci fait, dans le Package Explorer, trouvez le package net.minecraft.client.settings.. Vous devriez avoir deux classes: GameSettings.java KeyBinding.java Ouvrez la première et ajoutez y ceci, qui vous permettra de stocker votre bouton: public KeyBinding keyBindTuto; Cherchez ensuite cette fonction: public GameSettings(Minecraft par1Minecraft, File par2File) Puis ajoutez ceci à l'intérieur. Ici on déclare notre touche, son nom, la touche du clavier par défaut et sa catégorie. this.keyBindTuto = new KeyBinding("/HELP", 33, "§6Tutoriel Ironcraft"); //Le numéro 33 correspond à la touche F. //Le code fonctionne comme ci dessous: this.keyBindTuto = new KeyBinding("NOM AFFICH DANS LES OPTIONS", NUMERO DE LA TOUCHE, "NOM DE LA CATGORIE"); La dernière étape est de chercher cette ligne, qui nous permet d'ajouter notre touche à la liste des KeyBindings dans les options. Si vous oubliez de faire ceci, le jeu crashera quand vous ouvrirez les options. this.keyBindings = (KeyBinding[])((KeyBinding[])ArrayUtils.addAll(new KeyBinding[] {this.keyBindAttack, this.keyBindUseItem, this.keyBindForward, this.keyBindLeft, ... Et d'y ajouter ceci: this.keyBindUseItem, this.keyBindTuto, this.keyBindForward, ... Et voilà ! Votre touche est créée, mais ne sert encore à rien.. On va remédier à ça ! Trouvez ce morceau de code dans la classe Minecraft.java, dans le package net.minecraft.client, qui nous servira d'exemple: Ce code sert à définir l'action effectuée lorsqu'on appuie sur la touche en question. while (this.gameSettings.keyBindDrop.isPressed()) { this.thePlayer.dropOneItem(GuiScreen.isCtrlKeyDown()); } Copions le, puis modifions le en: while (this.gameSettings.keyBindTuto.isPressed()) { //Faire effectuer l'action ici.. } Pour notre commande /help, remplissons le de cette manière: while (this.gameSettings.keyBindTuto.isPressed()) { this.thePlayer.sendChatMessage("/help"); //Permet d'envoyer un message dans le chat, sans même ouvrir celui du joueur . } C'est terminé ! Votre touche est désormais parfaitement fonctionnelle ! clatez-vous avec votre nouvelle touche ! 2]Résultat final Merci d'avoir lu ce tutoriel ! Laissez un avis, ça me ferait plaisir !
  13. 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
  14. Créer un écran de chargement -[INTRODUCTION]- Bonjour à tous ! Dans ce tutoriel, nous allons faire un écran de chargement ! Je me permet de refaire le tutoriel, car l'autre à était modifier.. -[SOMMAIRE]- 1]Création du "GuiLoadingScreen 2]Création de l'écran 3]GuiMainMenu 1]Création du GuiLoadingScreen ! Il vous suffit de vous rendre dans le packages : net.minecraft.client.gui, puis créer une nouvelle class "GuiLoadingScreen" ! 2]Créer l'écran de chargement ! package net.minecraft.client.gui; import java.util.List; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.GuiConnecting; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; public class GuiLoadingScreen extends GuiScreen { private final ResourceLocation backGround = new ResourceLocation("textures/gui/title/chargement.png"); // Chargement = Nom de votre image private int updateCounter = 0; String chargementText = "§6Chargement§f de la porte ..."; // A vous de mettre ce que vous voulez ! String serverName = "§6Nom"; // A vous de mettre ce que vous voulez ! String texteHaut = "§6Connexion§7 au serveur ! ..."; // A vous de mettre ce que vous voulez ! String bfsName = "§7Serveur: Faction"; // A vous de mettre ce que vous voulez ! public void initGui() { this.buttonList.add(new GuiButton(9, this.width - 100, this.height - 30, 60, 20, "Annuler")); } public void updateScreen() { this.updateCounter += 1; if (this.updateCounter == 100) { this.mc.displayGuiScreen(new GuiConnecting(this, this.mc, "IP", PORT)); // Ip = L'ip du serveur ! Port = Port du serveur. } if (this.updateCounter >= 101) { this.mc.displayGuiScreen(new GuiMainMenu()); } } public void drawBack() { GL11.glViewport(0, 0, 256, 256); this.mc.getTextureManager().bindTexture(this.backGround); GL11.glViewport(0, 0, this.mc.displayWidth, this.mc.displayHeight); Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); GL11.glTexParameteri(3553, 10241, 9729); GL11.glTexParameteri(3553, 10240, 9729); tessellator.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F); int k = this.width; int l = this.height; tessellator.addVertexWithUV(0.0D, 0.0D, this.zLevel, 0.0D, 0.0D); tessellator.addVertexWithUV(0.0D, l, this.zLevel, 0.0D, 1.0D); tessellator.addVertexWithUV(k, l, this.zLevel, 1.0D, 1.0D); tessellator.addVertexWithUV(k, 0.0D, this.zLevel, 1.0D, 0.0D); tessellator.draw(); } public void drawScreen(int par1, int par2, float par3) { drawBack(); drawHorizontalLine(0, this.width, this.height - 47, 1426063360); drawHorizontalLine(0, this.width, this.height - 46, 1426063360); drawRect(0, this.height - 45, this.width, this.height, 1426063360); drawRect(this.width / 2 - 101, this.height - 28, this.width / 2 + 101, this.height - 15, 489386); drawRect(this.width / 2 - 100, this.height - 27, this.width / 2 + 100, this.height - 16, 2013243904); drawRect(this.width / 2 - 100, this.height - 27, this.width / 2 - 100 + this.updateCounter * 2, this.height - 16, -1996510720); drawCenteredString(this.fontRendererObj, this.chargementText, this.width / 2, this.height - 40, 16777215); String percent = this.updateCounter + "§6%"; drawCenteredString(this.fontRendererObj, percent, this.width / 2, this.height - 10, 16777215); drawCenteredString(this.fontRendererObj, this.texteHaut, this.width / 2, 1, -1); drawString(this.fontRendererObj, this.bfsName, 10, this.height - 30, -1); drawString(this.fontRendererObj, this.serverName, 10, this.height - 19, -1); super.drawScreen(par1, par2, par3); } public void actionPerformed(GuiButton button) { if (button.id == 9) { this.mc.displayGuiScreen(new GuiMainMenu()); } } } 3]GuiMainMenu Rendez-vous dans le GuiMainMenu plus précisément ici : En desous de cet ligne de code : Vous allez ajouter ça : if (p_146284_1_.id == 9) { this.mc.displayGuiScreen(new GuiLoadingScreen()); }
  15. vous avez toujours eu envis d'un bâton/sceptre de soin ? et bien se tuto est fait pour vous Bâton/Sceptre de Soin -[iNTRODUCTION]- Bonjour à tous ! Dans ce tutoriel, nous allons faire un Bâton/Sceptre de soin -[sOMMAIRE]- 1]Création de l'item 2]Création du BatonDeSoin.java 3]CraftBukkit 1]Création de l'item la création d'un item c'est pas quelque chose de compliqué il suffis de faire comme ceci : Item.java itemRegistry.addObject(ID, "NOM", (new BatonDeSoin().setUnlocalizedName("NOM").setTextureName("NOM_TEXTURE"))); Items.java public static final Item NOM = (Item)Item.itemRegistry.getObject("NOM"); 2] Création du BatonDeSoin.java alors ici on va commencer par crée notre class normalement vous aurez ceci : package votre_package; public class BatonDeSoin { } alors tout de suite nous alons faire un extends sur Item et donc ajouter un maxStackSize une Durabilité et un emplacement dans le créatif : package votre_package; public class BatonDeSoin extends Item { public BatonDeSoin() { this.maxStackSize = 1; // on lui met un stack de 1 this.setMaxDamage(15); // on met 15 de durabilité this.setCreativeTab(CreativeTabs.tabCombat); // on le met dans le tab Combat du créatif } } une fois ça fais nous allons ajouter une fonction que quand on fais click droit ça fais une action : public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) { return par1ItemStack; } dans cette fonction nous alons ajouter un effect de potion qui est le heal et on va aussi déclarer la durabilité : public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) { par1ItemStack.damageItem(1, par3EntityPlayer); // on déclare la durabilité par3EntityPlayer.addPotionEffect(new PotionEffect(Potion.heal.id, 1, 0)); // on met un effet de heal 1 pendant 1 tick return par1ItemStack; } et puis on rajoute de la 3D : public boolean isFull3D() // on met de la 3D a l'item { return true; } ce qui nous donne au final : package votre_package; public class BatonDeSoin extends Item{ public BatonDeSoin() { this.maxStackSize = 1; this.setMaxDamage(10); this.setCreativeTab(CreativeTabs.tabCombat); } public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) { par1ItemStack.damageItem(1, par3EntityPlayer); par3EntityPlayer.addPotionEffect(new PotionEffect(Potion.heal.id, 1, 0)); return par1ItemStack; } } et voilà passons au craftbukkit qui est la même chose 3] CraftBukkit Item.java REGISTRY.a(ID, "NOM", (new BatonDeSoin()).c("NOM").f("NOM_TEXTURE")); Items.java (Pour 1.7.2) public static final Item NOM = (Item)Item.REGISTRY.a("NOM"); Items.java (Pour 1.7.10) public static final Item NOM = (Item)Item.REGISTRY.get("NOM"); BatonDeSoin.java package net.minecraft.server; import net.minecraft.server.EntityHuman; import net.minecraft.server.Item; import net.minecraft.server.ItemStack; import net.minecraft.server.MobEffect; import net.minecraft.server.MobEffectList; import net.minecraft.server.World; public class BatonDeSoin extends Item { public BatonDeSoin() { this.maxStackSize = 1; this.setMaxDurability(15); } public ItemStack a(ItemStack itemstack, World world, EntityHuman entityhuman) { entityhuman.addEffect(new MobEffect(MobEffectList.HEAL.id, 1, 0)); itemstack.damage(1, entityhuman); return itemstack; } } et voilà bon jeu avec votre bâton de soin
  16. modding

    Bonjour, Je m'appelle Virgil j'ai treize ans et je suis développeur Java Minecraft, Mon projet s'appelle "EasyMine" c'est un serveur que je veut créer, voici quelque caractéristique du serveur: - MCversion: 1.7.10 - Type: Cauldron (Forge + Bukkit) - Type de serveur: PvP-Fac/Mini-jeux/RolePlay Donc en réalité je voudrait créer une Team de Minecraftiens qui sont motiver pour réaliser ce projet et donc l'étape 1 de la création du serveur sera le développement d'un Mod de style IC2, Tinker Construct, Buildcraft, etc... Mais en rajoutant du RP, mod devra pouvoir éxécuter des commandes et aura des permissions bukkit (d'où Cauldron^^), Donc pour ceux qui sont chaud, me MP ! cordialement.
  17. Sommaire Par quoi je commence ? Dossier : Tout savoir sur l'installation. Premier mod Les meilleurs mods commencent comme ça. Allo ? Est-ce que ça marche ? Premier build et distribution. Vous pouvez proposer des améliorations sur le topic de discussion.
  18. Installation des outils nécessaires au développement 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 les gens, si vous êtes ici c'est sûrement que vous débutez dans le modding Forge, c'est pourquoi je vous fais ce tutoriel en espérant vous donnez tous les outils nécessaires afin de bien débuter vos futures créations. Ce qui va suivre est essentiellement vrai pour des systèmes Windows, toutefois certains points peuvent être vrais pour plusieurs systèmes d'exploitation, il n'est pas non plus bien difficile de transposer ce que je dit dans un autre OS si vous maîtriser un minimum celui-ci. -[sOMMAIRE]- 1] Logiciels 2] Installation de Forge 2] Configuration de l'espace de travail 1] Logiciels Java Developpment Kit : Avant de coder, il faut bien évidemment installer des logiciels vous le permettant tout d'abord vous devez télécharger la "base" pour le modding, je parle bien sur du Java Developpment Kit une fois sur le site il vous faut choisir la version correspondant à votre système d'exploitation et à l'architecture de celui-ci. Le JDK ainsi installé il faut désormais définir les variables d'environnement. Reperez tout d'abord le répertoire où JDK est installé ( C:\Program Files\Java\jre1.8.0_60 pour ma part) Puis rendez-vous dans : Ordinateur --> Propriétés systèmes --> Paramètres systèmes avancés --> Variables d'environnement Vous devriez alors être ici : Ensuite, vous devez créer une nouvelle variable système que vous appelerez JAVA_HOME, sa valeur sera (comme vous pouvez le voir) le repertoire où est installé votre JDK, cherchez après la variable "path", placez vous après un point-virgule et inserez le repertoire où vous avez installé le JDK suivi de \bin et bien sur, d'un point-virgule ( C:\Program Files\Java\jre1.8.0_60\bin; chez moi). Une fois ceci fait votre JDK est opérationnel, pour le vérifier ouvrez donc votre invité de commande et tapez : javac Si la commande vous indique la manière dont il faut utiliser cette commande (et non pas une erreur), votre ordinateur est prêt à coder ! Environnement de developpement: Seulement à moins d'être en parfaite symbiose avec votre ordinateur ainsi que JDK vous n'êtes pas apte à modder ce magnifique jeu qu'est Minecraft, c'est pourquoi vous devez installez un IDE, logiciel qui vous permettra de coder effectivement et de tester les fonctionnalités de votre mod en direct je vous conseille personellement Eclipse car c'est sans doute le plus simple d'utilisation et c'est celui avec lequel j'effectuerai les autres tutoriels; Il faut vous rendre sur le page de téléchargement du site web d'Eclipse (en plus ils viennent juste de sortir une installation automatique, profitez-en ) et de procéder à l'installation, une fois ceci fait restez-en là, nous en reparlerons un peu plus tard. Toutefois sachez qu'il existe d'autres IDE parfois plus complet mais bien souvent plus complexe parmi ceux-ci je vous recommande IntelliJ IDEA, qui intègre directement gradle et Git, cependant il est un petit plus complexe d'utilisation (attention à bien choisir la version community, l'autre version étant payante, ne vous inquietez pas cette dernière contient tout ce dont vous avez besoin). Editeur de texte avancé : Depuis quelques temps déjà Minecraft utilise pas mal de fichier .json c'est pourquoi je vous recommande fortement d'acquérir un editeur de texte un peu plus complexe que le bloc-notes. Je vous recommande encore une fois celui que j'utilise Notepad ++, clair, simple d'utilisation et un simple clic droit vous permet d'éditer tout ce qui est éditable ainsi que PSPad ! Sachez toutefois qu'il en existe bien d'autre et que vous avez l'embarras du choix en matière d'éditeur de texte. (Si vous optez pour N++ vérifiez bien que votre logiciel encode en UTF-8 sans BOM, via l'onglet Encodage). Si vous êtes sur OS X je vous recommande le logiciel Fraise. Logiciels de manipulation graphique : Votre futur mod aura sans doute besoin de textures et de je ne sais quels autres modèles, c'est pourquoi je vous conseille (si ce n'est pas déjà le cas) d'installer des logiciels d'édition/manipulation graphique, je vous propose une liste de logiciels gratuits que je vous conseille : GIMP : http://www.gimp.org/downloads/ Paint.net : http://www.getpaint.net/download.html PhotoFiltre 7 (freeware) : http://www.photofiltre-studio.com/pf7.htm Les adeptes de Photoshop peuvent aussi utiliser ce logiciel, le principal problème avec celui-ci étant son prix. Vous serez aussi peut-être amenés à concevoir des modèles 3D, il vous faudra donc télécharger Techne un outil de modélisation adapté à Minecraft. Il existe aussi CraftStudio qui est lui par contre un outil payant de modélisation 3D (ainsi qu'un moteur de jeu) 2] Installation de Forge Sources de Forge : En effet, il faut d'abord acquérir les sources de forge (et de minecraft) c'est pourquoi vous allez les téléchargez sur le site officiel de Forge, choissisez la version que vous désirez (les versions recommandées sont comme cela le laisse supposer, recommandées, surtout dans le cadre de la création d'un mod), puis faites bien attention à télécharger la version SRC, extrayez ensuite ce dossier là où cela vous arrange. Installation de Forge : Rendez-vous dans le dossier préalablement choisi, vous cliquez dans l'adresse du repertoire, effacez celle-ci et tapez " cmd" une fois l'invité de commande dans le repertoire des sources tapez (uniquement si vous utilisez eclipse) : gradlew setupDecompWorkspace eclipse --info En revanche si vous utilisez IntelliJ IDEA tapez : gradlew setupDecompWorkspace idea --info Si vous êtes sur Mac OS X ou sur une distrib' Linux il vous suffit de rajouter "./" pour executer gradlew (vérifier toutefois que vous avez les permissions de l'executer) 3] Configuration de l'espace de travail Eclipse : Il faut désormais proceder à une rapide configuration d'éclipse, tout d'abord lancez le logiciel : Selectionnez le dossier "eclipse" du repertoire des sources de Forge, lancez le logiciel, puis une fois ceci fait rendez-vous dans : Windows --> Preferences --> General --> Editor Et choissisez autre puis UTF-8, cela permettra d'éviter certains problèmes. IntelliJ IDEA (WIP): Une fois le logiciel installé, lancez-le et accedez aux sources en créant un nouveau projet via : File --> New --> Project from Existing Sources... Une fois ceci fait selectionnez l'endroit ou les sources de minecraft et de forge sont installés, suivez les instructions d'installation et vous êtes prêt à coder ! Merci d'avoir lu, si jamais il y a des erreurs (dans le fond comme dans la forme), merci de me les signaler, Bonne continuation, Cordialement
  19. Item qui fait spawn un mob en Vanilla -[iNTRODUCTION]- Bonjour à tous ! Dans ce tutoriel, nous allons faire un Item qui fait spawn un mob, commençons sans attendre -[sOMMAIRE]- 1]Création d'un classe ordinaire 2]Création d'une méthode onItemUse 3]Faire spawner le mob 4] Craftbukkit 1]Création d'une classe ordinaire Commençons par créer une class ordinaire. package fr.tonnom.tonmod; public class ItemMob { public ItemMob() { } } Puis nous allons ajouter le stack maximum (pour moi ce sera 1), sa durabilité (pour moi ce sera 5) et l'emplacement dans l'inventaire creatif. Nous allons donc ajouter ces deux lignes : this.setCreativeTab(CreativeTabs.tabMisc); this.setMaxDamage(5); this.setMaxStackSize(1); dans le " public void ItemMob() " 2] Création d'une méthodeonItemUse Commençons par créer notre méthode en boolean, qui va s'éxécuter lors de l'utilisation de l'item. public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) return true; } Ensuite ajoutons-y ce qu'il nous faut, c'est à dire récupérer les informations du bloc clicker public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) { par1ItemStack.damageItem(1, par2EntityPlayer); // ici nous faisons en sorte que la durabilité baisse de 1 après un click droit if (par3World.isClient) // si le mon est Client alors... { return true; // ... ça renvoi true ... } else // ... sinon ... { Block var11 = par3World.getBlock(par4, par5, par6); // on récupère le bloc par4 += Facing.offsetsXForSide[par7]; // ------ par5 += Facing.offsetsYForSide[par7]; // | -- on récupère les coordonnées par6 += Facing.offsetsZForSide[par7]; //------- double var12 = 0.0D; if (par7 == 1 && var11.getRenderType() == 11) { var12 = 0.5D; } Entity var14 = spawnCreature(par3World, 2, (double)par4 + 0.5D, (double)par5 + var12, (double)par6 + 0.5D); if (var14 != null) { if (var14 instanceof EntityLivingBase && par1ItemStack.hasDisplayName()) { ((EntityLiving)var14).setCustomNameTag(par1ItemStack.getDisplayName()); } } return true; } } 3] Faire spawner le mob Ici nous allons créér notre méthode " spawnCreature "en static public static Entity spawnCreature(World par0World, int par1, double par2, double par4, double par6) { } Puis nous allons mettre tout ce qu'il nous faut à lintérieur, c'est à dire la récupération du mob. public static Entity spawnCreature(World par0World, int par1, double par2, double par4, double par6) { Entity var8 = null; for (int var9 = 0; var9 < 1; ++var9) // nous créons une boucle " for " { var8 = EntityList.createEntityByID(50, par0World); // ici nous allons faire spawner un creeper qui a l'id " 50 " donc nous récupérons le mob. if (var8 != null && var8 instanceof EntityLivingBase) // donc si le mob n'est pas = à null et qu'il instance bien EntityLivingBase alors ... { EntityLiving var10 = (EntityLiving)var8; var8.setLocationAndAngles(par2, par4, par6, MathHelper.wrapAngleTo180_float(par0World.rand.nextFloat() * 360.0F), 0.0F); // --------------------------------- var10.rotationYawHead = var10.rotationYaw; // | // on défini les positions du mob. var10.renderYawOffset = var10.rotationYaw; //------------- var10.onSpawnWithEgg((IEntityLivingData)null); par0World.spawnEntityInWorld(var8); // on fait spawn l'entité var10.playLivingSound(); // on émet son bruit. } } return var8; } ce qui nous donne au final : package fr.tonnom.tonmod; public class ItemMob extends Item { public ItemMob() { this.setCreativeTab(CreativeTabs.tabMisc); this.setMaxDamage(5); this.setMaxStackSize(1); } public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) { par1ItemStack.damageItem(1, par2EntityPlayer); if (par3World.isClient) { return true; } else { Block var11 = par3World.getBlock(par4, par5, par6); par4 += Facing.offsetsXForSide[par7]; par5 += Facing.offsetsYForSide[par7]; par6 += Facing.offsetsZForSide[par7]; double var12 = 0.0D; if (par7 == 1 && var11.getRenderType() == 11) { var12 = 0.5D; } Entity var14 = spawnCreature(par3World, 2, (double)par4 + 0.5D, (double)par5 + var12, (double)par6 + 0.5D); if (var14 != null) { if (var14 instanceof EntityLivingBase && par1ItemStack.hasDisplayName()) { ((EntityLiving)var14).setCustomNameTag(par1ItemStack.getDisplayName()); } } return true; } } public static Entity spawnCreature(World par0World, int par1, double par2, double par4, double par6) { Entity var8 = null; for (int var9 = 0; var9 < 1; ++var9) { var8 = EntityList.createEntityByID(50, par0World); if (var8 != null && var8 instanceof EntityLivingBase) { EntityLiving var10 = (EntityLiving)var8; var8.setLocationAndAngles(par2, par4, par6, MathHelper.wrapAngleTo180_float(par0World.rand.nextFloat() * 360.0F), 0.0F); var10.rotationYawHead = var10.rotationYaw; var10.renderYawOffset = var10.rotationYaw; var10.onSpawnWithEgg((IEntityLivingData)null); par0World.spawnEntityInWorld(var8); var10.playLivingSound(); } } return var8; } } 4] Craftbukkit Pour le craftbukkit c'est le même concept donc je vous donne le code directement : 1.7.2 : package net.minecraft.server; public class ItemMob extends Item { public ItemMob(){ this.maxStackSize = 1; this.setMaxDurability(5); } public boolean interactWith(ItemStack itemstack, EntityHuman entityhuman, World world, int i, int j, int k, int l, float f, float f1, float f2) { itemstack.damage(1, entityhuman); if (world.isStatic || itemstack.getData() == 48 || itemstack.getData() == 49 || itemstack.getData() == 63 || itemstack.getData() == 64) { return true; } else { Block block = world.getType(i, j, k); i += Facing.b[l]; j += Facing.c[l]; k += Facing.d[l]; double d0 = 0.0D; if (l == 1 && block.b() == 11) { d0 = 0.5D; } Entity entity = a(world, 2, (double) i + 0.5D, (double) j + d0, (double) k + 0.5D); if (entity != null) { if (entity instanceof EntityLiving && itemstack.hasName()) { ((EntityInsentient) entity).setCustomName(itemstack.getName()); } } return true; } } public static Entity a(World world, int i, double d0, double d1, double d2) { return spawnCreature(world, i, d0, d1, d2, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.SPAWNER_EGG); } public static Entity spawnCreature(World world, int i, double d0, double d1, double d2, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason spawnReason) { Entity entity = null; for (int j = 0; j < 1; ++j) { entity = EntityTypes.a(50, world); if (entity != null && entity instanceof EntityLiving) { EntityInsentient entityinsentient = (EntityInsentient) entity; entity.setPositionRotation(d0, d1, d2, MathHelper.g(world.random.nextFloat() * 360.0F), 0.0F); entityinsentient.aO = entityinsentient.yaw; entityinsentient.aM = entityinsentient.yaw; entityinsentient.a((GroupDataEntity) null); world.addEntity(entity, spawnReason); entityinsentient.r(); } } return entity; } } 1.7.10 : package net.minecraft.server; public class ItemMob extends Item { public ItemMob(){ this.maxStackSize = 1; this.setMaxDurability(5); } public boolean interactWith(ItemStack itemstack, EntityHuman entityhuman, World world, int i, int j, int k, int l, float f, float f1, float f2) { itemstack.damage(1, entityhuman); if (world.isStatic || itemstack.getData() == 48 || itemstack.getData() == 49 || itemstack.getData() == 63 || itemstack.getData() == 64) { return true; } else { Block block = world.getType(i, j, k); i += Facing.b[l]; j += Facing.c[l]; k += Facing.d[l]; double d0 = 0.0D; if (l == 1 && block.b() == 11) { d0 = 0.5D; } Entity entity = a(world, 2, (double) i + 0.5D, (double) j + d0, (double) k + 0.5D); if (entity != null) { if (entity instanceof EntityLiving && itemstack.hasName()) { ((EntityInsentient) entity).setCustomName(itemstack.getName()); } } return true; } } public static Entity a(World world, int i, double d0, double d1, double d2) { return spawnCreature(world, i, d0, d1, d2, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.SPAWNER_EGG); } public static Entity spawnCreature(World world, int i, double d0, double d1, double d2, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason spawnReason) { Entity entity = null; for (int j = 0; j < 1; ++j) { entity = EntityTypes.a(50, world); if (entity != null && entity instanceof EntityLiving) { EntityInsentient entityinsentient = (EntityInsentient) entity; entity.setPositionRotation(d0, d1, d2, MathHelper.g(world.random.nextFloat() * 360.0F), 0.0F); entityinsentient.aO = entityinsentient.yaw; entityinsentient.aM = entityinsentient.yaw; entityinsentient.prepare((GroupDataEntity) null); world.addEntity(entity, spawnReason); entityinsentient.r(); } } return entity; } } Et voilà merci d'avoir suivi ce tutoriel et je vous dit à bientôt ! 10/07/2015 21:24 Corrigé et mis en page par Zetsyog 11/07/2015 12:27 Fautes criminelles de convention corrigées par TheShark34
  20. Vanilla

    J'exposerai ici comment j'ai fait pour mon bloc anti-piston. J'ai vu cette demande dans la catégorie Support, et je trouvais utile de faire un tutoriel, plutôt que de déterrer d'anciens sujets à l'avenir. Créer un bloc anti-piston: Cette uvre est mise à disposition selon les termes de laLicence Creative Commons Attribution - Pas dUtilisation Commerciale - Pas de Modification 3.0 non transposé. Tout partage implique que vous citiez l'auteur original. Sommaire: 1]Préparatifs Pour commencer, il vous faudra un Minecraft décompilé en 1.6 - 1.7 (dans mon cas la 1.7.10) avec MCP(= Minecraft Coder Pack). 2]Mise en place du code On va commencer directement le tutoriel ! Préparez votre espace de travail en démarrant Eclipse avec la workspace habituelle. Une fois ceci fait, ouvrez les packages net.minecraft.block et net.minecraft.block.Material. Vous aurez besoin de deux classes: Block.java et Material.java Dans Block.java, vous devriez repérer ceci à la ligne 388. blockRegistry.addObject(175, "double_plant", new BlockDoublePlant()); Ajoutez ceci juste après, de façon à déclarer un nouveau bloc. blockRegistry.addObject(200, "antipiston_block", (new Block(Material.noPushBlock)).setHardness(5.0F).setResistance(10.0F).setStepSound(soundTypePiston).setBlockName("blockAntiPiston").setCreativeTab(CreativeTabs.tabBlock).setBlockTextureName("antipiston_block")); 200 correspond à l'ID, le String suivant correspond au nom du bloc. "new Block(Material.noPushBlock))" indique que le Block dépendra du Material défini. La suite de la ligne est basique, comme chaque bloc Minecraft. Après avoir rajouté cette ligne dans la classe, vous devriez obtenir une erreur sur le Material. C'est là que la classe ouverte tout à l'heure intervient ! Après cette la ligne ci dessous, rajoutez un nouveau Material, comme montré. public static final Material field_151597_y = (new MaterialLogic(MapColor.field_151666_j)).setReplaceable().setTranslucent().setRequiresTool().setNoPushMobility(); Ajoutez donc cette ligne ci. public static final Material noPushBlock = (new Material(MapColor.field_151665_m)).setRequiresTool().setImmovableMobility(); Grâce à ce nouveau Material, on indique que pour casser le bloc, il faudra des outils, et qu'on ne pourra pas bouger le bloc avec un piston. Vous pouvez dès à présent tester votre nouveau bloc ! N'hésitez pas à reporter des bugs si vous en avez. Le résultat en image:
  21. Sponge : Les bases 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]- Salutations chères compagnons ! Certains d'entre vous le savent peut-être déjà, mais la communauté minecraft a encore frappé, et cette fois ci, c'est du lourd ! J'ai l'honneur de vous présenter : -[sOMMAIRE]- 1] Sponge : Qu'est ce que c'est ? 2] Mise en place de l'espace de travail [/goancre]A] Avec Maven B] Avec Gradle 3] Création d'un Plugin simple 4] Création d'un Mod Simple [goancre=infos]5] Liens utiles 1] Sponge : Qu'est ce que c'est ? Sponge est une collaboration entre les API récentes (Spout, Flow's APIs...) implémentée sur forge, à l'aide de la communauté de modding Minecraftienne : Cauldron, Glowstone, Spout... C'est une API universelle : elle s'occupe du coté client et du côté serveur, mais actuellement, seul la face serveur est vraiment développée, la face client étant gérée par Forge. Sponge se divise en 3 parties : Sponge API : C'est l'API de Sponge, celle qui nous permettra de faire des Plugins ou des Mods. Tout est regroupé dans cette API, c'est génial vous ne trouvez pas ? Téléchargeable ici. Sponge Server Implementation : C'est un serveur Minecraft qui charge les Plugins. Sponge Forge Implementation : C'est un client Minecraft qui charge les Mods. Les deux implémentations peuvent être téléchargées ici. Bon, vu comme ça, c'est pas très compréhensible, mais pour faire simple, le serveur, c'est le nouveau Cauldron, et le client, c'est le nouveau Forge. Pour le site officiel, il suffit de cliquer sur Spongy un peu plus haut. Je vous conseil de lire ce récapitulatif des évènements qui explique bien l'utilité de Sponge et l'avenir de Minecraft. Bon alors, ça vous intéresse ? On passe à la suite ? C'est parti ! 2] Mise en place de l'espace de travail A] Avec Maven B] Avec Gradle 3] Création d'un Plugin simple On y est, enfin ! C'est là que ça va devenir intéressant ! On va commencer par les plugins, globalement, si vous avez déjà créé un plugin avec Bukkit, vous allez voir que c'est très similaire, à quelques choses près. Créons tout d'abord notre package : Clique droit sur src/main/java New Package Pour ce tutoriel, ce sera : fr.ironcraft.spongetutorial Passons à notre première classe : PluginTutorial package fr.ironcraft.spongetutorial; public class PluginTutorial { } Maintenant, il faut dire à Sponge que notre classe va être un Plugin, pour se faire, ajouter l'annotation @Plugin. @Plugin(id = "TutorialPlugin", name = "Tutorial", version = "1.0") public class PluginTutorial { } Contrairement à Bukkit, les plugins Sponge ne possède pas (encore) de fichier yml. Il est remplacé par cette annotation. Voici la liste des paramètres : id : L'id de votre plugin, ici TutorialPlugin. name : Le nom du plugin (affiché dans le Logger), ici Tutorial. version : La version du plugin, ici 1.0. dependencies : les dépendences du plugin. a ressemble pas mal à Forge hein ? Bon, pour la suite, on va juste apprendre à faire un Hello World, les plugins fonctionnent de la même façon que sur Bukkit, vous pouvez donc vous servir des tutoriels bukkit et vous documenter pour retrouver les bons Events. Pour récupérer les instance du jeu et du logger, on va passer par google, merci google ! @Inject Game game; @Inject Logger logger; On oublie pas les imports : Ctrl + Shift + O sur Eclipse. Attention pour le Logger, le bon import est : import org.slf4j.Logger; Pour les habitués, il n'existe plus de onEnable() et onDisable(), par contre il y a des Events bien pratique, à la place du onEnable, on va utiliser l'Event ServerStartingEvent : @Subscribe public void onServerStarting(ServerStartingEvent event) { logger.info("Bonjour tout le monde !"); } Et voilà, on a notre Hello World ! Je m'en vais partager ce plugin très très utile dans le monde entier, et à mon retour, on parlera de mods ! ;p PS : Si vous voulez la liste des Events, sachez que la plupart sont les même que Forge. Si vous voulez la doc, la voici. 4] Création d'un Mod simple WIP 5] Liens utiles Site Officiel : https://www.spongepowered.org/ Documentation : https://docs.spongepowered.org/ Forums : https://forums.spongepowered.org/ Github : https://github.com/SpongePowered
  22. Bonjour à vous jeunes gens d'Ironcraft ! Je me lance dans la création d'une chaîne youtube basée sur les tutoriels du modding Vanilla de Minecraft. Dans ce post vous pourrez me faire part d'idées de tutoriels en commentaires (Les tutoriels basiques y serons). Si vous voulez que je transforme votre tutoriel Ironcraft (écrit) en vidéo n'hésitez pas à me le demander ! Les épisodes s'organiseront de la manière suivante : [1.] I] Les préparatifs (Client et serveur(Spigot)) II] La base (Les blocks | Items) (Client et serveur(Spigot)) III] Les Armures et Outils (Client et serveur(Spigot)) IV] Les GUIS (Modification) V] Les GUIS 2 (Création) VI] Les Blocks et Items Complexes (Client et serveur(Spigot)) J'édit a chaque sortie de vidéo Je recherche également quelqu'un pour venir m'aider. Sujet WIP ! A la prochaine ! Donnez votre avis DiaZ0te CorrigéparMehdirauch !
  23. \--[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.setTitle Vous 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 03.06.2015 16:20 Corrigé et amélioré par TheShark34 -- Amélioré, mis en page et approuvé par Wytrem le 19.06.2015 à 14h55.
  24. Le login caché 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 ! En ce moment, je vois encore des demande d'aide ou les personne demande comment cacher le "MDP" du joueur quand il se login. Ce tutoriel a pour but de vous expliquer comment cacher le login du joueur. Bonne lecture !!! -[sOMMAIRE]- A] Partie A : Cacher le login [A 1] Préparation A] Ajout du code dans GuiTextField.java B] Captures d'écrans A] Ajout du code dans GuiTextField.java Pour commencer, nous allons aller à la ligne +/- 460 dans la fonction drawTextBox en dessous de : int var9 = var7; nous allons ajouter un string nommé str4 comme ceci : String str4 =""; entre les guillemets (" ") nous allons mettre le message à afficher après le mot de passe du joueur. Exemple : ensuite, nous allons ajouter une condition avec un if : if(var4.startsWith("/login ") || var4.startsWith("/l ") || var4.startsWith("/reg ") || var4.startsWith("/register ")) { } cette condition dit que si le message (var4) commence par un /login , /l , /register, /reg; Alors, le code en dessous s'effectue dans cette confition, nous allons ajouter 2 string var (String var51 et String var61) String var51 = var4.substring(0, var4.indexOf(" ")); String var61 = var4.substring(var4.indexOf(" ") + 1); var7 = 0; Le string var met un espace ( ) après le mot de passe du joueur. ensuite, nous allons créer plusieurs condition qui vérifie les caractères qu'il y a dans le mot de passe et la longueur. if(var61.matches(".*[a-z].*")); { ++var7; } if(var61.matches(".*[A-Z].*")); { ++var7; } if(var61.matches(".*[0-9].*")); { ++var7; } if(var61.matches(".*[^a-zA-Z0-9].*")); { ++var7; } if(var61.length() < 6); { ++var7; } if(var61.length() >= 8); { ++var7; } if(var61.length() >= 14); { ++var7; } if(var61.length() >= 25); { ++var7; } if(var61.length() >= 35); { ++var7; } après , on dis au jeu de remplacer tout les . et les * var4 = var51 + " " + var61.replaceAll(".","*"); pour finir, on met notre dernière condition qui dit : Que après le mot de passe du joueur, on affiche le str4 if(var61.length() > 0) { var4 = var4 + " " + str4 + "§r"; } Et voilà, vos mots de passe sont cachés ! B] Captures d'écrans : Bientôt