MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Gui coté serveur

    Planifier Épinglé Verrouillé Déplacé Sans suite
    1.8
    27 Messages 4 Publieurs 6.3k Vues 1 Watching
    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.
    • J Hors-ligne
      Jodge
      dernière édition par

      Il semblerai que ta condition ne fonctionne pas tous a fait. Elle permet de savoir si le joueurs à ouvert un coffre ou non, mais pas de savoir si un joueur a ouvert son inventaire personnel.

      Le résultat est toujours true pour instanceof, puisque par défaut, lorsque aucun autre inventaire n’est ouvert, c’est celui du joueurs qui est chargé intégralement dans la variable openContainer.

      Ce que j’ai besoin dans mon cas, c’est que quand le joueur n’as aucun inventaire d’ouvert, les slots sur lesquelles il faut agir sont situer entre 36 et 44 (ceux de la hotbar). Quand l’inventaire est ouvert (touche E appuyer donc) il faut agir sur intégralité des slots.

      1 réponse Dernière réponse Répondre Citer 0
      • J Hors-ligne
        Jodge
        dernière édition par

        Il semblerai que ta condition ne fonctionne pas tous a fait. Elle permet de savoir si le joueurs à ouvert un coffre ou non, mais pas de savoir si un joueur a ouvert son inventaire personnel.

        Le résultat est toujours true pour instanceof, puisque par défaut, lorsque aucun autre inventaire n’est ouvert, c’est celui du joueurs qui est chargé intégralement dans la variable openContainer.

        Ce que j’ai besoin dans mon cas, c’est que quand le joueur n’as aucun inventaire d’ouvert, les slots sur lesquelles il faut agir sont situer entre 36 et 44 (ceux de la hotbar). Quand l’inventaire est ouvert (touche E appuyer donc) il faut agir sur intégralité des slots.

        EDIT : J’ai aussi modifier le premier post, puisque je suis toujours sur le même problème, mais a un stade plus avancé. ^^

        1 réponse Dernière réponse Répondre Citer 0
        • RedRelayR Hors-ligne
          RedRelay Moddeurs confirmés
          dernière édition par

          @‘SCAREX’:

          Pour avoir le joueur côté client, c’est Minecraft.getMinecraft().thePlayer. Pour savoir si l’inventaire du joueur est ouvert, il faut faire :

          if (player.openContainer != null && player.openContainer instanceof ContainerPlayer)
          

          Le player.openContainer != null est inutile, null instanceof class retourne toujours faux

          –------------------------------------------------------------------------------------
          Si tu trouves mon intervention pertinente, n'hésite pas a m…

          1 réponse Dernière réponse Répondre Citer 0
          • J Hors-ligne
            Jodge
            dernière édition par

            Cela ne résous pas le problème… Ça optimise certes son code, mais mon problème initial est tous autre : Dans un soucis d’optimisation, je souhaite de pas scanner les slots non visible de l’inventaire du joueur, or ces dis slot sont constamment chargé dans openContainer.

            Le deuxième problème concernant l’affichage des textures au mauvaise coordonner (malgré un code qui semble correcte) et la texture de la nourriture/respiration/armure qui s’en retrouve buguer reste tous de même le problème prioritaire. J’ai correctement suivit toute les sources que j’ai trouver, et sur le plan théorique, cela devrai marché. Mais pas dans la pratique 😞

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

              Pour la texture de la nourriture/respiration/armure qui se retrouver buguer il faudrait que tu ouvres une nouvelle matrix
              ( GlStateManager.pushMatrix(); au début du rendu, GlStateManager.popMatrix(); à la fin du rendu)
              Pour les coordonnées utilisés ceux du slot n’est pas une bonne idée, ces coordonnées doivent être utilisé avec le container et le gui qui va avec. Il faudrait plutôt le centrer en fonction de event.resolution.
              Pour le reste je ne sais pas.

              1 réponse Dernière réponse Répondre Citer 0
              • J Hors-ligne
                Jodge
                dernière édition par

                J’ai un peu galérer a placer ces deux commande, puisque apparemment, ou que je les mette, il n’apprécié pas que je fasse appelle à des fonctions différente. Du coup j’ai simplement tous remis dans une grosse fonction au final, puisque de toute façon sa ne me servira pas plusieurs fois.

                Pour les coordonnés, je souhaitai utilisé les coordonner des slots pour justement faire un algorithme générique quelque soit la position de l’objet (je pensais notamment en cas d’utilisation avec un mod telle que BattleGear, ou des mod déplacent la hotbar. Ou même l’utilisation de coffre plus grand que vanilla).

                Est ce que tu ne connaîtrai pas une autre alternative que passé par un pourcentage de taille d’écran pour que justement l’algo soit générique ?

                Thank’s pour votre aide déjà précieuse ^^

                1 réponse Dernière réponse Répondre Citer 0
                • J Hors-ligne
                  Jodge
                  dernière édition par

                  Changement de problème, j’ai enfin réussis a centrer, en mode yolo avec des valeurs en pixel de partout, mais sa fonctionne lorsque je redimensionne alors bon X)

                  Mon dernier problème en date concerne le coté serveur.
                  Si je met le mod sur un serveur, et que je m’y connecte, je n’arrive pas a faire fonctionner l’affichage. J’ai tenter quelque bidouille avec @SideOnly(side.CLIENT), mais rien n’y fait, l’interface ne semble pas fonctionner… (Le jeu ne plante pas pour autant, donc le serveur ne fait pas appel a ces fonction). J’ai comme dernier piste le fait que le client n’accède pas au variable coté serveur, auxquelles cas je ne sais pas comment l’empêcher

                  J’ai aussi un problème sur les variables de ma classe JWeapons (à laquelle je fais appelle pour calculer la taille de la texture). Les 2 variables sont initialisé avec “public int”, mais sont commune a toute les JWeapons. Si une variable est modifier sur une des JWeapons, elle l’es sur toute les autres. Il n’y a pas moyen de la rendre unique a l’objet ? (si vous me sortez les NBTag je saute par la fenêtre, j’y pige qu’eud X) )

                  (au passage, à partir de combine de temps d’intervalle on peu considérer qu’il ne s’agit plus d’un double post ?)

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

                    @‘Jodge’:

                    J’ai comme dernier piste le fait que le client n’accède pas au variable coté serveur, auxquelles cas je ne sais pas comment l’empêcher

                    C’est ça, et donc il faut passer par un ou des paquets.

                    @‘Jodge’:

                    J’ai aussi un problème sur les variables de ma classe JWeapons (à laquelle je fais appelle pour calculer la taille de la texture). Les 2 variables sont initialisé avec “public int”, mais sont commune a toute les JWeapons. Si une variable est modifier sur une des JWeapons, elle l’es sur toute les autres. Il n’y a pas moyen de la rendre unique a l’objet ? (si vous me sortez les NBTag je saute par la fenêtre, j’y pige qu’eud X) )

                    Dans ce cas tu peux sauter par la fenêtre, désolé x)

                    1 réponse Dernière réponse Répondre Citer 0
                    • J Hors-ligne
                      Jodge
                      dernière édition par

                      Alors, j’ai bien étudié tous les tuto que j’ai trouver sur internet, et ce forum

                      
                      ​    public static enum nbtVar
                          {
                          RightCombo("rC"),
                          RightPreviousCombo("rPC"),
                          LeftCombo("lC"),
                          LeftPreviousCombo("lPC"),
                          ActualCombo("aC");
                      
                          private String name = "";
                      
                          nbtVar(String name)
                          {
                          this.name = name;
                          }
                      
                          public String toString()
                          {
                          return name;
                          }
                      
                              public static boolean writeNbtVar(ItemStack stack, nbtVar var, int value)
                              {
                              boolean isWrite = false;
                              if (stack.hasTagCompound())
                              {
                                      NBTTagCompound itemData = stack.getTagCompound();
                      
                                  String varName = var.toString();
                      
                                  if(itemData.hasKey(varName))
                                  {
                                  stack.getTagCompound().setInteger(varName, value); 
                                     isWrite = true;
                                  }
                              }
                              return isWrite;
                              }
                      
                              public static boolean incNbtVarInt(ItemStack stack, nbtVar var)
                              {
                              int i = readNbtVarInt(stack, var);
                              return writeNbtVar(stack, var, i + 1);
                              }
                      
                              public static boolean decNbtVarInt(ItemStack stack, nbtVar var)
                              {
                              int i = readNbtVarInt(stack, var);
                              return writeNbtVar(stack, var, i - 1);
                              }
                      
                              public static int readNbtVarInt(ItemStack stack, nbtVar var)
                              {
                              if (stack.hasTagCompound())
                              {
                                      NBTTagCompound itemData = stack.getTagCompound();
                      
                                  if(var == nbtVar.RightCombo)
                                  {
                                  String varName = nbtVar.RightCombo.toString();
                      
                                  if(itemData.hasKey(varName))
                                  {
                                  return stack.getTagCompound().getInteger(varName); 
                                  }
                                  }  
                              }
                              return 0;
                          }
                          }
                      

                      Je me suis fait cette mini classe pour m’assisté dans l’écriture des tags, puis j’ai modifié mes variables par ces fonctions.

                      Pour “créer” mes variable j’ai mis dans le “onUptade” de ma classe JWeapons (extension de ItemSword) ceci :

                      ​        if(stack.getTagCompound() == null)
                              {
                              stack.setTagCompound(new NBTTagCompound());
                      
                              stack.getTagCompound().setInteger("rC", 0); // Right Combo
                              stack.getTagCompound().setInteger("rPC",-1); // Right Previous Combo
                              stack.getTagCompound().setInteger("lC", 0); // Left Combo
                              stack.getTagCompound().setInteger("lPC", -1); // Left Previous Combo
                              stack.getTagCompound().setInteger("aT",0); // actualTimer
                              }
                      

                      Malheureusement, il semblerai que j’ai commis une erreur quelque part, puisque je n’accède pas au valeur:'(

                      Je ne sais pas si l’erreur viens de la, ou si elle viens de ma classe JScreen :

                      
                      […]
                      Slot slot = (Slot)player.openContainer.inventorySlots.get(i);
                      ItemStack itemStack = slot.getStack();
                      
                      if(itemStack != null)
                      {
                      item = itemStack.getItem();
                      […]
                      int actualTimer = nbtVar.readNbtVarInt(itemStack, nbtVar.ActualCombo);
                      […]
                      }
                      […]
                      
                      
                      1 réponse Dernière réponse Répondre Citer 0
                      • robin4002R Hors-ligne
                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                        dernière édition par

                        Ajoutes des System.out.println( ) pour déboguer ton code.

                        1 réponse Dernière réponse Répondre Citer 0
                        • J Hors-ligne
                          Jodge
                          dernière édition par

                          Forcé de constaté que parfois, (souvent dans mon cas) l’erreur est tellement grosse qu’elle me saute au yeux… 
                          J’ai initialisé mon tag au nom de “aT” dans JWeapons, et “aC” dans mon énum ^^’
                          J’ai donc revue ma fonction d’initialisation pour qu’elle prène le nom définis dans mon énum pour éviter les problèmes de ce genre.

                          J’ai aussi vue qu’il manquais dans ma fonction onUptade la condition “if(!worldIn.isRemote)” pour éviter d’agir a la fois coté client et serveur.

                          De plus, chose que je n’avais pas capté sur le coup, ma fonction d’initialisation ne réinitialise pas mes précédent tag, du coup les tests effectuer depuis mon ancien objet générer bugguer forcément.

                          En revanche, mon bug est bien réel.

                          Voici un extrait du log :
                          (lecture deux ligne par deux ligne sous la forme suivante :
                          #1# : nom du tag, valeur initial, valeur recu
                          ### nom du tag, nouvelle valeur, modification effectuer
                          Si la nouvelle valeur n’es pas celle égale a reçu, alors le boolean devrai être à false, ce qui signifie que le tag n’existe pas)

                          :::
                          [21:30:18] [Server thread/INFO] [STDOUT]: [fr.Jodge.jodgeLibrary.common.JFunction:write:1091]: ###
                          [21:30:18] [Server thread/INFO] [STDOUT]: [fr.Jodge.jodgeLibrary.common.JFunction:write:1091]: #1# : rC 0 1
                          [21:30:18] [Server thread/INFO] [STDOUT]: [fr.Jodge.jodgeLibrary.common.JFunction:write:1091]: ### : rC 1 true
                          [21:30:18] [Server thread/INFO] [STDOUT]: [fr.Jodge.jodgeLibrary.common.JFunction:write:1091]: ###
                          [21:30:18] [Server thread/INFO] [STDOUT]: [fr.Jodge.jodgeLibrary.common.JFunction:write:1091]: #1# : aT 0 1
                          [21:30:18] [Server thread/INFO] [STDOUT]: [fr.Jodge.jodgeLibrary.common.JFunction:write:1091]: ### : aT 0 true
                          [21:30:18] [Server thread/INFO] [STDOUT]: [fr.Jodge.jodgeLibrary.common.JFunction:write:1091]: #1# : aT 0 0
                          [21:30:18] [Server thread/INFO] [STDOUT]: [fr.Jodge.jodgeLibrary.common.JFunction:write:1091]: ### : aT 0 true
                          [21:30:18] [Server thread/INFO] [STDOUT]: [fr.Jodge.jodgeLibrary.common.JFunction:write:1091]: #1# : rPC 0 1
                          [21:30:18] [Server thread/INFO] [STDOUT]: [fr.Jodge.jodgeLibrary.common.JFunction:write:1091]: ### : rPC 0 true
                          [21:30:18] [Server thread/INFO] [STDOUT]: [fr.Jodge.jodgeLibrary.common.JFunction:write:1091]: #1# : aT 0 1
                          [21:30:18] [Server thread/INFO] [STDOUT]: [fr.Jodge.jodgeLibrary.common.JFunction:write:1091]: ### : aT 0 true
                          [21:30:18] [Server thread/INFO] [STDOUT]: [fr.Jodge.jodgeLibrary.common.JFunction:write:1091]: #1# : aT 0 0
                          [21:30:18] [Server thread/INFO] [STDOUT]: [fr.Jodge.jodgeLibrary.common.JFunction:write:1091]: ### : aT 0 true
                          [21:30:18] [Server thread/INFO] [STDOUT]: [fr.Jodge.jodgeLibrary.common.JFunction:write:1091]: #1# : rPC 0 1
                          [21:30:18] [Server thread/INFO] [STDOUT]: [fr.Jodge.jodgeLibrary.common.JFunction:write:1091]: ### : rPC 0 true
                          :::

                          Les 4 premier lignes sont séparer des autres, pour cause, elle sont dans la fonction “onPlayerStoppedUsing”.
                          On peu voir ici que la modification a correctement lieu.

                          Le premier problème a lieu au niveau de la ligne 6. Sur la ligne 5 on peu voir que la valeur reçus (le 3eme argument) est 1.
                          Or la valeur n’est pas mis a jour (pour rapel, elle passe par la même fonction que la premier). Ces deux ligne corresponde a l’incrémentation de base de ma boucle.

                          la 7 et 8 eme ligne sont la pour s’assurer que les valeur retourne a 0, car il y a eu une modification de right clic (les 4 premier ligne)

                          la ligne 9 et 10 sont la pour justement empêcher que ma variable ne soit ré-initialisé a chaque tour de boucle (en revanche son incrémentation continue).

                          nous avons donc 3 fonctions qui bug ici.
                          Si nous regardons les fonctions de plus près, on se rend compte qu’elle ont lieu dans ce sens :
                          Incrémentation (fonctionnelle)
                          Incrémentation (buguer)
                          Changement de valeur (buguer)
                          Changement de valeur (buguer)

                          Le boolean étant a true depuis que j’ai correctement renommé mon tag, il n’y a aucune raison pour que cela ne fonctionne pas 😞

                          J’ai rien compris ces tag à la con, mais ça m’as l’air un poil buguer quand on y fait trop appelle ^^'X)

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

                            Renvoies ton code actuel vu que tu as fait des modifications depuis.

                            1 réponse Dernière réponse Répondre Citer 0
                            • J Hors-ligne
                              Jodge
                              dernière édition par

                              Désoler pour la réponse un poil tardive, j’ai eu quelque problème IRL (vive les travaux d’urgence T-T).

                              enfin bref, après avoir galérer avec GitHub en vain (allez savoir pourquoi le bouton importer un fichier/projet, qui est pourtant le plus basique de mon point de vue n’existe pas sur le site, ou alors est super bien planqué…)

                              Du coup, comme ça m’as un peu gonfler, je vais me contenter des bonne vielle balise java pour le moment…

                              Main (@mod) :

                              package fr.Jodge.jodgeLibrary.common;
                              
                              import net.minecraftforge.common.MinecraftForge;
                              import net.minecraftforge.fml.common.Mod;
                              import net.minecraftforge.fml.common.Mod.EventHandler;
                              import net.minecraftforge.fml.common.Mod.Instance;
                              
                              import net.minecraftforge.fml.common.SidedProxy;
                              
                              import net.minecraftforge.fml.common.event.FMLInitializationEvent;
                              import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
                              import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
                              
                              @Mod(modid=Main.MODID, name=Main.MODNAME, version=Main.MODVER) //Tell forge "Oh hey, there's a new mod here to load."
                              public class Main
                              {
                                 public static final String MODID = "jodgelibrary";
                                 public static final String MODNAME = "Jodge Library";
                                 public static final String MODVER = "A0.1.5";
                              
                                 public static final boolean DEBUG = true;
                              
                              @Instance(MODID)
                              public static Main instance;
                              
                              @SidedProxy(clientSide = "fr.Jodge.jodgeLibrary.client.ClientProxy", serverSide = "fr.Jodge.jodgeLibrary.common.CommonProxy")
                              public static CommonProxy proxy;
                              
                              @EventHandler
                              public void preInit(FMLPreInitializationEvent event)
                              {
                              
                              }
                              
                              @EventHandler
                              public void init(FMLInitializationEvent event)
                              {
                              proxy.registerRender();
                              if(event.getSide().isClient())
                              {
                              MinecraftForge.EVENT_BUS.register(new JScreen());
                              }
                              }
                              
                              @EventHandler
                              public void postInit(FMLPostInitializationEvent event)
                              {
                              
                              }
                              
                              }
                              
                              

                              JScreen :

                              ​package fr.Jodge.jodgeLibrary.common;
                              
                              import java.awt.Color;
                              
                              import org.lwjgl.opengl.GL11;
                              
                              import fr.Jodge.jodgeLibrary.common.JFunction.nbtVar;
                              import fr.Jodge.jodgeLibrary.common.toolSet.JWeapons;
                              import net.minecraft.client.Minecraft;
                              import net.minecraft.client.gui.FontRenderer;
                              import net.minecraft.client.gui.Gui;
                              import net.minecraft.client.gui.ScaledResolution;
                              import net.minecraft.client.gui.inventory.GuiContainer;
                              import net.minecraft.client.renderer.GlStateManager;
                              import net.minecraft.client.renderer.RenderHelper;
                              import net.minecraft.client.renderer.Tessellator;
                              import net.minecraft.client.renderer.WorldRenderer;
                              import net.minecraft.client.renderer.entity.RenderItem;
                              import net.minecraft.entity.player.EntityPlayer;
                              import net.minecraft.inventory.Container;
                              import net.minecraft.inventory.ContainerPlayer;
                              import net.minecraft.inventory.IInventory;
                              import net.minecraft.inventory.Slot;
                              import net.minecraft.item.Item;
                              import net.minecraft.item.ItemStack;
                              import net.minecraft.profiler.Profiler;
                              import net.minecraft.util.EnumChatFormatting;
                              import net.minecraft.util.ResourceLocation;
                              import net.minecraftforge.client.event.RenderGameOverlayEvent;
                              import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
                              import net.minecraftforge.fml.common.eventhandler.EventPriority;
                              import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
                              import net.minecraftforge.fml.relauncher.Side;
                              import net.minecraftforge.fml.relauncher.SideOnly;
                              
                              public class JScreen extends Gui
                              {
                              private static EntityPlayer player;
                              private static Item item;
                              
                              private static int WIDTH = 16;
                              private static int HEIGHT = 16;
                              private static int NBSLOT = 9;
                              
                              private static Minecraft MC = Minecraft.getMinecraft();;
                              
                                  ResourceLocation TIMERTEXTURE = new ResourceLocation(Main.MODID + ":textures/gui/timerCombo.png");
                              
                                  @SideOnly(Side.CLIENT)
                              @SubscribeEvent(priority = EventPriority.NORMAL)
                              public void onRenderHotbar(RenderGameOverlayEvent.Post event) 
                              {
                                 if(event.isCancelable() || event.type != ElementType.HOTBAR) // to active whit hotbar
                                 {      
                                  return;
                                 }
                              
                                 // VARIABLE    
                              if(player == null || player != MC.thePlayer) // first time, and when player change cause of other mod ?
                              {
                              player = MC.thePlayer; // To get Player
                              }
                              
                              int limMax = player.openContainer.getInventory().size();
                              
                              for (int i = limMax - NBSLOT; i < limMax; ++i)
                              {
                              Slot slot = (Slot)player.openContainer.inventorySlots.get(i);
                                 ItemStack itemStack = slot.getStack(); 
                              
                              if(itemStack != null)
                              {
                              item = itemStack.getItem();
                              
                                  ScaledResolution sr = new ScaledResolution(MC, MC.displayWidth, MC.displayHeight);;
                              
                                     int y = sr.getScaledHeight() - HEIGHT - 3;
                                     int x = 0;
                              
                              // FUNCTION
                              
                                     if(item instanceof JWeapons)
                                     {
                                  // ################################################
                                  GlStateManager.pushMatrix(); 
                                     //GlStateManager.disableLighting();
                                     //GlStateManager.disableDepth();
                                     //GlStateManager.disableTexture2D();
                                     //GlStateManager.disableAlpha();
                                     //GlStateManager.disableBlend();
                                     GL11.glColor4f(0.8F, 0.8F, 0.8F, 1.0F); // Cyan, Magenta, Jaune, 
                                  // ################################################
                              
                                     x = getXforSlot(i, limMax);
                                     if(x != 0)
                                     {
                                         int actualTimer = nbtVar.readNbtVarInt(itemStack, nbtVar.ActualCombo);
                                         int comboTimer = ((JWeapons)item).comboTimer * 20;
                                      double width = (((comboTimer - Math.min(comboTimer, actualTimer)) * WIDTH) / comboTimer);
                              
                                         if(actualTimer != 0)
                                      {
                                     Minecraft.getMinecraft().renderEngine.bindTexture(TIMERTEXTURE);
                                     JFunction.drawTexturedModalRect(x, y, 1.0F, 0, 0, (int)width, HEIGHT);
                                      }
                                     }
                              
                                  // ################################################
                                     //GlStateManager.enableBlend();
                                     //GlStateManager.enableAlpha();
                                     //GlStateManager.enableTexture2D();
                                     //GlStateManager.enableDepth();
                                     //GlStateManager.enableLighting();
                                     GlStateManager.popMatrix();
                                  // ################################################
                              
                                     } // end of item instanceof JWeapons
                              
                              }// end of itemStack != null
                              
                              }// end of for
                              
                              } // RenderGameOverlayEvent(post)
                              
                              int getXforSlot(int slot, int nbSlot)
                              {
                                  ScaledResolution sr = new ScaledResolution(MC, MC.displayWidth, MC.displayHeight);;
                              int x = (sr.getScaledWidth() / 2) - WIDTH/2;
                              int pos = nbSlot - slot;
                              
                              if (pos > 0 && pos <= NBSLOT)
                              {
                              return x - (WIDTH + 4) * (pos - 5);
                              }
                              else
                              {
                              return 0;
                              }
                              }
                              
                              }
                              
                              /* for (int i = limMin; i < limMax; ++i)
                              {
                              Slot slot = (Slot)inventoryPlayer.inventorySlots.get(i);
                                  ItemStack itemstack = slot.getStack(); 
                              itemRender = mc.getRenderItem();
                              
                                  if(itemstack != null)
                                  {
                                      Item item = itemstack.getItem();
                                      Minecraft mc = Minecraft.getMinecraft();
                                      if(item instanceof JWeapons)
                                      {
                              
                                          double actualTimer = ((JWeapons)item).actualTimer;
                                          double comboTimer = ((JWeapons)item).comboTimer * 20;
                              
                                          Minecraft.getMinecraft().renderEngine.bindTexture(timerTexture);
                                          JFunction.drawTexturedModalRect(x, y, itemRender.zLevel + 1.0F, 0, 0, 16, 16);
                              
                                      } // end of item instanceof JWeapons
                                  } // end of itemStack != null
                              } // end of for*/
                              

                              JFunction (j’ai enlever toute les fonction qui ne sont pas utiles pour alléger) :

                              ​package fr.Jodge.jodgeLibrary.common;
                              
                              import java.util.Locale;
                              
                              import fr.Jodge.jodgeLibrary.common.toolSet.JWeapons;
                              
                              import net.minecraft.block.Block;
                              import net.minecraft.block.BlockCrops;
                              
                              import net.minecraft.block.BlockBush;
                              import net.minecraft.client.renderer.Tessellator;
                              import net.minecraft.client.renderer.WorldRenderer;
                              
                              import net.minecraft.enchantment.EnchantmentHelper;
                              
                              import net.minecraft.entity.EntityLivingBase;
                              import net.minecraft.entity.SharedMonsterAttributes;
                              import net.minecraft.entity.player.EntityPlayer;
                              import net.minecraft.entity.player.EntityPlayerMP;
                              
                              import net.minecraft.init.Blocks;
                              
                              import net.minecraft.item.Item;
                              import net.minecraft.item.ItemStack;
                              
                              import net.minecraft.nbt.NBTTagCompound;
                              import net.minecraft.network.play.server.S12PacketEntityVelocity;
                              
                              import net.minecraft.stats.AchievementList;
                              import net.minecraft.stats.StatList;
                              
                              import net.minecraft.util.BlockPos;
                              import net.minecraft.util.DamageSource;
                              import net.minecraft.util.MathHelper;
                              
                              import net.minecraft.world.World;
                              
                              import net.minecraftforge.fml.common.registry.GameRegistry;
                              import net.minecraftforge.fml.relauncher.Side;
                              import net.minecraftforge.fml.relauncher.SideOnly;
                              
                              public class JFunction 
                              {
                              […]
                                 public static enum nbtVar
                                 {
                                  RightCombo("rC"),
                                  RightPreviousCombo("rPC"),
                                  LeftCombo("lC"),
                                  LeftPreviousCombo("lPC"),
                                  ActualCombo("aT");
                              
                                  private String name = "";
                              
                                  nbtVar(String name)
                                  {
                                  this.name = name;
                                  }
                              
                                  public String toString()
                                  {
                                  return name;
                                  }
                              
                                     public static boolean writeNbtVar(ItemStack stack, nbtVar var, int value)
                                     {
                                      JFunction.write("#1# : " + var + " " + nbtVar.readNbtVarInt(stack, var) + " " + value);
                              
                                      boolean isWrite = false;
                                      if (stack.hasTagCompound())
                                      {
                                             NBTTagCompound itemData = stack.getTagCompound();
                              
                                          String varName = var.toString();
                              
                                          if(itemData.hasKey(varName))
                                          {
                                          stack.getTagCompound().setInteger(varName, value);
                                             isWrite = true;
                                          }
                                      }
                                      JFunction.write("### : " + var + " " + nbtVar.readNbtVarInt(stack, var) + " " + isWrite);
                              
                                      return isWrite;
                              
                                     }
                              
                                     public static boolean incNbtVarInt(ItemStack stack, nbtVar var)
                                     {
                                      int i = readNbtVarInt(stack, var);
                              
                                      return writeNbtVar(stack, var, i + 1);
                                     }
                              
                                     public static boolean decNbtVarInt(ItemStack stack, nbtVar var)
                                     {
                                      int i = readNbtVarInt(stack, var);
                                      return writeNbtVar(stack, var, i - 1);
                                     }
                              
                              public static int readNbtVarInt(ItemStack stack, nbtVar var)
                              {
                              if (stack.hasTagCompound())
                              {
                              NBTTagCompound itemData = stack.getTagCompound();
                              
                              String varName = var.toString();
                              
                              if (itemData.hasKey(varName))
                              {
                              return stack.getTagCompound().getInteger(varName);
                              }
                              }
                              return 0;
                              }
                              
                                 }
                              […]
                                 @SideOnly(Side.CLIENT)
                              public static void drawTexturedModalRect(int x, int y, float z, int textureX, int textureY, int width, int height)
                              {
                              drawTexturedModalRect(x, y, z, textureX, textureY, width, height, 0.00390625F, 0.00390625F);
                              }
                              
                                 @SideOnly(Side.CLIENT)
                              public static void drawTexturedModalRect(int x, int y, float z, int textureX, int textureY, int width, int height, float f, float f1)
                              {
                              Tessellator tessellator = Tessellator.getInstance();
                                     WorldRenderer worldrenderer = tessellator.getWorldRenderer();
                              
                                     worldrenderer.startDrawingQuads();
                                     worldrenderer.addVertexWithUV(x + 0, y + height, z, (textureX + 0) * f, (textureY + height) * f1);
                                     worldrenderer.addVertexWithUV(x + width, y + height, z, (textureX + width) * f, (textureY + height) * f1);
                                     worldrenderer.addVertexWithUV(x + width, y + 0, z, (textureX + width) * f, (textureY + 0) * f1);
                                     worldrenderer.addVertexWithUV(x + 0, y + 0, z, (textureX + 0) * f, (textureY + 0) * f1);
                              tessellator.draw();
                              }
                              […]
                              public static void write (String text)
                              {
                              System.out.println(text);
                              }
                              

                              Si il manque d’autre fichier, je peu les rajouter si besoin, j’essaye juste d’éviter de mettre tout les fichiers pour que ceux qui comme toi accepte de perdre un peu de leurs temps pour aider les autres n’en perde justement pas trop à s’y retrouver dans les fichiers X)

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

                                public static int readNbtVarInt(ItemStack stack, nbtVar var)
                                {
                                if (stack.hasTagCompound())
                                {
                                NBTTagCompound itemData = stack.getTagCompound();
                                
                                if(var == nbtVar.RightCombo)
                                {
                                String varName = nbtVar.RightCombo.toString();
                                
                                if(itemData.hasKey(varName))
                                {
                                return stack.getTagCompound().getInteger(varName);
                                }
                                }
                                }
                                return 0;
                                }
                                

                                Pourquoi tu as une condition if(var == nbtVar.RightCombo) ici ?

                                1 réponse Dernière réponse Répondre Citer 0
                                • J Hors-ligne
                                  Jodge
                                  dernière édition par

                                  Autant pour moi, ce n’est pas toute à fait la bonne version du code (grâce ou a cause de Github, j’ai du récupérer une ancienne sauvegarde du code, parce que j’avais accidentellement tous effacé)

                                  La bonne version de la fonction est :

                                  public static int readNbtVarInt(ItemStack stack, nbtVar var)
                                  {
                                  if (stack.hasTagCompound())
                                  {
                                  NBTTagCompound itemData = stack.getTagCompound();
                                  
                                  String varName = var.toString();
                                  
                                  if (itemData.hasKey(varName))
                                  {
                                  return stack.getTagCompound().getInteger(varName);
                                  }
                                  }
                                  return 0;
                                  }
                                  

                                  Truc plutôt étrange, mon problème d’écriture c’est réglé lorsque j’ai ré-écrit le code manquant a cause de Github. Je suppose que j’ai enlever l’erreur en ré-écrivant le code ^^’ (note que l’erreur ne pouvais pas venir de read, car la fonction n’étais pas utilisé dans le write, sauf pour l’affichage. L’affichage étais donc peu être buguer, mais la valeur n’étais jamais atteinte, puisque l’objet n’étais jamais ré-initialisé, et que je n’utilisai pas encore les nouvelles fonction dans ma classe JScreen au moment du test)

                                  Du coup j’ai un problème qui persiste.
                                  Pour faire un timer, j’écrit tous les tic, dans un tag, et cela entraîne une ré-initialisation constante de l’objet (et donc de l’animation).
                                  il n’y a pas une manière différente de faire timer (moins gourmand en ressources, qui dure X tick pour chaque instance de l’objet, et qui se réinitialise dès que la condition change uniquement pour cette objet ?

                                  Voila ma classe a l’heure actuel :

                                  public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected)
                                  {
                                  if(stack.getTagCompound() == null)
                                         {
                                          stack.setTagCompound(new NBTTagCompound());
                                  
                                          stack.getTagCompound().setInteger("rC", 0); // Right Combo
                                          stack.getTagCompound().setInteger("rPC",0); // Right Previous Combo
                                          stack.getTagCompound().setInteger("lC", 0); // Left Combo
                                          stack.getTagCompound().setInteger("lPC", 0); // Left Previous Combo
                                          stack.getTagCompound().setInteger("aT",0); // actualTimer
                                         }
                                  
                                  if ((nbtVar.readNbtVarInt(stack, nbtVar.RightCombo) != 0) || (nbtVar.readNbtVarInt(stack, nbtVar.LeftCombo) != 0))
                                  {
                                  nbtVar.incNbtVarInt(stack, nbtVar.ActualCombo);
                                  if (nbtVar.readNbtVarInt(stack, nbtVar.ActualCombo) >= this.comboTimer)
                                  {
                                  nbtVar.writeNbtVar(stack, nbtVar.RightCombo, 0);
                                  nbtVar.writeNbtVar(stack, nbtVar.LeftCombo, 0);
                                  nbtVar.writeNbtVar(stack, nbtVar.ActualCombo, 0);
                                  }
                                  else if ( nbtVar.readNbtVarInt(stack, nbtVar.RightCombo) != nbtVar.readNbtVarInt(stack, nbtVar.RightPreviousCombo) ||
                                  nbtVar.readNbtVarInt(stack, nbtVar.LeftCombo) != nbtVar.readNbtVarInt(stack, nbtVar.LeftPreviousCombo))
                                  {
                                  nbtVar.writeNbtVar(stack, nbtVar.ActualCombo, 0);
                                  }
                                  if (nbtVar.readNbtVarInt(stack, nbtVar.RightCombo) != nbtVar.readNbtVarInt(stack, nbtVar.RightPreviousCombo))
                                  {
                                  nbtVar.writeNbtVar(stack, nbtVar.RightPreviousCombo, nbtVar.readNbtVarInt(stack, nbtVar.RightCombo));
                                  }
                                  if (nbtVar.readNbtVarInt(stack, nbtVar.LeftCombo) != nbtVar.readNbtVarInt(stack, nbtVar.LeftPreviousCombo))
                                  {
                                  nbtVar.writeNbtVar(stack, nbtVar.LeftPreviousCombo, nbtVar.readNbtVarInt(stack, nbtVar.LeftCombo));
                                  }
                                  }
                                  }
                                  
                                  1 réponse Dernière réponse Répondre Citer 0
                                  • robin4002R Hors-ligne
                                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                                    dernière édition par

                                    Tu l’utilises pour quoi ce timer ?

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • J Hors-ligne
                                      Jodge
                                      dernière édition par

                                      J’utilise le tag “ActualTimer” qui est incrémenter de 1 chaque tick tan que l’un des deux tags (“RightClic” ou LeftClic") est différent de 0.

                                      Lorsque mon tag “ActualTimer” est supérieur à ma Variable “comboTimer” (variable ce coup ci attention) alors tous mes tag sont ré-initialisé a 0 (et donc le timer ce désactive).

                                      Si, au cour de l’un des itérations de mon Timer (d’ou la nécessité de l’effectuer chaque tic), un des deux tags “RightClic” ou LeftClic" est modifier (chose que je vérifie grâce aux tags “RightPreviousClic” et “LeftPreviousClic”), alors je ré-initialise mon tag “ActualTimer” le timer continue alors, mais le tag reprend la valeur 0.

                                      Je ne sais pas si j’ai été assez clair ^^’

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

                                        Je ne vois pas d’autres façons de faire 😕
                                        Ce que tu peux par contre faire c’est actualisé ton time toutes les secondes au lieu de tous les ticks.

                                        1 réponse Dernière réponse Répondre Citer 0
                                        • J Hors-ligne
                                          Jodge
                                          dernière édition par

                                          Comment cas ? onUptade est appeler tout les ticks, comment je peu définir pour que ce ne soit que toute les minutes ?

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

                                            Ajoute dans ta classe deux variables :
                                            private static final long start = System.currentTimeMillis() / 1000;
                                            private static int seconds = 0
                                            Ensuite dans ta fonction update :

                                            if(seconds != (int)(System.currentTimeMillis() / 1000 - start))
                                            {
                                            // ton action ici, elle ne sera que faite toutes les secondes
                                            seconds = (int)(System.currentTimeMillis() / 1000 - start);
                                            }
                                            

                                            C’est le moyen le plus propre pour faire ça.

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

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB