• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Résolu [1.7.x] Crée de nouvelle valeurs (données) joueurs sauvegarder (exemple : mana)

    1.7.x
    1.7.x
    4
    47
    7154
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • BlackDrag00n
      BlackDrag00n dernière édition par robin4002

      Rebonjour a vous tous, je vous sollicite de nouveau, car je me pose une question existentielle dans minecraft LoL 😛

      Je souhaite dans cette exemple crée un niveau de mana lié aux joueurs (sachant que cela peut fonctionner en solo comme en multi).

      Mes questions sont comment crée une nouvelle variable de joueur qui contiendrais le niveau de mana d’un joueur (avec un niveau max) ?

      Comme sauvegarder c’est variable, pour que si le joueur se reconnecte il récupérer la dernière valeur enregistrer ?

      Voici des liens de recherche que j’ai trouver (Création d’une barre de mana [ENGLISH]) mais j’avoue ne rien comprendre … d’après ce que j’ai compris les joueurs d’un serveur fonctionne sur un système de propriétés, et il faudrait fait une extension de propriétés des joueurs comme ici :

      public ExtendedPlayer(EntityPlayer player)
      {
          this.player = player;
          // Start with max mana. Every player starts with the same amount.
          this.currentMana = this.maxMana = 50;
      }
      
      

      Mais je trouve le tuto que je vous ai fournit mal fait car il précise pas ou il fait ces modification dans les classes, ça pourrait être pas mal d’en refaire un détaillé et en français, mais je ne pense pas avoir les compétences encore pour le faire

      1 réponse Dernière réponse Répondre Citer 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

        Il y a déjà un tutoriel chez nous : http://www.minecraftforgefrance.fr/showthread.php?tid=905

        1 réponse Dernière réponse Répondre Citer 1
        • BlackDrag00n
          BlackDrag00n dernière édition par

          Effectivement je ne l’avais pas vu celui la désoler … je laisse le sujet en suspend au cas ou merci robin4002


          Dans le tuto on parle de crée un Identifiant, un constructeur et 2 méthodes, il faut les crées

          entre :

          public class ExtendedEntityPropTuto implements IExtendedEntityProperties {
          

          et :

          
          @Override
          public void saveNBTData(NBTTagCompound compound) {
          // TODO Auto-generated method stub
          
          }
          

          c’est bien ça ?

          1 réponse Dernière réponse Répondre Citer 0
          • Superloup10
            Superloup10 Modérateurs dernière édition par

            Tu peux les mettre où tu veux dans la classe.

            Si vous souhaitez me faire un don, il vous suffit de cliquer sur le bouton situé en dessous.

            Je suis un membre apprécié et joueur, j'ai déjà obtenu 17 points de réputation.

            1 réponse Dernière réponse Répondre Citer 0
            • BlackDrag00n
              BlackDrag00n dernière édition par

              D’accord merci pour cette indication, sinon pour continuer le tuto j’ai télécharger FFMT API et je l’est mit dans le dossier mod pour l’execution du jeu, j’ai aussi suivi ceci :

              1- Cliquez sur le bouton “download zip” ou faite un fork du projet et clonez-le en local.
              2- Dans eclipse, faite un clic droit sur le projet Minecraft. Cliquez sur “new folder”.
              3- Une page s’ouvre, nommez le dossier “FFMT Libs”, cliquez sur avancez, selectionnez “Link to alternate location” et selectionnez le dossier common du projet github
              4- Faite la même chose pour le dossier resouces, et nommez le dossier “FFMT Libs resources”
              5- Ensuite cliquez droit à nouveau sur le projet Minecraft et faite “new source folder”
              6- Sélectionnez le dossier “FFMT Libs” et faite la même chose pour “FFMT Libs resources”

              Ce qui m’a enlever pas mal d’erreur malgrès tous je me retrouve avec les erreurs suivantes :

              –------------------------------------------------------------------

              Dans :

              public class PacketMoney extends AbstractPacket{
              
              private int maxMoney, Money;
              
              public PacketMoney(){
              
              }
              

              à la ligne :

              public class PacketMoney extends AbstractPacket{
              

              Erreur :

              The type PacketMoney must implement the inherited abstract method AbstractPacket.encodeInto(ChannelHandlerContext, PacketBuffer)
              

              Dans :

              @Override
              public void encodeInto(ChannelHandlerContext ctx, ByteBuf buffer) {
              buffer.writeInt(maxMoney);
              buffer.writeInt(money);
              
              }
              
              @Override
              public void decodeInto(ChannelHandlerContext ctx, ByteBuf buffer) {
              this.maxMoney = buffer.readInt();
              this.money = buffer.readInt();
              }
              

              aux lignes :

              public void encodeInto(ChannelHandlerContext ctx, ByteBuf buffer) {
              public void decodeInto(ChannelHandlerContext ctx, ByteBuf buffer) {
              

              Erreur :

              The method encodeInto(ChannelHandlerContext, ByteBuf) of type PacketMoney must override or implement a supertype method
              

              j’ai la possibilité d’implémenté la méthode mais je trouve sa bizarre car je ne pense pas qu’il soit nécessaire de modifier le FFMT API

              1 réponse Dernière réponse Répondre Citer 0
              • robin4002
                robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                Il y a eu des changements récemment dans FFMT libs, j’ai refais le système de paquet car l’ancien provoquait des fuites de mémoire.
                Tu peux regarder sur nanotech mod comment l’utiliser :
                https://github.com/FFMT/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotechmod/main/core/NanotechMod.java#L61
                https://github.com/FFMT/nanotech_mod/tree/master/common/fr/mcnanotech/kevin_68/nanotechmod/main/network/packet

                1 réponse Dernière réponse Répondre Citer 0
                • BlackDrag00n
                  BlackDrag00n dernière édition par

                  Bon bah je doit être nul 😛

                  j’ai modifier ceci :

                  public class PacketMoney extends AbstractPacket{
                  

                  Par cela :

                  public class PacketMoney extends FFMTPacket{
                  

                  Donc j’ai résolu cette erreur grâce a tes explications.

                  Mais concernant les autres commande je ne trouve aucun trace dans l’exemple du mod Nanotech, ce qui signifie effectivement que sa a changer mais je ne trouve aucun trace de ce qui le remplace 😕


                  J’ai aussi rajouter cette ligne dans mon main :

                  public static final PacketManager packetHandler = new PacketManager("fr.paramystick.tutoriel.main.packets", MODID, "TutorielMod");
                  

                  ce qui me permet d’après ce que j’ai compris, d’exécuter tous les packets contenu dans le packages “packets”.

                  Mais quand je lance le jeu j’ai tous ces erreurs :

                  java.lang.ExceptionInInitializerError
                  at java.lang.Class.forName0(Native Method)
                  at java.lang.Class.forName(Unknown Source)
                  at cpw.mods.fml.common.ProxyInjector.inject(ProxyInjector.java:42)
                  at cpw.mods.fml.common.FMLModContainer.constructMod(FMLModContainer.java:492)
                  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                  at java.lang.reflect.Method.invoke(Unknown Source)
                  at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74)
                  at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:47)
                  at com.google.common.eventbus.EventBus.dispatch(EventBus.java:314)
                  at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296)
                  at com.google.common.eventbus.EventBus.post(EventBus.java:267)
                  at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:209)
                  at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:188)
                  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                  at java.lang.reflect.Method.invoke(Unknown Source)
                  at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74)
                  at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:47)
                  at com.google.common.eventbus.EventBus.dispatch(EventBus.java:314)
                  at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296)
                  at com.google.common.eventbus.EventBus.post(EventBus.java:267)
                  at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:119)
                  at cpw.mods.fml.common.Loader.loadMods(Loader.java:489)
                  at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:202)
                  at net.minecraft.client.Minecraft.startGame(Minecraft.java:520)
                  at net.minecraft.client.Minecraft.run(Minecraft.java:890)
                  at net.minecraft.client.main.Main.main(Main.java:112)
                  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                  at java.lang.reflect.Method.invoke(Unknown Source)
                  at net.minecraft.launchwrapper.Launch.launch(Launch.java:134)
                  at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
                  Caused by: java.lang.NullPointerException
                  at fr.minecraftforgefrance.ffmtlibs.network.PacketManager.<init>(PacketManager.java:56)
                  at fr.paramystick.tutoriel.core.TutorielMod.<clinit>(TutorielMod.java:39)
                  … 36 more
                  

                  Si je commente la ligne 39 de mon main qui correspond a la ligne ci dessous j’ai le jeu qui se lance sans probleme (ce qui me parait logique vu qu’il n’existe aucun packet), est-ce que cela veut dire que mon fichier “ExtendedEntityPropMoney” fonctionne quand même ? et que mon probleme viendrait du packet “PacketMoney” ?

                  public static final PacketManager packetHandler = new PacketManager("fr.paramystick.tutoriel.main.packets", MODID, "TutorielMod");
                  

                  une autre question, dans le tuto on parle de quelques méthode a mettre dans mon “EventHandler” dans qu’elle fichier faut-il mettre cela ? mon “Main”, “ExtendedEntityPropMoney” ou bien “PacketMoney” ?
                  [infobulle=“Gugu42”]EventHandler : Dans votre event handler, vous allez avoir besoin de pas mal d’events…[/infobulle]</clinit></init>

                  1 réponse Dernière réponse Répondre Citer 0
                  • robin4002
                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                    Tu peux m’envoyer tout le début de ta classe principale ?
                    Oui c’est bien les paquets qui ne fonctionnent pas, normalement ton ExtendedEntityPropMoney devrait fonctionner.

                    1 réponse Dernière réponse Répondre Citer 0
                    • BlackDrag00n
                      BlackDrag00n dernière édition par

                      package fr.paramystick.tutoriel.core;
                      
                      import net.minecraft.creativetab.CreativeTabs;
                      import net.minecraftforge.common.MinecraftForge;
                      import cpw.mods.fml.common.Mod;
                      import cpw.mods.fml.common.Mod.EventHandler;
                      import cpw.mods.fml.common.Mod.Instance;
                      import cpw.mods.fml.common.SidedProxy;
                      import cpw.mods.fml.common.event.FMLInitializationEvent;
                      import cpw.mods.fml.common.event.FMLPostInitializationEvent;
                      import cpw.mods.fml.common.event.FMLPreInitializationEvent;
                      import fr.minecraftforgefrance.ffmtlibs.network.FFMTPacketHandler;
                      import fr.minecraftforgefrance.ffmtlibs.network.PacketManager;
                      import fr.paramystick.tutoriel.hud.InfoOverlay;
                      
                      @Mod(modid = "tutoriel", name = "Tutoriel Mod", version = "0.0.1", dependencies = "required-after:ffmtlibs")
                      
                      public class TutorielMod
                      {
                      /**
                      * TutorielMod's mod Identifier
                      */
                      public static final String MODID = "TutorielMod";
                      
                      /**
                      * La suite va se mettre ici
                      */
                      @Instance(MODID)
                      public static TutorielMod modInstance;
                      
                      /**
                      * Initialisation si on est coter SERVEUR ou CLIENT
                      */
                      @SidedProxy(clientSide = "fr.paramystick.tutoriel.core.ClientProxy", serverSide = "fr.paramystick.tutoriel.core.CommonProxy")
                      public static CommonProxy proxy;
                      
                      /**
                      * TutorielMod packethandler
                      */
                      public static final PacketManager packetHandler = new PacketManager("fr.paramystick.tutoriel.packets", MODID, "TutorielMod");
                      
                      

                      Dit moi si tu as besoin de plus ! 😄

                      1 réponse Dernière réponse Répondre Citer 0
                      • robin4002
                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                        Ta classe PacketMoney se trouve bien dans le package fr.paramystick.tutoriel.packets ?

                        1 réponse Dernière réponse Répondre Citer 0
                        • BlackDrag00n
                          BlackDrag00n dernière édition par

                          celui de la classe “PacketMoney” ?

                          1 réponse Dernière réponse Répondre Citer 0
                          • robin4002
                            robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                            J’ai modifié mon message, il est parti trop vite x)

                            1 réponse Dernière réponse Répondre Citer 0
                            • BlackDrag00n
                              BlackDrag00n dernière édition par

                              Oui il se trouve bien dans ce package

                              1 réponse Dernière réponse Répondre Citer 0
                              • robin4002
                                robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                                Hum je ne sais pas alors, c’est étrange je ne vois rien qui cause problème 😕

                                1 réponse Dernière réponse Répondre Citer 0
                                • BlackDrag00n
                                  BlackDrag00n dernière édition par

                                  Je te donne la classe “PacketMoney” qui se trouve dans le package “fr.paramystick.tutoriel.packets” :

                                  package fr.paramystick.tutoriel.packets;
                                  
                                  import java.io.IOException;
                                  
                                  import net.minecraft.entity.player.EntityPlayer;
                                  import io.netty.buffer.ByteBuf;
                                  import io.netty.channel.ChannelHandlerContext;
                                  import fr.minecraftforgefrance.ffmtlibs.network.FFMTPacket;
                                  import fr.paramystick.tutoriel.extprop.ExtendedEntityPropMoney;
                                  
                                  public class PacketMoney extends FFMTPacket
                                  {
                                  private int maxMoney, Money;
                                  
                                  public PacketMoney()
                                  {}
                                  
                                  public PacketMoney(int maxMoney, int Money)
                                  {
                                  this.maxMoney = maxMoney;
                                  this.Money = Money;
                                  }
                                  
                                  @Override
                                  public void writeData(ByteBuf buffer) throws IOException
                                  {
                                  buffer.writeInt(maxMoney);
                                  buffer.writeInt(Money);
                                  }
                                  
                                  @Override
                                  public void readData(ByteBuf buffer)
                                  {
                                  this.maxMoney = buffer.readInt();
                                  this.Money = buffer.readInt();
                                  }
                                  
                                  @Override
                                  public void handleClientSide(EntityPlayer player)
                                  {
                                  ExtendedEntityPropMoney props = ExtendedEntityPropMoney.get(player);
                                  props.maxMoney = this.maxMoney;
                                  props.Money = this.Money;
                                  }
                                  
                                  @Override
                                  public void handleServerSide(EntityPlayer player)
                                  {
                                  ExtendedEntityPropMoney props = ExtendedEntityPropMoney.get(player);
                                  props.maxMoney = this.maxMoney;
                                  props.Money = this.Money;
                                  }
                                  }
                                  
                                  1 réponse Dernière réponse Répondre Citer 0
                                  • robin4002
                                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                                    Ok, la si je vois le problème :
                                    package fr.paramystick.tutoriel.packets;

                                    public static final PacketManager packetHandler = new PacketManager(“fr.paramystick.tutoriel.main.packets”, MODID, “TutorielMod”);

                                    Les deux packages ne correspondent pas.

                                    Utilise ce code :
                                    public static final PacketManager packetHandler = new PacketManager(“fr.paramystick.tutoriel.packets”, MODID, “TutorielMod”);

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • BlackDrag00n
                                      BlackDrag00n dernière édition par

                                      Oui, sa aurait pu être sa mais c’est moi qui est fait une erreur de copier coller sur le forum dans mon main j’ai bien sa :

                                      public static final PacketManager packetHandler = new PacketManager("fr.paramystick.tutoriel.packets", MODID, "TutorielMod");
                                      

                                      et ma classe “PacketMoney” se trouve bien dans le package suivant :

                                      fr.paramystick.tutoriel.packets
                                      

                                      Si j’ai bien compris il envoie des packets au serveur grâce a cette ligne 39 :

                                      public static final PacketManager packetHandler = new PacketManager("fr.paramystick.tutoriel.packets", MODID, "TutorielMod");
                                      

                                      Mais dans le cas ou le serveur n’existe pas et que je suis en solo, sa ne déclencherai pas mon erreur a cause de sa ?


                                      Je rectifie, je viens de lancer en mode serveur et j’ai la même erreur


                                      J’ai commenter le contenu de toute les méthodes de la classe “PacketMoney”, j’ai l’impression que l’erreur viendrais de l’extends “FFMTPacket”


                                      J’aimerais vérifier que j’ai pas fait d’erreur dans la classe “ExtendedEntityPropMoney”, pour cela j’aimerai afficher la valeur de la variable “Money” dans mon InfoOverlay qui affiche sur l’écran HUD.

                                      Pour cela j’ai besoin de récuperer la varible dans ma classe “InfoOverlay”, j’ai utiliser ceci, mais sa doit pas être de cette manière qu’il faut s’y prendre :

                                      ExtendedEntityPropMoney.get(player).Money
                                      

                                      Car il me demande de définir “player” j’ai donc rajouter ceci plus haut :

                                      EntityPlayer player = mc.thePlayer;
                                      

                                      Mais sa me déclenche des erreurs, donc je suppose que ce n’est pas de cette manière qu’il faut s’y prendre

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • robin4002
                                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                                        La ligne public static final PacketManager packetHandler = new PacketManager(“fr.paramystick.tutoriel.packets”, MODID, “TutorielMod”);
                                        Permet d’initialisé ce qui gère les paquets de ton mod et d’enregistrer tout les paquets, celle ligne n’envoie pas de paquet.
                                        Pour l’envoyer c’est TutorielMod.packetHandler.sendTo…(new ClasseDeTonPacket(paramètres));
                                        sendTo … il y en a plusieurs, sendToServer, sendTo avec comme argument le joueur, etc …

                                        Je vois pas en quoi l’extends causerai problème 😕

                                        Pour le rendu, ça devrait être bon pourtant, si l’erreur est sur mc, remplace par FMLClientHandler.instance().getClient()

                                        1 réponse Dernière réponse Répondre Citer 0
                                        • BlackDrag00n
                                          BlackDrag00n dernière édition par

                                          Je vais t’afficher la parti de mon codage qui cherche a récupérer la valeur Money et maxMoney pour l’afficher sur le HUD.

                                          Mon code compresser :

                                          private Minecraft mc = FMLClientHandler.instance().getClient();
                                          private final EntityPlayer player = mc.thePlayer;
                                          
                                          MoneyLong = ExtendedEntityPropMoney.get(player).Money;
                                          maxMoneyLong = ExtendedEntityPropMoney.get(player).maxMoney;
                                          
                                          FMLClientHandler.instance().getClient().fontRenderer.drawStringWithShadow("Money : "+MoneyLong+" / "+maxMoneyLong, 5, 25, 0xffffff);
                                          

                                          Erreur :

                                          java.lang.NullPointerException
                                          at fr.paramystick.tutoriel.hud.InfoOverlay.renderGameOverlay(InfoOverlay.java:45) ~[InfoOverlay.class:?]
                                          at cpw.mods.fml.common.eventhandler.ASMEventHandler_7_InfoOverlay_renderGameOverlay_Post.invoke(.dynamic) ~[?:?]
                                          at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:51) ~[ASMEventHandler.class:?]
                                          at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:122) ~[EventBus.class:?]
                                          at net.minecraftforge.client.GuiIngameForge.post(GuiIngameForge.java:900) ~[GuiIngameForge.class:?]
                                          at net.minecraftforge.client.GuiIngameForge.renderExperience(GuiIngameForge.java:548) ~[GuiIngameForge.class:?]
                                          at net.minecraftforge.client.GuiIngameForge.renderGameOverlay(GuiIngameForge.java:153) ~[GuiIngameForge.class:?]
                                          at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1121) ~[EntityRenderer.class:?]
                                          at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1023) ~[Minecraft.class:?]
                                          at net.minecraft.client.Minecraft.run(Minecraft.java:910) [Minecraft.class:?]
                                          at net.minecraft.client.main.Main.main(Main.java:112) [Main.class:?]
                                          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0]
                                          at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0]
                                          at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0]
                                          at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0]
                                          at net.minecraft.launchwrapper.Launch.launch(Launch.java:134) [launchwrapper-1.9.jar:?]
                                          at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.9.jar:?]
                                          

                                          L’erreur est encore une valeur NULL et elle se situerai a ce niveau la :

                                          MoneyLong = ExtendedEntityPropMoney.get(player).Money;
                                          maxMoneyLong = ExtendedEntityPropMoney.get(player).maxMoney;
                                          

                                          Car si je met des valeur a la place tous ce passe bien, ex :

                                          MoneyLong = 5;
                                          maxMoneyLong = 10;
                                          

                                          AH mais attend je suis en train de penser il faut peut être initialiser les variable grâce au Event Handler, d’où ma question d’où il fallait les mettre dans qu’elle classe 😛

                                          1 réponse Dernière réponse Répondre Citer 0
                                          • robin4002
                                            robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par robin4002

                                            En effet, j’ai bien l’impression qu’il te manque ça : https://www.minecraftforgefrance.fr/topic/799/extended-entity-properties#EventHandler

                                            1 réponse Dernière réponse Répondre Citer 0
                                            • 1
                                            • 2
                                            • 3
                                            • 1 / 3
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            Contact / Mentions Légales

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB