Créer une armure


  • Rédacteurs

    Sommaire

    Introduction

    Nous allons voir comment créer une armure.

    Pré-requis

    Code

    La classe principale

    Dans la classe principale créez 4 items qui correspondrons aux éléments de votre armure.

    public static final Item tuto_helmet = new TutorielArmor(EntityEquipmentSlot.HEAD).setRegistryName("tuto_helmet").setUnlocalizedName("tuto_helmet");
    public static final Item tuto_chestplate = new TutorielArmor(EntityEquipmentSlot.CHEST).setRegistryName("tuto_chestplate").setUnlocalizedName("tuto_chestplate");
    public static final Item tuto_leggings = new TutorielArmor(EntityEquipmentSlot.LEGS).setRegistryName("tuto_leggings").setUnlocalizedName("tuto_leggings");
    public static final Item tuto_boots = new TutorielArmor(EntityEquipmentSlot.FEET).setRegistryName("tuto_boots").setUnlocalizedName("tuto_boots");
    

    La classe TutorielArmor n'existe pas, nous allons la créer après.
    Enregistrez les items dans la fonction fonction preInit(FMLPreInitialization event) de votre mod

    GameRegistry.register(tuto_helmet);
    GameRegistry.register(tuto_chestplate);
    GameRegistry.register(tuto_leggings);
    GameRegistry.register(tuto_boots);
    

    Passons à la classe de l'armure.

    La classe de l'armure :

    Créez la classe de l'armure, je l'ai appelé TutorielArmor comme nous l'avons vu. Faites hériter cette classe de la classe ItemArmor.
    Et mettez le constructeur suivant :

    
    public TutorielArmor(EntityEquipmentSlot equipmentSlotIn) {
        super(material, 0, equipmentSlotIn);
    }
    
    

    Le premier argument est le matériau de votre armure, nous allons le créer après. Le second argument est un id de rendu, mais c'est utiliser pour les
    classes de minecraft, ça ne change rien ici. Le troisième argument est le slot d'armure dans lequel l'objet sera.

    Vous allez créer une variable de classe nommée material de type ArmorMaterial de la façon suivante.

    
    public static final ArmorMaterial material = EnumHelper.addArmorMaterial("armortuto", ModTutoriel.MODID + ":armortuto", 500, new int[]{4, 6, 7, 3}, 17, SoundEvents.ITEM_ARMOR_EQUIP_DIAMOND, 0.0F);
    
    

    Ici nous utilisons une classe implémentée par forge afin de créer un matériau d'armure qui estEnumHelper), le premier argument est le nom du matériau, le second est
    le nom de la texture, vous devez mettre sous la forme modid:nomTex, et le jeu ira chercher vos textures (oui il en faut 2) dans
    assets.modid.textures.models.armor.nomTex_layer_1 et assets.modid.textures.models.armor.nomTex_layer_2. Le layer 1 contient tout les éléments
    de l'armure sauf le pantalon, et le layer 2 contient le pantalon. Ensuite vient le troisième argument, c'est la durabilité de l'armure.
    Le tableau d'entier correspond à l'absortion de chaque pièce (bottes, pantalons, plastron, casque), l'argument d'après est le son à jouer lorsqu'on équipe l'armure
    Le dernier argument correspond à la dureté de l'armure, c'est une autre réduction de dégâts.

    Pour préciser quel objet doit être utilisé pour réparer votre armure rajoutez un bloc static en dessous de la déclaration de votre matériau avec le code suivant.

    material.customCraftingMaterial = Items.APPLE;
    

    Ici on réparera l'armure avec une pomme.

    On obtient alors :

    public class TutorielArmor extends ItemArmor {
    
        public static final ArmorMaterial material = EnumHelper.addArmorMaterial("armortuto", ModTutoriel.MODID + ":armortuto", 500, new int[]{4, 6, 7, 3}, 17, SoundEvents.ITEM_ARMOR_EQUIP_DIAMOND, 0.0F);
        static {
            material.customCraftingMaterial = Items.APPLE;
        }
    
        public TutorielArmor(EntityEquipmentSlot equipmentSlotIn) {
            super(material, 0, equipmentSlotIn);
        }
    }
    

    Les textures

    Enregistrez les textures d'inventaire comme si c'était des objets normaux, pour le rendu sur le joueur il faut donc, comme dit précédemment,
    placer les textures dans le package assets.modid.textures.models.armor, ce qui me donne :
    assets.modid.textures.models.armor.armortuto_layer_1.png et assets.modid.textures.models.armor.armortuto_layer_2, voici les layers :


    Bonus

    Vous allez vite vous rendre compte que vos armures sont capables de vous rendre invicible et cela en augmentant un peu la résistance du matériau.
    Ici nous allons voir comment personnaliser la résistance de votre armure.

    Dans la classe de votre armure, implémentez l'interface ISpecialArmor
    Cette interface contient 3 fonctions:

    • public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, int slot)
    • public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot)
    • public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot)
      La première renvoie la propriété de résistance pour les paramètres passés, pour les slots, il vont de 0 à 3 dans l'ordre boots, leggings, chestplate, helmet.
      La seconde renvoie le nombre de demi-morceau d'armure à afficher pour les paramètres passés.
      La troisième doit endommager la pièce d'armure donnée en fonction des paramètres passés.

    Nous allons commencer avec la première :

    @Override
    public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, int slot) {
    
    }
    

    Nous allons d'abord créer un switch suivant le slot donné

    @Override
    public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, int slot) {
        switch(slot) {
        case 3: //Helmet
            return null;
        case 2: //Chestplate
            return null;
        case 1: //Leggings
            return null;
        case 0: //Boots
            return null;
        default: //Nothing, to disable eclipse warning
            return null;
        }
    }
    

    Voilà nous avons le switch, maintenant il faut créer les ArmorProperties à retourner, regardons d'abord le constructeur de ce dernier.

    ArmorProperties(int priority, double ratio, int max)
    

    Bon, ici nous avons des variables qui sont utilisée pour le calcul de réduction des dégâts, il faut d'abord que je vous explique comment va être calculé
    la réduction.
    Pour faire simple, tout les objets avec une priorité égale à 0 vont additionner leur ratio, puis la réduction sera calculée de la façon suivante :

    reduction = damage * totalRatio;
    //Ainsi :
    damage -= damage * totalRatio;
    

    Je vous rappelle que totalRatio est l'addition de tout les ratios de priorité 0.
    Le code est fait de façon à ce que le ratio total ne dépasse pas 1, on ne peut pas infliger des dégâts négatifs.
    Le processus est répété pour toutes les priorités dans l'ordre croissant, le ratio est remis à 0 entre chaque priorité.
    Si durant le processus, les dégâts sont réduits de telle sorte qu'ils deviennent nuls les éléments d'armure suivants ne réduiront pas les dégâts et ne seront
    donc pas endommagés. Donc les pièces d'armure avec la priorité la plus haute seront endommagés en dernières.
    La réduction des dégâts d'une pièce d'armure ne peux pas être supérieur à la variable max que vous rentrez dans les paramètres du constructeur d'AmorProperties
    Ainsi :

    • priority : permet de définir l'ordre de réduction des dégâts
    • ratio : ratio de réduction des dégâts (entre 0 et 1)
    • max : réduction maximum des dégâts par la pièce d'armure (en demi-coeur)
      Grâce à la fonction getProperties on va pouvoir faire pleins de trucs, ici je vais réduire les dégâts de noyade seulement avec le casque,
      les dégâts de chute seulement avec les bottes et sinon je réduirai avec l'armure entière.
    @Override
    public ArmorProperties getProperties(EntityLivingBase entity, ItemStack armor, DamageSource source, double damage, int slot) {
        if(source == DamageSource.drown) {
            return slot == 3 ? new ArmorProperties(0, 0.2, 10) : new ArmorProperties(0, 0, 0);
        }
        if(source == DamageSource.fall) {
            return slot == 0 ? new ArmorProperties(0, 0.5, 10) : new ArmorProperties(0, 0, 0);
        }
        switch(slot) {
        case 3:
            return new ArmorProperties(1, 0.05, 10);
        case 2:
            return new ArmorProperties(0, 0.2, 15);
        case 1:
            return new ArmorProperties(0, 0.3, 18);
        case 0:
            return new ArmorProperties(1, 0.04, 6);
        default:
            return new ArmorProperties(0, 0, 0);
        }
    }
    

    Les possibilités sont nombreuses, comme nous venons de le voir une pièce de l'armure peut être très resistante à une certaine source
    de dégât et moins à une autre. Si l'entité est dans le nether, l'armure peut protéger contre les dégâts de feu, mais si l'entité est dans l'overworld
    l'armure ne protège plus contre les dégâts de feu.
    Les résistances que vous définissez ici annulent celles données par le matériau.

    La seconde fonction permet de définir le nombre le demi-plastron à affiché, je ne vais pas passer une heure dessus :

    @Override
    public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) {
        switch(slot) {
        case 0:
            return 4; //Deux plastrons
        case 1:
            return 6; //Trois plastrons
        case 2:
            return 7; //Trois plastrons et demi
        case 3:
            return 3; //Un plastron et demi
        default:
            return 0;
        }
    }
    

    La dernière est appelée pour endommager l'armure, ici je vais décider d'endommager l'armure de seulement la moitié des dégâts qu'elle absorbe

    @Override
    public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) {
        stack.damageItem(damage / 2, entity);
        if(stack.getItemDamage() >= stack.getMaxDamage()) {
            stack.stackSize--;
        }
    }
    

    On a donc en classe finale :

    public class TutorielArmor extends ItemArmor implements ISpecialArmor {
    
        public static final ArmorMaterial material = EnumHelper.addArmorMaterial("armortuto", ModTutoriel.MODID + ":armortuto", 500, new int[]{4, 6, 7, 3}, 17, SoundEvents.ITEM_ARMOR_EQUIP_DIAMOND, 0.0F);
        static {
            material.customCraftingMaterial = Items.APPLE;
        }
    
        public TutorielArmor(EntityEquipmentSlot equipmentSlotIn) {
            super(material, 0, equipmentSlotIn);
        }
    
        @Override
        public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, int slot) {
            if(source == DamageSource.drown) {
                return slot == 3 ? new ArmorProperties(0, 0.2, 10) : new ArmorProperties(0, 0, 0);
            }
            if(source == DamageSource.fall) {
                return slot == 0 ? new ArmorProperties(0, 0.5, 10) : new ArmorProperties(0, 0, 0);
            }
            switch(slot) {
            case 3:
                return new ArmorProperties(1, 0.05, 10);
            case 2:
                return new ArmorProperties(0, 0.2, 15);
            case 1:
                return new ArmorProperties(0, 0.3, 18);
            case 0:
                return new ArmorProperties(1, 0.04, 6);
            default:
                return new ArmorProperties(0, 0, 0);
            }
        }
    
        @Override
        public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) {
            switch(slot) {
            case 0:
                return 4; //Deux plastrons
            case 1:
                return 6; //Trois plastrons
            case 2:
                return 7; //Trois plastrons et demi
            case 3:
                return 3; //Un plastron et demi
            default:
                return 0;
            }
        }
    
        @Override
        public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) {
            stack.damageItem(damage / 2, entity);
            if(stack.getItemDamage() >= stack.getMaxDamage()) {
                stack.stackSize--;
            }
        }
    }
    

    Résultat

    Voici le rendu en jeu :

    Voir le commit sur GitHub


  • Administrateurs

    Plus besoin de la fonction getArmorTexture en 1.9.4 ?!?


  • Rédacteurs

    Non plus besoin, elle existe toujours mais en faisant comme ça, ça marche



  • Je crois que tu t'es trompé quand tu montre le classe de l'armure finie (avant le bonus et juste avant "Les textures"), tu a mis " implements ISpecialArmor" alors que tu ne l'utilise pas encore.


  • Rédacteurs

    Oui t'a raison, je le ferai ce soir là j'ai pas le temps
    EDIT : Je l'ai enlevé, dites si il y a d'autre trucs dans ce genre parce que je pars de la fin du code pour faire le tutoriel, donc il y a des morceaux comme celui-ci qui peuvent se perdre



  • Salut, merci pour le tuto! J'aimerai que lorsque le joueur porte un pantalon, il lui soit possible de fly en gamemode 0, et quand il retire le pantalon, il ne garde pas le fly.

    J'ai essayé ceci :

    public void onArmorTickUpdate(World world, EntityPlayer player, ItemStack itemStack) 
        {
            if (EntityEquipmentSlot.LEGS != null) 
            {
                EntityEquipmentSlot legs = EntityEquipmentSlot.LEGS;
    
                if (legs.getItem() == TestModItems.PANTALON)
                {
                    player.fallDistance = 0.0F;
                    player.capabilities.allowFlying = true;
                }
    
                else 
                {
                    player.capabilities.allowFlying = false;
                    player.capabilities.isFlying = false;
                }
            }
        }
    

    Qui me semble correct mais j'ai une erreur sur le getItem

    Merci d'avance  😉



  • Quelle est cette erreur, un problème de cast ou la fonction qui n'existe pas ?



  • @'AymericRed':

    Quelle est cette erreur, un problème de cast ou la fonction qui n'existe pas ?

    " The method getItem() is undefined for the type EntityEquipmentSlot "



  • @'Laserflip33':

    @'AymericRed':

    Quelle est cette erreur, un problème de cast ou la fonction qui n'existe pas ?

    " The method getItem() is undefined for the type EntityEquipmentSlot "

    C'est normal, getItem() n'existe pas sur les EntityEquipmentSlot je pense que tu devrais mettre "itemStack.getItem() == TestModItems.PANTALON" à la place de "legs.getItem() == TestModItems.PANTALON".
    Ensuite, "EntityEquipmentSlot.LEGS != null" n'a aucun sens car EntityEquipmentSlot.LEGS n'est jamais null.



  • @'LeBossMax2':

    @'Laserflip33':

    @'AymericRed':

    Quelle est cette erreur, un problème de cast ou la fonction qui n'existe pas ?

    " The method getItem() is undefined for the type EntityEquipmentSlot "

    C'est normal, getItem() n'existe pas sur les EntityEquipmentSlot je pense que tu devrais mettre "itemStack.getItem() == TestModItems.PANTALON" à la place de "legs.getItem() == TestModItems.PANTALON".
    Ensuite, "EntityEquipmentSlot.LEGS != null" n'a aucun sens car EntityEquipmentSlot.LEGS n'est jamais null.

    Merci. En faisant ça, je ne peux pas fly. J'ai changé onArmorTickUpdate en orArmorTick et je peux désormais fly, mais le soucis c'est que si j'enlève le pantalon du slot je peux tout de même continuer à fly .. Mon code ressemble à ça :

    public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) 
        {
            if (itemStack.getItem() == TestModItems.PANTALON)
            {
                player.fallDistance = 0.0F;
                player.capabilities.allowFlying = true;
            }
    
            else 
            {
                player.capabilities.allowFlying = false;
                player.capabilities.isFlying = false;
            }
        }
    

    En fait j'aimerai que le joueur ne puisse fly QUE si le pantalon est équipé, pas si il est seulement dans l'inventaire. Et qu'il ne puisse plus fly si le pantalon est déséquipé, bien que présent dans l'inventaire.



  • Pour désactiver le fly quand le joueur n'a plus d'armure, il faut que tu utilises un évent dupdate comme LivingUpdateEvent.



  • @'AymericRed':

    Pour désactiver le fly quand le joueur n'a plus d'armure, il faut que tu utilises un évent dupdate comme LivingUpdateEvent.

    Ok merci 😉



  • Bonjour a tous,

    j'essais de faire la même chose en 1.10.2 mais j'ai le meme soucis, quand ont enlève le chestplate ont vol toujours au lieux de tomber par terre.
    En plus sur server ont a des Fall Domage quand ont atterri sur le sol mais pas sur le singleplayer.

    public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack)
       {
           if (itemStack.getItem() == armorFly.ChestPlate)
           {
               player.fallDistance = 0.0F;
               player.capabilities.allowFlying = true;
           }
    
           else
           {
               player.capabilities.allowFlying = false;
               player.capabilities.isFlying = false;
           }
       }
    

    Si quelqu'un pourrait m'aider sa serait bien apprécier, je débute en java.



  • Avec le code que tu as actuellement, le code dans le else n'est jamais exécuté car l'item est toujours égal à celui dans le else, ce qu'il faut que tu fasses c'est regarder si l Item retourné par player.getAmorItemInSlot(1) est le bon (je suis pas sur du tout du nom par contre)



  • Me revoilà avec mes déboires de débutante qui galère…

    J'ai suivi le tuto à la lettre, Eclipse ne me signale aucune erreur, et pourtant, quand je lance le jeu, la texture de mon armure sur le joueur ne s'affiche pas  😐

    Je suis sûre que c'est une petite erreur de rien du tout, mais je cherche depuis des heures, et je ne trouve pas le problème, alors si quelqu'un a une idée, je suis preneuse!

    Voici le code de la classe de mon armure:

    package fr.misschey.westworld.items;
    
    import fr.misschey.westworld.WestWorld;
    import net.minecraft.init.SoundEvents;
    import net.minecraft.inventory.EntityEquipmentSlot;
    import net.minecraft.item.ItemArmor;
    import net.minecraftforge.common.util.EnumHelper;
    
    public class CowboyArmor extends ItemArmor {
    
    public CowboyArmor(EntityEquipmentSlot equipmentSlotIn) {
    super(material, 0, equipmentSlotIn);
    }
    
    public static final ArmorMaterial material = EnumHelper.addArmorMaterial("cowboy", WestWorld.MODID + ":cowboy", 500, new int[]{3, 6, 8, 3}, 25, SoundEvents.ITEM_ARMOR_EQUIP_DIAMOND, 2.0F);
    
    }
    


  • Me revoilà avec mes déboires de débutante qui galère.

    J'ai suivi le tuto à la lettre, Eclipse ne me signale aucune erreur, pourtant, quand je lance le jeu, la texture de mon armure sur le joueur de s'affiche pas…

    La texture est au bon endroit, dans le bon dossier, avec le bon nom, pas de problème de majuscule/minuscule... bref, je cherche depuis des heures et je ne vois pas le problème, donc si quelqu'un a une idée, je suis preneuse!

    Voici le code de la classe de mon armure:

    
    package fr.misschey.westworld.items;
    
    import fr.misschey.westworld.WestWorld;
    import net.minecraft.init.SoundEvents;
    import net.minecraft.inventory.EntityEquipmentSlot;
    import net.minecraft.item.ItemArmor;
    import net.minecraftforge.common.util.EnumHelper;
    
    public class CowboyArmor extends ItemArmor {
    
    public static final ArmorMaterial material = EnumHelper.addArmorMaterial("cowboy", WestWorld.MODID + ":cowboy", 500, new int[]{3, 6, 8, 3}, 25, SoundEvents.ITEM_ARMOR_EQUIP_DIAMOND, 2.0F);
    
    public CowboyArmor(EntityEquipmentSlot equipmentSlotIn) {
    super(material, 0, equipmentSlotIn);
    }
    
    }
    
    

    Edit: Je suis en 1.11.2


  • Administrateurs

    Est-ce qu'il y a des erreurs dans les logs ?



  • Voilà ce qui s'affiche dans la console quand je lance le jeu:

    2017-03-29 20:05:52,634 WARN Unable to instantiate org.fusesource.jansi.WindowsAnsiOutputStream
    2017-03-29 20:05:52,636 WARN Unable to instantiate org.fusesource.jansi.WindowsAnsiOutputStream
    [20:05:52] [main/INFO] [GradleStart]: Extra: []
    [20:05:52] [main/INFO] [GradleStart]: Running with arguments: [–userProperties, {}, --assetsDir, C:/Users/Fujitsu/.gradle/caches/minecraft/assets, --assetIndex, 1.11, --accessToken{REDACTED}, --version, 1.11.2, --tweakClass, net.minecraftforge.fml.common.launcher.FMLTweaker, --tweakClass, net.minecraftforge.gradle.tweakers.CoremodTweaker]
    [20:05:52] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLTweaker
    [20:05:52] [main/INFO] [LaunchWrapper]: Using primary tweak class name net.minecraftforge.fml.common.launcher.FMLTweaker
    [20:05:52] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.gradle.tweakers.CoremodTweaker
    [20:05:52] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLTweaker
    [20:05:52] [main/INFO] [FML]: Forge Mod Loader version 13.20.0.2260 for Minecraft 1.11.2 loading
    [20:05:52] [main/INFO] [FML]: Java is Java HotSpot(TM) Client VM, version 1.8.0_121, running on Windows 10:x86:10.0, installed at C:\Program Files (x86)\Java\jre1.8.0_121
    [20:05:52] [main/INFO] [FML]: Managed to load a deobfuscated Minecraft name- we are in a deobfuscated environment. Skipping runtime deobfuscation
    [20:05:52] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.gradle.tweakers.CoremodTweaker
    [20:05:52] [main/INFO] [GradleStart]: Injecting location in coremod net.minecraftforge.fml.relauncher.FMLCorePlugin
    [20:05:52] [main/INFO] [GradleStart]: Injecting location in coremod net.minecraftforge.classloading.FMLForgePlugin
    [20:05:52] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker
    [20:05:52] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLDeobfTweaker
    [20:05:52] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.gradle.tweakers.AccessTransformerTweaker
    [20:05:52] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker
    [20:05:52] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker
    [20:05:52] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper
    [20:05:53] [main/ERROR] [FML]: The binary patch set is missing. Either you are in a development environment, or things are not going to work!
    [20:05:55] [main/ERROR] [FML]: FML appears to be missing any signature data. This is not a good thing
    [20:05:55] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper
    [20:05:55] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLDeobfTweaker
    [20:05:55] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.gradle.tweakers.AccessTransformerTweaker
    [20:05:55] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.TerminalTweaker
    [20:05:55] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.TerminalTweaker
    [20:05:55] [main/INFO] [LaunchWrapper]: Launching wrapped minecraft {net.minecraft.client.main.Main}
    2017-03-29 20:05:56,348 WARN Unable to instantiate org.fusesource.jansi.WindowsAnsiOutputStream
    2017-03-29 20:05:56,405 WARN Unable to instantiate org.fusesource.jansi.WindowsAnsiOutputStream
    2017-03-29 20:05:56,407 WARN Unable to instantiate org.fusesource.jansi.WindowsAnsiOutputStream
    [20:05:56] [Client thread/INFO]: Setting user: Player171
    [20:06:01] [Client thread/WARN]: Skipping bad option: lastServer:
    [20:06:01] [Client thread/INFO]: LWJGL Version: 2.9.4
    [20:06:03] [Client thread/INFO]: [STDOUT]: –-- Minecraft Crash Report ----
    // You're mean.
    
    Time: 3/29/17 8:06 PM
    Description: Loading screen debug info
    
    This is just a prompt for computer specs to be printed. THIS IS NOT A ERROR
    
    A detailed walkthrough of the error, its code path and all known details is as follows:
    ---------------------------------------------------------------------------------------
    
    -- System Details --
    Details:
    Minecraft Version: 1.11.2
    Operating System: Windows 10 (x86) version 10.0
    Java Version: 1.8.0_121, Oracle Corporation
    Java VM Version: Java HotSpot(TM) Client VM (mixed mode), Oracle Corporation
    Memory: 940043968 bytes (896 MB) / 1060372480 bytes (1011 MB) up to 1060372480 bytes (1011 MB)
    JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
    IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
    FML:
    Loaded coremods (and transformers):
    GL info: ' Vendor: 'NVIDIA Corporation' Version: '3.3.0' Renderer: 'GeForce 9300M GS/PCIe/SSE2'
    [20:06:03] [Client thread/INFO] [FML]: MinecraftForge v13.20.0.2260 Initialized
    [20:06:03] [Client thread/INFO] [FML]: Replaced 232 ore recipes
    [20:06:03] [Client thread/INFO] [FML]: Found 0 mods from the command line. Injecting into mod discoverer
    [20:06:03] [Client thread/INFO] [FML]: Searching C:\Users\Fujitsu\Desktop\Forge1.11\run\mods for mods
    [20:06:05] [Client thread/INFO] [FML]: Forge Mod Loader has identified 5 mods to load
    [20:06:05] [Client thread/INFO] [FML]: Attempting connection with missing mods [minecraft, mcp, FML, forge, westworld] at CLIENT
    [20:06:05] [Client thread/INFO] [FML]: Attempting connection with missing mods [minecraft, mcp, FML, forge, westworld] at SERVER
    [20:06:05] [Client thread/INFO]: Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:WestWorld
    [20:06:06] [Client thread/INFO] [FML]: Processing ObjectHolder annotations
    [20:06:06] [Client thread/INFO] [FML]: Found 444 ObjectHolder annotations
    [20:06:06] [Client thread/INFO] [FML]: Identifying ItemStackHolder annotations
    [20:06:06] [Client thread/INFO] [FML]: Found 0 ItemStackHolder annotations
    [20:06:06] [Client thread/INFO] [FML]: Applying holder lookups
    [20:06:06] [Client thread/INFO] [FML]: Holder lookups applied
    [20:06:06] [Client thread/INFO] [FML]: Applying holder lookups
    [20:06:06] [Client thread/INFO] [FML]: Holder lookups applied
    [20:06:06] [Client thread/INFO] [FML]: Applying holder lookups
    [20:06:06] [Client thread/INFO] [FML]: Holder lookups applied
    [20:06:06] [Client thread/INFO] [FML]: Configured a dormant chunk cache size of 0
    [20:06:06] [Forge Version Check/INFO] [ForgeVersionCheck]: [forge] Starting version check at http://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json
    [20:06:06] [Client thread/INFO] [FML]: Applying holder lookups
    [20:06:06] [Client thread/INFO] [FML]: Holder lookups applied
    [20:06:06] [Client thread/INFO] [FML]: Injecting itemstacks
    [20:06:06] [Client thread/INFO] [FML]: Itemstack injection complete
    [20:06:06] [Forge Version Check/INFO] [ForgeVersionCheck]: [forge] Found status: AHEAD Target: null
    [20:06:21] [Sound Library Loader/INFO]: Starting up SoundSystem…
    [20:06:21] [Thread-8/INFO]: Initializing LWJGL OpenAL
    [20:06:21] [Thread-8/INFO]: (The LWJGL binding of OpenAL.  For more information, see http://www.lwjgl.org)
    [20:06:22] [Thread-8/INFO]: OpenAL initialized.
    [20:06:22] [Sound Library Loader/INFO]: Sound engine started
    [20:06:27] [Client thread/INFO] [FML]: Max texture size: 8192
    [20:06:27] [Client thread/INFO]: Created: 16x16 textures-atlas
    [20:06:28] [Client thread/INFO] [FML]: Injecting itemstacks
    [20:06:28] [Client thread/INFO] [FML]: Itemstack injection complete
    [20:06:28] [Client thread/INFO] [FML]: Forge Mod Loader has successfully loaded 5 mods
    [20:06:28] [Client thread/INFO]: Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:WestWorld
    [20:06:32] [Client thread/INFO]: SoundSystem shutting down…
    [20:06:32] [Client thread/WARN]: Author: Paul Lamb, www.paulscode.com
    [20:06:32] [Sound Library Loader/INFO]: Starting up SoundSystem…
    [20:06:32] [Thread-10/INFO]: Initializing LWJGL OpenAL
    [20:06:32] [Thread-10/INFO]: (The LWJGL binding of OpenAL.  For more information, see http://www.lwjgl.org)
    [20:06:32] [Thread-10/INFO]: OpenAL initialized.
    [20:06:33] [Sound Library Loader/INFO]: Sound engine started
    [20:06:37] [Client thread/INFO] [FML]: Max texture size: 8192
    [20:06:38] [Client thread/INFO]: Created: 512x512 textures-atlas
    [20:06:40] [Client thread/WARN]: Skipping bad option: lastServer:
    [20:06:42] [Realms Notification Availability checker #1/INFO]: Could not authorize you against Realms server: Invalid session id
    

  • Administrateurs

    Rien concernant la texture.
    Étrange. Tu peux envoyer un screenshot de src/main/resources sur eclipse ?



  • Quelque part, ça me rassure que ça soit pas un truc énorme et évident que j'aurai pas vu  😛

    Voilà:
    0_1537561571872_erreur3.jpg