Aller au contenu

Rechercher dans la communauté

Affichage des résultats pour les étiquettes '1.7.x'.

  • 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

9 résultats trouvés

  1. Launcher animé

    Bonjour, J'ai remarqué qu'il y a une section Créations, donc je me permet de montrer une"création test" car ce n'est pas fini. Voici le rendu que j'ai obtenu en tentant de faire un launcher un peu plus animé, pour changer d'une image fixe . (Le gif est de qualité médiocre je vous l'accorde.) Bien cordialement. Bonne Soirée/journée. Il semblerait que quelque chose s'est reveillé ICI :O
  2. Nouveau Style de Serveur

    Bonjour, une petite question m'est venue en tête avant que je commence à développer mon serveur. :) j'aimerais savoir si vous aimeriez voir un nouveau style de serveur ? Autre chose que le PvP-Factions. du genre: Deux factions se battent, on choisis sa faction au premier lancement du jeu et ensuite on ne peut plus changer. Le serveur sera: -2 Factions avec assauts de factions -System de quête (Quetes, Semi-Rp ,PvP, mmo) -Musiques par régions -Capture de territoire, de zones ainsi que de villages spéciaux -Donjons (Niv 1, 2, 3...) -Des événements (PvP etc...) -De la magie -Des jobs -Des guildes / avec Guerres de guildes -Hotel des ventes customs (interfaces) -Des grades, des nouvelles interfaces, sous Launcher obligatoire car nouveaux items/blocks/mobs Et voila pour l'instant. j'aimerais juste savoir si ça serait une bonne idée ou pas ? Si il ouvre, irez-vous faire un petit tour pour tester ca ? Le but du serveur c'est bien sure de garder au maximum les joueurs,, c'est pour cela qu'il y aura surrement une histoire avec les quetes et tout ça tout ça ;). Proposez vos idées d’amélioration/d'ajouts si vous pensez que le serveur pourrait fonctionner. (commentaire ou bien messages privés). Bien cordialement. Trxyy.
  3. Afficher le claim d'une faction en jeu Bonjour la Communauté, Aujourd’hui, je vais essayer de faire un tutoriel (mon premier), qui consistera à afficher le claim d'une faction en Jeu ! (excusez la rédaction si elle se présente mauvaise mais c'est mon premier tutoriel, j'ai jamais rédigé avant ça xD) A) Pré-requis Tout d'abord, je vous recommande d'aller faire un tour sur le tutoriel de Wytrem => [1.7.x] Afficher un message central Car j'utilise la manière dont il affiche le message au milieu de l'écran pour ce tutoriel, donc, il est préférable de savoir comment ça marche :). 1) Classes Requises & Modifications Pour commencer, nous allons nous rendre dans la classe NetHandlerPlayClient (pkg: net.minecraft.client.network) Nous allons rechercher la fonction "handleChat" qui ressemble à ceci public void handleChat(S02PacketChat p_147251_1_) { this.gameController.ingameGUI.getChatGUI().func_146227_a(p_147251_1_.func_148915_c()); } On va changer la fonction en ceci public void handleChat(S02PacketChat p_147251_1_) { FactionEngine.onChatReceived(p_147251_1_); } Nous allons juste remplacer ce qu'il y a a à l'interieur par FactionEngine.onChatReceived(p_147251_1_); Vous aurez une erreur sur le FactionEngine et c'est normal étant donné que la classe n'est pas encore créée. Ensuite on va aller dans la classe Minecraft (pkg: net.minecraft.client) On va rechercher this.ingameGUI = new GuiIngame(this); et on va le remplacer par this.ingameGUI = new FactionIngame(this); La, nous changeons la classe appelée pour le GuiIngame par la notre (FactionIngame) qui extends de GuiIngame.. Et oui c'est normal si il y a une erreur etant donné que la classe FactionIngame, elle aussi n'est pas encoré créée. Une fois cela fait, nous allons ajouter nos classes manquantes FactionEngine: package fr.trxyy.factions; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.ISound; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.network.play.server.S02PacketChat; import net.minecraft.util.IChatComponent; import net.minecraft.util.ResourceLocation; public class FactionEngine { private static Minecraft mc; public static String factionName = null; public static boolean displaying = true; public static String warzoneString = "§r§4Zone de Combat !"; // defaut: §r§4WarZone public static String safezoneString = "§r§6Zone Tranquille"; // defaut: §r§6SafeZone public static String wildernessString = "§r§2Nature Sauvage"; // defaut: §r§2Wilderness public FactionEngine() {} public static void onChatReceived(S02PacketChat par1PacketChat) { mc = Minecraft.getMinecraft(); IChatComponent chatComponent = par1PacketChat.func_148915_c(); String unformattedText = chatComponent.getUnformattedText(); String formattedText = chatComponent.getFormattedText(); if (displaying) { if (formattedText.contains("§r§e ~ §r§4WarZone - Not the safest place to be§r")) { FactionIngame.showCenterMessage(warzoneString); setFactionName(warzoneString); // playSound(new ResourceLocation("orb"), 2.0F); // Pour jouer un audio quand tu rnetres dans la zone } else if (formattedText.contains("§r§e ~ §r§6SafeZone - Free from PVP and monsters§r")) { FactionIngame.showCenterMessage(safezoneString); setFactionName(safezoneString); } else if (formattedText.contains("§r§e ~ §r§2Wilderness§r")) { FactionIngame.showCenterMessage(wildernessString); setFactionName(wildernessString); } else if (formattedText.contains("§r§e ~ §r§")) { FactionIngame.showCenterMessage("" + formattedText.replace("§r§e ~ §r§", "")); setFactionName("" + formattedText.replace("§r§e ~ §r§", "")); } else { mc.ingameGUI.getChatGUI().func_146227_a(par1PacketChat.func_148915_c()); } } else { if (formattedText.contains("§r§e ~ §r§4WarZone - Not the safest place to be§r")) { mc.ingameGUI.getChatGUI().func_146227_a(par1PacketChat.func_148915_c()); setFactionName(warzoneString); } else if (formattedText.contains("§r§e ~ §r§6SafeZone - Free from PVP and monsters§r")) { mc.ingameGUI.getChatGUI().func_146227_a(par1PacketChat.func_148915_c()); setFactionName(safezoneString); } else if (formattedText.contains("§r§e ~ §r§2Wilderness§r")) { mc.ingameGUI.getChatGUI().func_146227_a(par1PacketChat.func_148915_c()); setFactionName(wildernessString); } else if (formattedText.contains("§r§e ~ §r§")) { mc.ingameGUI.getChatGUI().func_146227_a(par1PacketChat.func_148915_c()); setFactionName("" + formattedText.replace("§r§e ~ §r§", "")); } else { mc.ingameGUI.getChatGUI().func_146227_a(par1PacketChat.func_148915_c()); // setFactionName(null); } } } private static void setFactionName(String string) { factionName = string; } public static PositionedSoundRecord playSound(ResourceLocation p_147674_0_, float p_147674_1_) { return new PositionedSoundRecord(p_147674_0_, 0.25F, p_147674_1_, false, 0, ISound.AttenuationType.NONE, 0.0F, 0.0F, 0.0F); } public static String getFaction() { return factionName; } } FactionIngame: package fr.trxyy.factions; import org.lwjgl.opengl.GL11; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiIngame; import net.minecraft.client.gui.ScaledResolution; public class FactionIngame extends GuiIngame { private static String toDisplay = null; private static int toDisplayTimer = 0; private static boolean displayStaticFaction = true; public FactionIngame(Minecraft mc) { super(mc); } public void renderGameOverlay(float par1Float, boolean par2Bool, int par3Int, int par4Int) { ScaledResolution scaledRes = new ScaledResolution(Minecraft.getMinecraft(), Minecraft.getMinecraft().displayWidth, Minecraft.getMinecraft().displayHeight); int width = scaledRes.getScaledWidth(); int height = scaledRes.getScaledHeight(); FontRenderer fr = this.mc.fontRenderer; this.mc.entityRenderer.setupOverlayRendering(); super.renderGameOverlay(par1Float, par2Bool, par3Int, par4Int); if (FactionEngine.getFaction() != null && displayStaticFaction && !this.mc.isIntegratedServerRunning()) { fr.drawStringWithShadow("Claim: " + FactionEngine.getFaction(), 2, 2, 16777215); } if (this.toDisplay != null) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); int alpha = this.toDisplayTimer < 10 ? ((int) (this.toDisplayTimer * 25)) : 255; int color = 0xffffff | ((alpha & 255) << 24); this.mc.fontRenderer.drawString(this.toDisplay, (width - this.mc.fontRenderer.getStringWidth(this.toDisplay)) / 2, height / 2 - 50, color); } } public void updateTick() { super.updateTick(); if (this.toDisplayTimer > 0) { this.toDisplayTimer--; if (this.toDisplayTimer == 0) { this.toDisplay = null; } } } public static void showCenterMessage(String formattedText) { toDisplay = formattedText; toDisplayTimer = 3 * 20; } } Il vous reste qu'a import dans Minecraft.java & NetHandlerPlayClient vos classes. Pour ce qui est du code du FactionEngine: String factionName => Le nom de la faction de base (par defaut: null) boolean displaying => est ce qu'on affiche le texte au milieu de l'ecran ou pas ? (par defaut: true) String warzoneString => Le message affiché quand on est dans la warzone String safezoneString => Le message affiché quand on est dans la safezone String wildernessString => Le message affiché quand on est dans la nature dans la fonction onChatReceived, On dis que si on affiche le message au centre, on check le message entrant: if (displaying) { // Si on affiche le message au centre if (formattedText.contains("§r§e ~ §r§4WarZone - Not the safest place to be§r")) { // Et si le message contiens... FactionIngame.showCenterMessage(warzoneString); // On affiche le message au milieu de l'ecran setFactionName(warzoneString);// on défini le nom de la faction. // playSound(new ResourceLocation("orb"), 2.0F); // Pour jouer un audio quand tu rnetres dans la zone } (oui il y a une fonction playSound mais je l'ai desactiver car faut mettre de la musique c'est mieux :D) Si le texte contiens "§r§e ~ §r§4WarZone - Not the safest place to be§r" Alors on affiche le message central qu'on a choisis dans la variable "warzoneString" puis on défini la variable "factionName" en "warzoneString", pour la warzone, ça sera évidemment safezoneString pour la safezone etc... Et on dis que si on n'affiche pas le message au centre, on check le message entrant: else { if (formattedText.contains("§r§e ~ §r§4WarZone - Not the safest place to be§r")) { // Si le message contiens... mc.ingameGUI.getChatGUI().func_146227_a(par1PacketChat.func_148915_c()); // on affiche le message dans le tchat basique // On affiche pas le message au centre de l'écran setFactionName(warzoneString);// on défini le nom de la faction. } Puis c'est pareil qu'au dessus, sauf qu'on affiche pas le message au centre de l'écran: Si le texte contiens "§r§e ~ §r§4WarZone - Not the safest place to be§r" puis on défini la variable "factionName" en "warzoneString", pour la warzone, ça sera évidemment safezoneString pour la safezone etc... Pour ce qui est du code de la classe de FactionIngame: La classe est extends de GuiIngame (logique car on a remplacé dans Minecraft.java, et donc il nous faut une classe qui permettra de rendre en jeu, GuiIngame par exemple) String toDisplay => message à afficher int toDisplayTimer => temps a afficher (laisser sur 0) boolean displayStaticFaction => afficher la faction toujours sur l'ecran On ajoute la fonction "renderGameOverlay" de la classe GuiIngame, et on affiche le tout a l'interieur. public void renderGameOverlay(float par1Float, boolean par2Bool, int par3Int, int par4Int) {} On défini ce dont on a besoin: ScaledResolution scaledRes = new ScaledResolution(Minecraft.getMinecraft(), Minecraft.getMinecraft().displayWidth, Minecraft.getMinecraft().displayHeight); int width = scaledRes.getScaledWidth(); // taille de la fenetre horizontal int height = scaledRes.getScaledHeight();// taille de la fenetre vertical FontRenderer fr = this.mc.fontRenderer; // pas besoin d'expliquer ça quand meme :O Ensuite, on dis que si la faction n'est pas égal à "null" et que on affiche le texte toujours sur l’écran, et que on est sur on serveur et non pas en solo, alors on affiche un texte toujours actif pour afficher la faction. if (FactionEngine.getFaction() != null && displayStaticFaction && !this.mc.isIntegratedServerRunning()) { fr.drawStringWithShadow("Claim: " + FactionEngine.getFaction(), 2, 2, 16777215); } La c'est presque pareil, ce code est celui du tuto de Wytrem (voir ici) si le message a affiché n'est pas égal à "null", on affiche. if (this.toDisplay != null) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); int alpha = this.toDisplayTimer < 10 ? ((int) (this.toDisplayTimer * 25)) : 255; int color = 0xffffff | ((alpha & 255) << 24); this.mc.fontRenderer.drawString(this.toDisplay, (width - this.mc.fontRenderer.getStringWidth(this.toDisplay)) / 2, height / 2 - 50, color); } Et enfin les deux dernières fonctions du tuto "Afficher un Message Central": public void updateTick() { super.updateTick(); if (this.toDisplayTimer > 0) // tant que le timer est plus grand que 0 { this.toDisplayTimer--; // on le reduit de 1 if (this.toDisplayTimer == 0) // si le timer est égal a 0 { this.toDisplay = null; // on mets le texte à afficher sur null pour arreter l'affichage. } } } public static void showCenterMessage(String formattedText) { toDisplay = formattedText; toDisplayTimer = 3 * 20; // (20 ticks = 1 sec) (3 * 20 = 3 secondes.) } updateTick: pour mettre a jour tout les 20 ticks (20 ticks = 1 seconde) Voir le tuto de Wytrem pour comprendre au maximum ces fonctions la. Rendu Final: Excusez moi une fois de plus pour la rédaction ou bien si il y a des fautes ou c'est c'est mal expliqué. Cordialement, Trxyy. (merci de me citer si vous utilisez mon code, ca serait aimable de votre part.) Bon Jeux !
  4. [1.7.X] Créer un KeyBinding !

    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 !
  5. Tout sur les blocs

    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
  6. Faire des serveur skin + cape sous forge

    Titre :Faire des serveur skin + cape sous forge Version : 1.7.2 Tutoriel :Alors salut tout le monde, le tutoriel portera sur comment faire des serveur skin plus cape sous forge, j'ai déjà tenté de faire mais cela a pas été un sucés pour moi. Voila se que j'ai fait, cela marche juste sur éclipse mais pas sur minecraft : Demande par :mathmatboy
  7. [Astuce] Changer le curseur de la souris

    Changer le curseur de la souris 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]- Nous allons voir comment changer le curseur de la souris -[PRES-REQUIS]- 1]La base d'un mod Forge ou un MCP Vanilla -[sOMMAIRE]- 1]La fonction 2] Appeler la fonction 3]Pourquoi une rotation ? 4] La classe complète et le rendu final 1]La fonction 1.1] Creation La première chose à faire est d'ajouter une fonction qui s'occupera de contenir notre code private void setCursor(String modid, String path, int width, int height, double rotation) { } Hormis le premier, tous les paramètres concerne l'image à appliquer, les nom sembles explicites, je ne pense pas qu'il soit utile de détailler. 1.2]Remplissage Commencez par instancier un transform que vous utiliserez plus tard pour la rotation de l'image. AffineTransform transform = new AffineTransform(); Comme à chaque fois qu'on accède à un fichier ou qu'on affiche quelque chose, il y a des chances que ça plante, ajoutez donc un bloc try-catch pour éviter que le jeu crash si cela arrive. try{ } catch (LWJGLException e) { // Catch les exceptions liées aux changements appliqués à l'image e.printStackTrace(); } catch (IOException e) { // Catch les exceptions liées à la lecture du fichier e.printStackTrace(); } A l'intérieur de celui-ci, récupérez l'image est stockez la dans une variable BufferedImage cursorTexture = ImageIO.read(getClass().getResource("/assets/" + modid + path)); Ajoutez également un traitement pour changer les sens de l'image et préparer l'affichage de la texture //Change la valeur de rotation du transform que vous appliquerez plus tard, le paramètre 'rotation' est un radian. transform.rotate(rotation, cursorTexture.getWidth()/2, cursorTexture.getHeight()/2); AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR); cursorTexture = op.filter(cursorTexture, null); //Creation d'un tableau d'int de la taille de la texture, il est utilisé pour créer un buffer. int[] rgbs = new int[cursorTexture.getWidth() * cursorTexture.getHeight()]; //Creation d'un buffer, il sera utilisé plus tard lors de la création du curseur. IntBuffer buffer = IntBuffer.wrap(cursorTexture.getRGB(0, 0, cursorTexture.getWidth(), cursorTexture.getHeight(), rgbs, 0, cursorTexture.getHeight())); //Permet la lecture et l'application du curseur. buffer.rewind(); Finissez par créer le curseur et changer celui par défaut //Enregistre les informations créées précédemment dans une variable de type 'Cursor' Cursor newCursor = new Cursor(cursorWidth, cursorHeight, xHotspot, yHotspot, 1, buffer, null); //32x32 semble correct //xHotspot doit être compris entre 0 (inclus) et la largeur du curseur (exclue), par défaut : 1 //yHotspot doit être compris entre 0 (inclus) et la hauteur du curseur (exclue), par défaut : cursorTexture.getHeight() - 1 //Change le curseur par défaut. Mouse.setNativeCursor(newCursor); 2]Appeler la fonction Dans l'exemple qui va suivre j'ai fait en sorte d'afficher l'épée en diamants comme nouveau curseur (en loccurrence la texture est en 16x) Vous pouvez appeler la fonction dans la fonction init() du ClientProxy si vous utilisez Forge ou après l'init du Display de la fonction startGame dans la classe principale de Minecraft. this.setCursor("minecraft", "/textures/items/diamond_sword.png", 16, 16, 3.1415926536); 3] Mais pourquoi une rotation ? 1 est la texture de base de l'itemmais le curseur devrait être dans le sens de 2, or, si on applique l'image sans modification, le curseur ressemblera à 3 Il faut donc ajouter un angle de180° converti enradian, soit3.1415926536, je vous conseil le siterapidtables.com(en anglais)pour la convertion. Libre à vous de jouer avec les point de clic X/Y (x et yHotspot) ainsi que la rotation de la texture pour avoir un curseur dans le sens que vous voulez ! 4]La classe complète et le rendu en jeu 4.1] La classe import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.io.IOException; import java.nio.IntBuffer; import javax.imageio.ImageIO; import org.lwjgl.LWJGLException; import org.lwjgl.input.Cursor; import org.lwjgl.input.Mouse; import fr.zeamateis.tuto_ic.common.proxy.CommonProxy; public class ClientProxy extends CommonProxy { @Override public void init() { registerRender(); } private void registerRender() { this.setCursor("minecraft", "/textures/items/diamond_sword.png", 16, 16, 3.1415926536); } private void setCursor(String modid, String path, int width, int height, double rotation) { AffineTransform transform = new AffineTransform(); try { BufferedImage cursorTexture = ImageIO.read(getClass().getResource("/assets/" + modid + path)); transform.rotate(rotation, cursorTexture.getWidth()/2, cursorTexture.getHeight()/2); AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR); cursorTexture = op.filter(cursorTexture, null); int[] rgbs = new int[cursorTexture.getWidth() * cursorTexture.getHeight()]; IntBuffer buffer = IntBuffer.wrap(cursorTexture.getRGB(0, 0, cursorTexture.getWidth(), cursorTexture.getHeight(), rgbs, 0, cursorTexture.getHeight())); buffer.rewind(); Cursor newCursor = new Cursor(width, height, 1, cursorTexture.getHeight() - 1, 1, buffer, null); Mouse.setNativeCursor(newCursor); } catch (LWJGLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } 4.2]Le rendu Tutoriel inspiré de MinecraftForgeFrance et réédité par Dren
  8. Refonte graphique du post dans les jours à venir. Bonjour , Présentation ( brève ) : Je me présente je m'appelle Théo je code en java depuis environ 1 an, enfin je connais assez le langage pour développer sur minecraft sans complexe. Je code en vanilla principalement mais je peux faire des exceptions c'est bien vous le client non? vous êtes roi comme on le dit si bien. Info en plus je peux héberger vos fichiers de launcher si vous ne savez pas ou les mettre cela ne me pose aucun soucis. (Machine avec 250Gbps garantis.) Je peux aussi vous venir en aide pour l'hébergement de votre serveur , je peux configurer votre machine dédiée / vps. Mes compétences : Réalisations que je pourrais faire (et j'en passe) : - Launcher personnalisable + bootstrap (toute version) *(1) *(2) - Modifications des GUIs (GuiMainMenu GuiInGameMenu GuiInGame de nouveaux guis?) - Ajout d'un serveur de skin/capes (vous fournissez l'hébergement web je ne fournis pas le script PHP) - Ajout de minerais génération - Ajout de nouveaux blocs / items simples ou complexes - ArmorHUD Potion Effect - ... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Je peux faire un peu tous les types de plugins. Galeries de mes créations : Design très simple. Je ne suis pas graphiste encore une fois. Un launcher de test, je l'ai fait uniquement pour que vous aillez un aperçu de ce que je peux faire. Bien sur je peux faire beaucoup mieux si vous me donner le modèle. Me contacter : Pour me joindre vous pouvez utiliser les moyens suivants : Je ne donne pas mon skype sur un sujet public, merci de me MP pour l'obtenir. *(1) : Je n'utilise pas leslibrairies de shark. *(2) : Je ne fait pas de design vous fournissez les images. TOUS MES SERVICES SONT PAYANTS
  9. Salut à tous, je vous présente mon premier plugin :NeedfulCraft ! Il ajoute pas mal de crafts qui peuvent simplifier la survie en multijoueur. Il est bien entendu possible de choisir les crafts à activer. Le plugin est encore en développement, donc ne vous étonnez pas s'il n'y a pas beaucoup d'ajouts. Je suis ouvert à vos propositions alors n'hésitez pas ! Crafts actuels pour l'atelier: Crafts acutels pour le four: Crafts un peu particuliers (à la Thaumcraft): La baguette magique: Fichiers de configuration: Il y a 4 fichiers de configuration (dans le dossier/plugins/Needful/Craft/): config.yml: Vous pouvez désactiver tout le plugin ou alors une des 3 catégories ci-dessous (et même deux, en fait) ! crafts.yml: Vous pouvez désactiver un craft en particulier ! fusion.yml: Vous pouvez désactiver une recette au four en particulier ! echange.yml: Vous pouvez désactiver les crafts à la Thaumcraft ! Si vous changez la version du plugin, supprimez les fichiers de config ! Téléchargement: NeedfulCraft v1.2.4 :http://www.mediafire.com/download/q7uyt0cb4tp3bz8/NeedfulCraft.jar Changelog: 1.2.4 1.2.3 En espérant vous avoir aidé, brunypoloXD.
×