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

      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
                      • A Hors-ligne
                        aypristyle
                        dernière édition par

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

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

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

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

                              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 réponse Dernière réponse Répondre Citer 0
                              • A Hors-ligne
                                aypristyle
                                dernière édition par

                                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 réponse Dernière réponse Répondre Citer 0
                                • A Hors-ligne
                                  Alexzaros
                                  dernière édition par

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

                                    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 réponse Dernière réponse Répondre Citer 0
                                    • A Hors-ligne
                                      Alexzaros
                                      dernière édition par

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

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

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

                                          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 réponse Dernière réponse Répondre Citer 0
                                          • A Hors-ligne
                                            Alexzaros
                                            dernière édition par

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

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB