• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

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

    1.7.x
    1.7.x
    4
    47
    7047
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • BlackDrag00n
      BlackDrag00n last edited by 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 Reply Last reply Reply Quote 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

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

        1 Reply Last reply Reply Quote 1
        • BlackDrag00n
          BlackDrag00n last edited by

          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 Reply Last reply Reply Quote 0
          • Superloup10
            Superloup10 Modérateurs last edited by

            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 Reply Last reply Reply Quote 0
            • BlackDrag00n
              BlackDrag00n last edited by

              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 Reply Last reply Reply Quote 0
              • robin4002
                robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                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 Reply Last reply Reply Quote 0
                • BlackDrag00n
                  BlackDrag00n last edited by

                  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 Reply Last reply Reply Quote 0
                  • robin4002
                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                    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 Reply Last reply Reply Quote 0
                    • BlackDrag00n
                      BlackDrag00n last edited by

                      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 Reply Last reply Reply Quote 0
                      • robin4002
                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

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

                        1 Reply Last reply Reply Quote 0
                        • BlackDrag00n
                          BlackDrag00n last edited by

                          celui de la classe “PacketMoney” ?

                          1 Reply Last reply Reply Quote 0
                          • robin4002
                            robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

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

                            1 Reply Last reply Reply Quote 0
                            • BlackDrag00n
                              BlackDrag00n last edited by

                              Oui il se trouve bien dans ce package

                              1 Reply Last reply Reply Quote 0
                              • robin4002
                                robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

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

                                1 Reply Last reply Reply Quote 0
                                • BlackDrag00n
                                  BlackDrag00n last edited by

                                  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 Reply Last reply Reply Quote 0
                                  • robin4002
                                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                                    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 Reply Last reply Reply Quote 0
                                    • BlackDrag00n
                                      BlackDrag00n last edited by

                                      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 Reply Last reply Reply Quote 0
                                      • robin4002
                                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                                        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 Reply Last reply Reply Quote 0
                                        • BlackDrag00n
                                          BlackDrag00n last edited by

                                          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 Reply Last reply Reply Quote 0
                                          • robin4002
                                            robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by robin4002

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

                                            1 Reply Last reply Reply Quote 0
                                            • 1
                                            • 2
                                            • 3
                                            • 1 / 3
                                            • First post
                                              Last post
                                            Design by Woryk
                                            Contact / Mentions Légales

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB