diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index 10863f11b3..fbefcc7f65 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -2000,4 +2000,14 @@ public interface Client extends GameShell * Sets the starting index in the item id array for GE search */ void setGeSearchResultIndex(int index); + + /** + * Sets values related to jagex compliance + */ + void setComplianceValue(@Nonnull String key, boolean value); + + /** + * Gets values related to jagex compliance + */ + boolean getComplianceValue(@Nonnull String key); } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/ClickboxMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/ClickboxMixin.java index d8cc17ecfd..30854ef800 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/ClickboxMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/ClickboxMixin.java @@ -35,7 +35,7 @@ public abstract class ClickboxMixin implements RSClient boolean hasFlag = hash != 0L && (int) (hash >>> 16 & 1L) != 1; boolean viewportContainsMouse = client.getViewportContainsMouse(); - if (!hasFlag || !viewportContainsMouse) + if (!hasFlag || !viewportContainsMouse || (client.getOculusOrbState() != 0 && !client.getComplianceValue("orbInteraction"))) { return; } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/ComplianceMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/ComplianceMixin.java new file mode 100644 index 0000000000..750b2da476 --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/mixins/ComplianceMixin.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2020 ThatGamerBlue + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.mixins; + +import net.runelite.api.mixins.Inject; +import net.runelite.api.mixins.Mixin; +import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSClient; +import java.util.HashMap; +import java.util.Map; + +@Mixin(RSClient.class) +public abstract class ComplianceMixin implements RSClient +{ + @Shadow("client") + private static RSClient client; + @Inject + private static Map complianceMap = new HashMap<>(); + + @Inject + @Override + public boolean getComplianceValue(String key) + { + if (key == null) + { + return false; + } + return complianceMap.containsKey(key) ? complianceMap.get( + key) : false; // false ensures we are compliant by default, note: java 7 does not have Map#getOrDefault(String, Object) + } + + @Inject + @Override + public void setComplianceValue(String key, boolean value) + { + if (key == null) + { + return; + } + client.getLogger().debug("Compliance: {} being set to {}", key, value); + complianceMap.put(key, value); + } +} diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSSceneMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSSceneMixin.java index 327d945905..bf28751d30 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSSceneMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSSceneMixin.java @@ -303,6 +303,10 @@ public abstract class RSSceneMixin implements RSScene if (client.getTileUpdateCount() == 0) { + if (!isGpu && (client.getOculusOrbState() != 0 && !client.getComplianceValue("orbInteraction"))) + { + client.setEntitiesAtMouseCount(0); + } client.setCheckClick(false); if (!checkClick) { @@ -374,6 +378,10 @@ public abstract class RSSceneMixin implements RSScene if (client.getTileUpdateCount() == 0) { + if (!isGpu && (client.getOculusOrbState() != 0 && !client.getComplianceValue("orbInteraction"))) + { + client.setEntitiesAtMouseCount(0); + } client.setCheckClick(false); if (!checkClick) { @@ -387,6 +395,10 @@ public abstract class RSSceneMixin implements RSScene } } + if (!isGpu && (client.getOculusOrbState() != 0 && !client.getComplianceValue("orbInteraction"))) + { + client.setEntitiesAtMouseCount(0); + } client.setCheckClick(false); if (!checkClick) {