From 5b7cfce082804c504ab9f10f0a97a1bc20742a76 Mon Sep 17 00:00:00 2001 From: Shadowrs Date: Thu, 4 Oct 2018 21:51:32 +0100 Subject: [PATCH 1/2] 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()); } From 9f0950245b5b73cb85d0673111a4958384616f19 Mon Sep 17 00:00:00 2001 From: Shadowrs Date: Fri, 5 Oct 2018 19:12:28 +0100 Subject: [PATCH 2/2] Use new methods in other GameObject related debug classes --- src/main/java/org/rev317/min/api/wrappers/SceneObject.java | 2 ++ .../java/org/rev317/min/debug/DSceneObjectsGroundDec.java | 4 ++-- .../java/org/rev317/min/debug/DSceneObjectsGroundItems.java | 4 ++-- .../org/rev317/min/debug/DSceneObjectsInteractiveObj.java | 2 +- src/main/java/org/rev317/min/debug/DSceneObjectsWallDec.java | 4 ++-- src/main/java/org/rev317/min/debug/DSceneObjectsWallObj.java | 4 ++-- 6 files changed, 11 insertions(+), 9 deletions(-) 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 5868ff3..7fb8c84 100644 --- a/src/main/java/org/rev317/min/api/wrappers/SceneObject.java +++ b/src/main/java/org/rev317/min/api/wrappers/SceneObject.java @@ -39,6 +39,8 @@ public class SceneObject implements Locatable { /** * Resolves the hash depending on the API's inner SceneObjectTile getHash() methods' type. + *
This is strictly to be used only by Debug classes such as {@code DSceneObjects} due to the overhead of Reflection. + * In cases of high usage, classes should be duplicated as usual in a custom API with the required changed type. * @return An object, casted to either Long or Int */ public final Object resolveHash() { diff --git a/src/main/java/org/rev317/min/debug/DSceneObjectsGroundDec.java b/src/main/java/org/rev317/min/debug/DSceneObjectsGroundDec.java index a728bc7..8abf012 100644 --- a/src/main/java/org/rev317/min/debug/DSceneObjectsGroundDec.java +++ b/src/main/java/org/rev317/min/debug/DSceneObjectsGroundDec.java @@ -34,7 +34,7 @@ public class DSceneObjectsGroundDec extends AbstractDebugger { if (enabled) { SceneObject[] objects = getGroundDecorations(); if (objects == null || objects.length == 0) { - Logger.addMessage("There are no GameObjects around you."); + Logger.addMessage("There are no Ground Decorations around you."); return; } java.util.List objs = Arrays.asList(objects); @@ -44,7 +44,7 @@ public class DSceneObjectsGroundDec 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()); } diff --git a/src/main/java/org/rev317/min/debug/DSceneObjectsGroundItems.java b/src/main/java/org/rev317/min/debug/DSceneObjectsGroundItems.java index 47c38c7..cfb419f 100644 --- a/src/main/java/org/rev317/min/debug/DSceneObjectsGroundItems.java +++ b/src/main/java/org/rev317/min/debug/DSceneObjectsGroundItems.java @@ -34,7 +34,7 @@ public class DSceneObjectsGroundItems extends AbstractDebugger { if (enabled) { SceneObject[] objects = getGroundItems(); if (objects == null || objects.length == 0) { - Logger.addMessage("There are no GameObjects around you."); + Logger.addMessage("There are no Ground Items around you."); return; } java.util.List objs = Arrays.asList(objects); @@ -44,7 +44,7 @@ public class DSceneObjectsGroundItems 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()); } diff --git a/src/main/java/org/rev317/min/debug/DSceneObjectsInteractiveObj.java b/src/main/java/org/rev317/min/debug/DSceneObjectsInteractiveObj.java index 5e78a44..b96c204 100644 --- a/src/main/java/org/rev317/min/debug/DSceneObjectsInteractiveObj.java +++ b/src/main/java/org/rev317/min/debug/DSceneObjectsInteractiveObj.java @@ -37,7 +37,7 @@ public class DSceneObjectsInteractiveObj extends AbstractDebugger { if (enabled) { SceneObject[] objects = getInteractiveObjects(); if (objects == null || objects.length == 0) { - Logger.addMessage("There are no GameObjects around you."); + Logger.addMessage("There are no Interactive Objects around you."); return; } java.util.List objs = Arrays.asList(objects); diff --git a/src/main/java/org/rev317/min/debug/DSceneObjectsWallDec.java b/src/main/java/org/rev317/min/debug/DSceneObjectsWallDec.java index a759c9b..d39371f 100644 --- a/src/main/java/org/rev317/min/debug/DSceneObjectsWallDec.java +++ b/src/main/java/org/rev317/min/debug/DSceneObjectsWallDec.java @@ -34,7 +34,7 @@ public class DSceneObjectsWallDec extends AbstractDebugger { if (enabled) { SceneObject[] objects = getWallDecorations(); if (objects == null || objects.length == 0) { - Logger.addMessage("There are no GameObjects around you."); + Logger.addMessage("There are no Wall Decorations around you."); return; } java.util.List objs = Arrays.asList(objects); @@ -44,7 +44,7 @@ public class DSceneObjectsWallDec 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()); } diff --git a/src/main/java/org/rev317/min/debug/DSceneObjectsWallObj.java b/src/main/java/org/rev317/min/debug/DSceneObjectsWallObj.java index 2c9d6c8..85b7500 100644 --- a/src/main/java/org/rev317/min/debug/DSceneObjectsWallObj.java +++ b/src/main/java/org/rev317/min/debug/DSceneObjectsWallObj.java @@ -34,7 +34,7 @@ public class DSceneObjectsWallObj extends AbstractDebugger { if (enabled) { SceneObject[] objects = getWallObjects(); if (objects == null || objects.length == 0) { - Logger.addMessage("There are no GameObjects around you."); + Logger.addMessage("There are no Wall Objects around you."); return; } java.util.List objs = Arrays.asList(objects); @@ -44,7 +44,7 @@ public class DSceneObjectsWallObj 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()); }