-1

潜伏已久,第一次发帖。我试过搜索,但找不到任何东西可以解决我的问题。

基本上,我正在为游戏模组编写一个插件,以便为闭源模组添加更多功能。由于它已关闭,并且最初的开发者是日本人,我认为反射可能是我最好的选择。

我能够获得我需要的类中所有字段的数组,但我无法获得任何字段的值。我需要获取“currentThrottle”值,以便在实体移动时(并且仅在它移动时)做一些事情

这是我当前的代码。我不知道为什么它不起作用,因为如您所见,我使用 if 语句来确保该字段确实存在,然后它仍然告诉我找不到它。

最后说明;我在 Java 方面完全是自学的,我所知道的一切都来自阅读这样的论坛,然后潜入并使用它;这是我学习的最好方法。所以,如果这里有任何非常糟糕的做法,请告诉我:)

Class planeClass = Class.forName("mcheli.plane.MCP_EntityPlane");
Field[] fields = planeClass.getFields();

//Some other irrelevant code

            for (Field field2 : fields) {
                String name = field2.getName();
                if (name.contains("currentThrottle")) { 
                    System.out.println("name: " + name);
                    try {
                        field = baseClass.getClass().getField(name);
                        field.setAccessible(true);

                        Class<?> targetType = field.getType();
                        Object objValue = targetType.newInstance();

                        Object value = field.get(objValue);

                        System.out.println("Throttle: " + value);
                    } catch (NoSuchFieldException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (SecurityException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (InstantiationException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
4

2 回答 2

0

The variable objValue should be replaced with the object instance you want to get the field from:

Object value = field.get(objValue);

Should be:

Object value = field.get(baseClass)
于 2014-05-14T14:49:02.073 回答
0

您的代码没有显示 baseClass 是什么。您是否正在使用您认为正在使用的类?

为什么不直接使用(try/catch 未显示):

Class planeClass = Class.forName("mcheli.plane.MCP_EntityPlane");
Object plane = planeClass.newInstance();
Field throttleField = planeClass.getField("currentThrottle");
Object thottleValue = throttleField.get(plane);
于 2014-05-14T15:05:31.937 回答