diff --git a/cache/src/main/java/net/runelite/cache/util/Xtea.java b/cache/src/main/java/net/runelite/cache/util/Xtea.java index c79dc5a511..d970979e50 100644 --- a/cache/src/main/java/net/runelite/cache/util/Xtea.java +++ b/cache/src/main/java/net/runelite/cache/util/Xtea.java @@ -24,8 +24,8 @@ */ package net.runelite.cache.util; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; +import net.runelite.cache.io.InputStream; +import net.runelite.cache.io.OutputStream; public class Xtea { @@ -42,13 +42,13 @@ public class Xtea public byte[] encrypt(byte[] data, int len) { - ByteBuf buf = Unpooled.wrappedBuffer(data, 0, len); - ByteBuf out = Unpooled.buffer(len); + InputStream in = new InputStream(data); + OutputStream out = new OutputStream(len); int numBlocks = len / 8; for (int block = 0; block < numBlocks; ++block) { - int v0 = buf.readInt(); - int v1 = buf.readInt(); + int v0 = in.readInt(); + int v1 = in.readInt(); int sum = 0; for (int i = 0; i < ROUNDS; ++i) { @@ -59,19 +59,19 @@ public class Xtea out.writeInt(v0); out.writeInt(v1); } - out.writeBytes(buf); - return out.array(); + out.writeBytes(in.getRemaining()); + return out.flip(); } public byte[] decrypt(byte[] data, int len) { - ByteBuf buf = Unpooled.wrappedBuffer(data, 0, len); - ByteBuf out = Unpooled.buffer(len); + InputStream in = new InputStream(data); + OutputStream out = new OutputStream(len); int numBlocks = len / 8; for (int block = 0; block < numBlocks; ++block) { - int v0 = buf.readInt(); - int v1 = buf.readInt(); + int v0 = in.readInt(); + int v1 = in.readInt(); int sum = GOLDEN_RATIO * ROUNDS; for (int i = 0; i < ROUNDS; ++i) { @@ -82,7 +82,7 @@ public class Xtea out.writeInt(v0); out.writeInt(v1); } - out.writeBytes(buf); - return out.array(); + out.writeBytes(in.getRemaining()); + return out.flip(); } } 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 0d4350fbcf..59c61ab497 100644 --- a/runelite-api/src/main/java/net/runelite/api/AnimationID.java +++ b/runelite-api/src/main/java/net/runelite/api/AnimationID.java @@ -205,6 +205,7 @@ public final class AnimationID public static final int LEAGUE_HOME_TELEPORT_5 = 8805; public static final int LEAGUE_HOME_TELEPORT_6 = 8807; public static final int RAID_LIGHT_ANIMATION = 3101; + public static final int LOOTBEAM_ANIMATION = 9260; public static final int CONSTRUCTION = 3676; public static final int CONSTRUCTION_IMCANDO = 8912; 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 cf99e610f6..ce0d70e902 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -456,6 +456,11 @@ public interface Client extends GameEngine */ IndexDataBase getIndexConfig(); + /** + * Gets an index by id + */ + IndexDataBase getIndex(int id); + /** * Returns the x-axis base coordinate. *

@@ -1131,7 +1136,26 @@ public interface Client extends GameEngine RuneLiteObject createRuneLiteObject(); /** - * Loads a model from the cache + * Loads an unlit model from the cache. The returned model shares + * data such as faces, face colors, face transparencies, and vertex points with + * other models. If you want to mutate these you MUST call the relevant {@code cloneX} + * method. + * + * @see ModelData#cloneColors() + * + * @param id the ID of the model + * @return the model or null if it is loading or nonexistent + */ + @Nullable + ModelData loadModelData(int id); + + ModelData mergeModels(ModelData[] models, int length); + ModelData mergeModels(ModelData ...models); + + /** + * Loads and lights a model from the cache + * + * This is equivalent to {@code loadModelData(id).light()} * * @param id the ID of the model * @return the model or null if it is loading or nonexistent diff --git a/runelite-api/src/main/java/net/runelite/api/IndexDataBase.java b/runelite-api/src/main/java/net/runelite/api/IndexDataBase.java index 2a6f761b1e..8ffba7c9ef 100644 --- a/runelite-api/src/main/java/net/runelite/api/IndexDataBase.java +++ b/runelite-api/src/main/java/net/runelite/api/IndexDataBase.java @@ -54,4 +54,6 @@ public interface IndexDataBase int getGroupFileCount(int groupId); int[] getFileCounts(); + + byte[] loadData(int archiveID, int fileID); } 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 dcd48656ce..6c164688a1 100644 --- a/runelite-api/src/main/java/net/runelite/api/ItemID.java +++ b/runelite-api/src/main/java/net/runelite/api/ItemID.java @@ -12284,5 +12284,69 @@ public final class ItemID public static final int BLOOD_ESSENCE = 26390; public static final int BLOOD_ESSENCE_ACTIVE = 26392; public static final int BANDOSIAN_COMPONENTS = 26394; + public static final int CABBAGE_26417 = 26417; + public static final int CABBAGE_26419 = 26419; + public static final int SHATTERED_RELICS_VARIETY_ORNAMENT_KIT = 26421; + public static final int SHATTERED_BANNER = 26424; + public static final int SHATTERED_HOOD_T1 = 26427; + public static final int SHATTERED_TOP_T1 = 26430; + public static final int SHATTERED_TROUSERS_T1 = 26433; + public static final int SHATTERED_BOOTS_T1 = 26436; + public static final int SHATTERED_HOOD_T2 = 26439; + public static final int SHATTERED_TOP_T2 = 26442; + public static final int SHATTERED_TROUSERS_T2 = 26445; + public static final int SHATTERED_BOOTS_T2 = 26448; + public static final int SHATTERED_HOOD_T3 = 26451; + public static final int SHATTERED_TOP_T3 = 26454; + public static final int SHATTERED_TROUSERS_T3 = 26457; + public static final int SHATTERED_BOOTS_T3 = 26460; + public static final int VOID_KNIGHT_TOP_OR = 26463; + public static final int VOID_KNIGHT_ROBE_OR = 26465; + public static final int VOID_KNIGHT_GLOVES_OR = 26467; + public static final int ELITE_VOID_TOP_OR = 26469; + public static final int ELITE_VOID_ROBE_OR = 26471; + public static final int VOID_MAGE_HELM_OR = 26473; + public static final int VOID_RANGER_HELM_OR = 26475; + public static final int VOID_MELEE_HELM_OR = 26477; + public static final int SHATTERED_RELICS_VOID_ORNAMENT_KIT = 26479; + public static final int ABYSSAL_WHIP_OR = 26482; + public static final int ABYSSAL_TENTACLE_OR = 26484; + public static final int RUNE_CROSSBOW_OR = 26486; + public static final int BOOK_OF_BALANCE_OR = 26488; + public static final int BOOK_OF_DARKNESS_OR = 26490; + public static final int BOOK_OF_LAW_OR = 26492; + public static final int BOOK_OF_WAR_OR = 26494; + public static final int HOLY_BOOK_OR = 26496; + public static final int UNHOLY_BOOK_OR = 26498; + public static final int SHATTERED_TELEPORT_SCROLL = 26500; + public static final int SHATTERED_RELICS_BRONZE_TROPHY = 26503; + public static final int SHATTERED_RELICS_IRON_TROPHY = 26505; + public static final int SHATTERED_RELICS_STEEL_TROPHY = 26507; + public static final int SHATTERED_RELICS_MITHRIL_TROPHY = 26509; + public static final int SHATTERED_RELICS_ADAMANT_TROPHY = 26511; + public static final int SHATTERED_RELICS_RUNE_TROPHY = 26513; + public static final int SHATTERED_RELICS_DRAGON_TROPHY = 26515; + public static final int SHATTERED_CANE = 26517; + public static final int CANNON_BASE_OR = 26520; + public static final int CANNON_STAND_OR = 26522; + public static final int CANNON_BARRELS_OR = 26524; + public static final int CANNON_FURNACE_OR = 26526; + public static final int SHATTERED_CANNON_ORNAMENT_KIT = 26528; + public static final int MYSTIC_HAT_OR = 26531; + public static final int MYSTIC_ROBE_TOP_OR = 26533; + public static final int MYSTIC_ROBE_BOTTOM_OR = 26535; + public static final int MYSTIC_GLOVES_OR = 26537; + public static final int MYSTIC_BOOTS_OR = 26539; + public static final int SHATTERED_RELICS_MYSTIC_ORNAMENT_KIT = 26541; + public static final int UNIDENTIFIED_FRAGMENT_HARVESTING = 26544; + public static final int UNIDENTIFIED_FRAGMENT_PRODUCTION = 26545; + public static final int UNIDENTIFIED_FRAGMENT_SKILLING = 26546; + public static final int UNIDENTIFIED_FRAGMENT_COMBAT = 26547; + public static final int UNIDENTIFIED_FRAGMENT_MISC = 26548; + public static final int PORTABLE_WAYSTONE = 26549; + public static final int ARCANE_GRIMOIRE = 26551; + public static final int SHATTERED_RELIC_HUNTER_T1_ARMOUR_SET = 26554; + public static final int SHATTERED_RELIC_HUNTER_T2_ARMOUR_SET = 26557; + public static final int SHATTERED_RELIC_HUNTER_T3_ARMOUR_SET = 26560; /* This file is automatically generated. Do not edit. */ } \ No newline at end of file diff --git a/runelite-api/src/main/java/net/runelite/api/JagexColor.java b/runelite-api/src/main/java/net/runelite/api/JagexColor.java index 618ed002fa..1175f194e7 100644 --- a/runelite-api/src/main/java/net/runelite/api/JagexColor.java +++ b/runelite-api/src/main/java/net/runelite/api/JagexColor.java @@ -28,11 +28,35 @@ import java.awt.Color; public final class JagexColor { + public static final int HUE_MAX = 63; + public static final int SATURATION_MAX = 7; + public static final int LUMINANCE_MAX = 127; + public static short packHSL(int hue, int saturation, int luminance) { - return (short) ((short) (hue & 63) << 10 - | (short) (saturation & 7) << 7 - | (short) (luminance & 127)); + return (short) ((short) (hue & HUE_MAX) << 10 + | (short) (saturation & SATURATION_MAX) << 7 + | (short) (luminance & LUMINANCE_MAX)); + } + + public static int unpackHue(short hsl) + { + return hsl >> 10 & HUE_MAX; + } + + public static int unpackSaturation(short hsl) + { + return hsl >> 7 & SATURATION_MAX; + } + + public static int unpackLuminance(short hsl) + { + return hsl & LUMINANCE_MAX; + } + + public static String formatHSL(short hsl) + { + return String.format("%02Xh%Xs%02Xl", unpackHue(hsl), unpackSaturation(hsl), unpackLuminance(hsl)); } public static short rgbToHSL(int rgb, double brightness) diff --git a/runelite-api/src/main/java/net/runelite/api/Mesh.java b/runelite-api/src/main/java/net/runelite/api/Mesh.java new file mode 100644 index 0000000000..b149a5fd10 --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/Mesh.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2022 Abex + * 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.api; + +import java.util.List; +import net.runelite.api.model.Triangle; +import net.runelite.api.model.Vertex; + +/** + * A {@link Model} or {@link ModelData} + */ +public interface Mesh> +{ + /** + * Gets a list of all vertices of the model. + * + * @return the vertices + */ + List getVertices(); + + /** + * Gets a list of all triangles of the model. + * + * @return the triangle + */ + List getTriangles(); + + int getVerticesCount(); + int[] getVerticesX(); + int[] getVerticesY(); + int[] getVerticesZ(); + + int getFaceCount(); + int[] getFaceIndices1(); + int[] getFaceIndices2(); + int[] getFaceIndices3(); + byte[] getFaceTransparencies(); + short[] getFaceTextures(); + + /** + * Rotates this model 90 degrees around the vertical axis. + * {@link ModelData#cloneVertices()} should be called before calling this method + */ + T rotateY90Ccw(); + + /** + * Rotates this model 180 degrees around the vertical axis. + * {@link ModelData#cloneVertices()} should be called before calling this method + */ + T rotateY180Ccw(); + + /** + * Rotates this model 270 degrees around the vertical axis. + * {@link ModelData#cloneVertices()} should be called before calling this method + */ + T rotateY270Ccw(); + + /** + * Offsets this model by the passed amount (1/128ths of a tile). + * {@link ModelData#cloneVertices()} should be called before calling this method + */ + T translate(int x, int y, int z); + + /** + * Resizes this model by the passed amount (1/128ths). + * {@link ModelData#cloneVertices()} should be called before calling this method + */ + T scale(int x, int y, int z); +} diff --git a/runelite-api/src/main/java/net/runelite/api/Model.java b/runelite-api/src/main/java/net/runelite/api/Model.java index 71338a968b..0b38bcf3af 100644 --- a/runelite-api/src/main/java/net/runelite/api/Model.java +++ b/runelite-api/src/main/java/net/runelite/api/Model.java @@ -31,46 +31,14 @@ import java.util.List; /** * Represents the model of an object. */ -public interface Model extends Renderable +public interface Model extends Mesh, Renderable { - /** - * Gets a list of all vertices of the model. - * - * @return the vertices - */ - List getVertices(); - - /** - * Gets a list of all triangles of the model. - * - * @return the triangle - */ - List getTriangles(); - - int getVerticesCount(); - - int[] getVerticesX(); - - int[] getVerticesY(); - - int[] getVerticesZ(); - - int getFaceCount(); - - int[] getFaceIndices1(); - - int[] getFaceIndices2(); - - int[] getFaceIndices3(); - int[] getFaceColors1(); int[] getFaceColors2(); int[] getFaceColors3(); - byte[] getFaceTransparencies(); - int getSceneId(); void setSceneId(int sceneId); @@ -88,8 +56,6 @@ public interface Model extends Renderable int getRadius(); - short[] getFaceTextures(); - float[] getFaceTextureUVCoordinates(); void calculateExtreme(int orientation); diff --git a/runelite-api/src/main/java/net/runelite/api/ModelData.java b/runelite-api/src/main/java/net/runelite/api/ModelData.java new file mode 100644 index 0000000000..f98da89ca8 --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/ModelData.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2022 Abex + * 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.api; + +/** + * An unlit model + */ +public interface ModelData extends Mesh, Renderable +{ + int DEFAULT_AMBIENT = 64; + int DEFAULT_CONTRAST = 768; + int DEFAULT_X = -50; + int DEFAULT_Y = -10; + int DEFAULT_Z = -50; + + /** + * Gets colors as Jagex HSL + * + * @see JagexColor + */ + short[] getFaceColors(); + + /** + * Lights a model. + * + * The produced model shares verticies, face transparencies, face indicies, and textures with + * the underlying ModelData. If any of these may be mutated the corresponding {@code cloneX} + * method should be called before {@code light}ing + */ + Model light(int ambient, int contrast, int x, int y, int z); + + /** + * Lights a model with default values + * + * @see #light(int, int, int, int, int) + */ + Model light(); + + /** + * Applies a recolor using Jagex's HSL format. You should call {@link #cloneColors()} ()} before calling + * this method + */ + ModelData recolor(short colorToReplace, short colorToReplaceWith); + + /** + * Applies a retexture, changing texture ids. You should call {@link #cloneTextures()} before calling + * this method + */ + ModelData retexture(short find, short replace); + + /** + * Shallow-copies a model. Does not copy any arrays, which are still shared with this object. + */ + ModelData shallowCopy(); + + /** + * Clones {@link #getVerticesX()}, {@link #getVerticesY()}, and {@link #getVerticesZ()} so + * they can be safely mutated + */ + ModelData cloneVertices(); + + /** + * Clones {@link #getFaceColors()} so they can be safely mutated + */ + ModelData cloneColors(); + + /** + * Clones {@link #getFaceTextures()} so they can be safely mutated + */ + ModelData cloneTextures(); + + /** + * Clones {@link #getFaceTransparencies()} so they can be safely mutated + */ + ModelData cloneTransparencies(); +} 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 cd8c383e63..cfd04862de 100644 --- a/runelite-api/src/main/java/net/runelite/api/NpcID.java +++ b/runelite-api/src/main/java/net/runelite/api/NpcID.java @@ -9477,31 +9477,9 @@ public final class NpcID public static final int REGENT = 11229; public static final int GROUP_STORAGE_TUTOR = 11230; public static final int GROUP_IRON_TUTOR = 11231; - public static final int TINY_SNOWBALL = 11232; - public static final int MINI_SNOWBALL = 11233; - public static final int LITTLE_SNOWBALL = 11234; - public static final int SMALL_SNOWBALL = 11235; - public static final int NORMAL_SNOWBALL = 11236; - public static final int BIG_SNOWBALL = 11237; - public static final int LARGE_SNOWBALL = 11238; - public static final int HUGE_SNOWBALL = 11239; - public static final int HUMONGOUS_SNOWBALL = 11240; - public static final int BUOY = 11241; - public static final int GURL = 11242; - public static final int BUOY_11243 = 11243; - public static final int GURL_11244 = 11244; - public static final int HERQUIN_11245 = 11245; - public static final int CECILIA_11247 = 11247; - public static final int LARRY_11248 = 11248; - public static final int SANTAS_THRONE = 11249; - public static final int SANTA = 11250; - public static final int WAYNE_11251 = 11251; - public static final int WYSON_THE_GARDENER_11252 = 11252; - public static final int HAIRDRESSER_11254 = 11254; - public static final int SIR_VYVIN_11255 = 11255; - public static final int XI_PLZPETDOGZ_XIX = 11259; - public static final int DRAKE_11260 = 11260; - public static final int DUCK_11261 = 11261; + public static final int THE_SAGE = 11232; + public static final int LEAGUE_TUTOR = 11233; + public static final int LEAGUES_ASSISTANT_11234 = 11234; public static final int NEXLING = 11276; public static final int NEXLING_11277 = 11277; public static final int NEX = 11278; @@ -9521,5 +9499,6 @@ public final class NpcID public static final int SPIRITUAL_MAGE_11292 = 11292; public static final int BLOOD_REAVER = 11293; public static final int BLOOD_REAVER_11294 = 11294; + public static final int GULL_11297 = 11297; /* This file is automatically generated. Do not edit. */ } 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 3adbbe4a12..bb4bda7a6b 100644 --- a/runelite-api/src/main/java/net/runelite/api/NullItemID.java +++ b/runelite-api/src/main/java/net/runelite/api/NullItemID.java @@ -13901,5 +13901,108 @@ public final class NullItemID public static final int NULL_26391 = 26391; public static final int NULL_26393 = 26393; public static final int NULL_26395 = 26395; + public static final int NULL_26396 = 26396; + public static final int NULL_26397 = 26397; + public static final int NULL_26398 = 26398; + public static final int NULL_26399 = 26399; + public static final int NULL_26400 = 26400; + public static final int NULL_26401 = 26401; + public static final int NULL_26402 = 26402; + public static final int NULL_26403 = 26403; + public static final int NULL_26404 = 26404; + public static final int NULL_26405 = 26405; + public static final int NULL_26406 = 26406; + public static final int NULL_26407 = 26407; + public static final int NULL_26408 = 26408; + public static final int NULL_26409 = 26409; + public static final int NULL_26410 = 26410; + public static final int NULL_26411 = 26411; + public static final int NULL_26412 = 26412; + public static final int NULL_26413 = 26413; + public static final int NULL_26414 = 26414; + public static final int NULL_26415 = 26415; + public static final int NULL_26416 = 26416; + public static final int NULL_26418 = 26418; + public static final int NULL_26420 = 26420; + public static final int NULL_26422 = 26422; + public static final int NULL_26423 = 26423; + public static final int NULL_26425 = 26425; + public static final int NULL_26426 = 26426; + public static final int NULL_26428 = 26428; + public static final int NULL_26429 = 26429; + public static final int NULL_26431 = 26431; + public static final int NULL_26432 = 26432; + public static final int NULL_26434 = 26434; + public static final int NULL_26435 = 26435; + public static final int NULL_26437 = 26437; + public static final int NULL_26438 = 26438; + public static final int NULL_26440 = 26440; + public static final int NULL_26441 = 26441; + public static final int NULL_26443 = 26443; + public static final int NULL_26444 = 26444; + public static final int NULL_26446 = 26446; + public static final int NULL_26447 = 26447; + public static final int NULL_26449 = 26449; + public static final int NULL_26450 = 26450; + public static final int NULL_26452 = 26452; + public static final int NULL_26453 = 26453; + public static final int NULL_26455 = 26455; + public static final int NULL_26456 = 26456; + public static final int NULL_26458 = 26458; + public static final int NULL_26459 = 26459; + public static final int NULL_26461 = 26461; + public static final int NULL_26462 = 26462; + public static final int NULL_26464 = 26464; + public static final int NULL_26466 = 26466; + public static final int NULL_26468 = 26468; + public static final int NULL_26470 = 26470; + public static final int NULL_26472 = 26472; + public static final int NULL_26474 = 26474; + public static final int NULL_26476 = 26476; + public static final int NULL_26478 = 26478; + public static final int NULL_26480 = 26480; + public static final int NULL_26481 = 26481; + public static final int NULL_26483 = 26483; + public static final int NULL_26485 = 26485; + public static final int NULL_26487 = 26487; + public static final int NULL_26489 = 26489; + public static final int NULL_26491 = 26491; + public static final int NULL_26493 = 26493; + public static final int NULL_26495 = 26495; + public static final int NULL_26497 = 26497; + public static final int NULL_26499 = 26499; + public static final int NULL_26501 = 26501; + public static final int NULL_26502 = 26502; + public static final int NULL_26504 = 26504; + public static final int NULL_26506 = 26506; + public static final int NULL_26508 = 26508; + public static final int NULL_26510 = 26510; + public static final int NULL_26512 = 26512; + public static final int NULL_26514 = 26514; + public static final int NULL_26516 = 26516; + public static final int NULL_26518 = 26518; + public static final int NULL_26519 = 26519; + public static final int NULL_26521 = 26521; + public static final int NULL_26523 = 26523; + public static final int NULL_26525 = 26525; + public static final int NULL_26527 = 26527; + public static final int NULL_26529 = 26529; + public static final int NULL_26530 = 26530; + public static final int NULL_26532 = 26532; + public static final int NULL_26534 = 26534; + public static final int NULL_26536 = 26536; + public static final int NULL_26538 = 26538; + public static final int NULL_26540 = 26540; + public static final int NULL_26542 = 26542; + public static final int NULL_26543 = 26543; + public static final int NULL_26550 = 26550; + public static final int NULL_26552 = 26552; + public static final int NULL_26553 = 26553; + public static final int NULL_26555 = 26555; + public static final int NULL_26556 = 26556; + public static final int NULL_26558 = 26558; + public static final int NULL_26559 = 26559; + public static final int NULL_26561 = 26561; + public static final int NULL_26562 = 26562; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/NullNpcID.java b/runelite-api/src/main/java/net/runelite/api/NullNpcID.java index 73396db288..9e9d6158d6 100644 --- a/runelite-api/src/main/java/net/runelite/api/NullNpcID.java +++ b/runelite-api/src/main/java/net/runelite/api/NullNpcID.java @@ -1738,25 +1738,12 @@ public final class NullNpcID public static final int NULL_11222 = 11222; public static final int NULL_11223 = 11223; public static final int NULL_11224 = 11224; - public static final int NULL_11246 = 11246; + public static final int NULL_11235 = 11235; + public static final int NULL_11236 = 11236; public static final int NULL_11253 = 11253; public static final int NULL_11256 = 11256; public static final int NULL_11257 = 11257; public static final int NULL_11258 = 11258; - public static final int NULL_11262 = 11262; - public static final int NULL_11263 = 11263; - public static final int NULL_11264 = 11264; - public static final int NULL_11265 = 11265; - public static final int NULL_11266 = 11266; - public static final int NULL_11267 = 11267; - public static final int NULL_11268 = 11268; - public static final int NULL_11269 = 11269; - public static final int NULL_11270 = 11270; - public static final int NULL_11271 = 11271; - public static final int NULL_11272 = 11272; - public static final int NULL_11273 = 11273; - public static final int NULL_11274 = 11274; - public static final int NULL_11275 = 11275; public static final int NULL_11295 = 11295; public static final int NULL_11296 = 11296; /* This file is automatically generated. Do not edit. */ diff --git a/runelite-api/src/main/java/net/runelite/api/NullObjectID.java b/runelite-api/src/main/java/net/runelite/api/NullObjectID.java index ae2f7ee931..d65f6bb4c6 100644 --- a/runelite-api/src/main/java/net/runelite/api/NullObjectID.java +++ b/runelite-api/src/main/java/net/runelite/api/NullObjectID.java @@ -21006,18 +21006,7 @@ public final class NullObjectID public static final int NULL_42849 = 42849; public static final int NULL_42850 = 42850; public static final int NULL_42851 = 42851; - public static final int NULL_42873 = 42873; - public static final int NULL_42874 = 42874; - public static final int NULL_42875 = 42875; - public static final int NULL_42876 = 42876; - public static final int NULL_42877 = 42877; - public static final int NULL_42882 = 42882; - public static final int NULL_42883 = 42883; - public static final int NULL_42884 = 42884; - public static final int NULL_42893 = 42893; - public static final int NULL_42894 = 42894; - public static final int NULL_42896 = 42896; - public static final int NULL_42897 = 42897; + public static final int NULL_42853 = 42853; public static final int NULL_42898 = 42898; public static final int NULL_42899 = 42899; public static final int NULL_42900 = 42900; @@ -21040,12 +21029,6 @@ public final class NullObjectID public static final int NULL_42919 = 42919; public static final int NULL_42920 = 42920; public static final int NULL_42921 = 42921; - public static final int NULL_42922 = 42922; - public static final int NULL_42923 = 42923; - public static final int NULL_42924 = 42924; - public static final int NULL_42925 = 42925; - public static final int NULL_42926 = 42926; - public static final int NULL_42927 = 42927; public static final int NULL_42945 = 42945; public static final int NULL_42946 = 42946; public static final int NULL_42947 = 42947; @@ -21068,5 +21051,60 @@ public final class NullObjectID public static final int NULL_42964 = 42964; public static final int NULL_42967 = 42967; public static final int NULL_42968 = 42968; + public static final int NULL_42991 = 42991; + public static final int NULL_43000 = 43000; + public static final int NULL_43001 = 43001; + public static final int NULL_43002 = 43002; + public static final int NULL_43032 = 43032; + public static final int NULL_43033 = 43033; + public static final int NULL_43034 = 43034; + public static final int NULL_43035 = 43035; + public static final int NULL_43036 = 43036; + public static final int NULL_43037 = 43037; + public static final int NULL_43038 = 43038; + public static final int NULL_43039 = 43039; + public static final int NULL_43040 = 43040; + public static final int NULL_43041 = 43041; + public static final int NULL_43042 = 43042; + public static final int NULL_43043 = 43043; + public static final int NULL_43044 = 43044; + public static final int NULL_43045 = 43045; + public static final int NULL_43046 = 43046; + public static final int NULL_43047 = 43047; + public static final int NULL_43048 = 43048; + public static final int NULL_43049 = 43049; + public static final int NULL_43050 = 43050; + public static final int NULL_43051 = 43051; + public static final int NULL_43052 = 43052; + public static final int NULL_43053 = 43053; + public static final int NULL_43054 = 43054; + public static final int NULL_43055 = 43055; + public static final int NULL_43056 = 43056; + public static final int NULL_43057 = 43057; + public static final int NULL_43058 = 43058; + public static final int NULL_43059 = 43059; + public static final int NULL_43060 = 43060; + public static final int NULL_43061 = 43061; + public static final int NULL_43062 = 43062; + public static final int NULL_43063 = 43063; + public static final int NULL_43064 = 43064; + public static final int NULL_43065 = 43065; + public static final int NULL_43066 = 43066; + public static final int NULL_43067 = 43067; + public static final int NULL_43068 = 43068; + public static final int NULL_43069 = 43069; + public static final int NULL_43070 = 43070; + public static final int NULL_43071 = 43071; + public static final int NULL_43072 = 43072; + public static final int NULL_43073 = 43073; + public static final int NULL_43074 = 43074; + public static final int NULL_43075 = 43075; + public static final int NULL_43076 = 43076; + public static final int NULL_43077 = 43077; + public static final int NULL_43078 = 43078; + public static final int NULL_43079 = 43079; + public static final int NULL_43082 = 43082; + public static final int NULL_43083 = 43083; + public static final int NULL_43084 = 43084; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/ObjectID.java b/runelite-api/src/main/java/net/runelite/api/ObjectID.java index 016f9487e5..36497059d5 100644 --- a/runelite-api/src/main/java/net/runelite/api/ObjectID.java +++ b/runelite-api/src/main/java/net/runelite/api/ObjectID.java @@ -21832,49 +21832,66 @@ public final class ObjectID public static final int FROZEN_DOOR = 42840; public static final int FROZEN_DOOR_42841 = 42841; public static final int GOLD_SINK_42852 = 42852; - public static final int SIGN_42853 = 42853; - public static final int SCUFFED_SNOW = 42854; - public static final int SNOWMAN = 42855; - public static final int SNOWMAN_42856 = 42856; - public static final int SNOWMAN_42857 = 42857; - public static final int SNOWMAN_42858 = 42858; - public static final int SNOWMAN_42859 = 42859; - public static final int SNOWMAN_42860 = 42860; - public static final int SNOWMAN_42861 = 42861; - public static final int SNOWMAN_42862 = 42862; - public static final int SNOWMAN_42863 = 42863; - public static final int SNOWMAN_42864 = 42864; - public static final int SPADE_42865 = 42865; - public static final int PILE_OF_SNOW = 42866; - public static final int BUSH_42867 = 42867; - public static final int PILE_OF_SNOW_42868 = 42868; - public static final int PILE_OF_SNOW_42869 = 42869; - public static final int CHRISTMAS_TREE = 42870; - public static final int CHRISTMAS_TREE_42871 = 42871; - public static final int CHRISTMAS_TREE_42872 = 42872; - public static final int PRESENTS = 42878; - public static final int PRESENTS_42879 = 42879; - public static final int PRESENTS_42880 = 42880; - public static final int PRESENTS_42881 = 42881; - public static final int POTTED_TREE = 42885; - public static final int POTTED_TREE_42886 = 42886; - public static final int MARKET_STALL_42887 = 42887; - public static final int MARKET_STALL_42888 = 42888; - public static final int MARKET_STALL_42889 = 42889; - public static final int MARKET_STALL_42890 = 42890; - public static final int MARKET_STALL_42891 = 42891; - public static final int MARKET_STALL_42892 = 42892; - public static final int ROBIN = 42895; + public static final int CHEST_42854 = 42854; + public static final int DOOR_42855 = 42855; + public static final int ANCIENT_PLAQUE = 42856; + public static final int SCOREBOARD_42857 = 42857; + public static final int CHEST_42858 = 42858; + public static final int ANCIENT_FORGE = 42859; + public static final int ANVIL_42860 = 42860; + public static final int TROPHY_PEDESTAL_42861 = 42861; + public static final int TROPHY_PEDESTAL_42862 = 42862; + public static final int TROPHY_PEDESTAL_42863 = 42863; + public static final int TROPHY_PEDESTAL_42864 = 42864; + public static final int TROPHY_PEDESTAL_42865 = 42865; + public static final int TROPHY_PEDESTAL_42866 = 42866; + public static final int TROPHY_PEDESTAL_42867 = 42867; + public static final int ORNATE_TROPHY_PEDESTAL_42868 = 42868; + public static final int ORNATE_TROPHY_PEDESTAL_42869 = 42869; + public static final int ORNATE_TROPHY_PEDESTAL_42870 = 42870; + public static final int ORNATE_TROPHY_PEDESTAL_42871 = 42871; + public static final int ORNATE_TROPHY_PEDESTAL_42872 = 42872; + public static final int ORNATE_TROPHY_PEDESTAL_42873 = 42873; + public static final int ORNATE_TROPHY_PEDESTAL_42874 = 42874; + public static final int TROPHY_PEDESTAL_42875 = 42875; + public static final int TROPHY_PEDESTAL_42876 = 42876; + public static final int TROPHY_PEDESTAL_42877 = 42877; + public static final int TROPHY_PEDESTAL_42878 = 42878; + public static final int TROPHY_PEDESTAL_42879 = 42879; + public static final int TROPHY_PEDESTAL_42880 = 42880; + public static final int TROPHY_PEDESTAL_42881 = 42881; + public static final int ORNATE_TROPHY_PEDESTAL_42882 = 42882; + public static final int ORNATE_TROPHY_PEDESTAL_42883 = 42883; + public static final int ORNATE_TROPHY_PEDESTAL_42884 = 42884; + public static final int ORNATE_TROPHY_PEDESTAL_42885 = 42885; + public static final int ORNATE_TROPHY_PEDESTAL_42886 = 42886; + public static final int ORNATE_TROPHY_PEDESTAL_42887 = 42887; + public static final int ORNATE_TROPHY_PEDESTAL_42888 = 42888; + public static final int TROPHY_PEDESTAL_42889 = 42889; + public static final int TROPHY_PEDESTAL_42890 = 42890; + public static final int TROPHY_PEDESTAL_42891 = 42891; + public static final int TROPHY_PEDESTAL_42892 = 42892; + public static final int TROPHY_PEDESTAL_42893 = 42893; + public static final int TROPHY_PEDESTAL_42894 = 42894; + public static final int TROPHY_PEDESTAL_42895 = 42895; + public static final int ORNATE_TROPHY_PEDESTAL_42896 = 42896; + public static final int ORNATE_TROPHY_PEDESTAL_42897 = 42897; public static final int DEAD_TREE_42907 = 42907; public static final int DEAD_OAK_42908 = 42908; - public static final int SANTAS_SLEIGH = 42928; - public static final int SANTAS_THRONE = 42929; - public static final int SANTAS_SACK = 42930; + public static final int ORNATE_TROPHY_PEDESTAL_42922 = 42922; + public static final int ORNATE_TROPHY_PEDESTAL_42923 = 42923; + public static final int ORNATE_TROPHY_PEDESTAL_42924 = 42924; + public static final int ORNATE_TROPHY_PEDESTAL_42925 = 42925; + public static final int ORNATE_TROPHY_PEDESTAL_42926 = 42926; + public static final int BANNER_STAND_42927 = 42927; + public static final int ORNATE_BANNER_STAND_42928 = 42928; + public static final int OAK_OUTFIT_STAND_42929 = 42929; + public static final int OAK_OUTFIT_STAND_42930 = 42930; public static final int FROZEN_DOOR_42931 = 42931; public static final int FROZEN_DOOR_42932 = 42932; public static final int DOOR_42933 = 42933; public static final int DOOR_42934 = 42934; - public static final int ANCIENT_PLAQUE = 42935; + public static final int ANCIENT_PLAQUE_42935 = 42935; public static final int SCOREBOARD_42936 = 42936; public static final int ANCIENT_BARRIER = 42937; public static final int ANCIENT_BARRIER_42938 = 42938; @@ -21885,7 +21902,67 @@ public final class ObjectID public static final int STALAGMITE_42943 = 42943; public static final int STALAGMITE_42944 = 42944; public static final int ALTAR_42965 = 42965; - public static final int ANCIENT_FORGE = 42966; + public static final int ANCIENT_FORGE_42966 = 42966; public static final int BROKEN_CROSSBOW_42969 = 42969; + public static final int OAK_OUTFIT_STAND_42970 = 42970; + public static final int MAHOGANY_OUTFIT_STAND_42971 = 42971; + public static final int MAHOGANY_OUTFIT_STAND_42972 = 42972; + public static final int MAHOGANY_OUTFIT_STAND_42973 = 42973; + public static final int LOCK_42974 = 42974; + public static final int LOCK_42975 = 42975; + public static final int LOCK_42976 = 42976; + public static final int LOCK_42977 = 42977; + public static final int LOCK_42978 = 42978; + public static final int LOCK_42979 = 42979; + public static final int LOCK_42980 = 42980; + public static final int LOCK_42981 = 42981; + public static final int LOCK_42982 = 42982; + public static final int LOCK_42983 = 42983; + public static final int LOCK_42984 = 42984; + public static final int LOCK_42985 = 42985; + public static final int LOCK_42986 = 42986; + public static final int LOCK_42987 = 42987; + public static final int REPLACE_ME = 42988; + public static final int REPLACE_ME_42989 = 42989; + public static final int REPLACE_ME_42990 = 42990; + public static final int RUNESTONE_BASALT = 42992; + public static final int RUNESTONE_BASALT_42993 = 42993; + public static final int RUNESTONE_BASALT_42994 = 42994; + public static final int RUNESTONE_BASALT_42995 = 42995; + public static final int RUNESTONE_BASALT_42996 = 42996; + public static final int RUNESTONE_BASALT_42997 = 42997; + public static final int RUNESTONE_BASALT_42998 = 42998; + public static final int BOAT_42999 = 42999; + public static final int LUMBRIDGE_WAYSTONE = 43003; + public static final int LUMBRIDGE_WAYSTONE_43004 = 43004; + public static final int FALADOR_WAYSTONE = 43005; + public static final int FALADOR_WAYSTONE_43006 = 43006; + public static final int VARROCK_WAYSTONE = 43007; + public static final int VARROCK_WAYSTONE_43008 = 43008; + public static final int AL_KHARID_WAYSTONE = 43009; + public static final int AL_KHARID_WAYSTONE_43010 = 43010; + public static final int CATHERBY_WAYSTONE = 43011; + public static final int CATHERBY_WAYSTONE_43012 = 43012; + public static final int ARDOUGNE_WAYSTONE = 43013; + public static final int ARDOUGNE_WAYSTONE_43014 = 43014; + public static final int BRIMHAVEN_WAYSTONE = 43015; + public static final int BRIMHAVEN_WAYSTONE_43016 = 43016; + public static final int RELLEKKA_WAYSTONE = 43017; + public static final int RELLEKKA_WAYSTONE_43018 = 43018; + public static final int FEROX_ENCLAVE_WAYSTONE = 43019; + public static final int FEROX_ENCLAVE_WAYSTONE_43020 = 43020; + public static final int CANIFIS_WAYSTONE = 43021; + public static final int CANIFIS_WAYSTONE_43022 = 43022; + public static final int PRIFDDINAS_WAYSTONE = 43023; + public static final int PRIFDDINAS_WAYSTONE_43024 = 43024; + public static final int KOUREND_WAYSTONE = 43025; + public static final int KOUREND_WAYSTONE_43026 = 43026; + public static final int DWARF_MULTICANNON_43027 = 43027; + public static final int BROKEN_MULTICANNON_43028 = 43028; + public static final int CANNON_BASE_43029 = 43029; + public static final int CANNON_STAND_43030 = 43030; + public static final int CANNON_BARRELS_43031 = 43031; + public static final int RUNESTONE_BASALT_43080 = 43080; + public static final int RUNESTONE_BASALT_43081 = 43081; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java index 1114c99147..1d5e5f91b2 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java @@ -185,6 +185,7 @@ public final class WidgetID public static final int GRAVESTONE_GROUP_ID = 672; public static final int POH_TREASURE_CHEST_INVENTORY_GROUP_ID = 674; public static final int GROUP_IRON_GROUP_ID = 726; + public static final int GROUP_STORAGE_INVENTORY_GROUP_ID = 725; public static final int GROUP_STORAGE_GROUP_ID = 724; static class WorldMap @@ -841,23 +842,23 @@ public final class WidgetID public static class StandardSpellBook { - static final int LUMBRIDGE_HOME_TELEPORT = 5; - public static final int KOUREND_HOME_TELEPORT = 4; + static final int LUMBRIDGE_HOME_TELEPORT = 6; + static final int KOUREND_HOME_TELEPORT = 4; } static class AncientSpellBook { - static final int EDGEVILLE_HOME_TELEPORT = 99; + static final int EDGEVILLE_HOME_TELEPORT = 100; } static class LunarSpellBook { - static final int LUNAR_HOME_TELEPORT = 100; + static final int LUNAR_HOME_TELEPORT = 101; } static class ArceuusSpellBook { - static final int ARCEUUS_HOME_TELEPORT = 144; + static final int ARCEUUS_HOME_TELEPORT = 145; } static class Pvp diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/dpscounter/DpsCounterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/dpscounter/DpsCounterPlugin.java index 54887b7223..6af1e5d578 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/dpscounter/DpsCounterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/dpscounter/DpsCounterPlugin.java @@ -83,6 +83,7 @@ public class DpsCounterPlugin extends Plugin KREEARRA, KREEARRA_6492, KRIL_TSUTSAROTH, KRIL_TSUTSAROTH_6495, THE_MIMIC, THE_MIMIC_8633, + NEX, NEX_11279, NEX_11280, NEX_11281, NEX_11282, THE_NIGHTMARE, THE_NIGHTMARE_9426, THE_NIGHTMARE_9427, THE_NIGHTMARE_9428, THE_NIGHTMARE_9429, THE_NIGHTMARE_9430, THE_NIGHTMARE_9431, THE_NIGHTMARE_9432, THE_NIGHTMARE_9433, OBOR, SARACHNIS, diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java index 2e32a8e336..5869c07208 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java @@ -436,4 +436,15 @@ public interface GroundItemsConfig extends Config { return HighlightTier.HIGH; } + + @ConfigItem( + keyName = "lootbeamStyle", + name = "Lootbeam Style", + description = "Style of lootbeam to use", + position = 32 + ) + default Lootbeam.Style lootbeamStyle() + { + return Lootbeam.Style.MODERN; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java index 773fd8b044..af5282db14 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java @@ -99,7 +99,7 @@ import net.runelite.client.util.Text; @PluginDescriptor( name = "Ground Items", description = "Highlight ground items and/or show price information", - tags = {"grand", "exchange", "high", "alchemy", "prices", "highlight", "overlay"} + tags = {"grand", "exchange", "high", "alchemy", "prices", "highlight", "overlay", "lootbeam"} ) public class GroundItemsPlugin extends Plugin { @@ -791,12 +791,13 @@ public class GroundItemsPlugin extends Plugin Lootbeam lootbeam = lootbeams.get(worldPoint); if (lootbeam == null) { - lootbeam = new Lootbeam(client, clientThread, worldPoint, color); + lootbeam = new Lootbeam(client, clientThread, worldPoint, color, config.lootbeamStyle()); lootbeams.put(worldPoint, lootbeam); } else { lootbeam.setColor(color); + lootbeam.setStyle(config.lootbeamStyle()); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/Lootbeam.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/Lootbeam.java index 9e8761a93f..96d7d34409 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/Lootbeam.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/Lootbeam.java @@ -24,10 +24,14 @@ */ package net.runelite.client.plugins.grounditems; +import java.util.function.Function; +import lombok.RequiredArgsConstructor; +import net.runelite.api.Animation; import net.runelite.api.AnimationID; import net.runelite.api.Client; import net.runelite.api.JagexColor; import net.runelite.api.Model; +import net.runelite.api.ModelData; import net.runelite.api.RuneLiteObject; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; @@ -36,22 +40,58 @@ import net.runelite.client.callback.ClientThread; class Lootbeam { - private static final int RAID_LIGHT_MODEL = 5809; - private static final short RAID_LIGHT_FIND_COLOR = 6371; - private final RuneLiteObject runeLiteObject; private final Client client; private final ClientThread clientThread; private Color color; + private Style style; - public Lootbeam(Client client, ClientThread clientThread, WorldPoint worldPoint, Color color) + @RequiredArgsConstructor + public enum Style + { + LIGHT(l -> l.client.loadModel( + 5809, + new short[]{6371}, + new short[]{JagexColor.rgbToHSL(l.color.getRGB(), 1.0d)} + ), anim(AnimationID.RAID_LIGHT_ANIMATION)), + MODERN(l -> + { + ModelData md = l.client.loadModelData(43330); + if (md == null) + { + return null; + } + + short hsl = JagexColor.rgbToHSL(l.color.getRGB(), 1.0d); + int hue = JagexColor.unpackHue(hsl); + int sat = Math.min(JagexColor.unpackSaturation(hsl) + 1, JagexColor.SATURATION_MAX); + int lum = JagexColor.unpackLuminance(hsl); + + return md.cloneColors() + .recolor((short) 26432, JagexColor.packHSL(hue, sat, Math.min(lum + 12, JagexColor.LUMINANCE_MAX))) + .recolor((short) 26584, JagexColor.packHSL(hue, sat - 1, Math.max(lum - 12, 0))) + .light(75, 1875, ModelData.DEFAULT_X, ModelData.DEFAULT_Y, ModelData.DEFAULT_Z); + }, anim(AnimationID.LOOTBEAM_ANIMATION)), + ; + + private final Function modelSupplier; + private final Function animationSupplier; + } + + private static Function anim(int id) + { + return b -> b.client.loadAnimation(id); + } + + public Lootbeam(Client client, ClientThread clientThread, WorldPoint worldPoint, Color color, Style style) { this.client = client; this.clientThread = clientThread; runeLiteObject = client.createRuneLiteObject(); - setColor(color); - runeLiteObject.setAnimation(client.loadAnimation(AnimationID.RAID_LIGHT_ANIMATION)); + this.color = color; + this.style = style; + update(); runeLiteObject.setShouldLoop(true); LocalPoint lp = LocalPoint.fromWorld(client, worldPoint); @@ -68,19 +108,34 @@ class Lootbeam } this.color = color; + update(); + } + + public void setStyle(Style style) + { + if (this.style == style) + { + return; + } + + this.style = style; + update(); + } + + private void update() + { clientThread.invoke(() -> { - Model m = client.loadModel( - RAID_LIGHT_MODEL, - new short[]{RAID_LIGHT_FIND_COLOR}, - new short[]{JagexColor.rgbToHSL(color.getRGB(), 1.0d)} - ); - if (m == null) + Model model = style.modelSupplier.apply(this); + if (model == null) { return false; } - runeLiteObject.setModel(m); + Animation anim = style.animationSupplier.apply(this); + + runeLiteObject.setAnimation(anim); + runeLiteObject.setModel(model); return true; }); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java index 82af2d77d3..eb0350e0ad 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java @@ -46,6 +46,7 @@ public interface ItemChargeConfig extends Config String KEY_EXPEDITIOUS_BRACELET = "expeditiousBracelet"; String KEY_EXPLORERS_RING = "explorerRing"; String KEY_RING_OF_FORGING = "ringOfForging"; + String KEY_BLOOD_ESSENCE = "bloodEssence"; @ConfigSection( name = "Charge Settings", @@ -415,4 +416,16 @@ public interface ItemChargeConfig extends Config { return true; } + + @ConfigItem( + keyName = "showBloodEssenceCharges", + name = "Blood Essence Charges", + description = "Show Blood Essence charges", + position = 30, + section = chargesSection + ) + default boolean showBloodEssenceCharges() + { + return true; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java index 6dfdb7114b..5ff384a8d0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java @@ -130,6 +130,13 @@ public class ItemChargePlugin extends Plugin "Your expeditious bracelet has (\\d{1,2}) charges? left\\." ); private static final String EXPEDITIOUS_BRACELET_BREAK_TEXT = "Your Expeditious Bracelet has crumbled to dust."; + private static final Pattern BLOOD_ESSENCE_CHECK_PATTERN = Pattern.compile( + "Your blood essence has (\\d{1,4}) charges? remaining" + ); + private static final Pattern BLOOD_ESSENCE_EXTRACT_PATTERN = Pattern.compile( + "You manage to extract power from the Blood Essence and craft (\\d{1,3}) extra runes?\\." + ); + private static final String BLOOD_ESSENCE_ACTIVATE_TEXT = "You activate the blood essence."; private static final int MAX_DODGY_CHARGES = 10; private static final int MAX_BINDING_CHARGES = 16; @@ -138,6 +145,7 @@ public class ItemChargePlugin extends Plugin private static final int MAX_AMULET_OF_CHEMISTRY_CHARGES = 5; private static final int MAX_AMULET_OF_BOUNTY_CHARGES = 10; private static final int MAX_SLAYER_BRACELET_CHARGES = 30; + private static final int MAX_BLOOD_ESSENCE_CHARGES = 1000; private int lastExplorerRingCharge = -1; @@ -227,6 +235,8 @@ public class ItemChargePlugin extends Plugin Matcher slaughterCheckMatcher = BRACELET_OF_SLAUGHTER_CHECK_PATTERN.matcher(message); Matcher expeditiousActivateMatcher = EXPEDITIOUS_BRACELET_ACTIVATE_PATTERN.matcher(message); Matcher expeditiousCheckMatcher = EXPEDITIOUS_BRACELET_CHECK_PATTERN.matcher(message); + Matcher bloodEssenceCheckMatcher = BLOOD_ESSENCE_CHECK_PATTERN.matcher(message); + Matcher bloodEssenceExtractMatcher = BLOOD_ESSENCE_EXTRACT_PATTERN.matcher(message); if (config.recoilNotification() && message.contains(RING_OF_RECOIL_BREAK_MESSAGE)) { @@ -413,6 +423,18 @@ public class ItemChargePlugin extends Plugin { updateExpeditiousBraceletCharges(Integer.parseInt(expeditiousCheckMatcher.group(1))); } + else if (bloodEssenceCheckMatcher.find()) + { + updateBloodEssenceCharges(Integer.parseInt(bloodEssenceCheckMatcher.group(1))); + } + else if (bloodEssenceExtractMatcher.find()) + { + updateBloodEssenceCharges(getItemCharges(ItemChargeConfig.KEY_BLOOD_ESSENCE) - Integer.parseInt(bloodEssenceExtractMatcher.group(1))); + } + else if (message.contains(BLOOD_ESSENCE_ACTIVATE_TEXT)) + { + updateBloodEssenceCharges(MAX_BLOOD_ESSENCE_CHARGES); + } } } @@ -540,6 +562,12 @@ public class ItemChargePlugin extends Plugin updateInfoboxes(); } + private void updateBloodEssenceCharges(final int value) + { + setItemCharges(ItemChargeConfig.KEY_BLOOD_ESSENCE, value); + updateInfoboxes(); + } + private void checkDestroyWidget() { final int currentTick = client.getTickCount(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java index 294a865c1f..3178fa9953 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java @@ -51,7 +51,8 @@ enum ItemChargeType SACK(ItemChargeConfig::showSackCharges), RING_OF_FORGING(ItemChargeConfig::showRingOfForgingCount), POTION(ItemChargeConfig::showPotionDoseCount), - GUTHIX_REST(ItemChargeConfig::showGuthixRestDoses); + GUTHIX_REST(ItemChargeConfig::showGuthixRestDoses), + BLOOD_ESSENCE(ItemChargeConfig::showBloodEssenceCharges); private final Predicate enabled; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java index b9c1124423..65ee2123a1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java @@ -62,6 +62,10 @@ enum ItemWithCharge ANTIDOTE_PP2(POTION, ANTIDOTE2_5956, 2), ANTIDOTE_PP3(POTION, ANTIDOTE3_5954, 3), ANTIDOTE_PP4(POTION, ANTIDOTE4_5952, 4), + ANCIENT_BR1(POTION, ANCIENT_BREW1, 1), + ANCIENT_BR2(POTION, ANCIENT_BREW2, 2), + ANCIENT_BR3(POTION, ANCIENT_BREW3, 3), + ANCIENT_BR4(POTION, ANCIENT_BREW4, 4), ANTIFIRE1(POTION, ANTIFIRE_POTION1, 1), ANTIFIRE2(POTION, ANTIFIRE_POTION2, 2), ANTIFIRE3(POTION, ANTIFIRE_POTION3, 3), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithConfig.java index ca77f40d15..581410c1f9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithConfig.java @@ -46,7 +46,8 @@ enum ItemWithConfig AMULET_OF_BOUNTY(ItemID.AMULET_OF_BOUNTY, ItemChargeConfig.KEY_AMULET_OF_BOUNTY, ItemChargeType.AMULET_OF_BOUNTY), BRACELET_OF_SLAUGHTER(ItemID.BRACELET_OF_SLAUGHTER, ItemChargeConfig.KEY_BRACELET_OF_SLAUGHTER, ItemChargeType.BRACELET_OF_SLAUGHTER), EXPEDITIOUS_BRACELET(ItemID.EXPEDITIOUS_BRACELET, ItemChargeConfig.KEY_EXPEDITIOUS_BRACELET, ItemChargeType.EXPEDITIOUS_BRACELET), - CHRONICLE(ItemID.CHRONICLE, ItemChargeConfig.KEY_CHRONICLE, ItemChargeType.TELEPORT); + CHRONICLE(ItemID.CHRONICLE, ItemChargeConfig.KEY_CHRONICLE, ItemChargeType.TELEPORT), + BLOOD_ESSENCE(ItemID.BLOOD_ESSENCE_ACTIVE, ItemChargeConfig.KEY_BLOOD_ESSENCE, ItemChargeType.BLOOD_ESSENCE); private final int itemId; private final String configKey; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentification.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentification.java index 9661c03b61..044aeeca8a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentification.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentification.java @@ -293,6 +293,7 @@ enum ItemIdentification ZAMORAK_BREW(Type.POTION, "ZammyBr", "Za", ItemID.ZAMORAK_BREW4, ItemID.ZAMORAK_BREW3, ItemID.ZAMORAK_BREW2, ItemID.ZAMORAK_BREW1), SARADOMIN_BREW(Type.POTION, "SaraBr", "Sa", ItemID.SARADOMIN_BREW4, ItemID.SARADOMIN_BREW3, ItemID.SARADOMIN_BREW2, ItemID.SARADOMIN_BREW1), + ANCIENT_BREW(Type.POTION, "AncBr", "A.Br", ItemID.ANCIENT_BREW4, ItemID.ANCIENT_BREW3, ItemID.ANCIENT_BREW2, ItemID.ANCIENT_BREW1), ANTIPOISON(Type.POTION, "AntiP", "AP", ItemID.ANTIPOISON4, ItemID.ANTIPOISON3, ItemID.ANTIPOISON2, ItemID.ANTIPOISON1), SUPERANTIPOISON(Type.POTION, "S.AntiP", "S.AP", ItemID.SUPERANTIPOISON4, ItemID.SUPERANTIPOISON3, ItemID.SUPERANTIPOISON2, ItemID.SUPERANTIPOISON1), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loginscreen/LoginScreenOverride.java b/runelite-client/src/main/java/net/runelite/client/plugins/loginscreen/LoginScreenOverride.java index e083db40b0..f7a3e87722 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loginscreen/LoginScreenOverride.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loginscreen/LoginScreenOverride.java @@ -44,6 +44,7 @@ public enum LoginScreenOverride PRIFDDINAS("prifddinas.jpg"), THEATRE_OF_BLOOD("tob.jpg"), A_KINGDOM_DIVIDED("akd.jpg"), + NEX("nex.jpg"), CUSTOM, RANDOM; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java index 98c2302fcd..82b89bea25 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java @@ -787,6 +787,35 @@ public interface MenuEntrySwapperConfig extends Config return false; } + enum StairsMode + { + CLIMB, + CLIMB_UP, + CLIMB_DOWN, + } + + @ConfigItem( + keyName = "swapStairsLeftClick", + name = "Stairs left-click", + description = "Swap this option when left-clicking stairs. Also works on ladders.", + section = objectSection + ) + default StairsMode swapStairsLeftClick() + { + return StairsMode.CLIMB; + } + + @ConfigItem( + keyName = "swapStairsShiftClick", + name = "Stairs shift-click", + description = "Swap this option when shift-clicking stairs. Also works on ladders.", + section = objectSection + ) + default StairsMode swapStairsShiftClick() + { + return StairsMode.CLIMB; + } + @ConfigItem( keyName = "swapTemporossLeave", name = "Tempoross Leave", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java index 9893f002dc..709a4162aa 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java @@ -416,6 +416,9 @@ public class MenuEntrySwapperPlugin extends Plugin swap("eat", "guzzle", config::swapRockCake); swap("travel", "dive", config::swapRowboatDive); + + swap("climb", "climb-up", () -> (shiftModifier() ? config.swapStairsShiftClick() : config.swapStairsLeftClick()) == MenuEntrySwapperConfig.StairsMode.CLIMB_UP); + swap("climb", "climb-down", () -> (shiftModifier() ? config.swapStairsShiftClick() : config.swapStairsLeftClick()) == MenuEntrySwapperConfig.StairsMode.CLIMB_DOWN); } public Swap swap(String option, String swappedOption, Supplier enabled) @@ -614,17 +617,19 @@ public class MenuEntrySwapperPlugin extends Plugin final boolean isDepositBoxPlayerInventory = widgetGroupId == WidgetID.DEPOSIT_BOX_GROUP_ID; final boolean isChambersOfXericStorageUnitPlayerInventory = widgetGroupId == WidgetID.CHAMBERS_OF_XERIC_STORAGE_UNIT_INVENTORY_GROUP_ID; + final boolean isGroupStoragePlayerInventory = widgetGroupId == WidgetID.GROUP_STORAGE_INVENTORY_GROUP_ID; // Swap to shift-click deposit behavior // Deposit- op 1 is the current withdraw amount 1/5/10/x for deposit box interface and chambers of xeric storage unit. // Deposit- op 2 is the current withdraw amount 1/5/10/x for bank interface if (shiftModifier() && config.bankDepositShiftClick() != ShiftDepositMode.OFF && menuEntryAdded.getType() == MenuAction.CC_OP.getId() - && menuEntryAdded.getIdentifier() == (isDepositBoxPlayerInventory || isChambersOfXericStorageUnitPlayerInventory ? 1 : 2) + && menuEntryAdded.getIdentifier() == (isDepositBoxPlayerInventory || isGroupStoragePlayerInventory || isChambersOfXericStorageUnitPlayerInventory ? 1 : 2) && (menuEntryAdded.getOption().startsWith("Deposit-") || menuEntryAdded.getOption().startsWith("Store") || menuEntryAdded.getOption().startsWith("Donate"))) { ShiftDepositMode shiftDepositMode = config.bankDepositShiftClick(); final int opId = isDepositBoxPlayerInventory ? shiftDepositMode.getIdentifierDepositBox() : isChambersOfXericStorageUnitPlayerInventory ? shiftDepositMode.getIdentifierChambersStorageUnit() + : isGroupStoragePlayerInventory ? shiftDepositMode.getIdentifierGroupStorage() : shiftDepositMode.getIdentifier(); final MenuAction action = opId >= 6 ? MenuAction.CC_OP_LOW_PRIORITY : MenuAction.CC_OP; bankModeSwap(action, opId); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/ShiftDepositMode.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/ShiftDepositMode.java index 6c7deb9149..1c8351f217 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/ShiftDepositMode.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/ShiftDepositMode.java @@ -31,17 +31,18 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public enum ShiftDepositMode { - DEPOSIT_1("Deposit-1", 3, 2, 1), - DEPOSIT_5("Deposit-5", 4, 3, 2), - DEPOSIT_10("Deposit-10", 5, 4, 3), - DEPOSIT_X("Deposit-X", 6, 6, 5), - DEPOSIT_ALL("Deposit-All", 8, 5, 4), - EXTRA_OP("Eat/Wield/Etc.", 9, 9, 0), - OFF("Off", 0, 0, 0); + DEPOSIT_1("Deposit-1", 3, 2, 1, 1), + DEPOSIT_5("Deposit-5", 4, 3, 3, 2), + DEPOSIT_10("Deposit-10", 5, 4, 4, 3), + DEPOSIT_X("Deposit-X", 6, 6, 5, 5), + DEPOSIT_ALL("Deposit-All", 8, 5, 7, 4), + EXTRA_OP("Eat/Wield/Etc.", 9, 9, 0, 0), + OFF("Off", 0, 0, 0, 0); private final String name; private final int identifier; private final int identifierDepositBox; + private final int identifierGroupStorage; private final int identifierChambersStorageUnit; @Override diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HerbloreAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HerbloreAction.java index 805bea57f0..ad98d978c2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HerbloreAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HerbloreAction.java @@ -94,6 +94,7 @@ public enum HerbloreAction implements ItemSkillAction WEAPON_POISON_PLUS_PLUS(ItemID.WEAPON_POISON_5940, 82, 190), EXTENDED_ANTIFIRE_3(ItemID.EXTENDED_ANTIFIRE3, 84, 82.5f), EXTENDED_ANTIFIRE_4(ItemID.EXTENDED_ANTIFIRE4, 84, 110), + ANCIENT_BREW_4(ItemID.ANCIENT_BREW4, 85, 190), DIVINE_BASTION_POTION_4(ItemID.DIVINE_BASTION_POTION4, 86, 2), DIVINE_BATTLEMAGE_POTION_4(ItemID.DIVINE_BATTLEMAGE_POTION4, 86, 2), ANTIVENOM_3(ItemID.ANTIVENOM3, 87, 90), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MiningSiteLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MiningSiteLocation.java index 85fef484b9..3e60e1a1a1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MiningSiteLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MiningSiteLocation.java @@ -144,7 +144,8 @@ enum MiningSiteLocation LOVAKENGJ_SOUTH(new WorldPoint(1476, 3779, 0), new Rock(4, Ore.IRON), new Rock(6, Ore.COAL), new Rock(1, Ore.MITHRIL)), LOVAKENGJ_SULPHUR_EAST(new WorldPoint(1445, 3870, 0), new Rock(3, Ore.VOLCANIC_SULPHUR)), LOVAKENGJ_SULPHUR_WEST(new WorldPoint(1427, 3870, 0), new Rock(2, Ore.VOLCANIC_SULPHUR)), - LOVAKENGJ_WEST(new WorldPoint(1432, 3845, 0), true, new Rock(45, Ore.COAL), new Rock(80, Ore.LOVAKITE)), + LOVAKENGJ_WEST_1(new WorldPoint(1430, 3849, 0), new Rock(33, Ore.COAL), new Rock(58, Ore.LOVAKITE)), + LOVAKENGJ_WEST_2(new WorldPoint(1447, 3840, 0), new Rock(12, Ore.COAL), new Rock(22, Ore.LOVAKITE)), LUMBRIDGE_SWAMP_EAST(new WorldPoint(3226, 3146, 0), new Rock(5, Ore.COPPER), new Rock(5, Ore.TIN)), LUMBRIDGE_SWAMP_WEST(new WorldPoint(3148, 3149, 0), new Rock(7, Ore.COAL), new Rock(5, Ore.MITHRIL), new Rock(2, Ore.ADAMANTITE)), 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 ae25265c3f..0f1964da7a 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 @@ -168,7 +168,7 @@ public class ClientUI this.clientThreadProvider = clientThreadProvider; this.eventBus = eventBus; this.safeMode = safeMode; - this.title = RuneLiteProperties.getTitle(); + this.title = RuneLiteProperties.getTitle() + (safeMode ? " (safe mode)" : ""); } @Subscribe diff --git a/runelite-client/src/main/resources/item_variations.json b/runelite-client/src/main/resources/item_variations.json index 6a56701fb7..8bd791dfd0 100644 --- a/runelite-client/src/main/resources/item_variations.json +++ b/runelite-client/src/main/resources/item_variations.json @@ -3,6 +3,22 @@ 1, 4051 ], + "cannon base": [ + 6, + 26520 + ], + "cannon stand": [ + 8, + 26522 + ], + "cannon barrels": [ + 10, + 26524 + ], + "cannon furnace": [ + 12, + 26526 + ], "excalibur": [ 35, 8280 @@ -2483,7 +2499,9 @@ 24971, 24973, 24994, - 24996 + 24996, + 26417, + 26419 ], "empty cup": [ 1980, @@ -3297,6 +3315,18 @@ 12609, 12611 ], + "holy book": [ + 3840, + 26496 + ], + "unholy book": [ + 3842, + 26498 + ], + "book of balance": [ + 3844, + 26488 + ], "games necklace": [ 3853, 3855, @@ -3499,34 +3529,39 @@ 4099, 4109, 20562, - 23047 + 23047, + 26531 ], "mystic robe top": [ 4091, 4101, 4111, 20425, - 23050 + 23050, + 26533 ], "mystic robe bottom": [ 4093, 4103, 4113, 20426, - 23053 + 23053, + 26535 ], "mystic gloves": [ 4095, 4105, 4115, - 23056 + 23056, + 26537 ], "mystic boots": [ 4097, 4107, 4117, 20579, - 23059 + 23059, + 26539 ], "crawling hand": [ 4133, @@ -3542,7 +3577,8 @@ 4178, 12773, 12774, - 20405 + 20405, + 26482 ], "granite maul": [ 4153, @@ -6124,12 +6160,14 @@ "void knight top": [ 8839, 20465, - 24177 + 24177, + 26463 ], "void knight robe": [ 8840, 20469, - 24179 + 24179, + 26465 ], "void knight mace": [ 8841, @@ -6139,7 +6177,8 @@ "void knight gloves": [ 8842, 20475, - 24182 + 24182, + 26467 ], "bronze defender": [ 8844, @@ -6359,7 +6398,8 @@ ], "rune crossbow": [ 9185, - 23601 + 23601, + 26486 ], "jade bolts": [ 9237, @@ -7260,17 +7300,20 @@ "void mage helm": [ 11663, 20477, - 24183 + 24183, + 26473 ], "void ranger helm": [ 11664, 20479, - 24184 + 24184, + 26475 ], "void melee helm": [ 11665, 20481, - 24185 + 24185, + 26477 ], "void seal": [ 11666, @@ -7620,6 +7663,10 @@ 19720, 23654 ], + "abyssal tentacle": [ + 12006, + 26484 + ], "soft clay pack": [ 12009, 12010, @@ -7649,6 +7696,18 @@ 12692, 25256 ], + "book of war": [ + 12608, + 26494 + ], + "book of law": [ + 12610, + 26492 + ], + "book of darkness": [ + 12612, + 26490 + ], "bandos page": [ 12613, 12614, @@ -7999,12 +8058,14 @@ "elite void top": [ 13072, 20467, - 24178 + 24178, + 26469 ], "elite void robe": [ 13073, 20471, - 24180 + 24180, + 26471 ], "crystal halberd": [ 13080, @@ -10240,5 +10301,37 @@ "blood essence": [ 26390, 26392 + ], + "shattered hood": [ + 26427, + 26439, + 26451 + ], + "shattered top": [ + 26430, + 26442, + 26454 + ], + "shattered trousers": [ + 26433, + 26445, + 26457 + ], + "shattered boots": [ + 26436, + 26448, + 26460 + ], + "unidentified fragment": [ + 26544, + 26545, + 26546, + 26547, + 26548 + ], + "shattered relic hunter armour set": [ + 26554, + 26557, + 26560 ] } \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/nex.jpg b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/nex.jpg new file mode 100644 index 0000000000..c2a3719440 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/nex.jpg differ diff --git a/runelite-client/src/main/scripts/FakeXpDrop.hash b/runelite-client/src/main/scripts/FakeXpDrop.hash index 9eba813f20..f39e7684ca 100644 --- a/runelite-client/src/main/scripts/FakeXpDrop.hash +++ b/runelite-client/src/main/scripts/FakeXpDrop.hash @@ -1 +1 @@ -C85469C2529D794C523505679F14AA20E988513E8FBAF249E41F4760382B4BBB \ No newline at end of file +49856301491D162091426F3F788EA13FDBE3E5BE758471537F5E7AB7A588066B \ No newline at end of file diff --git a/runelite-client/src/main/scripts/FakeXpDrop.rs2asm b/runelite-client/src/main/scripts/FakeXpDrop.rs2asm index 0f5b817d85..c0040afc32 100644 --- a/runelite-client/src/main/scripts/FakeXpDrop.rs2asm +++ b/runelite-client/src/main/scripts/FakeXpDrop.rs2asm @@ -12,259 +12,224 @@ iconst 105 iconst 83 iconst 681 - get_varc_int 207 - coordx + get_varc_int 953 enum iload 0 - if_icmpeq LABEL9 - jump LABEL16 -LABEL9: - get_varc_int 207 - iconst 0 - iconst 0 + if_icmpeq LABEL8 + jump LABEL13 +LABEL8: + get_varc_int 960 iload 1 - movecoord - set_varc_int 207 - jump LABEL227 -LABEL16: + add + set_varc_int 960 + jump LABEL192 +LABEL13: iconst 105 iconst 83 iconst 681 - get_varc_int 208 - coordx + get_varc_int 954 enum iload 0 - if_icmpeq LABEL25 - jump LABEL32 -LABEL25: - get_varc_int 208 - iconst 0 - iconst 0 + if_icmpeq LABEL21 + jump LABEL26 +LABEL21: + get_varc_int 961 iload 1 - movecoord - set_varc_int 208 - jump LABEL227 -LABEL32: + add + set_varc_int 961 + jump LABEL192 +LABEL26: iconst 105 iconst 83 iconst 681 - get_varc_int 209 - coordx + get_varc_int 955 enum iload 0 - if_icmpeq LABEL41 - jump LABEL48 -LABEL41: - get_varc_int 209 - iconst 0 - iconst 0 + if_icmpeq LABEL34 + jump LABEL39 +LABEL34: + get_varc_int 962 iload 1 - movecoord - set_varc_int 209 - jump LABEL227 -LABEL48: + add + set_varc_int 962 + jump LABEL192 +LABEL39: iconst 105 iconst 83 iconst 681 - get_varc_int 210 - coordx + get_varc_int 956 enum iload 0 - if_icmpeq LABEL57 - jump LABEL64 -LABEL57: - get_varc_int 210 - iconst 0 - iconst 0 + if_icmpeq LABEL47 + jump LABEL52 +LABEL47: + get_varc_int 963 iload 1 - movecoord - set_varc_int 210 - jump LABEL227 -LABEL64: + add + set_varc_int 963 + jump LABEL192 +LABEL52: iconst 105 iconst 83 iconst 681 - get_varc_int 211 - coordx + get_varc_int 957 + enum + iload 0 + if_icmpeq LABEL60 + jump LABEL65 +LABEL60: + get_varc_int 964 + iload 1 + add + set_varc_int 964 + jump LABEL192 +LABEL65: + iconst 105 + iconst 83 + iconst 681 + get_varc_int 958 enum iload 0 if_icmpeq LABEL73 - jump LABEL80 + jump LABEL78 LABEL73: - get_varc_int 211 - iconst 0 - iconst 0 + get_varc_int 965 iload 1 - movecoord - set_varc_int 211 - jump LABEL227 -LABEL80: + add + set_varc_int 965 + jump LABEL192 +LABEL78: iconst 105 iconst 83 iconst 681 - get_varc_int 212 - coordx + get_varc_int 959 enum iload 0 - if_icmpeq LABEL89 - jump LABEL96 -LABEL89: - get_varc_int 212 - iconst 0 - iconst 0 + if_icmpeq LABEL86 + jump LABEL91 +LABEL86: + get_varc_int 966 iload 1 - movecoord - set_varc_int 212 - jump LABEL227 -LABEL96: - iconst 105 - iconst 83 - iconst 681 - get_varc_int 213 - coordx - enum - iload 0 - if_icmpeq LABEL105 - jump LABEL112 -LABEL105: - get_varc_int 213 - iconst 0 - iconst 0 - iload 1 - movecoord - set_varc_int 213 - jump LABEL227 -LABEL112: + add + set_varc_int 966 + jump LABEL192 +LABEL91: iload 0 iconst 3 - if_icmpeq LABEL116 - jump LABEL123 -LABEL116: + if_icmpeq LABEL95 + jump LABEL102 +LABEL95: iload 1 iconst 20000001 - if_icmpeq LABEL120 - jump LABEL123 -LABEL120: - iconst 269500481 - set_varc_int 207 - jump LABEL227 -LABEL123: - get_varc_int 207 + if_icmpeq LABEL99 + jump LABEL102 +LABEL99: + iconst -10 + set_varc_int 960 + jump LABEL192 +LABEL102: + get_varc_int 953 iconst -1 - if_icmpeq LABEL127 - jump LABEL138 -LABEL127: - iconst 0 + if_icmpeq LABEL106 + jump LABEL115 +LABEL106: iconst 83 iconst 105 iconst 81 iload 0 enum - iconst 0 + set_varc_int 953 iload 1 - movecoord - set_varc_int 207 - jump LABEL227 -LABEL138: - get_varc_int 208 + set_varc_int 960 + jump LABEL192 +LABEL115: + get_varc_int 954 iconst -1 - if_icmpeq LABEL142 - jump LABEL153 -LABEL142: - iconst 0 + if_icmpeq LABEL119 + jump LABEL128 +LABEL119: iconst 83 iconst 105 iconst 81 iload 0 enum - iconst 0 + set_varc_int 954 iload 1 - movecoord - set_varc_int 208 - jump LABEL227 -LABEL153: - get_varc_int 209 + set_varc_int 961 + jump LABEL192 +LABEL128: + get_varc_int 955 iconst -1 - if_icmpeq LABEL157 - jump LABEL168 -LABEL157: - iconst 0 + if_icmpeq LABEL132 + jump LABEL141 +LABEL132: iconst 83 iconst 105 iconst 81 iload 0 enum - iconst 0 + set_varc_int 955 iload 1 - movecoord - set_varc_int 209 - jump LABEL227 -LABEL168: - get_varc_int 210 + set_varc_int 962 + jump LABEL192 +LABEL141: + get_varc_int 956 iconst -1 - if_icmpeq LABEL172 - jump LABEL183 -LABEL172: - iconst 0 + if_icmpeq LABEL145 + jump LABEL154 +LABEL145: iconst 83 iconst 105 iconst 81 iload 0 enum - iconst 0 + set_varc_int 956 iload 1 - movecoord - set_varc_int 210 - jump LABEL227 -LABEL183: - get_varc_int 211 + set_varc_int 963 + jump LABEL192 +LABEL154: + get_varc_int 957 iconst -1 - if_icmpeq LABEL187 - jump LABEL198 -LABEL187: - iconst 0 + if_icmpeq LABEL158 + jump LABEL167 +LABEL158: iconst 83 iconst 105 iconst 81 iload 0 enum - iconst 0 + set_varc_int 957 iload 1 - movecoord - set_varc_int 211 - jump LABEL227 -LABEL198: - get_varc_int 212 + set_varc_int 964 + jump LABEL192 +LABEL167: + get_varc_int 958 iconst -1 - if_icmpeq LABEL202 - jump LABEL213 -LABEL202: - iconst 0 + if_icmpeq LABEL171 + jump LABEL180 +LABEL171: iconst 83 iconst 105 iconst 81 iload 0 enum - iconst 0 + set_varc_int 958 iload 1 - movecoord - set_varc_int 212 - jump LABEL227 -LABEL213: - get_varc_int 213 + set_varc_int 965 + jump LABEL192 +LABEL180: + get_varc_int 959 iconst -1 - if_icmpeq LABEL217 - jump LABEL227 -LABEL217: - iconst 0 + if_icmpeq LABEL184 + jump LABEL192 +LABEL184: iconst 83 iconst 105 iconst 81 iload 0 enum - iconst 0 + set_varc_int 959 iload 1 - movecoord - set_varc_int 213 -LABEL227: + set_varc_int 966 +LABEL192: return diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/itemcharges/ItemChargePluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/itemcharges/ItemChargePluginTest.java index f1e9c50edd..464ec09bad 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/itemcharges/ItemChargePluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/itemcharges/ItemChargePluginTest.java @@ -93,6 +93,10 @@ public class ItemChargePluginTest private static final String ACTIVATE_EXPEDITIOUS_BRACELET = "Your expeditious bracelet helps you progress your slayer task faster. It has 11 charges left."; private static final String BREAK_EXPEDITIOUS_BRACELET = "Your expeditious bracelet helps you progress your slayer task faster. It then crumbles to dust."; + private static final String ACTIVATE_BLOOD_ESSENCE = "You activate the blood essence."; + private static final String EXTRACT_BLOOD_ESSENCE = "You manage to extract power from the Blood Essence and craft 67 extra runes."; + private static final String CHECK_BLOOD_ESSENCE = "Your blood essence has 56 charges remaining"; + @Mock @Bind private Client client; @@ -421,4 +425,29 @@ public class ItemChargePluginTest itemChargePlugin.onChatMessage(chatMessage); verify(configManager).setRSProfileConfiguration(ItemChargeConfig.GROUP, ItemChargeConfig.KEY_EXPEDITIOUS_BRACELET, 30); } + + @Test + public void testBloodEssenceActivate() + { + ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.GAMEMESSAGE, "", ACTIVATE_BLOOD_ESSENCE, "", 0); + itemChargePlugin.onChatMessage(chatMessage); + verify(configManager).setRSProfileConfiguration(ItemChargeConfig.GROUP, ItemChargeConfig.KEY_BLOOD_ESSENCE, 1000); + } + + @Test + public void testBloodEssenceExtract() + { + ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.GAMEMESSAGE, "", EXTRACT_BLOOD_ESSENCE, "", 0); + when(configManager.getConfiguration(ItemChargeConfig.GROUP, ItemChargeConfig.KEY_BLOOD_ESSENCE, Integer.class)).thenReturn(1000); + itemChargePlugin.onChatMessage(chatMessage); + verify(configManager).setRSProfileConfiguration(ItemChargeConfig.GROUP, ItemChargeConfig.KEY_BLOOD_ESSENCE, 933); + } + + @Test + public void testBloodEssenceCheck() + { + ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.GAMEMESSAGE, "", CHECK_BLOOD_ESSENCE, "", 0); + itemChargePlugin.onChatMessage(chatMessage); + verify(configManager).setRSProfileConfiguration(ItemChargeConfig.GROUP, ItemChargeConfig.KEY_BLOOD_ESSENCE, 56); + } } \ No newline at end of file