diff --git a/buildSrc/src/main/kotlin/Dependencies.kt b/buildSrc/src/main/kotlin/Dependencies.kt
index 2b7b4183b5..f7176fcb53 100644
--- a/buildSrc/src/main/kotlin/Dependencies.kt
+++ b/buildSrc/src/main/kotlin/Dependencies.kt
@@ -25,9 +25,9 @@
object ProjectVersions {
const val launcherVersion = "2.2.0"
- const val rlVersion = "1.6.11"
+ const val rlVersion = "1.6.12"
- const val openosrsVersion = "3.2.2"
+ const val openosrsVersion = "3.3.0"
const val openosrsInjectorVersion = "1.0.3.1"
const val rsversion = 189
diff --git a/runelite-api/src/main/java/net/runelite/api/AnimationID.java b/runelite-api/src/main/java/net/runelite/api/AnimationID.java
index 943c2ae8a5..0db0577b0a 100644
--- a/runelite-api/src/main/java/net/runelite/api/AnimationID.java
+++ b/runelite-api/src/main/java/net/runelite/api/AnimationID.java
@@ -162,6 +162,7 @@ public final class AnimationID
public static final int MAGIC_ENCHANTING_AMULET_1 = 719; // sapphire, opal, diamond
public static final int MAGIC_ENCHANTING_AMULET_2 = 720; // emerald, jade, dragonstone
public static final int MAGIC_ENCHANTING_AMULET_3 = 721; // ruby, topaz, onyx, zenyte
+ public static final int MAGIC_ENCHANTING_BOLTS = 4462;
public static final int BURYING_BONES = 827;
public static final int USING_GILDED_ALTAR = 3705;
public static final int LOOKING_INTO = 832;
diff --git a/runelite-api/src/main/java/net/runelite/api/Hitsplat.java b/runelite-api/src/main/java/net/runelite/api/Hitsplat.java
index c44bf2dd1b..9d51a03918 100644
--- a/runelite-api/src/main/java/net/runelite/api/Hitsplat.java
+++ b/runelite-api/src/main/java/net/runelite/api/Hitsplat.java
@@ -52,6 +52,38 @@ public class Hitsplat
* Taking damage by others (red).
*/
DAMAGE_OTHER,
+ /**
+ * Taking damage by me (cyan).
+ */
+ DAMAGE_ME_CYAN,
+ /**
+ * Taking damage by others (cyan).
+ */
+ DAMAGE_OTHER_CYAN,
+ /**
+ * Taking damage by me (orange).
+ */
+ DAMAGE_ME_ORANGE,
+ /**
+ * Taking damage by others (orange).
+ */
+ DAMAGE_OTHER_ORANGE,
+ /**
+ * Taking damage by me (yellow).
+ */
+ DAMAGE_ME_YELLOW,
+ /**
+ * Taking damage by others (yellow).
+ */
+ DAMAGE_OTHER_YELLOW,
+ /**
+ * Taking damage by me (white).
+ */
+ DAMAGE_ME_WHITE,
+ /**
+ * Taking damage by others (white/black).
+ */
+ DAMAGE_OTHER_WHITE,
/**
* Damage from poison (green).
*/
@@ -88,6 +120,14 @@ public class Hitsplat
case 4: return DISEASE;
case 5: return VENOM;
case 6: return HEAL;
+ case 18: return DAMAGE_ME_CYAN;
+ case 19: return DAMAGE_OTHER_CYAN;
+ case 20: return DAMAGE_ME_ORANGE;
+ case 21: return DAMAGE_OTHER_ORANGE;
+ case 22: return DAMAGE_ME_YELLOW;
+ case 23: return DAMAGE_OTHER_YELLOW;
+ case 24: return DAMAGE_ME_WHITE;
+ case 25: return DAMAGE_OTHER_WHITE;
}
return null;
}
@@ -117,4 +157,36 @@ public class Hitsplat
this.amount = amount;
this.disappearsOnGameCycle = disappearsOnGameCycle;
}
+
+ public boolean isMine()
+ {
+ switch (this.getHitsplatType())
+ {
+ case BLOCK_ME:
+ case DAMAGE_ME:
+ case DAMAGE_ME_CYAN:
+ case DAMAGE_ME_YELLOW:
+ case DAMAGE_ME_ORANGE:
+ case DAMAGE_ME_WHITE:
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ public boolean isOthers()
+ {
+ switch (this.getHitsplatType())
+ {
+ case BLOCK_OTHER:
+ case DAMAGE_OTHER:
+ case DAMAGE_OTHER_CYAN:
+ case DAMAGE_OTHER_YELLOW:
+ case DAMAGE_OTHER_ORANGE:
+ case DAMAGE_OTHER_WHITE:
+ return true;
+ default:
+ return false;
+ }
+ }
}
\ No newline at end of file
diff --git a/runelite-api/src/main/java/net/runelite/api/ItemContainer.java b/runelite-api/src/main/java/net/runelite/api/ItemContainer.java
index e547ca03f8..81e2074106 100644
--- a/runelite-api/src/main/java/net/runelite/api/ItemContainer.java
+++ b/runelite-api/src/main/java/net/runelite/api/ItemContainer.java
@@ -24,6 +24,9 @@
*/
package net.runelite.api;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
/**
* Represents an inventory that contains items.
*/
@@ -34,5 +37,34 @@ public interface ItemContainer extends Node
*
* @return the items held
*/
+ @Nonnull
Item[] getItems();
+
+ /**
+ * Gets an item from the container at the given slot.
+ *
+ * @param slot
+ * @return the item
+ * @see Item
+ */
+ @Nullable
+ Item getItem(int slot);
+
+ /**
+ * Check if this item container contains the given item
+ *
+ * @param itemId
+ * @return
+ * @see ItemID
+ */
+ boolean contains(int itemId);
+
+ /**
+ * Counts how many of an item this item container contains
+ *
+ * @param itemId
+ * @return
+ * @see ItemID
+ */
+ int count(int itemId);
}
diff --git a/runelite-api/src/main/java/net/runelite/api/ItemID.java b/runelite-api/src/main/java/net/runelite/api/ItemID.java
index 4640a30447..0d479bad1c 100644
--- a/runelite-api/src/main/java/net/runelite/api/ItemID.java
+++ b/runelite-api/src/main/java/net/runelite/api/ItemID.java
@@ -11434,5 +11434,31 @@ public final class ItemID
public static final int TANGLEROOT_24559 = 24559;
public static final int TANGLEROOT_24561 = 24561;
public static final int TANGLEROOT_24563 = 24563;
+ public static final int ANTIQUE_EMBLEM_TIER_1 = 24565;
+ public static final int ANTIQUE_EMBLEM_TIER_2 = 24567;
+ public static final int ANTIQUE_EMBLEM_TIER_3 = 24569;
+ public static final int ANTIQUE_EMBLEM_TIER_4 = 24571;
+ public static final int ANTIQUE_EMBLEM_TIER_5 = 24573;
+ public static final int ANTIQUE_EMBLEM_TIER_6 = 24575;
+ public static final int ANTIQUE_EMBLEM_TIER_7 = 24577;
+ public static final int ANTIQUE_EMBLEM_TIER_8 = 24579;
+ public static final int ANTIQUE_EMBLEM_TIER_9 = 24581;
+ public static final int ANTIQUE_EMBLEM_TIER_10 = 24583;
+ public static final int LOOTING_BAG_NOTE = 24585;
+ public static final int RUNE_POUCH_NOTE = 24587;
+ public static final int BLIGHTED_MANTA_RAY = 24589;
+ public static final int BLIGHTED_ANGLERFISH = 24592;
+ public static final int BLIGHTED_KARAMBWAN = 24595;
+ public static final int BLIGHTED_SUPER_RESTORE4 = 24598;
+ public static final int BLIGHTED_SUPER_RESTORE3 = 24601;
+ public static final int BLIGHTED_SUPER_RESTORE2 = 24603;
+ public static final int BLIGHTED_SUPER_RESTORE1 = 24605;
+ public static final int BLIGHTED_ICE_BARRAGE_SACK = 24607;
+ public static final int BLIGHTED_BIND_SACK = 24609;
+ public static final int BLIGHTED_SNARE_SACK = 24611;
+ public static final int BLIGHTED_ENTANGLE_SACK = 24613;
+ public static final int BLIGHTED_TELEBLOCK_SACK = 24615;
+ public static final int VESTAS_BLIGHTED_LONGSWORD = 24617;
+ public static final int VESTAS_LONGSWORD_INACTIVE = 24619;
/* This file is automatically generated. Do not edit. */
}
diff --git a/runelite-api/src/main/java/net/runelite/api/NpcID.java b/runelite-api/src/main/java/net/runelite/api/NpcID.java
index ffc9db2501..6034a14c22 100644
--- a/runelite-api/src/main/java/net/runelite/api/NpcID.java
+++ b/runelite-api/src/main/java/net/runelite/api/NpcID.java
@@ -5993,6 +5993,7 @@ public final class NpcID
public static final int SISTER_SCAROPHIA = 6590;
public static final int LAVA_DRAGON = 6593;
public static final int ENT = 6594;
+ public static final int PRIFDDINAS_GUARD = 6595;
public static final int ZOMBIE_6596 = 6596;
public static final int ZOMBIE_6597 = 6597;
public static final int ZOMBIE_6598 = 6598;
diff --git a/runelite-api/src/main/java/net/runelite/api/NullItemID.java b/runelite-api/src/main/java/net/runelite/api/NullItemID.java
index 2f5a108d49..f72aec5012 100644
--- a/runelite-api/src/main/java/net/runelite/api/NullItemID.java
+++ b/runelite-api/src/main/java/net/runelite/api/NullItemID.java
@@ -12922,5 +12922,35 @@ public final class NullItemID
public static final int NULL_24560 = 24560;
public static final int NULL_24562 = 24562;
public static final int NULL_24564 = 24564;
+ public static final int NULL_24566 = 24566;
+ public static final int NULL_24568 = 24568;
+ public static final int NULL_24570 = 24570;
+ public static final int NULL_24572 = 24572;
+ public static final int NULL_24574 = 24574;
+ public static final int NULL_24576 = 24576;
+ public static final int NULL_24578 = 24578;
+ public static final int NULL_24580 = 24580;
+ public static final int NULL_24582 = 24582;
+ public static final int NULL_24584 = 24584;
+ public static final int NULL_24586 = 24586;
+ public static final int NULL_24588 = 24588;
+ public static final int NULL_24590 = 24590;
+ public static final int NULL_24591 = 24591;
+ public static final int NULL_24593 = 24593;
+ public static final int NULL_24594 = 24594;
+ public static final int NULL_24596 = 24596;
+ public static final int NULL_24597 = 24597;
+ public static final int NULL_24599 = 24599;
+ public static final int NULL_24600 = 24600;
+ public static final int NULL_24602 = 24602;
+ public static final int NULL_24604 = 24604;
+ public static final int NULL_24606 = 24606;
+ public static final int NULL_24608 = 24608;
+ public static final int NULL_24610 = 24610;
+ public static final int NULL_24612 = 24612;
+ public static final int NULL_24614 = 24614;
+ public static final int NULL_24616 = 24616;
+ public static final int NULL_24618 = 24618;
+ public static final int NULL_24620 = 24620;
/* This file is automatically generated. Do not edit. */
}
diff --git a/runelite-api/src/main/java/net/runelite/api/ScriptEvent.java b/runelite-api/src/main/java/net/runelite/api/ScriptEvent.java
index d9219461f0..b94fbbc44a 100644
--- a/runelite-api/src/main/java/net/runelite/api/ScriptEvent.java
+++ b/runelite-api/src/main/java/net/runelite/api/ScriptEvent.java
@@ -66,4 +66,18 @@ public interface ScriptEvent
* Parent relative x coordinate for mouse related events
*/
int getMouseX();
+
+ /**
+ * Jagex typed keycode
+ *
+ * @return
+ */
+ int getTypedKeyCode();
+
+ /**
+ * Get the typed character, ascii.
+ *
+ * @return
+ */
+ int getTypedKeyChar();
}
diff --git a/runelite-api/src/main/java/net/runelite/api/ScriptID.java b/runelite-api/src/main/java/net/runelite/api/ScriptID.java
index 05d1dd5432..f4dfedb35d 100644
--- a/runelite-api/src/main/java/net/runelite/api/ScriptID.java
+++ b/runelite-api/src/main/java/net/runelite/api/ScriptID.java
@@ -271,12 +271,6 @@ public final class ScriptID
@ScriptArguments(integer = 3)
public static final int QUESTLIST_PROGRESS_LIST_SHOW = 1354;
- /**
- * Procedure called when the toplevel interface is resized
- */
- @ScriptArguments(integer = 2)
- public static final int TOPLEVEL_RESIZE = 909;
-
/**
* Called when the friends list is updated
*
diff --git a/runelite-api/src/main/java/net/runelite/api/hooks/DrawCallbacks.java b/runelite-api/src/main/java/net/runelite/api/hooks/DrawCallbacks.java
index df323798c5..681b9f8621 100644
--- a/runelite-api/src/main/java/net/runelite/api/hooks/DrawCallbacks.java
+++ b/runelite-api/src/main/java/net/runelite/api/hooks/DrawCallbacks.java
@@ -24,6 +24,7 @@
*/
package net.runelite.api.hooks;
+import net.runelite.api.Model;
import net.runelite.api.Entity;
import net.runelite.api.TileModel;
import net.runelite.api.TilePaint;
@@ -44,7 +45,9 @@ public interface DrawCallbacks
void draw();
+ boolean drawFace(Model model, int face);
+
void drawScene(int cameraX, int cameraY, int cameraZ, int cameraPitch, int cameraYaw, int plane);
void animate(Texture texture, int diff);
-}
+}
\ No newline at end of file
diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java b/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java
index a71de2c018..bbc5cfcaec 100644
--- a/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java
+++ b/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java
@@ -692,12 +692,23 @@ public interface Widget
void revalidateScroll();
/**
- * Array of widget key listeners
+ * Gets the script and arguments to be ran when a menu action is clicked.
+ *
+ * @return
+ */
+ Object[] getOnOpListener();
+
+ /**
+ * Gets the script and arguments to be ran when a key is pressed.
+ *
+ * @return
*/
Object[] getOnKeyListener();
/**
- * Array of widget load listeners
+ * Gets the script and arguments to be ran when a interface is loaded.
+ *
+ * @return
*/
Object[] getOnLoadListener();
@@ -705,6 +716,13 @@ public interface Widget
Object[] getOnOp();
+ /**
+ * Gets the script and arguments to be ran when one of the listened for inventories changes.
+ *
+ * @return
+ */
+ Object[] getOnInvTransmitListener();
+
/**
* Returns the archive id of the font used
*
diff --git a/runelite-client/src/main/java/net/runelite/client/input/KeyManager.java b/runelite-client/src/main/java/net/runelite/client/input/KeyManager.java
index f9e2c4f07d..066f8089c8 100644
--- a/runelite-client/src/main/java/net/runelite/client/input/KeyManager.java
+++ b/runelite-client/src/main/java/net/runelite/client/input/KeyManager.java
@@ -27,11 +27,24 @@ package net.runelite.client.input;
import java.awt.event.KeyEvent;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
+import javax.annotation.Nullable;
+import javax.inject.Inject;
import javax.inject.Singleton;
+import net.runelite.api.Client;
+import net.runelite.api.GameState;
+import net.runelite.client.util.HotkeyListener;
@Singleton
public class KeyManager
{
+ private final Client client;
+
+ @Inject
+ private KeyManager(@Nullable final Client client)
+ {
+ this.client = client;
+ }
+
private final List keyListeners = new CopyOnWriteArrayList<>();
public void registerKeyListener(KeyListener keyListener)
@@ -56,6 +69,11 @@ public class KeyManager
for (KeyListener keyListener : keyListeners)
{
+ if (!shouldProcess(keyListener))
+ {
+ continue;
+ }
+
keyListener.keyPressed(keyEvent);
if (keyEvent.isConsumed())
{
@@ -73,6 +91,11 @@ public class KeyManager
for (KeyListener keyListener : keyListeners)
{
+ if (!shouldProcess(keyListener))
+ {
+ continue;
+ }
+
keyListener.keyReleased(keyEvent);
if (keyEvent.isConsumed())
{
@@ -90,6 +113,11 @@ public class KeyManager
for (KeyListener keyListener : keyListeners)
{
+ if (!shouldProcess(keyListener))
+ {
+ continue;
+ }
+
keyListener.keyTyped(keyEvent);
if (keyEvent.isConsumed())
{
@@ -97,4 +125,26 @@ public class KeyManager
}
}
}
+
+ private boolean shouldProcess(final KeyListener keyListener)
+ {
+ if (client == null)
+ {
+ return true;
+ }
+
+ if (!(keyListener instanceof HotkeyListener))
+ {
+ return true;
+ }
+
+ final HotkeyListener hotkeyListener = (HotkeyListener) keyListener;
+
+ if (hotkeyListener.isEnabledOnLogin())
+ {
+ return true;
+ }
+
+ return client.getGameState() != GameState.LOGIN_SCREEN;
+ }
}
diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java
index 965c3675be..1049b3c4b1 100644
--- a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java
+++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java
@@ -397,6 +397,7 @@ public class ClientUI
}
};
+ sidebarListener.setEnabledOnLogin(true);
keyManager.registerKeyListener(sidebarListener);
final HotkeyListener pluginPanelListener = new HotkeyListener(config::panelToggleKey)
diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java
index f5b372d4d8..bfb4a1223b 100644
--- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java
+++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java
@@ -50,6 +50,7 @@ public abstract class Overlay implements LayoutableRenderableEntity
private OverlayLayer layer = OverlayLayer.UNDER_WIDGETS;
private final List menuEntries = new ArrayList<>();
private boolean resizable;
+ private boolean resettable = true;
protected Overlay()
{
diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java
index daeaef2539..4568f902bb 100644
--- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java
+++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java
@@ -355,7 +355,10 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener
if (SwingUtilities.isRightMouseButton(mouseEvent))
{
- overlayManager.resetOverlay(currentManagedOverlay);
+ if (currentManagedOverlay.isResettable())
+ {
+ overlayManager.resetOverlay(currentManagedOverlay);
+ }
}
else if (SwingUtilities.isLeftMouseButton(mouseEvent))
{
diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java
index cff907207c..99060cbade 100644
--- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java
+++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java
@@ -53,7 +53,6 @@ public class WidgetOverlay extends Overlay
.put(WidgetInfo.PEST_CONTROL_BOAT_INFO, OverlayPosition.TOP_LEFT)
.put(WidgetInfo.PEST_CONTROL_INFO, OverlayPosition.TOP_LEFT)
.put(WidgetInfo.ZEAH_MESS_HALL_COOKING_DISPLAY, OverlayPosition.TOP_LEFT)
- .put(WidgetInfo.PVP_BOUNTY_HUNTER_INFO, OverlayPosition.TOP_RIGHT)
.put(WidgetInfo.PVP_KILLDEATH_COUNTER, OverlayPosition.TOP_LEFT)
.put(WidgetInfo.SKOTIZO_CONTAINER, OverlayPosition.TOP_LEFT)
.put(WidgetInfo.KOUREND_FAVOUR_OVERLAY, OverlayPosition.TOP_CENTER)
diff --git a/runelite-client/src/main/java/net/runelite/client/util/HotkeyListener.java b/runelite-client/src/main/java/net/runelite/client/util/HotkeyListener.java
index 695a886455..57b2297842 100644
--- a/runelite-client/src/main/java/net/runelite/client/util/HotkeyListener.java
+++ b/runelite-client/src/main/java/net/runelite/client/util/HotkeyListener.java
@@ -26,7 +26,9 @@ package net.runelite.client.util;
import java.awt.event.KeyEvent;
import java.util.function.Supplier;
+import lombok.Getter;
import lombok.RequiredArgsConstructor;
+import lombok.Setter;
import net.runelite.client.config.Keybind;
import net.runelite.client.input.KeyListener;
@@ -39,6 +41,10 @@ public abstract class HotkeyListener implements KeyListener
private boolean isConsumingTyped = false;
+ @Setter
+ @Getter
+ private boolean isEnabledOnLogin = false;
+
@Override
public void keyTyped(KeyEvent e)
{
diff --git a/runelite-client/src/main/java/net/runelite/client/util/WeaponMap.java b/runelite-client/src/main/java/net/runelite/client/util/WeaponMap.java
index 98ac463ec2..d91a55f2ec 100644
--- a/runelite-client/src/main/java/net/runelite/client/util/WeaponMap.java
+++ b/runelite-client/src/main/java/net/runelite/client/util/WeaponMap.java
@@ -417,6 +417,8 @@ public class WeaponMap
StyleMap.put(ItemID.VERACS_FLAIL_25, WeaponStyle.MELEE);
StyleMap.put(ItemID.VERACS_FLAIL_50, WeaponStyle.MELEE);
StyleMap.put(ItemID.VERACS_FLAIL_75, WeaponStyle.MELEE);
+ StyleMap.put(ItemID.VESTAS_BLIGHTED_LONGSWORD, WeaponStyle.MELEE);
+ StyleMap.put(ItemID.VESTAS_LONGSWORD_INACTIVE, WeaponStyle.MELEE);
StyleMap.put(ItemID.VIGGORAS_CHAINMACE, WeaponStyle.MELEE);
StyleMap.put(ItemID.VIGGORAS_CHAINMACE_U, WeaponStyle.MELEE);
StyleMap.put(ItemID.VOLCANIC_ABYSSAL_WHIP, WeaponStyle.MELEE);
diff --git a/runelite-client/src/main/resources/item_variations.json b/runelite-client/src/main/resources/item_variations.json
index a6af42fc1e..1d6a07b4ce 100644
--- a/runelite-client/src/main/resources/item_variations.json
+++ b/runelite-client/src/main/resources/item_variations.json
@@ -9336,7 +9336,8 @@
],
"vestas longsword": [
22613,
- 23615
+ 23615,
+ 24619
],
"statiuss warhammer": [
22622,
@@ -9730,5 +9731,23 @@
24469,
24472,
24475
+ ],
+ "antique emblem": [
+ 24565,
+ 24567,
+ 24569,
+ 24571,
+ 24573,
+ 24575,
+ 24577,
+ 24579,
+ 24581,
+ 24583
+ ],
+ "blighted super restore": [
+ 24598,
+ 24601,
+ 24603,
+ 24605
]
}
diff --git a/runelite-client/src/main/scripts/PvpWidgetBuilder.hash b/runelite-client/src/main/scripts/PvpWidgetBuilder.hash
index 144ac0aea6..3e4a898362 100644
--- a/runelite-client/src/main/scripts/PvpWidgetBuilder.hash
+++ b/runelite-client/src/main/scripts/PvpWidgetBuilder.hash
@@ -1 +1 @@
-08461B2A942D4D792EEB9D9BCCEB9B11256AD8B217B1EAF1BDBA71314F816D6F
\ No newline at end of file
+1DC252B93DF0D948329C4EAD151FA9406A17D3CF2C5C3EC0317BF4DCD1B3811A
\ No newline at end of file
diff --git a/runelite-client/src/main/scripts/PvpWidgetBuilder.rs2asm b/runelite-client/src/main/scripts/PvpWidgetBuilder.rs2asm
index ba8bf2ec2f..4e85d37ecd 100644
--- a/runelite-client/src/main/scripts/PvpWidgetBuilder.rs2asm
+++ b/runelite-client/src/main/scripts/PvpWidgetBuilder.rs2asm
@@ -10,7 +10,7 @@
iload 2
iconst 1
if_icmpeq LABEL8
- jump LABEL74
+ jump LABEL80
LABEL8:
get_varp 1676
iconst 4
@@ -39,81 +39,87 @@ LABEL27:
iload 0
if_settext
LABEL30:
- jump LABEL73
+ jump LABEL79
LABEL31:
get_varbit 4965
iconst 0
if_icmpgt LABEL35
- jump LABEL39
+ jump LABEL45
LABEL35:
sconst "Protection"
iload 0
if_settext
- jump LABEL73
-LABEL39:
+ iconst 0
+ iconst 13
+ iconst 1
+ iconst 2
+ iload 0
+ if_setposition
+ jump LABEL79
+LABEL45:
iload 1
iconst 0
- if_icmpgt LABEL43
- jump LABEL54
-LABEL43:
+ if_icmpgt LABEL49
+ jump LABEL60
+LABEL49:
get_varbit 5954
iconst 1
- if_icmpeq LABEL47
- jump LABEL54
-LABEL47:
+ if_icmpeq LABEL53
+ jump LABEL60
+LABEL53:
sconst "Level: "
iload 1
tostring
join_string 2
iload 0
if_settext
- jump LABEL73
-LABEL54:
+ jump LABEL79
+LABEL60:
get_varc_int 78
iconst 1
- if_icmpeq LABEL58
- jump LABEL62
-LABEL58:
+ if_icmpeq LABEL64
+ jump LABEL68
+LABEL64:
sconst "Guarded"
iload 0
if_settext
- jump LABEL73
-LABEL62:
+ jump LABEL79
+LABEL68:
get_varc_int 78
iconst 2
- if_icmpeq LABEL66
- jump LABEL70
-LABEL66:
+ if_icmpeq LABEL72
+ jump LABEL76
+LABEL72:
sconst "No PvP"
iload 0
if_settext
- jump LABEL73
-LABEL70:
+ jump LABEL79
+LABEL76:
sconst "Deadman"
iload 0
if_settext
-LABEL73:
- jump LABEL88
-LABEL74:
+LABEL79:
+ jump LABEL94
+LABEL80:
iload 1
iconst 0
- if_icmpgt LABEL78
- jump LABEL85
-LABEL78:
+ if_icmpgt LABEL84
+ jump LABEL91
+LABEL84:
sconst "Level: "
iload 1
tostring
join_string 2
iload 0
if_settext
- jump LABEL88
-LABEL85:
+ jump LABEL94
+LABEL91:
sconst ""
iload 0
if_settext
-LABEL88:
+LABEL94:
iload 1
invoke 387
sconst "wildernessWidgetTextSet" ; set callback name
- runelite_callback ; invoke callback
+ runelite_callback ; invoke callback
return
diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSModelMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSModelMixin.java
index 0164864b24..3084faa903 100644
--- a/runelite-mixins/src/main/java/net/runelite/mixins/RSModelMixin.java
+++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSModelMixin.java
@@ -29,6 +29,7 @@ import java.util.ArrayList;
import java.util.List;
import net.runelite.api.Model;
import net.runelite.api.Perspective;
+import net.runelite.api.hooks.DrawCallbacks;
import net.runelite.api.mixins.Copy;
import net.runelite.api.mixins.Inject;
import net.runelite.api.mixins.MethodHook;
@@ -175,6 +176,19 @@ public abstract class RSModelMixin implements RSModel
return model;
}
+ @Copy("drawFace")
+ public abstract void rs$drawFace(int face);
+
+ @Replace("drawFace")
+ public void rl$drawFace(int face)
+ {
+ DrawCallbacks callbacks = client.getDrawCallbacks();
+ if (callbacks == null || !callbacks.drawFace(this, face))
+ {
+ rs$drawFace(face);
+ }
+ }
+
@MethodHook("buildSharedModel")
@Inject
public void rl$buildSharedModel(boolean refTransparencies, Model sharedModel, byte[] transparencyBuffer)
@@ -224,7 +238,7 @@ public abstract class RSModelMixin implements RSModel
{
int type = frame.getTransformTypes()[i];
this.animate(skin.getTypes()[type], skin.getList()[type], frame.getTranslatorX()[i],
- frame.getTranslatorY()[i], frame.getTranslatorZ()[i]);
+ frame.getTranslatorY()[i], frame.getTranslatorZ()[i]);
}
}
else
@@ -235,13 +249,13 @@ public abstract class RSModelMixin implements RSModel
{
boolean frameValid = false;
if (transformIndex < frame.getTransformCount()
- && frame.getTransformTypes()[transformIndex] == i)
+ && frame.getTransformTypes()[transformIndex] == i)
{
frameValid = true;
}
boolean nextFrameValid = false;
if (nextTransformIndex < nextFrame.getTransformCount()
- && nextFrame.getTransformTypes()[nextTransformIndex] == i)
+ && nextFrame.getTransformTypes()[nextTransformIndex] == i)
{
nextFrameValid = true;
}
@@ -399,4 +413,4 @@ public abstract class RSModelMixin implements RSModel
{
this.rl$faceTextureVCoordinates = faceTextureVCoordinates;
}
-}
+}
\ No newline at end of file
diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSModel.java b/runescape-api/src/main/java/net/runelite/rs/api/RSModel.java
index e2e5d3d79b..2fdc124a48 100644
--- a/runescape-api/src/main/java/net/runelite/rs/api/RSModel.java
+++ b/runescape-api/src/main/java/net/runelite/rs/api/RSModel.java
@@ -157,6 +157,10 @@ public interface RSModel extends RSEntity, Model
@Import("isSingleTile")
@Override
boolean isClickable();
+
+ @Import("drawFace")
+ @Override
+ void drawFace(int face);
void interpolateFrames(RSFrames frames, int frameId, RSFrames nextFrames, int nextFrameId, int interval, int intervalCount);
diff --git a/runescape-client/src/main/java/Model.java b/runescape-client/src/main/java/Model.java
index 3970e882bc..bf12e8e72f 100644
--- a/runescape-client/src/main/java/Model.java
+++ b/runescape-client/src/main/java/Model.java
@@ -1237,7 +1237,7 @@ public class Model extends Entity {
var27 = field1731[var7];
for (var10 = 0; var10 < var8; ++var10) {
- this.method2986(var27[var10]);
+ this.drawFace(var27[var10]);
}
}
}
@@ -1304,7 +1304,7 @@ public class Model extends Entity {
for (var15 = 0; var15 < 10; ++var15) {
while (var15 == 0 && var10 > var7) {
- this.method2986(var30[var11++]);
+ this.drawFace(var30[var11++]);
if (var11 == var12 && var30 != field1727[11]) {
var11 = 0;
var12 = field1736[11];
@@ -1320,7 +1320,7 @@ public class Model extends Entity {
}
while (var15 == 3 && var10 > var8) {
- this.method2986(var30[var11++]);
+ this.drawFace(var30[var11++]);
if (var11 == var12 && var30 != field1727[11]) {
var11 = 0;
var12 = field1736[11];
@@ -1336,7 +1336,7 @@ public class Model extends Entity {
}
while (var15 == 5 && var10 > var9) {
- this.method2986(var30[var11++]);
+ this.drawFace(var30[var11++]);
if (var11 == var12 && var30 != field1727[11]) {
var11 = 0;
var12 = field1736[11];
@@ -1355,12 +1355,12 @@ public class Model extends Entity {
int[] var32 = field1727[var15];
for (var18 = 0; var18 < var16; ++var18) {
- this.method2986(var32[var18]);
+ this.drawFace(var32[var18]);
}
}
while (var10 != -1000) {
- this.method2986(var30[var11++]);
+ this.drawFace(var30[var11++]);
if (var11 == var12 && var30 != field1727[11]) {
var11 = 0;
var30 = field1727[11];
@@ -1380,7 +1380,8 @@ public class Model extends Entity {
}
@ObfuscatedName("an")
- final void method2986(int var1) {
+ @Export("drawFace")
+ final void drawFace(int var1) {
if (field1722[var1]) {
this.method3029(var1);
} else {