Navigation

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    1. Home
    2. Pchom
    • Profile
    • Following 0
    • Followers 1
    • Topics 45
    • Posts 482
    • Best 20
    • Groups 0

    Pchom

    @Pchom

    53
    Reputation
    1581
    Profile views
    482
    Posts
    1
    Followers
    0
    Following
    Joined Last Online

    Pchom Follow

    Best posts made by Pchom

    • Créer une GUI simple

      Sommaire

      • Introduction
      • Pré-requis
      • Code
        • TutorialGui
        • Le Keybind
      • Résultat
      • Crédits

      Introduction

      Vous avez toujours rêvé de faire un mod pour votre petit(e) ami(e) en affichant un joli cœur en plein milieu de l’écran sur un fond noir transparent ? Que c’est mignon !
      Eh bien aujourd’hui, je vais vous apprendre à le faire !

      Pré-requis

      • Ajouter des touches personnalisées (nous allons dans ce tutoriel ouvrir le GUI à l’appui d’une touche)

      Code

      TutorialGui :

      Créez une classe héritant de GuiScreen (net.minecraft.client.gui.GuiScreen), la mienne se nommera TutorialGui.
      Il y a trois méthodes de GuiScreen à connaitre : initGui(), drawScreen(int mouseX, int mouseY, float partialTicks) et updateScreen().

      La première est appelée lors de l’initialisation de la GUI, ce qui est assez évident. Nous ne l’utiliserons pas dans ce tutoriel car nous n’en aurons pas besoin, mais ne l’oubliez pas.
      La seconde est appelée à chaque frame, c’est dans celle-ci que vous mettrez tout ce qui doit être affiché à l’écran. Nous en aurons besoin dans ce tutoriel.
      La dernière est appelée à chaque tick. Nous n’en aurons pas besoin.

      Nous allons donc nous intéresser à la méthode drawScreen, c’est dans celle-ci que nous allons afficher notre image.
      Il est important de bien comprendre les trois arguments pour pouvoir utiliser au mieux la méthode.

      • mouseX est la position de la souris sur l’axe horizontal.
      • mouseY est la position de la souris sur l’axe vertical.
      • partialTicks vous permet de savoir à quel moment du tick vous êtes. Comme vous devez le savoir, il y a 20 ticks par seconde, mais le jeu peut tourner à 60, 120, 1000 fps, ce qui fait que la méthode drawScreen sera peut-être appelée plusieurs fois par tick. Pour avoir une animation fluide, il faut donc savoir à quel moment du tick actuel on est, et partialTicks nous donne cette information.

      On va faire quatre appels dans cette méthode.
      Le premier va être drawDefaultBackground() qui va, comme son nom l’indique, afficher le fond par défaut (un gris foncé transparent). Si vous voulez afficher une couleur différente, vous devrez utiliser this.drawGradientRect(0, 0, this.width, this.height, int startColor, int endColor); en mettant des nombres au format 0xAARRGGBB où AA est la valeur alpha, RR la valeur rouge, GG la valeur verte et BB la valeur bleue.

      Vous allez ensuite devoir créer un ResourceLocation(String domaine, String chemin). Par exemple, avoir comme domaine minecraft et comme chemin textures/items/diamond_pickaxe.png ira chercher dans le dossier resources/assets/minecraft/textures/items/diamond_pickaxe.png. Vous devez ensuite bind cette texture à l’aide de la méthode bindTexture(ResourceLocation) que vous pourrez appeler grâce à la méthode getTextureManager() de Minecraft (GuiScreen possède un attribut mc par défaut).

      Vous devez enfin appeler drawModalRectWithCustomSizedTexture(int x, int y, float u, float v, int width, int height, float textureWidth, float textureHeight) pour afficher votre image sur votre GUI.

      • x, y sont les coordonnées en x et en y sur l’écran de la texture que vous souhaitez afficher.
      • u, v sont les coordonnées de x et en y sur la texture.
      • width et height sont les dimensions de la partie de la texture qui sera affichée.
      • textureWidth et textureHeight sont les dimensions de la texture.

      Pour vous aider à comprendre, voici une explication graphique :

      Attention, si width est supérieur à textureWidth ou que height est supérieur à textureHeight, la texture sera répétée !

      Pour terminer, n’oubliez pas l’appel à super.drawScreen(mouseX, mouseY, partialTicks) !
      Nous en avons terminé avec notre GUI !

      Le Keybind :

      Dans la méthode qui gère l’appui sur la touche que vous voulez attribuer à votre GUI, vous devrez simplement l’afficher. Pour ce faire, vous devez en créer une nouvelle (avec new) et la passer à la méthode getDisplayScreen() de Minecraft.

      Résultat

      Si vous vous êtes bien débrouillé, vous aurez un résultat similaire :

      Crédits

      Rédaction :

      • Pchom

      Correction :

      • DiabolicaTrix

      Autres remerciements :

      • Merci à BrokenSwing pour son aide sur la compréhension de certains arguments :x
      • Merci à robin4002 pour ses corrections ^^


      Ce tutoriel de Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International

      Retour vers le sommaire des tutoriels

      posted in Les interfaces (GUI) et les container
      Pchom
      Pchom
    • BOUM BOUM

      Coucou tout le monde !
      Pour continuer dans les sujets de détente inutile, voici celui dans lequel vous n’allez **VRAIMENT PAS **réfléchir.

      C’est simple, on va jouer à BOUM BOUM.
      Mais c’est quoi BOUM BOUM ?
      Juste un simple compte à rebours.

      Il y a un but : décompter à partir de 1000, et descendre 1 par 1.

      Seulement, il y a une règle :
      Si jamais une personne se trompe dans le nombre (dans le cas de deux personnes qui postent en même temps, par exemple), on augmente le compte à rebours de 15.
      Un exemple, nous sommes à 745, nous avons AymericRed et Tituya qui disent tous deux 744, la prochaine personne devra augmenter de 15, donc on passera à 759.

      Et si vous trichez, je serais méchant et je vous punirais 😄
      Allez savoir comment…

      Enfin bref, amusez-vous bien !
      1000

      posted in Le salon libre
      Pchom
      Pchom
    • RE: Présentation de Fine33

      Bienvenue !
      C’est vrai que si tu cherches des personnes sympas, tu es au bon endroit !
      Mais pour ce qui est de t’améliorer en modding… c’est pas super les tutos (okjesors). Non sérieusement ils sont très bien 😉

      posted in Présentations
      Pchom
      Pchom
    • RE: Sevenno's Addons [WIP] (anciennement "Genetical modifier")

      J’espère que tu le développeras rapidement 😉 tu as de très bonnes idées et j’ai hâte de savoir à quoi il va ressembler 😛

      posted in Mods en developpement
      Pchom
      Pchom
    • RE: [Recrutement] Projet World of Origins

      De plus, tu dis que ton équipe n’a qu’entre 15 et 17 ans… arrêtez-moi si je me trompe, mais, pour gagner de l’argent, ne devons-nous pas avoir plus de 16 ans ? (http://www.legifrance.gouv.fr/affichCode.do;jsessionid=38065166D1E23BC394B75C084C53CAC5.tpdjo13v_3?idArticle=LEGIARTI000024422145&idSectionTA=LEGISCTA000006189718&cidTexte=LEGITEXT000006072050&dateTexte=20120824) (15 ans dans le cas expliqué dans le lien donné).
      De plus, si je ne me trompe pas, tu dois déclarer des impôts pour tout revenu… es-tu conscient de cela ?
      Il est bien évidemment possible de travailler au noir, mais c’est une chose illégale, et je ne te conseille en aucun cas de le faire, car tu risques d’avoir de gros problèmes.

      Pour le reste, mes camarades (de classe :D) ont tout dit.
      Blackout, il n’était peut-être pas au courant, donc ne lui en veut pas trop hein x)

      posted in Recrutement
      Pchom
      Pchom
    • RE: [Recrutement] Projet World of Origins

      @‘Sioxox’:

      Je me suis renseigner au niveau des lois et du Copyright de Mojang.

      Je m’adresse d’abord à Superloup10.

      @‘Superloup10’:

      Les mods sont, par définition, illégales au yeux de cet article, hors d’après les conditions d’utilisation de Minecraft que tu t’ai engagé à respecter @Mojang:

      If you make any content available on or through our Game, you must give us permission to use, copy, modify and adapt that content. This permission must be irrevocable, and you must also let us permit other people to use, copy, modify and adapt your content. If you don‘t want to give us this permission, do not make content available on or through our Game. Please think carefully before you make any content available, because it will be made public and might even be used by other people in a way you don‘t like.

      (cf:Minecraft)

      J’ai vérifié le contrat de Mojang et tant que nous laissons au lancement du jeu le logo “Mojang” et le Copyright sur le menu principal du jeu, nous avons tous les droits de modder/modifier le jeu en question. (Moi aussi je n’aime pas les personnes qui parlent de choses dont ils n’y connaissent rien).

      Oui, mais pas le droit de les rendre payants.
      Preuve :
      @‘Mojang’:

      Any tools you write for the Game from scratch belong to you. . Modifications to the Game (“Mods”) (including pre-run Mods and in-memory Mods) and plugins for the Game also belong to you and you can do whatever you want with them, as long as you don‘t sell them for money / try to make money from them. We have the final say on what constitutes a tool/mod/plugin and what doesn‘t.

      cf: Minecraft

      @‘Sioxox’:

      Maintenant, je vais parler des lois.

      La loi stipule qu’une personne de moins de 16 ans peut être payée à condition que se soit un titulaire (Tuteur légal) qui signe le contrat (Bien sur le mineur d’âge aussi) et que l’argent soit garder par ces derniers jusqu’au jour de ses 16 ans ou plus (Si le titulaire ne donne pas la permission). Ou l’argent peut être donné directement au mineur d’âge si un titulaire donne son autorisation.

      Puisque l’argent sera déclaré, nous ne travaillons pas au “black” mais bien légalement tout en étant mineur d’âge.

      En fait, il est possible de travailler avant 16 ans, mais pas en temps que travailleur à temps plein. Il est donc possible de se trouver un petit boulot dès 14 ans, mais ce boulot a des restrictions:

      • de moment (ne peut avoir lieu en un autre moment de l’année que les vacances scolaires)
      • de durée (ne peut excéder la moitié de la durée de ces vacances scolaires)
      • d’horaire (pas plus de 35h par semaine ni 7h par jour)
      • de contrainte (le boulot ne doit pas provoquer de fatigue anormale, comme pour les travaux d’usine à la chaîne, l’exposition à des intempéries ou le transport de charges lourdes)
        Par ailleurs, afin de protéger la jeunesse, l’étudiant ne peut travailler là où il est possible de consommer des boissons sur place.
        Source: Service-public.fr

      cf: Tom’s Guide et service-public.fr

      @‘Sioxox’:

      Donc, soyez le moins kikou possible,
      Codialement.

      La personne effectuant du flood est considérée comme kikoo, encore plus lorsque c’est un flood de réputation qui en plus n’est pas justifié.
      Donc avant de nous traiter de kikoos, apprends à nous connaître et remets-toi en question.

      Pour le nom TeamOrigins, je n’en ai trouvé que sur CoD, et donc je ne peut dire si l’utilisation de votre nom est légale ou pas, mais le fait qu’il y ait déjà Origin, Origins et d’autres encore.

      Cordialement.

      posted in Recrutement
      Pchom
      Pchom
    • RE: Bonjour, Au-revoir :p

      Je me permets d’intervenir un peu tard j’ai l’impression, mais c’est chose nécessaire.
      À la base le sujet était que sevenno n’aurait pas de connexion et qu’il venait nous dire au revoir.

      Ok, on peut troll, mais je pense que dans ce cas c’est un peu abusé.
      Je m’explique (pas trop longtemps parce que j’ai du mal à écrire je sais pas pourquoi xD) :
      sevenno veut juste nous dire au revoir, il n’y a rien de mal, et le fait de troller non plus, mais vous pourriez dire au revoir et troller en même temps, j’trouve que c’est abusé d’uniquement troller, surtout quand on pense que le staff est censé donner l’exemple. Maintenant pour ce qui est de l’orthographe, il y a dyslexie et dyslexie, je ne reviendrais pas dessus, je ne connais rien de sa vie mais je reste tout de même du même avis que ce que je t’ai dit en MP sevenno. Tu peux faire des fautes et je l’accepte, je ne te jugerai pas dessus, mais des fois c’est vrai qu’on peut avoir des doutes sur “le fais-tu exprès ?”. Pour ma part je ne demande pas de réponse, mais je m’adresse aux membres, même si c’est vrai que nos yeux saignent, essayez de l’aider plutôt que de tout le temps l’enfoncer, je trouve ça limite de l’abus.
      Après pour ta réaction sevenno, je pense que tu n’as pas compris la blague, parler de harcèlement pour ça est exagéré, mais je crois que je comprends ce que tu veux dire. Si j’ai bien compris, en fait tu en as marre qu’on te trolle trop souvent et qu’on te critique sur ton orthographe souvent ? Si c’est le cas c’est pas réellement du harcèlement mais j’avoue qu’on te le répète beaucoup.

      Diangle, ton dernier message était inutile et même en temps que troll je trouve ça abusé. Après ce n’est que mon humble avis.

      Pour résumer tout ça : sevenno est un membre très gentil et je pense que vous abusez un peu des fois. Après, je sais que je risque de me faire remballer, mais je tiens à préciser que je ne défends ni sevenno ni le staff, je suis neutre, sevenno a abusé avec sa réaction, le staff aussi en trollant. Point final.

      Cordialement,
      Thomas.

      posted in Le salon libre
      Pchom
      Pchom
    • RE: Le retour du Pchom

      C’est ça oui eheh :3

      posted in Présentations
      Pchom
      Pchom
    • RE: Problème json

      En fait, qu’est-ce qui ne fonctionne pas ? Ça sera déjà plus simple.

      Le bloc s’affiche en jeu mais pas la texture, ou est-ce que ce n’est pas carrément le bloc qui n’existe pas ?
      La texture dans l’inventaire, ou la texture lorsqu’on pose les blocs, ou les deux ?

      posted in 1.11.x
      Pchom
      Pchom
    • RE: Créer un item basique

      Pas de problème, content d’avoir pu t’aider ^^
      Bonne continuation dans le modding, et n’hésite pas de participer à la vie active du forum 😄

      posted in Les items
      Pchom
      Pchom

    Latest posts made by Pchom

    • RE: Difficultés à modifier FoodStats de PlayerEntity

      @robin4002 Si, c’est 20x plus simple ^^’
      J’avais mal fait ma réflexion donc j’avais abandonné cette idée, mais en le refaisant j’ai réussi à le faire marcher, et ça réduit les risques de casser quelque chose involontairement

      posted in 1.16.x
      Pchom
      Pchom
    • RE: Difficultés à modifier FoodStats de PlayerEntity

      Du coup, j’ai fini par trouver entre temps.

      Il manquait de quoi supprimer le “nouveau” joueur du monde, et de quoi faire des copies complètes entre les joueurs (pour être certain d’avoir toutes les infos). Du coup j’ai refait une petite fonction copy qui reprend en gros le code de PlayerList et tout a l’air de fonctionner sans crash depuis

          @SubscribeEvent
          public void onEntityJoinWorld(EntityJoinWorldEvent event) {
              if (event.getEntity() instanceof ServerPlayerEntity){
                  ServerPlayerEntity player = (ServerPlayerEntity) event.getEntity();
                  FoodStats oldStats = player.getFoodStats();
                  if (!(oldStats instanceof UncappedFoodStats)) {
                      UncappedFoodStats newStats = new UncappedFoodStats();
                      CompoundNBT foodnbt = new CompoundNBT();
                      oldStats.write(foodnbt);
                      newStats.read(foodnbt);
      
                      BetterPlayerEntity playerEntity = new BetterPlayerEntity(player.server, player.getServerWorld(), player.getGameProfile());
                      copy(player, playerEntity);
                      playerEntity.setFoodStats(newStats);
                      player.getServerWorld().removePlayer(playerEntity, true);
                      copy(playerEntity, player);
      
                      playerEntity.remove(false);
                  }
              }
          }
      
          private void copy(ServerPlayerEntity source, ServerPlayerEntity dest) {
              dest.connection = source.connection;
              dest.copyFrom(source, true);
              dest.setEntityId(source.getEntityId());
              dest.setPrimaryHand(source.getPrimaryHand());
      
              for(String s : source.getTags()) {
                  dest.addTag(s);
              }
      
              dest.addSelfToInternalCraftingInventory();
          }
      
      posted in 1.16.x
      Pchom
      Pchom
    • Difficultés à modifier FoodStats de PlayerEntity

      Hello !

      Je suis un peu rouillé en modding, donc j’ai probablement fait des horreurs, mais j’essaie de refaire le mod Oversaturation (https://github.com/truenachtara/Oversaturation) en 1.16.x, pour m’amuser un peu plus dans ma survie solo… et c’est plus compliqué que prévu.

      L’idée, c’est donc de remplacer la méthode addStats de la classe FoodStats pour retirer la limite de 20.
      Malheureusement, l’attribut foodStats de PlayerEntity n’est plus public et n’a pas de setter.

      J’ai donc essayé de créer une classe héritant de ServerPlayerEntity qui rajoute uniquement ce setter (moins je fais de modifications, mieux je me porte). Le contenu est le suivant :

      public class BetterPlayerEntity extends ServerPlayerEntity {
      
          public BetterPlayerEntity(MinecraftServer server, ServerWorld worldIn, GameProfile profile) {
              super(server, worldIn, profile, new PlayerInteractionManager(worldIn));
          }
      
          public void setFoodStats(FoodStats stats) {
              this.foodStats = stats;
          }
      }
      

      Le new PlayerInteractionManager me permet de ne pas avoir tout un tas d’erreurs lors d’interactions avec le monde par la suite. Le code est inspiré de ce qui se trouve dans PlayerList#func_232644_a_, qui semble être la méthode utilisée pour le respawn d’un joueur.

      Jusqu’ici, tout va bien, mais il faut maintenant que je remplace le joueur par mon nouveau joueur. J’utilise donc l’event EntityJoinWorldEvent pour modifier.

          @SubscribeEvent
          public void onEntityJoinWorld(EntityJoinWorldEvent event) {
              if (event.getEntity() instanceof ServerPlayerEntity){
                  ServerPlayerEntity player = (ServerPlayerEntity) event.getEntity();
                  FoodStats oldStats = player.getFoodStats();
                  if (!(oldStats instanceof UncappedFoodStats)) {
                      UncappedFoodStats newStats = new UncappedFoodStats();
                      CompoundNBT foodnbt = new CompoundNBT();
                      oldStats.write(foodnbt);
                      newStats.read(foodnbt);
      
                      BetterPlayerEntity playerEntity = new BetterPlayerEntity(player.server, player.getServerWorld(), player.getGameProfile());
                      playerEntity.copyFrom(player, true);
                      playerEntity.setFoodStats(newStats);
                      player.copyFrom(playerEntity, true);
      
                      playerEntity.remove(false);
                  }
              }
          }
      

      UncappedFoodStats est une classe héritant de FoodStats et modifiant uniquement la méthode addStats.
      Le problème de cette méthode est que je dois créer une nouvelle instance de BetterPlayerEntity, qui va donc appeler les constructeurs de ServerPlayerEntity, PlayerEntity, LivingEntity, …
      Je me retrouve donc avec deux instances du même joueur dans le monde, et je n’en veux qu’une seule.
      Étant donné que la Map de PlayerList n’est pas accessible (map entre UUID et ServerPlayerEntity), réutiliser le joueur déjà créé à l’origine pour simplement lui copier mon joueur custom me semble être le plus simple. Le code fonctionne, mais de manière très temporaire (de moins d’une seconde à une vingtaine de secondes au plus, avant le crash).

      Le problème vient sûrement du fait que deux entités correspondant au joueur existent, car j’ai un crash lors d’un tick (une NPE).

      Voici les logs :

      net.minecraft.crash.ReportedException: Ticking memory connection
      	at net.minecraft.network.NetworkSystem.tick(NetworkSystem.java:154) ~[forge:?] {re:classloading}
      	at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:898) ~[forge:?] {re:classloading,pl:accesstransformer:B}
      	at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:820) ~[forge:?] {re:classloading,pl:accesstransformer:B}
      	at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:84) ~[forge:?] {re:classloading,pl:runtimedistcleaner:A}
      	at net.minecraft.server.MinecraftServer.func_240802_v_(MinecraftServer.java:663) ~[forge:?] {re:classloading,pl:accesstransformer:B}
      	at net.minecraft.server.MinecraftServer.lambda$startServer$0(MinecraftServer.java:233) ~[forge:?] {re:classloading,pl:accesstransformer:B}
      	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_241] {}
      Caused by: java.lang.NullPointerException
      	at net.minecraft.item.crafting.ServerRecipeBook.sendPacket(ServerRecipeBook.java:60) ~[forge:?] {re:classloading}
      	at net.minecraft.item.crafting.ServerRecipeBook.add(ServerRecipeBook.java:38) ~[forge:?] {re:classloading}
      	at net.minecraft.entity.player.ServerPlayerEntity.unlockRecipes(ServerPlayerEntity.java:1076) ~[forge:?] {re:classloading,pl:accesstransformer:B}
      	at net.minecraft.entity.player.ServerPlayerEntity.unlockRecipes(ServerPlayerEntity.java:1086) ~[forge:?] {re:classloading,pl:accesstransformer:B}
      	at net.minecraft.advancements.AdvancementRewards.apply(AdvancementRewards.java:65) ~[forge:?] {re:classloading}
      	at net.minecraft.advancements.PlayerAdvancements.grantCriterion(PlayerAdvancements.java:209) ~[forge:?] {re:classloading}
      	at net.minecraft.advancements.ICriterionTrigger$Listener.grantCriterion(ICriterionTrigger.java:34) ~[forge:?] {re:classloading}
      	at net.minecraft.advancements.criterion.AbstractCriterionTrigger.triggerListeners(AbstractCriterionTrigger.java:68) ~[forge:?] {re:classloading}
      	at net.minecraft.advancements.criterion.InventoryChangeTrigger.trigger(InventoryChangeTrigger.java:56) ~[forge:?] {re:classloading}
      	at net.minecraft.advancements.criterion.InventoryChangeTrigger.test(InventoryChangeTrigger.java:52) ~[forge:?] {re:classloading}
      	at net.minecraft.entity.player.ServerPlayerEntity.sendSlotContents(ServerPlayerEntity.java:988) ~[forge:?] {re:classloading,pl:accesstransformer:B}
      	at net.minecraft.inventory.container.Container.detectAndSendChanges(Container.java:141) ~[forge:?] {re:classloading}
      	at net.minecraft.inventory.container.Container.addListener(Container.java:102) ~[forge:?] {re:classloading}
      	at net.minecraft.entity.player.ServerPlayerEntity.addSelfToInternalCraftingInventory(ServerPlayerEntity.java:341) ~[forge:?] {re:classloading,pl:accesstransformer:B}
      	at net.minecraft.server.management.PlayerList.initializeConnectionToPlayer(PlayerList.java:231) ~[forge:?] {re:classloading}
      	at net.minecraft.network.login.ServerLoginNetHandler.tryAcceptPlayer(ServerLoginNetHandler.java:122) ~[forge:?] {re:classloading}
      	at net.minecraft.network.login.ServerLoginNetHandler.tick(ServerLoginNetHandler.java:66) ~[forge:?] {re:classloading}
      	at net.minecraft.network.NetworkManager.tick(NetworkManager.java:244) ~[forge:?] {re:classloading}
      	at net.minecraft.network.NetworkSystem.tick(NetworkSystem.java:151) ~[forge:?] {re:classloading}
      	... 6 more
      

      J’ai bien songé à utiliser la méthode de respawn de PlayerList pour que la map prenne mon instance de joueur, mais il faut toujours que je supprime proprement l’autre joueur, et c’est ce qui me pose problème.
      Du coup je suis un peu coincé pour la suite, je ne vois pas trop ce que je peux changer 😞

      Merci d’avance pour votre aide !

      posted in 1.16.x
      Pchom
      Pchom
    • RE: Aidez-moi pour mon serveur modée avec des plugins

      Hello,

      Je dis peut-être une connerie, mais t’es pas censé avoir le minecraft_server.jar dans le dossier aussi ? Ou peut-être que ça tente de le télécharger mais que ça n’y arrive pas.

      Ce que tu peux essayer de faire (de ce que j’ai vu en cherchant l’erreur sur Google), c’est justement d’aller sur le site de Minecraft, télécharger le .jar du serveur associé à la version de Minecraft que tu utilises et de mettre le minecraft_server.jar avec tes deux autres .jar

      posted in Support pour les utilisateurs
      Pchom
      Pchom
    • Créer une GUI simple

      Sommaire

      • Introduction
      • Pré-requis
      • Code
        • TutorialGui
        • Le Keybind
      • Résultat
      • Crédits

      Introduction

      Vous avez toujours rêvé de faire un mod pour votre petit(e) ami(e) en affichant un joli cœur en plein milieu de l’écran sur un fond noir transparent ? Que c’est mignon !
      Eh bien aujourd’hui, je vais vous apprendre à le faire !

      Pré-requis

      • Ajouter des touches personnalisées (nous allons dans ce tutoriel ouvrir le GUI à l’appui d’une touche)

      Code

      TutorialGui :

      Créez une classe héritant de GuiScreen (net.minecraft.client.gui.GuiScreen), la mienne se nommera TutorialGui.
      Il y a trois méthodes de GuiScreen à connaitre : initGui(), drawScreen(int mouseX, int mouseY, float partialTicks) et updateScreen().

      La première est appelée lors de l’initialisation de la GUI, ce qui est assez évident. Nous ne l’utiliserons pas dans ce tutoriel car nous n’en aurons pas besoin, mais ne l’oubliez pas.
      La seconde est appelée à chaque frame, c’est dans celle-ci que vous mettrez tout ce qui doit être affiché à l’écran. Nous en aurons besoin dans ce tutoriel.
      La dernière est appelée à chaque tick. Nous n’en aurons pas besoin.

      Nous allons donc nous intéresser à la méthode drawScreen, c’est dans celle-ci que nous allons afficher notre image.
      Il est important de bien comprendre les trois arguments pour pouvoir utiliser au mieux la méthode.

      • mouseX est la position de la souris sur l’axe horizontal.
      • mouseY est la position de la souris sur l’axe vertical.
      • partialTicks vous permet de savoir à quel moment du tick vous êtes. Comme vous devez le savoir, il y a 20 ticks par seconde, mais le jeu peut tourner à 60, 120, 1000 fps, ce qui fait que la méthode drawScreen sera peut-être appelée plusieurs fois par tick. Pour avoir une animation fluide, il faut donc savoir à quel moment du tick actuel on est, et partialTicks nous donne cette information.

      On va faire quatre appels dans cette méthode.
      Le premier va être drawDefaultBackground() qui va, comme son nom l’indique, afficher le fond par défaut (un gris foncé transparent). Si vous voulez afficher une couleur différente, vous devrez utiliser this.drawGradientRect(0, 0, this.width, this.height, int startColor, int endColor); en mettant des nombres au format 0xAARRGGBB où AA est la valeur alpha, RR la valeur rouge, GG la valeur verte et BB la valeur bleue.

      Vous allez ensuite devoir créer un ResourceLocation(String domaine, String chemin). Par exemple, avoir comme domaine minecraft et comme chemin textures/items/diamond_pickaxe.png ira chercher dans le dossier resources/assets/minecraft/textures/items/diamond_pickaxe.png. Vous devez ensuite bind cette texture à l’aide de la méthode bindTexture(ResourceLocation) que vous pourrez appeler grâce à la méthode getTextureManager() de Minecraft (GuiScreen possède un attribut mc par défaut).

      Vous devez enfin appeler drawModalRectWithCustomSizedTexture(int x, int y, float u, float v, int width, int height, float textureWidth, float textureHeight) pour afficher votre image sur votre GUI.

      • x, y sont les coordonnées en x et en y sur l’écran de la texture que vous souhaitez afficher.
      • u, v sont les coordonnées de x et en y sur la texture.
      • width et height sont les dimensions de la partie de la texture qui sera affichée.
      • textureWidth et textureHeight sont les dimensions de la texture.

      Pour vous aider à comprendre, voici une explication graphique :

      Attention, si width est supérieur à textureWidth ou que height est supérieur à textureHeight, la texture sera répétée !

      Pour terminer, n’oubliez pas l’appel à super.drawScreen(mouseX, mouseY, partialTicks) !
      Nous en avons terminé avec notre GUI !

      Le Keybind :

      Dans la méthode qui gère l’appui sur la touche que vous voulez attribuer à votre GUI, vous devrez simplement l’afficher. Pour ce faire, vous devez en créer une nouvelle (avec new) et la passer à la méthode getDisplayScreen() de Minecraft.

      Résultat

      Si vous vous êtes bien débrouillé, vous aurez un résultat similaire :

      Crédits

      Rédaction :

      • Pchom

      Correction :

      • DiabolicaTrix

      Autres remerciements :

      • Merci à BrokenSwing pour son aide sur la compréhension de certains arguments :x
      • Merci à robin4002 pour ses corrections ^^


      Ce tutoriel de Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International

      Retour vers le sommaire des tutoriels

      posted in Les interfaces (GUI) et les container
      Pchom
      Pchom
    • RE: Le jeu de la présence

      14

      posted in Le salon libre
      Pchom
      Pchom
    • RE: Le jeu de la présence

      Non, on ne rigole pas ici.
      Pour la peine, je dis 10.

      posted in Le salon libre
      Pchom
      Pchom
    • RE: Cherche codeur

      Yop, j’ai besoin d’un architecte, merci de me mp.

      Non, plus sérieusement, je t’invite à lire ce post : https://www.minecraftforgefrance.fr/showthread.php?tid=4994
      Je me demande si tu n’as ne serait-ce qu’ouvert ce lien, étant donné qu’il est épinglé… 😛

      EDIT : Ah, je viens de lire le post. Le “je ne peux pas penser à tout” est justement le problème, tu es censé penser à tout 😛 ou du moins, censé penser à un minimum, mais pas ne rien écrire, hein .-. la première ligne de mon post est à peine moins exhaustive que ton sujet ^-^

      posted in Recrutement
      Pchom
      Pchom
    • RE: Dragonite 1.0.0

      Et dire que je croyais que pour aller sur un forum il fallait savoir lire…

      3. REDISTRIBUTION
      Ce MOD doit être distribué, mirroiré, ou lié d’une autre façon a l’AUTEUR. Tout mirroir du MOD doit être accompagné de permissions écrites de l’AUTEUR. TOUTES tentatives de se faire de l’argent avec ce MOD (vente , vente de versions modifiées, adfly, sharecash, etc.) sont STRICTEMENT INTERDITES, et l’AUTEUR peut porter plainte ou agir pour régler la situation.

      4. DERIVATIONS / MODIFICATIONS
      Ce MOD est distribué gratuitement, et toute décompilation a des fins privés ou éducatifs sont permises, avec un décompileur ou un éditeur Java. Toutes versions modifiées de ce MOD demandent des permissions écrites de l’AUTEUR et peuvent êtres sujettes a certaines conditions.

      5. Utilisation dans un modpack
      Ce MOD peut être utilisé dans un modpack (personnel ou pour un serveur) par l’UTILISATEUR ou un groupe de joueurs. La seul conditions est de citer l’AUTEUR autrement dit moi.

      C’est quand même clairement indiqué dans le premier post hein, en bien gros histoire que ça ne puisse pas être manqué.

      posted in Mods en developpement
      Pchom
      Pchom
    • RE: Bonjour de Jacky

      Bienvenue parmi nous ! 😄

      posted in Présentations
      Pchom
      Pchom
    Design by Woryk
    Contact / Mentions Légales / Faire un don

    MINECRAFT FORGE FRANCE © 2018

    Powered by NodeBB