MFF

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

    [1.12] Créer un four

    Planifier Épinglé Verrouillé Déplacé Les interfaces (GUI) et les container
    1.11.x
    58 Messages 13 Publieurs 15.9k Vues 7 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.
    • BrokenSwingB Hors-ligne
      BrokenSwing Moddeurs confirmés Rédacteurs
      dernière édition par

      Je l’ai écrit ce matin et en début d’après-midi, c’est vrai que c’est long mais en organisant correctement tes classes tu peux être capable de créer plusieurs machines sans tout refaire à chaque fois. En tout cas merci.

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

        Bonjour,
        J’ai crée mon réacteur nucléaire avec ma classe ReactorRecipes qui enregistre les différentes recette sous cette forme:

        addItemRecipe(Items.COAL, new ItemStack(ItemHandler.radioactiveCoal), 0.35F);
        public void addItemRecipe(Item itemCombustible, ItemStack result, float experience)

        Mais ma question est de savoir comment rajouter un 4ème argument déterminant le temps de la cuisson ? J’ai vaguement vu que tu en parlais dans la classe Container, mais je voudrai le mettre dans ma classe Recipes. Une piste, un indice ? Merci d’avance !

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

          Je pense qu’il suffit de changer la méthode getFullRecipeTime() pour donner la valeur en fonction de la recette en cours. Ensuite, dans le Gui, pour que la barre de chargement fonctionne bien, il faut modifier dans la méthode drawGuiBackgroundLayer(), le calcul de textureWidth en changent le 200f en this.tile.getFullRecipeTime().

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

            Il faut que tu renvoie une valeur différente suivant les “ingrédients” que tu as dans ta recette ici :

            
            /** Temps de cuisson de la recette */
            public int getFullRecipeTime() {
            return 200;
            }
            
            

            Avec une fonction du type : public static int ReactorRecipes.getTimeNeededFor(ItemStack[] ingredients)

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

              Merci à vous deux, je vais essayer !
              EDIT = Tout marche à merveille 😃

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

                Ahah, je vais peut etre essayé finalement, j’ai l’idée de quelques chose qui va pas etre piqué des hannetons 😄 je vous demanderais de l’aide si je n’arrive pas !

                Il y a deux choses qui m'énerve dans la vie : les babouches et les personnes jouant en 1.7.10 !

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

                  Bonjour j’ai suivi le tutoriel mais j’ai une petite erreur dans ma classe Container dans la méthode pour mettre à jour ma TileEntity voici l’erreur en question :
                  sur la ligne ```java
                  if (this.burnTimeLeft != this.tile.getField(0)) {
                  icontainerlistener.sendProgressBarUpdate(this, 0,
                  this.tile.getField(0));
                  }

                  voici 
                  
                  • The method sendProgressBarUpdate(ContainerCustomFurnace, int, int) is undefined for the type
                    IContainerListener

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

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

                    ContainerCustomFurnace hérite bien de Container ?

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

                      oui l’héritage est bon, je met ma classe Container ci-dessous

                      package fr.priya.simpleores.gui;
                      
                      import net.minecraft.entity.player.EntityPlayer;
                      import net.minecraft.entity.player.InventoryPlayer;
                      import net.minecraft.init.Blocks;
                      import net.minecraft.inventory.InventoryCrafting;
                      import net.minecraft.init.Items;
                      import net.minecraft.inventory.Container;
                      import net.minecraft.inventory.IContainerListener;
                      import net.minecraft.inventory.Slot;
                      import net.minecraft.item.Item;
                      import net.minecraft.item.ItemStack;
                      import net.minecraftforge.fml.relauncher.Side;
                      import net.minecraftforge.fml.relauncher.SideOnly;
                      
                      public class ContainerCustomFurnace extends Container{
                      private TileEntityCustomFurnace tile;
                      private int timePassed = 0;
                      private int burnTimeLeft = 0;
                      
                      public ContainerCustomFurnace(TileEntityCustomFurnace tile, InventoryPlayer playerInventory)
                      {
                      int i;
                      for(i = 0; i < 2; i++)
                      {
                      this.addSlotToContainer(new Slot(tile, i, 33 + i*18, 7));
                      }
                      for(i = 0; i < 2; i++)
                      {
                      this.addSlotToContainer(new SlotSingleItem(tile, i + 2, 42, 40 + i* 18, i == 0 ? Item.getItemFromBlock(Blocks.PLANKS) : Items.WHEAT));
                      }
                      this.addSlotToContainer(new SlotOutput(tile, 4, 116, 17));
                      
                      for(i = 0; i < 3; ++i) {
                      for(int j = 0; j < 9; ++j) {
                      this.addSlotToContainer(new Slot(playerInventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
                      }
                      }
                      
                      for(i = 0; i < 9; ++i) {
                      this.addSlotToContainer(new Slot(playerInventory, i, 8 + i * 18, 142));
                      }
                      }
                      
                      public boolean canInteractWith(EntityPlayer player)
                      {
                      return tile.isUsableByPlayer(player);
                      }
                      
                      public void addListener(IContainerListener listener) {
                      super.addListener(listener);
                      listener.sendAllWindowProperties(this, this.tile);
                      }
                      
                      @Override
                      public void detectAndSendChanges() {
                      super.detectAndSendChanges();
                      
                      for(int i = 0; i < this.listeners.size(); ++i) {
                      IContainerListener icontainerlistener = (IContainerListener) this.listeners.get(i);
                      
                      if (this.burnTimeLeft != this.tile.getField(0)) {
                      icontainerlistener.sendProgressBarUpdate(this, 0,
                      this.tile.getField(0));
                      }
                      
                      if (this.timePassed != this.tile.getField(1)) {
                      icontainerlistener.sendProgressBarUpdate(this, 1,
                      this.tile.getField(1));
                      }
                      }
                      
                      this.burnTimeLeft = this.tile.getField(0);
                      this.timePassed = this.tile.getField(1);
                      }
                      
                      @SideOnly(Side.CLIENT)
                      public void updateProgressBar(int id, int data) {
                      this.tile.setField(id, data);
                      }
                      
                      public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) {
                      return ItemStack.EMPTY;
                      }
                      
                      }
                      
                      

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

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

                        C’est bizarre parce que la définition est la suivante : IContainerListener#sendProgressBarUpdate(Container containerIn, int varToUpdate, int newValue)
                        Donc il n’y a pas de raison pour que cela ne fonctionne pas.


                        Ce tutoriel concerne la 1.11, es-tu bien en 1.11 ?

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

                          Non elle a changé de nom récemment (1.12 je crois), regardes dans le code l’interface IContainerListener il y aura une fonction avec les mêmes arguments c’est celle là.

                          Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                          AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                          Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                          Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                          1 réponse Dernière réponse Répondre Citer 1
                          • BrokenSwingB Hors-ligne
                            BrokenSwing Moddeurs confirmés Rédacteurs
                            dernière édition par

                            C’est bien pourquoi je précise que ce tutoriel est pour la 1.11.

                            1 réponse Dernière réponse Répondre Citer 1
                            • A Hors-ligne
                              aypristyle
                              dernière édition par

                              Je suis bien en 1.11 je vais essayer d’update mes mappings pour voir
                              EDIT: même avec les derniers mappings ça ne fonctionne pas je l’ai remplacer par la fonction sendWindowProperty et maitenant mon jeu crash lorsque je fait clique droit sur mon block
                              Voici les logs

                              –-- Minecraft Crash Report ----
                              // Surprise! Haha. Well, this is awkward.
                              
                              Time: 16/07/17 11:56
                              Description: Ticking player
                              
                              java.lang.NullPointerException: Ticking player
                              at fr.priya.simpleores.gui.ContainerCustomFurnace.detectAndSendChanges(ContainerCustomFurnace.java:62)
                              at net.minecraft.entity.player.EntityPlayerMP.onUpdate(EntityPlayerMP.java:293)
                              at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2152)
                              at net.minecraft.world.WorldServer.updateEntityWithOptionalForce(WorldServer.java:879)
                              at net.minecraft.world.World.updateEntity(World.java:2119)
                              at net.minecraft.world.WorldServer.tickPlayers(WorldServer.java:680)
                              at net.minecraft.world.World.updateEntities(World.java:1908)
                              at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:651)
                              at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:795)
                              at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:699)
                              at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:156)
                              at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:548)
                              at java.lang.Thread.run(Unknown Source)
                              
                              A detailed walkthrough of the error, its code path and all known details is as follows:
                              ---------------------------------------------------------------------------------------
                              
                              -- Head --
                              Thread: Server thread
                              Stacktrace:
                              at fr.priya.simpleores.gui.ContainerCustomFurnace.detectAndSendChanges(ContainerCustomFurnace.java:62)
                              at net.minecraft.entity.player.EntityPlayerMP.onUpdate(EntityPlayerMP.java:293)
                              at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2152)
                              at net.minecraft.world.WorldServer.updateEntityWithOptionalForce(WorldServer.java:879)
                              at net.minecraft.world.World.updateEntity(World.java:2119)
                              
                              -- Player being ticked --
                              Details:
                              Entity Type: null (net.minecraft.entity.player.EntityPlayerMP)
                              Entity ID: 281
                              Entity Name: Player177
                              Entity's Exact location: 257,83, 64,00, 224,36
                              Entity's Block location: World: (257,64,224), Chunk: (at 1,4,0 in 16,14; contains blocks 256,0,224 to 271,255,239), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)
                              Entity's Momentum: 0,00, -0,08, 0,00
                              Entity's Passengers: []
                              Entity's Vehicle: ~~ERROR~~ NullPointerException: null
                              Stacktrace:
                              at net.minecraft.world.WorldServer.tickPlayers(WorldServer.java:680)
                              at net.minecraft.world.World.updateEntities(World.java:1908)
                              at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:651)
                              
                              -- Affected level --
                              Details:
                              Level name: New World
                              All players: 1 total; [EntityPlayerMP['Player177'/281, l='New World', x=257,83, y=64,00, z=224,36]]
                              Chunk stats: ServerChunkCache: 626 Drop: 0
                              Level seed: 2481567272931423200
                              Level generator: ID 00 - default, ver 1\. Features enabled: true
                              Level generator options:
                              Level spawn location: World: (252,64,236), Chunk: (at 12,4,12 in 15,14; contains blocks 240,0,224 to 255,255,239), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)
                              Level time: 184333 game time, 824 day time
                              Level dimension: 0
                              Level storage version: 0x04ABD - Anvil
                              Level weather: Rain time: 1 (now: false), thunder time: 1 (now: false)
                              Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: true
                              Stacktrace:
                              at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:795)
                              at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:699)
                              at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:156)
                              at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:548)
                              at java.lang.Thread.run(Unknown Source)
                              
                              – System Details --
                              Details:
                              Minecraft Version: 1.11
                              Operating System: Windows 10 (amd64) version 10.0
                              Java Version: 1.8.0_131, Oracle Corporation
                              Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
                              Memory: 657540448 bytes (627 MB) / 1056309248 bytes (1007 MB) up to 1056309248 bytes (1007 MB)
                              JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
                              IntCache: cache: 1, tcache: 1, allocated: 12, tallocated: 94
                              FML: MCP 9.35 Powered by Forge 13.19.1.2189 4 mods loaded, 4 mods active
                              States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
                              UCHIJAAAA mcp{9.19} [Minecraft Coder Pack] (minecraft.jar)
                              UCHIJAAAA FML{8.0.99.99} [Forge Mod Loader] (forgeSrc-1.11-13.19.1.2189.jar)
                              UCHIJAAAA forge{13.19.1.2189} [Minecraft Forge] (forgeSrc-1.11-13.19.1.2189.jar)
                              UCHIJAAAA simpleores{0.1} [Simple ores] (bin)
                              Loaded coremods (and transformers):
                              GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.
                              Profiler Position: N/A (disabled)
                              Player Count: 1 / 8; [EntityPlayerMP['Player177'/281, l='New World', x=257,83, y=64,00, z=224,36]]
                              Type: Integrated Server (map_client.txt)
                              Is Modded: Definitely; Client brand changed to 'fml,forge'
                              

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

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

                                Dans le constructeur de ton container tu as oublié

                                this.tile = tile;
                                
                                1 réponse Dernière réponse Répondre Citer 1
                                • A Hors-ligne
                                  aypristyle
                                  dernière édition par

                                  Merci beaucoup tout fonctionne, juste une dernière petite question comment fait-on pour ajouter des recettes pour notre four ?
                                  J’ai essayé ceci que j’ai mis dans ma classe recettes sans succès ```java
                                  addRecipe(new Item(SimpleoresItems.CORN), new ItemStack(Items.SUGAR), new ItemStack(SimpleoresItems.CORN_SEED));

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

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

                                    addRecipe(new ItemStack(SimpleoresItems.CORN), new ItemStack(Items.SUGAR), new ItemStack(SimpleoresItems.CORN_SEED));
                                    

                                    Tutoriel testé et corrigé. Il fonctionne et peut être déplacé.

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

                                      Bonjour je n’arrive pas a ajouter mes recettes j’ai essayer de les mettres sous les addRecipes dans ma classe Recettes mais cela ne fonctionne pas

                                      package fr.priya.simpleores.gui;
                                      
                                      import java.util.HashMap;
                                      import java.util.Iterator;
                                      import java.util.Map.Entry;
                                      
                                      import fr.priya.simpleores.items.SimpleoresItems;
                                      import net.minecraft.init.Items;
                                      import net.minecraft.item.Item;
                                      import net.minecraft.item.ItemStack;
                                      
                                      public class RecipesCustomFurnace {
                                      private static HashMap <itemstack[], itemstack="">recipes = new  HashMap<itemstack[], itemstack="">();
                                      //ajouter les recettes
                                      private static void addRecipe(Item ingredient1, Item ingredient2, Item resultat1) {
                                      addRecipe(new ItemStack(ingredient1), new ItemStack(ingredient2), new ItemStack(resultat1));
                                      //j'ai essayer de le mettre ici
                                      }
                                      
                                      private static void addRecipe(ItemStack ingredient1, ItemStack ingredient2, ItemStack resultat1) {
                                      recipes.put(new ItemStack[]{ingredient1, ingredient2}, resultat1);
                                      //et ici
                                      }
                                      
                                      //comparer les items stacks
                                      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*;
                                      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;
                                      }
                                      //fonction pour trouver la recette
                                      public static ItemStack getRecipesResult(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 réponse Dernière réponse Répondre Citer 0
                                      • BrokenSwingB Hors-ligne
                                        BrokenSwing Moddeurs confirmés Rédacteurs
                                        dernière édition par

                                        Il faut mettre les addRecipe dans un bloc static, regarde ici : https://www.minecraftforgefrance.fr/showthread.php?tid=4386#classerecette

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

                                          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 réponse Dernière réponse Répondre Citer 0
                                          • BrokenSwingB Hors-ligne
                                            BrokenSwing Moddeurs confirmés Rédacteurs
                                            dernière édition par

                                            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 réponse Dernière réponse Répondre Citer 0
                                            • 1
                                            • 2
                                            • 3
                                            • 1 / 3
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            ContactMentions Légales

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB