1. Si vous venez d'arriver sur le forum et que vous êtes un peu perdus, cliquez ici !
    Rejeter la notice

Résolu Modifier les valeurs des armures Minecraft Vanilla

Discussion dans 'Aide à la création de mod' créé par Weaz, 19 Mai 2016.

  1. Weaz

    Weaz Nouveau

    Inscrit:
    19 Mai 2016
    Messages:
    11
    Points:
    0
    Sexe:
    Homme
    Bonjour, Je me suis lancé il y a quelques jours dans un mod forge.
    Et je me pose la question : Comment modifier les valeurs d'une armure de Minecraft Vanilla ?
    par exemple: "En la rendant moins puissantes et protectrice."
    J'avais déjà trouver un tutoriel mais il n'était pas à jour.

    J'aimerais pouvoir modifier ça :
    Code (java):
    diamond("diamond", 33, new int[]{3, 8, 6, 3}, 10);
    Merci de bien vouloir m'aider.

    Cordialement Weaz
     
    #1 Weaz, 19 Mai 2016
    Dernière édition: 19 Mai 2016
  2. pifou92000

    pifou92000 Mineur de Diamants

    Inscrit:
    23 Juin 2011
    Messages:
    2 690
    Points:
    195
    Sexe:
    Homme
    Salut, pour quelle version de Minecraft programmes-tu ?
     
  3. Weaz

    Weaz Nouveau

    Inscrit:
    19 Mai 2016
    Messages:
    11
    Points:
    0
    Sexe:
    Homme
    Bonjour,
    je programme mes mods en 1.7.10.
     
    #3 Weaz, 20 Mai 2016
    Dernière édition: 20 Mai 2016
  4. pifou92000

    pifou92000 Mineur de Diamants

    Inscrit:
    23 Juin 2011
    Messages:
    2 690
    Points:
    195
    Sexe:
    Homme
    Je n'ai plus rien d'installé pour 1.7.10, je ne vais pas trop pouvoir regarder les classes du jeu pour te répondre.
    Jette un oeil à ItemArmor, c'est sans doute là que la valeur de protection est définie, tu peux peut-être la changer.
     
  5. Weaz

    Weaz Nouveau

    Inscrit:
    19 Mai 2016
    Messages:
    11
    Points:
    0
    Sexe:
    Homme
    Oui mais moi j'utilise forge, comment je pourrais faire avec ?
    Vus que je peux pas prendre les valeurs d'une armure en diamant et les modifier tout simplement...
     
  6. Weaz

    Weaz Nouveau

    Inscrit:
    19 Mai 2016
    Messages:
    11
    Points:
    0
    Sexe:
    Homme
    Code (java):

    public static enum ArmorMaterial
        {
            CLOTH(5, new int[]{1, 3, 2, 1}, 15),
            CHAIN(15, new int[]{2, 5, 4, 1}, 12),
            IRON(15, new int[]{2, 6, 5, 2}, 9),
            GOLD(7, new int[]{2, 5, 3, 1}, 25),
            DIAMOND(33, new int[]{3, 8, 6, 3}, 10);
            /**
             * Holds the maximum damage factor (each piece multiply this by it's own value) of the material, this is the
             * item damage (how much can absorb before breaks)
             */

            private int maxDamageFactor;
            /**
             * Holds the damage reduction (each 1 points is half a shield on gui) of each piece of armor (helmet, plate,
             * legs and boots)
             */

            private int[] damageReductionAmountArray;
            /** Return the enchantability factor of the material */
            private int enchantability;

            private static final String __OBFID = "CL_00001768";

            //Added by forge for custom Armor materials.
            public Item customCraftingMaterial = null;

            private ArmorMaterial(int p_i1827_3_, int[] p_i1827_4_, int p_i1827_5_)
            {
                this.maxDamageFactor = p_i1827_3_;
                this.damageReductionAmountArray = p_i1827_4_;
                this.enchantability = p_i1827_5_;
            }

            /**
             * Returns the durability for a armor slot of for this type.
             */

            public int getDurability(int p_78046_1_)
            {
                return ItemArmor.maxDamageArray[p_78046_1_] * this.maxDamageFactor;
            }

            /**
             * Return the damage reduction (each 1 point is a half a shield on gui) of the piece index passed (0 = helmet, 1
             * = plate, 2 = legs and 3 = boots)
             */

            public int getDamageReductionAmount(int p_78044_1_)
            {
                return this.damageReductionAmountArray[p_78044_1_];
            }

            /**
             * Return the enchantability factor of the material.
             */

            public int getEnchantability()
            {
                return this.enchantability;
            }

            public Item func_151685_b()
            {
                return this == CLOTH ? Items.leather :
                    (this == CHAIN ? Items.iron_ingot :
                    (this == GOLD ? Items.gold_ingot :
                    (this == IRON ? Items.iron_ingot :
                    (this == DIAMOND ? Items.diamond :
                     customCraftingMaterial))));
            }
        }
    }
     
     
  7. Nolan-XX

    Nolan-XX Modérateur
    Staff

    Inscrit:
    29 Déc 2012
    Messages:
    10 245
    Points:
    304
    Sexe:
    Homme
    Les doubles posts sont interdits.
     
  8. AugiteSoul

    AugiteSoul Mineur de Fer

    Inscrit:
    1 Fev 2016
    Messages:
    782
    Points:
    90
    Regardes le code du mod DivineRPG, il modifie ces valeurs.
     
  9. pifou92000

    pifou92000 Mineur de Diamants

    Inscrit:
    23 Juin 2011
    Messages:
    2 690
    Points:
    195
    Sexe:
    Homme
    Oui bien sûr, tout le monde utilise Forge. ^^
    Tu peux modifier même des champs privés sans modifier la class, en utilisant la Reflection. Je t'invite à chercher un tuto Java à ce sujet.
     
  10. Weaz

    Weaz Nouveau

    Inscrit:
    19 Mai 2016
    Messages:
    11
    Points:
    0
    Sexe:
    Homme
    Désole, je ne savais pas que j'avais pas le droit
    J'irais voir ce soir, merci pour ta réponse.
    Ah Ok, je ne savais pas ! Merci.
     
    #10 Weaz, 21 Mai 2016
    Dernière édition: 21 Mai 2016
  11. Weaz

    Weaz Nouveau

    Inscrit:
    19 Mai 2016
    Messages:
    11
    Points:
    0
    Sexe:
    Homme
    C'est bien gentil mais blinder mon minecraft, avec des tonnes d'objets juste pour une fonctionnalité plutôt pas le faire =)
    Surtout que les mods après je veux les mettre sur un serveur.
    T'imagine le bordel ;')

    En Bricolant un peu sur internet,
    j'ai trouver une personne qui montrait comment faire mais juste pour les tools,
    je l'ai donc adapté à ma "sauce" pour les armures =)
    Code (java):

    public void preInit(FMLPreInitializationEvent event){
            ReflectionHelper.setPrivateValue(ArmorMaterial.class, ArmorMaterial.DIAMOND, new int[]{10, 10, 10, 10}, 10);
    }
     
    Mais j'ai rencontrer des problèmes :
    Code (java):

    ---- Minecraft Crash Report ----
    // Pas de chance <3

    Time: 22/05/16 12:03
    Description: Initializing game

    cpw.mods.fml.relauncher.ReflectionHelper$UnableToAccessFieldException: java.lang.IllegalAccessException: Can not set static final [Lnet.minecraft.item.ItemArmor$ArmorMaterial; field net.minecraft.item.ItemArmor$ArmorMaterial.$VALUES to [I
        at cpw.mods.fml.relauncher.ReflectionHelper.setPrivateValue(ReflectionHelper.java:135)
        at com.realityfight.mod.RealityFightMod.preInit(RealityFightMod.java:25)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:532)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
        at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
        at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
        at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
        at com.google.common.eventbus.EventBus.post(EventBus.java:275)
        at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:212)
        at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:190)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
        at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
        at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
        at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
        at com.google.common.eventbus.EventBus.post(EventBus.java:275)
        at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:119)
        at cpw.mods.fml.common.Loader.preinitializeMods(Loader.java:556)
        at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:243)
        at net.minecraft.client.Minecraft.startGame(Minecraft.java:522)
        at net.minecraft.client.Minecraft.run(Minecraft.java:942)
        at net.minecraft.client.main.Main.main(Main.java:164)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
        at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
        at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
        at GradleStart.main(Unknown Source)
    Caused by: java.lang.IllegalAccessException: Can not set static final [Lnet.minecraft.item.ItemArmor$ArmorMaterial; field net.minecraft.item.ItemArmor$ArmorMaterial.$VALUES to [I
        at sun.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(Unknown Source)
        at sun.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(Unknown Source)
        at sun.reflect.UnsafeQualifiedStaticObjectFieldAccessorImpl.set(Unknown Source)
        at java.lang.reflect.Field.set(Unknown Source)
        at cpw.mods.fml.relauncher.ReflectionHelper.setPrivateValue(ReflectionHelper.java:131)
        ... 40 more


    A detailed walkthrough of the error, its code path and all known details is as follows:
    ---------------------------------------------------------------------------------------

    -- Head --
    Stacktrace:
        at cpw.mods.fml.relauncher.ReflectionHelper.setPrivateValue(ReflectionHelper.java:135)
        at com.realityfight.mod.RealityFightMod.preInit(RealityFightMod.java:25)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:532)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
        at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
        at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
        at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
        at com.google.common.eventbus.EventBus.post(EventBus.java:275)
        at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:212)
        at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:190)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
        at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
        at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
        at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
        at com.google.common.eventbus.EventBus.post(EventBus.java:275)
        at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:119)
        at cpw.mods.fml.common.Loader.preinitializeMods(Loader.java:556)
        at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:243)
        at net.minecraft.client.Minecraft.startGame(Minecraft.java:522)

    -- Initialization --
    Details:
    Stacktrace:
        at net.minecraft.client.Minecraft.run(Minecraft.java:942)
        at net.minecraft.client.main.Main.main(Main.java:164)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
        at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
        at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
        at GradleStart.main(Unknown Source)

    -- System Details --
    Details:
        Minecraft Version: 1.7.10
        Operating System: Windows 10 (amd64) version 10.0
        Java Version: 1.8.0_91, Oracle Corporation
        Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
        Memory: 828225880 bytes (789 MB) / 1038876672 bytes (990 MB) up to 1038876672 bytes (990 MB)
        JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
        AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
        IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
        FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1614 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
        UCH    mcp{9.05} [Minecraft Coder Pack] (minecraft.jar)
        UCH    FML{7.10.99.99} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.4.1614-1.7.10.jar)
        UCH    Forge{10.13.4.1614} [Minecraft Forge] (forgeSrc-1.7.10-10.13.4.1614-1.7.10.jar)
        UCE    weaz{1.0.6} [RealityFight Mod] (bin)
        GL info: ' Vendor: 'NVIDIA Corporation' Version: '4.5.0 NVIDIA 353.82' Renderer: 'GeForce GT 620/PCIe/SSE2'
        Launched Version: 1.7.10
        LWJGL: 2.9.1
        OpenGL: GeForce GT 620/PCIe/SSE2 GL version 4.5.0 NVIDIA 353.82, NVIDIA Corporation
        GL Caps: Using GL 1.3 multitexturing.
    Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported.
    Anisotropic filtering is supported and maximum anisotropy is 16.
    Shaders are available because OpenGL 2.1 is supported.

        Is Modded: Definitely; Client brand changed to '
    fml,forge'
        Type: Client (map_client.txt)
        Resource Packs: []
        Current Language: Français (France)
        Profiler Position: N/A (disabled)
        Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
        Anisotropic Filtering: Off (1)
    Merci de bien vouloir m'aider ;')
     
    #11 Weaz, 22 Mai 2016
    Dernière édition: 22 Mai 2016
  12. pifou92000

    pifou92000 Mineur de Diamants

    Inscrit:
    23 Juin 2011
    Messages:
    2 690
    Points:
    195
    Sexe:
    Homme
    Les doubles posts sont toujours interdits tu sais.
    Personnellement je n'utilise pas ReflectionHelper. Voici mon code pour augmenter les dégâts des outils en or, par exemple :
    Code (cpp):
    try
                {
                    Field field = ToolMaterial.class.getDeclaredField("damageVsEntity");
                    field.setAccessible(true);
                    field.set(ToolMaterial.GOLD, 3.0F);
                    field.setAccessible(false);
                    Field field2 = ItemSword.class.getDeclaredField("attackDamage");
                    field2.setAccessible(true);
                    field2.set(Items.golden_sword, 7.0F);
                    field2.set(IMC.item_machete_gold, 7.0F);
                    field2.setAccessible(false);
                    Field field3 = ItemTool.class.getDeclaredField("damageVsEntity");
                    field3.setAccessible(true);
                    field3.set(Items.golden_shovel, 4.0F);
                    field3.set(Items.golden_pickaxe, 5.0F);
                    field3.set(Items.golden_axe, 6.0F);
                    field3.setAccessible(false);
                }
                catch(Exception e2)
                {
                    e.printStackTrace();
                }
    Je pense que c'est le "setAccessible" qui permet d'éviter l'erreur sur laquelle tu es tombé.
     
  13. Weaz

    Weaz Nouveau

    Inscrit:
    19 Mai 2016
    Messages:
    11
    Points:
    0
    Sexe:
    Homme
    Désolé, le premier post datait d'hier, je l'ai pas vus ;')

    Sinon, t'aurais pas un code adapté pour les armures ?
    Car c'est pas la même chose, les tools et les armors.
    Et le Code la, tu l'a mit dans quelle classe ?
     
    #13 Weaz, 22 Mai 2016
    Dernière édition: 22 Mai 2016
  14. pifou92000

    pifou92000 Mineur de Diamants

    Inscrit:
    23 Juin 2011
    Messages:
    2 690
    Points:
    195
    Sexe:
    Homme
    Non je n'en ai pas, essaie à partir de ce que je t'ai donné. En fait, je pense que la raison de l'Exception, c'est que tu essaies de modifier un champ marqué "final", donc constant. Du coup jette un oeil à cette page (si tu comprends l'anglais ^^). C'est un peu technique si tu débutes mais il n'y a pas trop d'autre solution.

    Mais déjà, il faut être sûr que tu veux modifier ArmorMaterial. Je ne me souviens plus comment ça se passait en 1.7.10, mais actuellement, l'ItemArmor récupère sa valeur de protection depuis son ArmorMaterial, et les valeurs de l'ArmorMaterial ne sont plus utilisées ensuite. Dans ce cas, c'est la valeur enregistrée dans l'ItemArmor qu'il faut modifier (parce que tu ne peux pas changer l'ArmorMaterial AVANT que l'ItemArmor soit créé, donc dans ton preInit c'est déjà trop tard).
     
  15. Weaz

    Weaz Nouveau

    Inscrit:
    19 Mai 2016
    Messages:
    11
    Points:
    0
    Sexe:
    Homme
    Oui je suis sûr que veux modifier cette valeur mais comment ?
    Donc si je le met pas dans le preInit, je le met où ?
     
    #15 Weaz, 22 Mai 2016
    Dernière édition: 22 Mai 2016

Partager cette page