From 5b7cfce082804c504ab9f10f0a97a1bc20742a76 Mon Sep 17 00:00:00 2001 From: Shadowrs Date: Thu, 4 Oct 2018 21:51:32 +0100 Subject: [PATCH] Replace type specific getHash() with universal resolve() method See 317-DS-min api PR #49 for more info --- .../rev317/min/api/wrappers/SceneObject.java | 21 +++++++++++++++++++ .../debug/DSceneObjectsInteractiveObj.java | 4 +++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/rev317/min/api/wrappers/SceneObject.java b/src/main/java/org/rev317/min/api/wrappers/SceneObject.java index 04e6ea4..5868ff3 100644 --- a/src/main/java/org/rev317/min/api/wrappers/SceneObject.java +++ b/src/main/java/org/rev317/min/api/wrappers/SceneObject.java @@ -1,6 +1,8 @@ package org.rev317.min.api.wrappers; +import org.parabot.core.Context; import org.parabot.core.reflect.RefClass; +import org.parabot.core.reflect.RefMethod; import org.rev317.min.accessors.SceneObjectTile; import org.rev317.min.api.interfaces.Locatable; import org.rev317.min.api.methods.Calculations; @@ -35,6 +37,25 @@ public class SceneObject implements Locatable { return accessor.getHash(); } + /** + * Resolves the hash depending on the API's inner SceneObjectTile getHash() methods' type. + * @return An object, casted to either Long or Int + */ + public final Object resolveHash() { + Object hash = (int) 0; + try { + RefMethod hashMethod = new RefClass(Context.getInstance().getASMClassLoader().loadClass("org.rev317.min.accessors.SceneObjectTile"), accessor).getMethod("getHash"); + if (hashMethod.getReturnType() == int.class) { + hash = (int) hashMethod.invoke(); + } else { + hash = (long) hashMethod.invoke(); + } + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + return hash; + } + /** * Gets location of this tile * diff --git a/src/main/java/org/rev317/min/debug/DSceneObjectsInteractiveObj.java b/src/main/java/org/rev317/min/debug/DSceneObjectsInteractiveObj.java index 7c36990..5e78a44 100644 --- a/src/main/java/org/rev317/min/debug/DSceneObjectsInteractiveObj.java +++ b/src/main/java/org/rev317/min/debug/DSceneObjectsInteractiveObj.java @@ -3,6 +3,8 @@ package org.rev317.min.debug; import org.parabot.core.Context; import org.parabot.core.paint.AbstractDebugger; import org.parabot.core.paint.PaintDebugger; +import org.parabot.core.reflect.RefClass; +import org.parabot.core.reflect.RefMethod; import org.parabot.core.ui.Logger; import org.parabot.environment.api.utils.Filter; import org.rev317.min.api.methods.SceneObjects; @@ -45,7 +47,7 @@ public class DSceneObjectsInteractiveObj extends AbstractDebugger { for (int i = objects.length - 1; i >= 0; i--) { System.out.println( " ID: " + objects[i].getId() + - " UID: " + objects[i].getHash() + + " UID: " + objects[i].resolveHash() + " Location: " + objects[i].getLocation() + " Distance: " + objects[i].distanceTo()); }