ObfuscationReflectionHelper problème !



  • Salut 🙂

    J'ai un problème assez bizarre, j'utilise cette fonction pour pouvoir assigner une valeur à une variable private ;

    ObfuscationReflectionHelper.setPrivateValue(net.minecraft.client.renderer.EntityRenderer.class, FMLClientHandler.instance().getClient().entityRenderer, 6.5D, "cameraZoom");
    

    Mais voilà le problème : Quand je lance minecraft avec eclipse, tout marche. Mais quand je test le mod sans eclipse, le jeu crash et me dit que "cameraZoom" est inexistante. WTF 😠

    Mon code d'erreur :

    –-- Minecraft Crash Report ----
    // Daisy, daisy...
    
    Time: 23/06/14 19:34
    Description: Unexpected error
    
    cpw.mods.fml.relauncher.ReflectionHelper$UnableToAccessFieldException: cpw.mods.fml.relauncher.ReflectionHelper$UnableToFindFieldException: java.lang.NoSuchFieldException: cameraZoom
    at cpw.mods.fml.relauncher.ReflectionHelper.setPrivateValue(ReflectionHelper.java:121)
    at cpw.mods.fml.common.ObfuscationReflectionHelper.setPrivateValue(ObfuscationReflectionHelper.java:60)
    at com.multi7200.tam.ClientProxy.onEvent(ClientProxy.java:51)
    at cpw.mods.fml.common.eventhandler.ASMEventHandler_4_ClientProxy_onEvent_KeyInputEvent.invoke(.dynamic)
    at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:51)
    at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:122)
    at cpw.mods.fml.common.FMLCommonHandler.fireKeyInput(FMLCommonHandler.java:539)
    at net.minecraft.client.Minecraft.func_71407_l(Minecraft.java:1822)
    at net.minecraft.client.Minecraft.func_71411_J(Minecraft.java:916)
    at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:835)
    at net.minecraft.client.main.Main.main(SourceFile:103)
    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:134)
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
    Caused by: cpw.mods.fml.relauncher.ReflectionHelper$UnableToFindFieldException: java.lang.NoSuchFieldException: cameraZoom
    at cpw.mods.fml.relauncher.ReflectionHelper.findField(ReflectionHelper.java:94)
    at cpw.mods.fml.relauncher.ReflectionHelper.setPrivateValue(ReflectionHelper.java:117)
    ... 16 more
    Caused by: java.lang.NoSuchFieldException: cameraZoom
    at java.lang.Class.getDeclaredField(Unknown Source)
    at cpw.mods.fml.relauncher.ReflectionHelper.findField(ReflectionHelper.java:85)
    ... 17 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.getPrivateValue(ReflectionHelper.java:121)
    at cpw.mods.fml.common.ObfuscationReflectionHelper.getPrivateValue(ObfuscationReflectionHelper.java:60)
    at com.multi7200.tam.ClientProxy.onEvent(ClientProxy.java:51)
    at cpw.mods.fml.common.eventhandler.ASMEventHandler_4_ClientProxy_onEvent_KeyInputEvent.invoke(.dynamic)
    at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:51)
    at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:122)
    at cpw.mods.fml.common.FMLCommonHandler.fireKeyInput(FMLCommonHandler.java:539)
    
    -- Affected level --
    Details:
    Level name: MpServer
    All players: 1 total; [EntityClientPlayerMP['Multi7200'/353, l='MpServer', x=-46,37, y=84,62, z=254,93]]
    Chunk stats: MultiplayerChunkCache: 85, 85
    Level seed: 0
    Level generator: ID 00 - default, ver 1\. Features enabled: false
    Level generator options:
    Level spawn location: World: (-52,64,248), Chunk: (at 12,4,8 in -4,15; contains blocks -64,0,240 to -49,255,255), Region: (-1,0; contains chunks -32,0 to -1,31, blocks -512,0,0 to -1,255,511)
    Level time: 393 game time, 393 day time
    Level dimension: 0
    Level storage version: 0x00000 - Unknown?
    Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false)
    Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false
    

    Ma classe ClientPorxy.java :

    package com.multi7200.tam;
    
    import net.minecraft.client.settings.KeyBinding;
    
    import org.lwjgl.input.Keyboard;
    
    import com.multi7200.tam.entity.EntityDisk;
    import com.multi7200.tam.entity.EntityNitron;
    import com.multi7200.tam.model.ModelDisk;
    import com.multi7200.tam.render.RenderDisk;
    import com.multi7200.tam.render.RenderNitron;
    
    import cpw.mods.fml.client.FMLClientHandler;
    import cpw.mods.fml.client.registry.ClientRegistry;
    import cpw.mods.fml.client.registry.RenderingRegistry;
    import cpw.mods.fml.common.FMLCommonHandler;
    import cpw.mods.fml.common.ObfuscationReflectionHelper;
    import cpw.mods.fml.common.eventhandler.SubscribeEvent;
    import cpw.mods.fml.common.gameevent.InputEvent.KeyInputEvent;
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    
    public class ClientProxy extends CommonProxy
    {
    private static KeyBinding keyBindZoom;
    private boolean state;
    
    @Override
    public void registerRender()
    {
    RenderingRegistry.registerEntityRenderingHandler(EntityDisk.class, new RenderDisk(new ModelDisk()));
    RenderingRegistry.registerEntityRenderingHandler(EntityNitron.class, new RenderNitron());
    
    FMLCommonHandler.instance().bus().register(this);
    keyBindZoom = new KeyBinding("tamod.keyzoom", Keyboard.KEY_A, "key.categories.gameplay");
    ClientRegistry.registerKeyBinding(keyBindZoom);
    }
    
    @SubscribeEvent
    public void onEvent(KeyInputEvent event)
    {
    if(keyBindZoom.isPressed())
    {
    if(state == false) {
    ObfuscationReflectionHelper.setPrivateValue(net.minecraft.client.renderer.EntityRenderer.class, FMLClientHandler.instance().getClient().entityRenderer, 6.5D, "cameraZoom");
    
    state = true;
    } else if (state == true) {
    ObfuscationReflectionHelper.setPrivateValue(net.minecraft.client.renderer.EntityRenderer.class, FMLClientHandler.instance().getClient().entityRenderer, 1.0D, "cameraZoom");
    
    state = false;
    }
    }
    }
    }
    

    Merci de m'éclairer, je ne comprend vraiment rien 😕


  • Moddeurs confirmés Rédacteurs Administrateurs

    Salut,
    une fois compilé, ton mod et minecraft sont obfusqués, les variables n'ont pas le même nom. Utilise ça :

    ObfuscationReflectionHelper.setPrivateValue(net.minecraft.client.renderer.Entity?Renderer.class, FMLClientHandler.instance().getClient().entityRenderer, 6.5D, "cameraZoom", "field_78503_V");
    

    La liste des correspondances se trouve dans le fichier :
    C:\Users<nom de="" la="" session="">.gradle\caches\minecraft\net\minecraftforge\forge<version de="" forge="">\unpacked\conf\fields.csv</version></nom>



  • Merci beaucoup !

    Une autre petite question ? Comment modifier les fichiers de minecraft comme GuiMainMenu.java ou ce genre de chose ?
    En 1.7, je ne comprends plus rien, plein de truc enlevés 😢


  • Moddeurs confirmés Rédacteurs Administrateurs



  • Merci, mais pour les autres fichier en général ? le GuiInGame, etc ? c'est plus possible avec forge 😞 ?


  • Moddeurs confirmés Rédacteurs Administrateurs

    Pour GuiInGame tu as l'event RenderGameOverlayEvent



  • Ok merci beaucoup 🙂 Résolu.


Log in to reply