MFF

    Minecraft Forge France
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Forge Events
      • Auto
      • Dark
      • Light
    • Register
    • Login

    [1.12] Créer un four

    Scheduled Pinned Locked Moved Les interfaces (GUI) et les container
    1.11.x
    58 Posts 13 Posters 16.1k Views 7 Watching
    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.
    • A Offline
      aypristyle
      last edited by

      Bonjour j’ai bien mis l’addrecipe au bon emplacement pourtant je n’arrive pas à faire fonctionner ma recette in-game (mon projet ne contient aucune erreur repérée par eclipse) je met ma classe recette au cas-où elle pourrait être utile

      package fr.priya.simpleores.gui;
      
      import java.util.HashMap;
      import java.util.Iterator;
      import java.util.Map.Entry;
      
      import net.minecraft.init.Items;
      import net.minecraft.item.Item;
      import net.minecraft.item.ItemStack;
      
      public class RecipesCustomFurnace {
      //mettre des recettes
      private static final HashMap <itemstack[], itemstack="">recipes = new HashMap<itemstack[], itemstack="">();
      static {
         addRecipe(Items.APPLE, Items.ARROW, Items.BAKED_POTATO);
      }
      private static void addRecipe(Item ingredient1, Item ingredient2, Item resultat1) {
      addRecipe(new ItemStack(ingredient1), new ItemStack(ingredient2), new ItemStack(resultat1));
      }
      
      private static void addRecipe(ItemStack ingredient1, ItemStack ingredient2, ItemStack resultat1) {
      recipes.put(new ItemStack[]{ingredient1, ingredient2}, resultat1);
      }
      private static boolean areKeysEqual(ItemStack[] key1, ItemStack[] key2) {
      if(key1.length != key2.length) return false;
      
      for(int i = 0; i < key1.length; i++) {
      ItemStack s1 = key1*; //j'ai ajouter le sélecteur * pour résoudre une erreur j'ai essayer avec les sélecteurs [i++] et [i–] pour sélectionner l'élément précédent et suivant sans succès 
      ItemStack s2 = key2*;
      if(s1.isEmpty() && !s2.isEmpty()) return false;
      if(!s1.isEmpty() && s2.isEmpty()) return false;
      if(s1.getItem() != s2.getItem()) return false;
      if(s1.getItemDamage() != s2.getItemDamage()) return false;
      }
      return true;
      }
      public static ItemStack getRecipeResult(ItemStack[] ingredients) {
      Iterator<entry<itemstack[], itemstack="">> it = recipes.entrySet().iterator();
      while(it.hasNext()) {
      Entry <itemstack[], itemstack="">entry = it.next();
      if(areKeysEqual(entry.getKey(), ingredients)) {
      return entry.getValue();
      }
      }
      return null;
      }
      }
      
      ```</itemstack[],></entry<itemstack[],></itemstack[],></itemstack[],>

      **Je suis un membre apprécié et joueur, j'ai déjà obtenu 1[ point de réputation./…

      1 Reply Last reply Reply Quote 0
      • BrokenSwingB Offline
        BrokenSwing Moddeurs confirmés Rédacteurs
        last edited by

        Cette classe ne va pas m’aider, il faudrait plutôt la classe de ton TE (en fait c’est la fonction update qui est m’intéresse, et toutes les fonctions appelées par update)

        1 Reply Last reply Reply Quote 0
        • A Offline
          aypristyle
          last edited by

          Voici les fonctions appelées a chaque tick de ma classe tile entity

          @Override
          public void tick() {
          if (!this.world.isRemote) {
          
          /* Si le carburant brûle, on réduit réduit le temps restant */
          if (this.isBurning()) {
          this.burningTimeLeft–;
          }
          
          /*
          * Si la on peut faire cuire la recette et que le four ne cuit pas
          * alors qu'il peut, alors on le met en route
          */
          if (!this.isBurning() && this.canSmelt() && !this.hasFuelEmpty()) {
          this.burningTimeLeft = this.getFullBurnTime();
          this.decrStackSize(2, 1);
          this.decrStackSize(3, 1);
          }
          
          /* Si on peut faire cuire la recette et que le feu cuit */
          if (this.isBurning() && this.canSmelt()) {
          this.timePassed++;
          if (timePassed >= this.getFullRecipeTime()) {
          timePassed = 0;
          this.smelt();
          }
          } else {
          timePassed = 0;
          }
          this.markDirty();
          }
          }
          
          

          je met ma classe entière en pièce jointe ci besoin

          **Je suis un membre apprécié et joueur, j'ai déjà obtenu 1[ point de réputation./…

          1 Reply Last reply Reply Quote 0
          • BrokenSwingB Offline
            BrokenSwing Moddeurs confirmés Rédacteurs
            last edited by

            Pourquoi ta fonction s’apelle-t-elle tick ? En 1.12 c’est update qu’elle s’appelle

            1 Reply Last reply Reply Quote 0
            • A Offline
              aypristyle
              last edited by

              Parce que je suis en 1.11 et j’ai suivi le tuto quand il était en 1.11

              **Je suis un membre apprécié et joueur, j'ai déjà obtenu 1[ point de réputation./…

              1 Reply Last reply Reply Quote 0
              • BrokenSwingB Offline
                BrokenSwing Moddeurs confirmés Rédacteurs
                last edited by

                En fait tu as implémenté la mauvaise interface, il faut implémenter net.minecraft.util.ITickable et non net.minecraft.client.renderer.texture.ITickable

                1 Reply Last reply Reply Quote 0
                • A Offline
                  aypristyle
                  last edited by

                  Merci beaucoup BrokenSwing !! Tout fonctionne maintenant

                  **Je suis un membre apprécié et joueur, j'ai déjà obtenu 1[ point de réputation./…

                  1 Reply Last reply Reply Quote 0
                  • A Offline
                    Alexzaros
                    last edited by

                    Bonjour,

                    J’ai un problème avec l’enregistrement du nom-custom :
                    (code en piéces jointe)

                    • je renomme le four, je le pose, le nom apparaît.
                      le nom dans toutes les fonctions apparaît, je redémarre :

                    la fonction hascustomname renvoie true en début de partie.
                    WriteToNBT affiche bien “test”.
                    cependant readfromnbt lui affiche null.
                    Les getters et setter ont bien “test”, le container et le gui handler cotes serveur a bien “test”,
                    cependant celui cotes client et le gui affiche null.

                    ensuite une fois le container ouvert :
                    hascustomname devient false et toute les fonction affiche null (même le container).

                    une fois partit, et le menu pour quitter afficher, has affiche true et writeToNBT affiche
                    “test”.

                    merci d’avance
                    Cordialement, Alexzaros.

                    1 Reply Last reply Reply Quote 0
                    • BrokenSwingB Offline
                      BrokenSwing Moddeurs confirmés Rédacteurs
                      last edited by

                      J’ai pas le temps de tester avec tes sources, mais essai de changer le 8 dans java if (compound.hasKey("CustomName", 8)) { par ```java
                      NBT.TAG_STRING

                      1 Reply Last reply Reply Quote 0
                      • A Offline
                        Alexzaros
                        last edited by

                        Ca n’a rien changer, j’avais essayer hier d’enlever carrément le bloc conditionnel sa n’avais rien changer… Mais c’est quand même bizarre que certaine fonction on bien le nom, que l’enregistrement fonctionne mais que la fonction read n’arrive pas a charger le nom, normalement dans ce cas les autres fonction ne devrait pas avoir le nom ?
                        En tout cas merci pour votre réponse rapide ^^ en espérant que nous allons trouver ce qui ne va pas …

                        EDIT: D’ailleurs javais essayer aussi avec un autre block, de modifier via un bouton un boolean sa le modifier bien mais le block n’avais pas le bon boolean (il était toujours a false) et je crois que la fonction readFromNBT ne l’avais pas non plus (je me rappelle plus trop sa date de quelque jour déjà ^^').

                        1 Reply Last reply Reply Quote 0
                        • BrokenSwingB Offline
                          BrokenSwing Moddeurs confirmés Rédacteurs
                          last edited by

                          Dans le cas de ton bouton c’est un problème de synchronisation

                          1 Reply Last reply Reply Quote 0
                          • A Offline
                            Alexzaros
                            last edited by

                            Mais sa voudrais dire que quand le gui (cotes client) utilise world.getTileEntity(pos) sa renvoie pas la même chose lorsque le block le fait ?
                            De plus comment synchroniser car je n’est pas réussie a utiliser les packet, et je ne sais pas vraiment quoi synchroniser avec qui …

                            Et pour le custom furnace du coup sa peu être quoi ?

                            Merci.
                            Cordialement, Alexzaros.

                            1 Reply Last reply Reply Quote 0
                            • A Offline
                              Alexzaros
                              last edited by

                              J’ai compris un truc :
                              Je nomme le four le thread main et server ont tout deux “test”
                              je redémarre seulement le thread server a “test”
                              j’ai essayer de synchroniser par le biais du container sa ne change rien car il sont désynchroniser des le démarrage…

                              EDIT: D’ailleurs même lors de la sauvegarde du nbt (faites sur le thread server) il y a bien “test”, donc server et client ne sont pas du  tout synchro du début a la fin, si non la valeur serait perdu …


                              J’ai enfin trouver ! En faites j’ai trouver sur une page de ce site : https://www.minecraftforgefrance.fr/showthread.php?tid=4752 (comme quoi je chercher trop loin …)
                              j’ai rajouter ces fonction dans le tile entity : 
                                  @Nullable
                                  public SPacketUpdateTileEntity getUpdatePacket()
                                  {
                                      return new SPacketUpdateTileEntity(this.pos, 1, this.getUpdateTag());
                                  }

                              public NBTTagCompound getUpdateTag()
                                  {
                                      return this.writeToNBT(new NBTTagCompound());
                                  }

                              getUpdatePacket() n’a pas l’air de faire grand chose car quand je la met entre commentaire sa fonctionne quand même.

                              voila ^^ ce que je comprend pas par contre c’est que je soit le seul a avoir eu ce problème … ou le seul a avoir demander de l’aide…

                              En tout cas merci pour tout ^^.

                              1 Reply Last reply Reply Quote 0
                              • Gollum1erG Offline
                                Gollum1er
                                last edited by

                                Salut !
                                Le code contient une erreur dans les recipes :

                                private static boolean areKeysEqual(ItemStack[] key1, ItemStack[] key2) {
                                
                                    if(key1.length != key2.length) return false;
                                
                                 
                                
                                    for(int i = 0; i < key1.length; i++) {
                                
                                        ItemStack s1 = key1[i];
                                
                                        ItemStack s2 = key2[i};
                                
                                        if(s1.isEmpty() && !s2.isEmpty()) return false;
                                
                                        if(!s1.isEmpty() && s2.isEmpty()) return false;
                                
                                        if(s1.getItem() != s2.getItem()) return false;
                                
                                        if(s1.getItemDamage() != s2.getItemDamage()) return false;
                                
                                    }
                                
                                    return true;
                                
                                }
                                

                                Devrait s’écrire comme ceci, sinon cela donne une erreur :

                                private static boolean areKeysEqual(ItemStack[] key1, ItemStack[] key2) {
                                
                                    if(key1.length != key2.length) return false;
                                
                                 
                                
                                    for(int i = 0; i < key1.length; i++) {
                                
                                        ItemStack s1 = key1[i];
                                
                                        ItemStack s2 = key2[i];
                                
                                        if(s1.isEmpty() && !s2.isEmpty()) return false;
                                
                                        if(!s1.isEmpty() && s2.isEmpty()) return false;
                                
                                        if(s1.getItem() != s2.getItem()) return false;
                                
                                        if(s1.getItemDamage() != s2.getItemDamage()) return false;
                                
                                    }
                                
                                    return true;
                                
                                }
                                

                                Sinon très bon tuto 🙂 ! Bonne journée !

                                My name is Gollum1er :)

                                BrokenSwingB 1 Reply Last reply Reply Quote 0
                                • BrokenSwingB Offline
                                  BrokenSwing Moddeurs confirmés Rédacteurs @Gollum1er
                                  last edited by

                                  @Gollum1er C’est réglé, merci

                                  1 Reply Last reply Reply Quote 0
                                  • HeavenH Offline
                                    Heaven
                                    last edited by Heaven

                                    This post is deleted!
                                    1 Reply Last reply Reply Quote 0
                                    • A Offline
                                      Aiko
                                      last edited by

                                      Bonjour, j’ai suivi le tuto à lettre pour voir si cela fonctionner, malheureusement une erreur survient, si j’ai bien compris ma textures n’est pas trouver. Voici l’erreur tout de même :

                                      [13:15:30] [Server thread/ERROR] [FML]: A TileEntity type com.aiko.cenamicolmod.te.TileEntityAnvil has throw an exception trying to write state. It will not persist. Report this to the mod author
                                      java.lang.RuntimeException: class com.aiko.cenamicolmod.te.TileEntityAnvil is missing a mapping! This is a bug!
                                      	at net.minecraft.tileentity.TileEntity.writeInternal(TileEntity.java:89) ~[TileEntity.class:?]
                                      	at net.minecraft.tileentity.TileEntity.writeToNBT(TileEntity.java:80) ~[TileEntity.class:?]
                                      	at net.minecraft.tileentity.TileEntityLockable.writeToNBT(TileEntityLockable.java:22) ~[TileEntityLockable.class:?]
                                      	at com.aiko.cenamicolmod.te.TileEntityAnvil.writeToNBT(TileEntityAnvil.java:38) ~[TileEntityAnvil.class:?]
                                      	at net.minecraft.world.chunk.storage.AnvilChunkLoader.writeChunkToNBT(AnvilChunkLoader.java:415) [AnvilChunkLoader.class:?]
                                      	at net.minecraft.world.chunk.storage.AnvilChunkLoader.saveChunk(AnvilChunkLoader.java:186) [AnvilChunkLoader.class:?]
                                      	at net.minecraft.world.gen.ChunkProviderServer.saveChunkData(ChunkProviderServer.java:214) [ChunkProviderServer.class:?]
                                      	at net.minecraft.world.gen.ChunkProviderServer.saveChunks(ChunkProviderServer.java:242) [ChunkProviderServer.class:?]
                                      	at net.minecraft.world.WorldServer.saveAllChunks(WorldServer.java:1061) [WorldServer.class:?]
                                      	at net.minecraft.server.MinecraftServer.saveAllWorlds(MinecraftServer.java:468) [MinecraftServer.class:?]
                                      	at net.minecraft.server.integrated.IntegratedServer.saveAllWorlds(IntegratedServer.java:274) [IntegratedServer.class:?]
                                      	at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:766) [MinecraftServer.class:?]
                                      	at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:192) [IntegratedServer.class:?]
                                      	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:592) [MinecraftServer.class:?]
                                      	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_201]
                                      
                                      

                                      Je suis en 1.12.2 si cela peut aider.
                                      Merci d’avance pour l’aide.

                                      1 Reply Last reply Reply Quote 0
                                      • BrokenSwingB Offline
                                        BrokenSwing Moddeurs confirmés Rédacteurs
                                        last edited by

                                        Salut,

                                        Tu n’as pas enregistré ta TileEntity dans le registre.

                                        A 1 Reply Last reply Reply Quote 0
                                        • A Offline
                                          Aiko @BrokenSwing
                                          last edited by

                                          @BrokenSwing C’est à dire ?

                                          BrokenSwingB 1 Reply Last reply Reply Quote 0
                                          • BrokenSwingB Offline
                                            BrokenSwing Moddeurs confirmés Rédacteurs @Aiko
                                            last edited by

                                            @Aiko C’est à dire que tu n’as pas bien suivi le tuto 🙂 Il te manque très certainement la ligne suivante : GameRegistry.registerTileEntity(TileCustomFurnace.class, "modid:tile_custom_furnace");

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

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB