Merge pull request #3114 from open-osrs/🥲🔫
This commit is contained in:
@@ -25,9 +25,9 @@
|
||||
|
||||
object ProjectVersions {
|
||||
const val launcherVersion = "2.2.0"
|
||||
const val rlVersion = "1.8.9"
|
||||
const val rlVersion = "1.8.10"
|
||||
|
||||
const val openosrsVersion = "4.18.2"
|
||||
const val openosrsVersion = "4.19.0"
|
||||
|
||||
const val rsversion = 202
|
||||
const val cacheversion = 165
|
||||
|
||||
+14
-14
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,11 +35,12 @@ import org.objectweb.asm.Opcodes;
|
||||
public class CopyRuneLiteClasses extends AbstractInjector
|
||||
{
|
||||
private static final List<String> RUNELITE_OBJECTS = List.of(
|
||||
"RuneLiteObject",
|
||||
"RuneLiteClanMember",
|
||||
"RuneLiteIterableLinkDeque",
|
||||
"RuneLiteIterableNodeDeque",
|
||||
"RuneLiteIterableNodeHashTable",
|
||||
"RuneLiteMenuEntry"
|
||||
"RuneLiteMenuEntry",
|
||||
"RuneLiteObject"
|
||||
);
|
||||
|
||||
public CopyRuneLiteClasses(InjectData inject)
|
||||
|
||||
@@ -280,6 +280,18 @@ public interface Actor extends Renderable, Locatable
|
||||
*/
|
||||
void setGraphic(int graphic);
|
||||
|
||||
/**
|
||||
* Get the height of the graphic/spotanim on the actor
|
||||
* @return
|
||||
*/
|
||||
int getGraphicHeight();
|
||||
|
||||
/**
|
||||
* Set the height of the graphic/spotanim on the actor
|
||||
* @param height
|
||||
*/
|
||||
void setGraphicHeight(int height);
|
||||
|
||||
/**
|
||||
* Get the frame of the currently playing spotanim
|
||||
*
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -173,9 +173,9 @@ public enum ChatMessageType
|
||||
*/
|
||||
CLAN_CREATION_INVITATION(109),
|
||||
/**
|
||||
* Clan wars challenge for clans rather than FCs
|
||||
* Challenge offer for the clan tab
|
||||
*/
|
||||
CLAN_CLAN_WARS_CHALLENGE(110),
|
||||
CHALREQ_CLANCHAT(110),
|
||||
|
||||
CLAN_GIM_FORM_GROUP(111),
|
||||
CLAN_GIM_GROUP_WITH(112),
|
||||
|
||||
@@ -468,6 +468,11 @@ public interface Client extends GameEngine
|
||||
*/
|
||||
IndexDataBase getIndexConfig();
|
||||
|
||||
/**
|
||||
* Gets an index by id
|
||||
*/
|
||||
IndexDataBase getIndex(int id);
|
||||
|
||||
/**
|
||||
* Returns the x-axis base coordinate.
|
||||
* <p>
|
||||
@@ -1103,19 +1108,39 @@ public interface Client extends GameEngine
|
||||
@Nullable
|
||||
LocalPoint getLocalDestinationLocation();
|
||||
|
||||
/**
|
||||
* Create a projectile.
|
||||
* @param id projectile/spotanim id
|
||||
* @param plane plane the projectile is on
|
||||
* @param startX local x coordinate the projectile starts at
|
||||
* @param startY local y coordinate the projectile starts at
|
||||
* @param startZ local z coordinate the projectile starts at - includes tile height
|
||||
* @param startCycle cycle the project starts
|
||||
* @param endCycle cycle the projectile ends
|
||||
* @param slope
|
||||
* @param startHeight start height of projectile - excludes tile height
|
||||
* @param endHeight end height of projectile - excludes tile height
|
||||
* @param target optional actor target
|
||||
* @param targetX target x - if an actor target is supplied should be the target x
|
||||
* @param targetY taret y - if an actor target is supplied should be the target y
|
||||
* @return the new projectile
|
||||
*/
|
||||
Projectile createProjectile(int id, int plane, int startX, int startY, int startZ, int startCycle, int endCycle,
|
||||
int slope, int startHeight, int endHeight, @Nullable Actor target, int targetX, int targetY);
|
||||
|
||||
/**
|
||||
* Gets a list of all projectiles currently spawned.
|
||||
*
|
||||
* @return all projectiles
|
||||
*/
|
||||
List<Projectile> getProjectiles();
|
||||
Deque<Projectile> getProjectiles();
|
||||
|
||||
/**
|
||||
* Gets a list of all graphics objects currently drawn.
|
||||
*
|
||||
* @return all graphics objects
|
||||
*/
|
||||
List<GraphicsObject> getGraphicsObjects();
|
||||
Deque<GraphicsObject> getGraphicsObjects();
|
||||
|
||||
/**
|
||||
* Creates a RuneLiteObject, which is a modified {@link GraphicsObject}
|
||||
@@ -1123,7 +1148,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
|
||||
|
||||
@@ -29,6 +29,12 @@ package net.runelite.api;
|
||||
*/
|
||||
public interface Deque<T> extends Iterable<T>
|
||||
{
|
||||
/**
|
||||
* Add a new element to the end of the deque
|
||||
* @param t the element
|
||||
*/
|
||||
void addLast(T t);
|
||||
|
||||
/**
|
||||
* clear the deque
|
||||
*/
|
||||
|
||||
@@ -28,9 +28,11 @@ package net.runelite.api;
|
||||
public final class GraphicID
|
||||
{
|
||||
public static final int WINE_MAKE = 47;
|
||||
public static final int CANNONBALL = 53;
|
||||
public static final int SPLASH = 85;
|
||||
public static final int GREY_BUBBLE_TELEPORT = 86;
|
||||
public static final int TELEPORT = 111;
|
||||
public static final int TELEKINETIC_SPELL = 143;
|
||||
public static final int ENTANGLE = 179;
|
||||
public static final int SNARE = 180;
|
||||
public static final int BIND = 181;
|
||||
@@ -54,8 +56,93 @@ public final class GraphicID
|
||||
public static final int OLM_LIGHTNING = 1356;
|
||||
public static final int OLM_TELEPORT = 1359;
|
||||
public static final int OLM_HEAL = 1363;
|
||||
public static final int GRANITE_CANNONBALL = 1443;
|
||||
public static final int OLM_CRYSTAL = 1447;
|
||||
public static final int XERIC_TELEPORT = 1612;
|
||||
public static final int HYDRA_LIGHTNING = 1666;
|
||||
public static final int GRAPHICS_OBJECT_ROCKFALL = 1727;
|
||||
public static final int ZALCANO_PROJECTILE_FIREBALL = 1728;
|
||||
|
||||
public static final int LIZARDMAN_SHAMAN_AOE = 1293;
|
||||
public static final int CRAZY_ARCHAEOLOGIST_AOE = 1260;
|
||||
public static final int ICE_DEMON_RANGED_AOE = 1324;
|
||||
public static final int ICE_DEMON_ICE_BARRAGE_AOE = 366;
|
||||
public static final int VASA_AWAKEN_AOE = 1327;
|
||||
public static final int VASA_RANGED_AOE = 1329;
|
||||
public static final int TEKTON_METEOR_AOE = 660;
|
||||
|
||||
public static final int OLM_FALLING_CRYSTAL = 1357;
|
||||
public static final int OLM_BURNING = 1349;
|
||||
public static final int OLM_FALLING_CRYSTAL_TRAIL = 1352;
|
||||
public static final int OLM_ACID_TRAIL = 1354;
|
||||
public static final int OLM_FIRE_LINE = 1347;
|
||||
public static final int OLM_MAGE_ATTACK = 1339;
|
||||
public static final int OLM_RANGE_ATTACK = 1340;
|
||||
|
||||
public static final int VORKATH_BOMB_AOE = 1481;
|
||||
public static final int VORKATH_POISON_POOL_AOE = 1483;
|
||||
public static final int VORKATH_TICK_FIRE_AOE = 1482;
|
||||
public static final int VORKATH_SPAWN_AOE = 1484;
|
||||
|
||||
public static final int ADDY_DRAG_POISON = 1486;
|
||||
|
||||
public static final int GALVEK_MINE = 1495;
|
||||
public static final int GALVEK_BOMB = 1491;
|
||||
|
||||
public static final int DAWN_FREEZE = 1445;
|
||||
public static final int DUSK_CEILING = 1435;
|
||||
|
||||
public static final int VETION_LIGHTNING = 280;
|
||||
|
||||
public static final int CHAOS_FANATIC_AOE = 551;
|
||||
|
||||
public static final int CORPOREAL_BEAST_AOE = 315;
|
||||
public static final int CORPOREAL_BEAST_DARK_CORE_AOE = 319;
|
||||
|
||||
public static final int WINTERTODT_SNOW_FALL_AOE = 1310;
|
||||
|
||||
public static final int DEMONIC_GORILLA_RANGED = 1302;
|
||||
public static final int DEMONIC_GORILLA_MAGIC = 1304;
|
||||
public static final int DEMONIC_GORILLA_BOULDER = 856;
|
||||
|
||||
public static final int XARPUS_ACID = 1555;
|
||||
public static final int VERZIK_PURPLE_SPAWN = 1586;
|
||||
public static final int CERB_FIRE = 1247;
|
||||
|
||||
public static final int DERWEN_HEALING_BALL = 1512;
|
||||
public static final int JUSTICIAR_LEASH = 1515;
|
||||
public static final int MAGE_ARENA_BOSS_FREEZE = 368;
|
||||
|
||||
/**
|
||||
* missing: superior dark beast
|
||||
*/
|
||||
public static final int MARBLE_GARGOYLE_AOE = 1453;
|
||||
/**
|
||||
* non AOE, regular projectiles
|
||||
*/
|
||||
public static final int VORKATH_DRAGONBREATH = 393;
|
||||
public static final int VORKATH_RANGED = 1477;
|
||||
public static final int VORKATH_MAGIC = 1479;
|
||||
public static final int VORKATH_PRAYER_DISABLE = 1471;
|
||||
public static final int VORKATH_VENOM = 1470;
|
||||
public static final int VORKATH_ICE = 395;
|
||||
|
||||
public static final int SOTETSEG_BOMB = 1604;
|
||||
public static final int SOTETSEG_RANGE = 1607;
|
||||
public static final int SOTETSEG_MAGE = 1606;
|
||||
|
||||
public static final int HYDRA_MAGIC = 1662;
|
||||
public static final int HYDRA_RANGED = 1663;
|
||||
public static final int HYDRA_POISON = 1644;
|
||||
public static final int HYDRA_LIGHTNING = 1664;
|
||||
public static final int HYDRA_LIGHTNING_2 = 1665;
|
||||
public static final int DRAKE_BREATH = 1637;
|
||||
|
||||
public static final int HUNLLEF_MAGE_ATTACK = 1707;
|
||||
public static final int HUNLLEF_CORRUPTED_MAGE_ATTACK = 1708;
|
||||
public static final int HUNLLEF_RANGE_ATTACK = 1711;
|
||||
public static final int HUNLLEF_CORRUPTED_RANGE_ATTACK = 1712;
|
||||
public static final int HUNLLEF_PRAYER_ATTACK = 1713;
|
||||
public static final int HUNLLEF_CORRUPTED_PRAYER_ATTACK = 1714;
|
||||
|
||||
public static final int PORAZDIR_ENERGY_BALL = 1514;
|
||||
}
|
||||
|
||||
@@ -72,4 +72,10 @@ public interface GraphicsObject extends Renderable
|
||||
* @return
|
||||
*/
|
||||
boolean finished();
|
||||
|
||||
/**
|
||||
* Set if this spotanim is done animating. If finished, the spotanim will despawn next frame.
|
||||
* @param finished
|
||||
*/
|
||||
void setFinished(boolean finished);
|
||||
}
|
||||
|
||||
@@ -49,9 +49,9 @@ public interface IndexDataBase
|
||||
|
||||
int[][] getFileIds();
|
||||
|
||||
byte[] getFile(int groupId, int fileId);
|
||||
|
||||
int getGroupFileCount(int groupId);
|
||||
|
||||
int[] getFileCounts();
|
||||
|
||||
byte[] loadData(int archiveID, int fileID);
|
||||
}
|
||||
|
||||
@@ -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. */
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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<T extends Mesh<T>>
|
||||
{
|
||||
/**
|
||||
* Gets a list of all vertices of the model.
|
||||
*
|
||||
* @return the vertices
|
||||
*/
|
||||
List<Vertex> getVertices();
|
||||
|
||||
/**
|
||||
* Gets a list of all triangles of the model.
|
||||
*
|
||||
* @return the triangle
|
||||
*/
|
||||
List<Triangle> 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);
|
||||
}
|
||||
@@ -24,53 +24,17 @@
|
||||
*/
|
||||
package net.runelite.api;
|
||||
|
||||
import net.runelite.api.model.Triangle;
|
||||
import net.runelite.api.model.Vertex;
|
||||
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<Vertex> getVertices();
|
||||
|
||||
/**
|
||||
* Gets a list of all triangles of the model.
|
||||
*
|
||||
* @return the triangle
|
||||
*/
|
||||
List<Triangle> 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 +52,6 @@ public interface Model extends Renderable
|
||||
|
||||
int getRadius();
|
||||
|
||||
short[] getFaceTextures();
|
||||
|
||||
float[] getFaceTextureUVCoordinates();
|
||||
|
||||
void calculateExtreme(int orientation);
|
||||
|
||||
@@ -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<ModelData>, 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();
|
||||
}
|
||||
@@ -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. */
|
||||
}
|
||||
|
||||
@@ -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. */
|
||||
}
|
||||
|
||||
@@ -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. */
|
||||
|
||||
@@ -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. */
|
||||
}
|
||||
|
||||
@@ -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. */
|
||||
}
|
||||
|
||||
@@ -24,6 +24,8 @@
|
||||
*/
|
||||
package net.runelite.api;
|
||||
|
||||
import net.runelite.api.coords.LocalPoint;
|
||||
|
||||
/**
|
||||
* Represents a projectile entity. (ie. cannonball, arrow)
|
||||
*/
|
||||
@@ -33,7 +35,7 @@ public interface Projectile extends Renderable
|
||||
* Gets the ID of the projectile.
|
||||
*
|
||||
* @return the projectile ID
|
||||
* @see ProjectileID
|
||||
* @see GraphicID
|
||||
*/
|
||||
int getId();
|
||||
|
||||
@@ -44,6 +46,14 @@ public interface Projectile extends Renderable
|
||||
*/
|
||||
Actor getInteracting();
|
||||
|
||||
/**
|
||||
* Get the target point of the projectile. For projectiles with an actor target,
|
||||
* this is updated each frame to the actor position.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
LocalPoint getTarget();
|
||||
|
||||
/**
|
||||
* Gets the original x-axis coordinate that this projectile started from.
|
||||
*
|
||||
@@ -84,7 +94,7 @@ public interface Projectile extends Renderable
|
||||
*
|
||||
* @return the start game cycle
|
||||
*/
|
||||
int getStartMovementCycle();
|
||||
int getStartCycle();
|
||||
|
||||
/**
|
||||
* Gets the game cycle that the projectile will reach its target at.
|
||||
@@ -93,6 +103,15 @@ public interface Projectile extends Renderable
|
||||
*/
|
||||
int getEndCycle();
|
||||
|
||||
/**
|
||||
* Sets the game cycle the projectile will reach its target at. The
|
||||
* projectile automatically despawns after this time, and setting the
|
||||
* end cycle to a time in the past is an effective way of removing the
|
||||
* projectile.
|
||||
* @param cycle
|
||||
*/
|
||||
void setEndCycle(int cycle);
|
||||
|
||||
/**
|
||||
* Gets the remaining game cycles until the projectile reaches its
|
||||
* target and despawns.
|
||||
|
||||
@@ -29,6 +29,7 @@ package net.runelite.api;
|
||||
* <p>
|
||||
* Note: This class is not complete and may be missing mapped IDs.
|
||||
*/
|
||||
@Deprecated
|
||||
public final class ProjectileID
|
||||
{
|
||||
public static final int CANNONBALL = 53;
|
||||
|
||||
@@ -37,12 +37,6 @@ public interface TileItem extends Renderable
|
||||
|
||||
int getQuantity();
|
||||
|
||||
/**
|
||||
* Time in game ticks when the item spawned (relative to us)
|
||||
* @return
|
||||
*/
|
||||
int getSpawnTime();
|
||||
|
||||
/**
|
||||
* @return the tile this item is on
|
||||
*/
|
||||
|
||||
@@ -205,7 +205,38 @@ public enum VarPlayer
|
||||
/**
|
||||
* {@link NpcID} for the HP HUD
|
||||
*/
|
||||
HP_HUD_NPC_ID(1683);
|
||||
HP_HUD_NPC_ID(1683),
|
||||
|
||||
/**
|
||||
* Colors for chat messages
|
||||
*/
|
||||
SETTINGS_OPAQUE_CHAT_PUBLIC(2992),
|
||||
SETTINGS_OPAQUE_CHAT_PRIVATE(2993),
|
||||
SETTINGS_OPAQUE_CHAT_AUTO(2994),
|
||||
SETTINGS_OPAQUE_CHAT_BROADCAST(2995),
|
||||
SETTINGS_OPAQUE_CHAT_FRIEND(2996),
|
||||
SETTINGS_OPAQUE_CHAT_CLAN(2997),
|
||||
SETTINGS_OPAQUE_CHAT_GUEST_CLAN(3060),
|
||||
SETTINGS_OPAQUE_CHAT_CLAN_BROADCAST(3192),
|
||||
SETTINGS_OPAQUE_CHAT_IRON_GROUP_CHAT(3191),
|
||||
SETTINGS_OPAQUE_CHAT_IRON_GROUP_BROADCAST(3193),
|
||||
SETTINGS_OPAQUE_CHAT_TRADE_REQUEST(2998),
|
||||
SETTINGS_OPAQUE_CHAT_CHALLENGE_REQUEST(2999),
|
||||
|
||||
SETTINGS_TRANSPARENT_CHAT_PUBLIC(3000),
|
||||
SETTINGS_TRANSPARENT_CHAT_PRIVATE(3001),
|
||||
SETTINGS_TRANSPARENT_CHAT_AUTO(3002),
|
||||
SETTINGS_TRANSPARENT_CHAT_BROADCAST(3003),
|
||||
SETTINGS_TRANSPARENT_CHAT_FRIEND(3004),
|
||||
SETTINGS_TRANSPARENT_CHAT_CLAN(3005),
|
||||
SETTINGS_TRANSPARENT_CHAT_GUEST_CLAN(3061),
|
||||
SETTINGS_TRANSPARENT_CHAT_CLAN_BROADCAST(3195),
|
||||
SETTINGS_TRANSPARENT_CHAT_IRON_GROUP_CHAT(3194),
|
||||
SETTINGS_TRANSPARENT_CHAT_IRON_GROUP_BROADCAST(3196),
|
||||
SETTINGS_TRANSPARENT_CHAT_TRADE_REQUEST(3006),
|
||||
SETTINGS_TRANSPARENT_CHAT_CHALLENGE_REQUEST(3007),
|
||||
|
||||
;
|
||||
|
||||
private final int id;
|
||||
}
|
||||
@@ -24,21 +24,18 @@
|
||||
*/
|
||||
package net.runelite.api.clan;
|
||||
|
||||
import lombok.Value;
|
||||
|
||||
/**
|
||||
* A member of a clan.
|
||||
*/
|
||||
@Value
|
||||
public class ClanMember
|
||||
public interface ClanMember
|
||||
{
|
||||
/**
|
||||
* The clan member's name
|
||||
*/
|
||||
String name;
|
||||
String getName();
|
||||
|
||||
/**
|
||||
* The clan member's rank
|
||||
*/
|
||||
ClanRank rank;
|
||||
ClanRank getRank();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -1093,198 +1094,198 @@ public final class WidgetID
|
||||
static class SpellBook
|
||||
{
|
||||
static final int FILTERED_SPELLS_BOUNDS = 3;
|
||||
static final int TOOLTIP = 189;
|
||||
static final int TOOLTIP = 190;
|
||||
|
||||
// NORMAL SPELLS
|
||||
static final int LUMBRIDGE_HOME_TELEPORT = 5;
|
||||
static final int WIND_STRIKE = 6;
|
||||
static final int CONFUSE = 7;
|
||||
static final int ENCHANT_CROSSBOW_BOLT = 8;
|
||||
static final int WATER_STRIKE = 9;
|
||||
static final int LVL_1_ENCHANT = 10;
|
||||
static final int EARTH_STRIKE = 11;
|
||||
static final int WEAKEN = 12;
|
||||
static final int FIRE_STRIKE = 13;
|
||||
static final int BONES_TO_BANANAS = 14;
|
||||
static final int WIND_BOLT = 15;
|
||||
static final int CURSE = 16;
|
||||
static final int BIND = 17;
|
||||
static final int LOW_LEVEL_ALCHEMY = 18;
|
||||
static final int WATER_BOLT = 19;
|
||||
static final int VARROCK_TELEPORT = 20;
|
||||
static final int LVL_2_ENCHANT = 21;
|
||||
static final int EARTH_BOLT = 22;
|
||||
static final int LUMBRIDGE_TELEPORT = 23;
|
||||
static final int TELEKINETIC_GRAB = 24;
|
||||
static final int FIRE_BOLT = 25;
|
||||
static final int FALADOR_TELEPORT = 26;
|
||||
static final int CRUMBLE_UNDEAD = 27;
|
||||
static final int TELEPORT_TO_HOUSE = 28;
|
||||
static final int WIND_BLAST = 29;
|
||||
static final int SUPERHEAT_ITEM = 30;
|
||||
static final int CAMELOT_TELEPORT = 31;
|
||||
static final int WATER_BLAST = 32;
|
||||
static final int LVL_3_ENCHANT = 33;
|
||||
static final int IBAN_BLAST = 34;
|
||||
static final int SNARE = 35;
|
||||
static final int MAGIC_DART = 36;
|
||||
static final int ARDOUGNE_TELEPORT = 37;
|
||||
static final int EARTH_BLAST = 38;
|
||||
static final int HIGH_LEVEL_ALCHEMY = 39;
|
||||
static final int CHARGE_WATER_ORB = 40;
|
||||
static final int LVL_4_ENCHANT = 41;
|
||||
static final int WATCHTOWER_TELEPORT = 42;
|
||||
static final int FIRE_BLAST = 43;
|
||||
static final int CHARGE_EARTH_ORB = 44;
|
||||
static final int BONES_TO_PEACHES = 45;
|
||||
static final int SARADOMIN_STRIKE = 46;
|
||||
static final int CLAWS_OF_GUTHIX = 47;
|
||||
static final int FLAMES_OF_ZAMORAK = 48;
|
||||
static final int TROLLHEIM_TELEPORT = 49;
|
||||
static final int WIND_WAVE = 50;
|
||||
static final int CHARGE_FIRE_ORB = 51;
|
||||
static final int TELEPORT_TO_APE_ATOLL = 52;
|
||||
static final int WATER_WAVE = 53;
|
||||
static final int CHARGE_AIR_ORB = 54;
|
||||
static final int VULNERABILITY = 55;
|
||||
static final int LVL_5_ENCHANT = 56;
|
||||
static final int TELEPORT_TO_KOUREND = 57;
|
||||
static final int EARTH_WAVE = 58;
|
||||
static final int ENFEEBLE = 59;
|
||||
static final int TELEOTHER_LUMBRIDGE = 60;
|
||||
static final int FIRE_WAVE = 61;
|
||||
static final int ENTANGLE = 62;
|
||||
static final int STUN = 63;
|
||||
static final int CHARGE = 64;
|
||||
static final int WIND_SURGE = 65;
|
||||
static final int TELEOTHER_FALADOR = 66;
|
||||
static final int WATER_SURGE = 67;
|
||||
static final int TELE_BLOCK = 68;
|
||||
static final int BOUNTY_TARGET_TELEPORT = 69;
|
||||
static final int LVL_6_ENCHANT = 70;
|
||||
static final int TELEOTHER_CAMELOT = 71;
|
||||
static final int EARTH_SURGE = 72;
|
||||
static final int LVL_7_ENCHANT = 73;
|
||||
static final int FIRE_SURGE = 74;
|
||||
static final int LUMBRIDGE_HOME_TELEPORT = 6;
|
||||
static final int WIND_STRIKE = 7;
|
||||
static final int CONFUSE = 8;
|
||||
static final int ENCHANT_CROSSBOW_BOLT = 9;
|
||||
static final int WATER_STRIKE = 10;
|
||||
static final int LVL_1_ENCHANT = 11;
|
||||
static final int EARTH_STRIKE = 12;
|
||||
static final int WEAKEN = 13;
|
||||
static final int FIRE_STRIKE = 14;
|
||||
static final int BONES_TO_BANANAS = 15;
|
||||
static final int WIND_BOLT = 16;
|
||||
static final int CURSE = 17;
|
||||
static final int BIND = 18;
|
||||
static final int LOW_LEVEL_ALCHEMY = 19;
|
||||
static final int WATER_BOLT = 20;
|
||||
static final int VARROCK_TELEPORT = 21;
|
||||
static final int LVL_2_ENCHANT = 22;
|
||||
static final int EARTH_BOLT = 23;
|
||||
static final int LUMBRIDGE_TELEPORT = 24;
|
||||
static final int TELEKINETIC_GRAB = 25;
|
||||
static final int FIRE_BOLT = 26;
|
||||
static final int FALADOR_TELEPORT = 27;
|
||||
static final int CRUMBLE_UNDEAD = 28;
|
||||
static final int TELEPORT_TO_HOUSE = 29;
|
||||
static final int WIND_BLAST = 30;
|
||||
static final int SUPERHEAT_ITEM = 31;
|
||||
static final int CAMELOT_TELEPORT = 32;
|
||||
static final int WATER_BLAST = 33;
|
||||
static final int LVL_3_ENCHANT = 34;
|
||||
static final int IBAN_BLAST = 35;
|
||||
static final int SNARE = 36;
|
||||
static final int MAGIC_DART = 37;
|
||||
static final int ARDOUGNE_TELEPORT = 38;
|
||||
static final int EARTH_BLAST = 39;
|
||||
static final int HIGH_LEVEL_ALCHEMY = 40;
|
||||
static final int CHARGE_WATER_ORB = 41;
|
||||
static final int LVL_4_ENCHANT = 42;
|
||||
static final int WATCHTOWER_TELEPORT = 43;
|
||||
static final int FIRE_BLAST = 44;
|
||||
static final int CHARGE_EARTH_ORB = 45;
|
||||
static final int BONES_TO_PEACHES = 46;
|
||||
static final int SARADOMIN_STRIKE = 47;
|
||||
static final int CLAWS_OF_GUTHIX = 48;
|
||||
static final int FLAMES_OF_ZAMORAK = 49;
|
||||
static final int TROLLHEIM_TELEPORT = 50;
|
||||
static final int WIND_WAVE = 51;
|
||||
static final int CHARGE_FIRE_ORB = 52;
|
||||
static final int TELEPORT_TO_APE_ATOLL = 53;
|
||||
static final int WATER_WAVE = 54;
|
||||
static final int CHARGE_AIR_ORB = 55;
|
||||
static final int VULNERABILITY = 56;
|
||||
static final int LVL_5_ENCHANT = 57;
|
||||
static final int TELEPORT_TO_KOUREND = 58;
|
||||
static final int EARTH_WAVE = 59;
|
||||
static final int ENFEEBLE = 60;
|
||||
static final int TELEOTHER_LUMBRIDGE = 61;
|
||||
static final int FIRE_WAVE = 62;
|
||||
static final int ENTANGLE = 63;
|
||||
static final int STUN = 64;
|
||||
static final int CHARGE = 65;
|
||||
static final int WIND_SURGE = 66;
|
||||
static final int TELEOTHER_FALADOR = 67;
|
||||
static final int WATER_SURGE = 68;
|
||||
static final int TELE_BLOCK = 69;
|
||||
static final int BOUNTY_TARGET_TELEPORT = 70;
|
||||
static final int LVL_6_ENCHANT = 71;
|
||||
static final int TELEOTHER_CAMELOT = 72;
|
||||
static final int EARTH_SURGE = 73;
|
||||
static final int LVL_7_ENCHANT = 74;
|
||||
static final int FIRE_SURGE = 75;
|
||||
|
||||
// ANCIENT SPELLS
|
||||
static final int ICE_RUSH = 75;
|
||||
static final int ICE_BLITZ = 76;
|
||||
static final int ICE_BURST = 77;
|
||||
static final int ICE_BARRAGE = 78;
|
||||
static final int BLOOD_RUSH = 79;
|
||||
static final int BLOOD_BLITZ = 80;
|
||||
static final int BLOOD_BURST = 81;
|
||||
static final int BLOOD_BARRAGE = 82;
|
||||
static final int SMOKE_RUSH = 83;
|
||||
static final int SMOKE_BLITZ = 84;
|
||||
static final int SMOKE_BURST = 85;
|
||||
static final int SMOKE_BARRAGE = 86;
|
||||
static final int SHADOW_RUSH = 87;
|
||||
static final int SHADOW_BLITZ = 88;
|
||||
static final int SHADOW_BURST = 89;
|
||||
static final int SHADOW_BARRAGE = 90;
|
||||
static final int PADDEWWA_TELEPORT = 91;
|
||||
static final int SENNTISTEN_TELEPORT = 92;
|
||||
static final int KHARYRLL_TELEPORT = 93;
|
||||
static final int LASSAR_TELEPORT = 94;
|
||||
static final int DAREEYAK_TELEPORT = 95;
|
||||
static final int CARRALLANGER_TELEPORT = 96;
|
||||
static final int ANNAKARL_TELEPORT = 97;
|
||||
static final int GHORROCK_TELEPORT = 98;
|
||||
static final int EDGEVILLE_HOME_TELEPORT = 99;
|
||||
static final int ICE_RUSH = 76;
|
||||
static final int ICE_BLITZ = 77;
|
||||
static final int ICE_BURST = 78;
|
||||
static final int ICE_BARRAGE = 79;
|
||||
static final int BLOOD_RUSH = 80;
|
||||
static final int BLOOD_BLITZ = 81;
|
||||
static final int BLOOD_BURST = 82;
|
||||
static final int BLOOD_BARRAGE = 83;
|
||||
static final int SMOKE_RUSH = 84;
|
||||
static final int SMOKE_BLITZ = 85;
|
||||
static final int SMOKE_BURST = 86;
|
||||
static final int SMOKE_BARRAGE = 87;
|
||||
static final int SHADOW_RUSH = 88;
|
||||
static final int SHADOW_BLITZ = 89;
|
||||
static final int SHADOW_BURST = 90;
|
||||
static final int SHADOW_BARRAGE = 91;
|
||||
static final int PADDEWWA_TELEPORT = 92;
|
||||
static final int SENNTISTEN_TELEPORT = 93;
|
||||
static final int KHARYRLL_TELEPORT = 94;
|
||||
static final int LASSAR_TELEPORT = 95;
|
||||
static final int DAREEYAK_TELEPORT = 96;
|
||||
static final int CARRALLANGER_TELEPORT = 97;
|
||||
static final int ANNAKARL_TELEPORT = 98;
|
||||
static final int GHORROCK_TELEPORT = 99;
|
||||
static final int EDGEVILLE_HOME_TELEPORT = 100;
|
||||
|
||||
// LUNAR SPELLS
|
||||
static final int LUNAR_HOME_TELEPORT = 100;
|
||||
static final int BAKE_PIE = 101;
|
||||
static final int CURE_PLANT = 102;
|
||||
static final int MONSTER_EXAMINE = 103;
|
||||
static final int NPC_CONTACT = 104;
|
||||
static final int CURE_OTHER = 105;
|
||||
static final int HUMIDIFY = 106;
|
||||
static final int MOONCLAN_TELEPORT = 107;
|
||||
static final int TELE_GROUP_MOONCLAN = 108;
|
||||
static final int CURE_ME = 109;
|
||||
static final int HUNTER_KIT = 110;
|
||||
static final int WATERBIRTH_TELEPORT = 111;
|
||||
static final int TELE_GROUP_WATERBIRTH = 112;
|
||||
static final int CURE_GROUP = 113;
|
||||
static final int STAT_SPY = 114;
|
||||
static final int BARBARIAN_TELEPORT = 115;
|
||||
static final int TELE_GROUP_BARBARIAN = 116;
|
||||
static final int SUPERGLASS_MAKE = 117;
|
||||
static final int TAN_LEATHER = 118;
|
||||
static final int KHAZARD_TELEPORT = 119;
|
||||
static final int TELE_GROUP_KHAZARD = 120;
|
||||
static final int DREAM = 121;
|
||||
static final int STRING_JEWELLERY = 122;
|
||||
static final int STAT_RESTORE_POT_SHARE = 123;
|
||||
static final int MAGIC_IMBUE = 124;
|
||||
static final int FERTILE_SOIL = 125;
|
||||
static final int BOOST_POTION_SHARE = 126;
|
||||
static final int FISHING_GUILD_TELEPORT = 127;
|
||||
static final int TELE_GROUP_FISHING_GUILD = 128;
|
||||
static final int PLANK_MAKE = 129;
|
||||
static final int CATHERBY_TELEPORT = 130;
|
||||
static final int TELE_GROUP_CATHERBY = 131;
|
||||
static final int RECHARGE_DRAGONSTONE = 132;
|
||||
static final int ICE_PLATEAU_TELEPORT = 133;
|
||||
static final int TELE_GROUP_ICE_PLATEAU = 134;
|
||||
static final int ENERGY_TRANSFER = 135;
|
||||
static final int HEAL_OTHER = 136;
|
||||
static final int VENGEANCE_OTHER = 137;
|
||||
static final int VENGEANCE = 138;
|
||||
static final int HEAL_GROUP = 139;
|
||||
static final int SPELLBOOK_SWAP = 140;
|
||||
static final int GEOMANCY = 141;
|
||||
static final int SPIN_FLAX = 142;
|
||||
static final int OURANIA_TELEPORT = 143;
|
||||
static final int LUNAR_HOME_TELEPORT = 101;
|
||||
static final int BAKE_PIE = 102;
|
||||
static final int CURE_PLANT = 103;
|
||||
static final int MONSTER_EXAMINE = 104;
|
||||
static final int NPC_CONTACT = 105;
|
||||
static final int CURE_OTHER = 106;
|
||||
static final int HUMIDIFY = 107;
|
||||
static final int MOONCLAN_TELEPORT = 108;
|
||||
static final int TELE_GROUP_MOONCLAN = 109;
|
||||
static final int CURE_ME = 110;
|
||||
static final int HUNTER_KIT = 111;
|
||||
static final int WATERBIRTH_TELEPORT = 112;
|
||||
static final int TELE_GROUP_WATERBIRTH = 113;
|
||||
static final int CURE_GROUP = 114;
|
||||
static final int STAT_SPY = 115;
|
||||
static final int BARBARIAN_TELEPORT = 116;
|
||||
static final int TELE_GROUP_BARBARIAN = 117;
|
||||
static final int SUPERGLASS_MAKE = 118;
|
||||
static final int TAN_LEATHER = 119;
|
||||
static final int KHAZARD_TELEPORT = 120;
|
||||
static final int TELE_GROUP_KHAZARD = 121;
|
||||
static final int DREAM = 122;
|
||||
static final int STRING_JEWELLERY = 123;
|
||||
static final int STAT_RESTORE_POT_SHARE = 124;
|
||||
static final int MAGIC_IMBUE = 125;
|
||||
static final int FERTILE_SOIL = 126;
|
||||
static final int BOOST_POTION_SHARE = 127;
|
||||
static final int FISHING_GUILD_TELEPORT = 128;
|
||||
static final int TELE_GROUP_FISHING_GUILD = 129;
|
||||
static final int PLANK_MAKE = 130;
|
||||
static final int CATHERBY_TELEPORT = 131;
|
||||
static final int TELE_GROUP_CATHERBY = 132;
|
||||
static final int RECHARGE_DRAGONSTONE = 133;
|
||||
static final int ICE_PLATEAU_TELEPORT = 134;
|
||||
static final int TELE_GROUP_ICE_PLATEAU = 135;
|
||||
static final int ENERGY_TRANSFER = 136;
|
||||
static final int HEAL_OTHER = 137;
|
||||
static final int VENGEANCE_OTHER = 138;
|
||||
static final int VENGEANCE = 139;
|
||||
static final int HEAL_GROUP = 140;
|
||||
static final int SPELLBOOK_SWAP = 141;
|
||||
static final int GEOMANCY = 142;
|
||||
static final int SPIN_FLAX = 143;
|
||||
static final int OURANIA_TELEPORT = 144;
|
||||
|
||||
// ARCEUUS SPELLS
|
||||
static final int ARCEUUS_HOME_TELEPORT = 144;
|
||||
static final int BASIC_REANIMATION = 145;
|
||||
static final int ARCEUUS_LIBRARY_TELEPORT = 146;
|
||||
static final int ADEPT_REANIMATION = 147;
|
||||
static final int EXPERT_REANIMATION = 148;
|
||||
static final int MASTER_REANIMATION = 149;
|
||||
static final int DRAYNOR_MANOR_TELEPORT = 150;
|
||||
static final int MIND_ALTAR_TELEPORT = 152;
|
||||
static final int RESPAWN_TELEPORT = 153;
|
||||
static final int SALVE_GRAVEYARD_TELEPORT = 154;
|
||||
static final int FENKENSTRAINS_CASTLE_TELEPORT = 155;
|
||||
static final int WEST_ARDOUGNE_TELEPORT = 156;
|
||||
static final int HARMONY_ISLAND_TELEPORT = 157;
|
||||
static final int CEMETERY_TELEPORT = 158;
|
||||
static final int RESURRECT_CROPS = 159;
|
||||
static final int BARROWS_TELEPORT = 160;
|
||||
static final int APE_ATOLL_TELEPORT = 161;
|
||||
static final int BATTLEFRONT_TELEPORT = 162;
|
||||
static final int INFERIOR_DEMONBANE = 163;
|
||||
static final int SUPERIOR_DEMONBANE = 164;
|
||||
static final int DARK_DEMONBANE = 165;
|
||||
static final int MARK_OF_DARKNESS = 166;
|
||||
static final int GHOSTLY_GRASP = 167;
|
||||
static final int SKELETAL_GRASP = 168;
|
||||
static final int UNDEAD_GRASP = 169;
|
||||
static final int WARD_OF_ARCEUUS = 170;
|
||||
static final int LESSER_CORRUPTION = 171;
|
||||
static final int GREATER_CORRUPTION = 172;
|
||||
static final int DEMONIC_OFFERING = 173;
|
||||
static final int SINISTER_OFFERING = 174;
|
||||
static final int DEGRIME = 175;
|
||||
static final int SHADOW_VEIL = 176;
|
||||
static final int VILE_VIGOUR = 177;
|
||||
static final int DARK_LURE = 178;
|
||||
static final int DEATH_CHARGE = 179;
|
||||
static final int RESURRECT_LESSER_GHOST = 180;
|
||||
static final int RESURRECT_LESSER_SKELETON = 181;
|
||||
static final int RESURRECT_LESSER_ZOMBIE = 182;
|
||||
static final int RESURRECT_SUPERIOR_GHOST = 183;
|
||||
static final int RESURRECT_SUPERIOR_SKELETON = 184;
|
||||
static final int RESURRECT_SUPERIOR_ZOMBIE = 185;
|
||||
static final int RESURRECT_GREATER_GHOST = 186;
|
||||
static final int RESURRECT_GREATER_SKELETON = 187;
|
||||
static final int RESURRECT_GREATER_ZOMBIE = 188;
|
||||
static final int ARCEUUS_HOME_TELEPORT = 145;
|
||||
static final int BASIC_REANIMATION = 146;
|
||||
static final int ARCEUUS_LIBRARY_TELEPORT = 147;
|
||||
static final int ADEPT_REANIMATION = 148;
|
||||
static final int EXPERT_REANIMATION = 149;
|
||||
static final int MASTER_REANIMATION = 150;
|
||||
static final int DRAYNOR_MANOR_TELEPORT = 151;
|
||||
static final int MIND_ALTAR_TELEPORT = 153;
|
||||
static final int RESPAWN_TELEPORT = 154;
|
||||
static final int SALVE_GRAVEYARD_TELEPORT = 155;
|
||||
static final int FENKENSTRAINS_CASTLE_TELEPORT = 156;
|
||||
static final int WEST_ARDOUGNE_TELEPORT = 157;
|
||||
static final int HARMONY_ISLAND_TELEPORT = 158;
|
||||
static final int CEMETERY_TELEPORT = 159;
|
||||
static final int RESURRECT_CROPS = 160;
|
||||
static final int BARROWS_TELEPORT = 161;
|
||||
static final int APE_ATOLL_TELEPORT = 162;
|
||||
static final int BATTLEFRONT_TELEPORT = 163;
|
||||
static final int INFERIOR_DEMONBANE = 164;
|
||||
static final int SUPERIOR_DEMONBANE = 165;
|
||||
static final int DARK_DEMONBANE = 166;
|
||||
static final int MARK_OF_DARKNESS = 167;
|
||||
static final int GHOSTLY_GRASP = 168;
|
||||
static final int SKELETAL_GRASP = 169;
|
||||
static final int UNDEAD_GRASP = 170;
|
||||
static final int WARD_OF_ARCEUUS = 171;
|
||||
static final int LESSER_CORRUPTION = 172;
|
||||
static final int GREATER_CORRUPTION = 173;
|
||||
static final int DEMONIC_OFFERING = 174;
|
||||
static final int SINISTER_OFFERING = 175;
|
||||
static final int DEGRIME = 176;
|
||||
static final int SHADOW_VEIL = 177;
|
||||
static final int VILE_VIGOUR = 178;
|
||||
static final int DARK_LURE = 179;
|
||||
static final int DEATH_CHARGE = 180;
|
||||
static final int RESURRECT_LESSER_GHOST = 181;
|
||||
static final int RESURRECT_LESSER_SKELETON = 182;
|
||||
static final int RESURRECT_LESSER_ZOMBIE = 183;
|
||||
static final int RESURRECT_SUPERIOR_GHOST = 184;
|
||||
static final int RESURRECT_SUPERIOR_SKELETON = 185;
|
||||
static final int RESURRECT_SUPERIOR_ZOMBIE = 186;
|
||||
static final int RESURRECT_GREATER_GHOST = 187;
|
||||
static final int RESURRECT_GREATER_SKELETON = 188;
|
||||
static final int RESURRECT_GREATER_ZOMBIE = 189;
|
||||
}
|
||||
|
||||
static class DialogSprite2
|
||||
|
||||
@@ -25,28 +25,26 @@
|
||||
package net.runelite.client.chat;
|
||||
|
||||
import java.awt.Color;
|
||||
import javax.annotation.Nullable;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import net.runelite.api.VarPlayer;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(exclude = {"color", "isDefault"})
|
||||
public class ChatColor
|
||||
@EqualsAndHashCode(exclude = {"color", "isDefault", "setting"})
|
||||
@AllArgsConstructor
|
||||
class ChatColor
|
||||
{
|
||||
private ChatColorType type;
|
||||
private Color color;
|
||||
private boolean transparent;
|
||||
private boolean isDefault;
|
||||
@Nullable
|
||||
private VarPlayer setting; // varp for the in-game chat color setting
|
||||
|
||||
public ChatColor(ChatColorType type, Color color, boolean transparent)
|
||||
{
|
||||
this(type, color, transparent, false);
|
||||
}
|
||||
|
||||
public ChatColor(ChatColorType type, Color color, boolean transparent, boolean isDefault)
|
||||
{
|
||||
this.type = type;
|
||||
this.color = color;
|
||||
this.transparent = transparent;
|
||||
this.isDefault = isDefault;
|
||||
this(type, color, transparent, false, null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,23 +31,19 @@ import com.google.common.collect.HashMultimap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Multimap;
|
||||
import java.awt.Color;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
import java.util.Queue;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import net.runelite.api.ChatMessageType;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.MessageNode;
|
||||
import net.runelite.api.Player;
|
||||
import net.runelite.api.VarPlayer;
|
||||
import net.runelite.api.Varbits;
|
||||
import net.runelite.api.events.ResizeableChanged;
|
||||
import net.runelite.api.events.ScriptCallbackEvent;
|
||||
import net.runelite.api.events.VarbitChanged;
|
||||
import net.runelite.client.callback.ClientThread;
|
||||
import net.runelite.client.config.ChatColorConfig;
|
||||
import net.runelite.client.eventbus.EventBus;
|
||||
@@ -66,7 +62,6 @@ public class ChatMessageManager
|
||||
private final Client client;
|
||||
private final ChatColorConfig chatColorConfig;
|
||||
private final ClientThread clientThread;
|
||||
private int transparencyVarbit = -1;
|
||||
private final Queue<QueuedMessage> queuedMessages = new ConcurrentLinkedQueue<>();
|
||||
|
||||
@Inject
|
||||
@@ -83,40 +78,25 @@ public class ChatMessageManager
|
||||
loadColors();
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onVarbitChanged(VarbitChanged event)
|
||||
{
|
||||
int setting = client.getVar(Varbits.TRANSPARENT_CHATBOX);
|
||||
|
||||
if (transparencyVarbit != setting)
|
||||
{
|
||||
transparencyVarbit = setting;
|
||||
refreshAll();
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onResizeableChanged(ResizeableChanged event)
|
||||
{
|
||||
refreshAll();
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onConfigChanged(ConfigChanged event)
|
||||
{
|
||||
if (event.getGroup().equals("textrecolor"))
|
||||
{
|
||||
loadColors();
|
||||
clientThread.invokeLater(this::refreshAll);
|
||||
clientThread.invokeLater(client::refreshChat);
|
||||
}
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void colorChatMessage()
|
||||
{
|
||||
final int[] intStack = client.getIntStack();
|
||||
final String[] stringStack = client.getStringStack();
|
||||
final int size = client.getStringStackSize();
|
||||
final int uid = client.getIntStack()[client.getIntStackSize() - 1];
|
||||
final int isize = client.getIntStackSize();
|
||||
final int uid = intStack[isize - 1];
|
||||
final boolean splitpmbox = intStack[isize - 2] == 1;
|
||||
|
||||
final MessageNode messageNode = client.getMessages().get(uid);
|
||||
assert messageNode != null : "chat message build for unknown message";
|
||||
@@ -184,6 +164,12 @@ public class ChatMessageManager
|
||||
stringStack[size - 4] = ColorUtil.wrapWithColorTag(channel, channelColor);
|
||||
}
|
||||
|
||||
if (messageNode.getRuneLiteFormatMessage() != null)
|
||||
{
|
||||
stringStack[size - 2] = message = formatRuneLiteMessage(messageNode.getRuneLiteFormatMessage(),
|
||||
chatMessageType, splitpmbox);
|
||||
}
|
||||
|
||||
final Collection<ChatColor> chatColors = colorCache.get(chatMessageType);
|
||||
for (ChatColor chatColor : chatColors)
|
||||
{
|
||||
@@ -311,6 +297,86 @@ public class ChatMessageManager
|
||||
return null;
|
||||
}
|
||||
|
||||
// get the variable holding the chat color from the settings, from script4484
|
||||
private static VarPlayer getSettingsColor(ChatMessageType type, boolean transparent)
|
||||
{
|
||||
if (transparent)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case PUBLICCHAT:
|
||||
case MODCHAT:
|
||||
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_PUBLIC;
|
||||
case PRIVATECHATOUT:
|
||||
case MODPRIVATECHAT:
|
||||
case PRIVATECHAT:
|
||||
case LOGINLOGOUTNOTIFICATION:
|
||||
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_PRIVATE;
|
||||
case AUTOTYPER:
|
||||
case MODAUTOTYPER:
|
||||
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_AUTO;
|
||||
case BROADCAST:
|
||||
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_BROADCAST;
|
||||
case FRIENDSCHAT:
|
||||
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_FRIEND;
|
||||
case CLAN_CHAT:
|
||||
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_CLAN;
|
||||
case TRADEREQ:
|
||||
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_TRADE_REQUEST;
|
||||
case CHALREQ_TRADE:
|
||||
case CHALREQ_FRIENDSCHAT:
|
||||
case CHALREQ_CLANCHAT:
|
||||
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_CHALLENGE_REQUEST;
|
||||
case CLAN_GUEST_CHAT:
|
||||
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_GUEST_CLAN;
|
||||
case CLAN_GIM_CHAT:
|
||||
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_IRON_GROUP_CHAT;
|
||||
case CLAN_MESSAGE:
|
||||
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_CLAN_BROADCAST;
|
||||
case CLAN_GIM_MESSAGE:
|
||||
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_IRON_GROUP_BROADCAST;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case PUBLICCHAT:
|
||||
case MODCHAT:
|
||||
return VarPlayer.SETTINGS_OPAQUE_CHAT_PUBLIC;
|
||||
case PRIVATECHATOUT:
|
||||
case MODPRIVATECHAT:
|
||||
case PRIVATECHAT:
|
||||
case LOGINLOGOUTNOTIFICATION:
|
||||
return VarPlayer.SETTINGS_OPAQUE_CHAT_PRIVATE;
|
||||
case AUTOTYPER:
|
||||
case MODAUTOTYPER:
|
||||
return VarPlayer.SETTINGS_OPAQUE_CHAT_AUTO;
|
||||
case BROADCAST:
|
||||
return VarPlayer.SETTINGS_OPAQUE_CHAT_BROADCAST;
|
||||
case FRIENDSCHAT:
|
||||
return VarPlayer.SETTINGS_OPAQUE_CHAT_FRIEND;
|
||||
case CLAN_CHAT:
|
||||
return VarPlayer.SETTINGS_OPAQUE_CHAT_CLAN;
|
||||
case TRADEREQ:
|
||||
return VarPlayer.SETTINGS_OPAQUE_CHAT_TRADE_REQUEST;
|
||||
case CHALREQ_TRADE:
|
||||
case CHALREQ_FRIENDSCHAT:
|
||||
case CHALREQ_CLANCHAT:
|
||||
return VarPlayer.SETTINGS_OPAQUE_CHAT_CHALLENGE_REQUEST;
|
||||
case CLAN_GUEST_CHAT:
|
||||
return VarPlayer.SETTINGS_OPAQUE_CHAT_GUEST_CLAN;
|
||||
case CLAN_GIM_CHAT:
|
||||
return VarPlayer.SETTINGS_OPAQUE_CHAT_IRON_GROUP_CHAT;
|
||||
case CLAN_MESSAGE:
|
||||
return VarPlayer.SETTINGS_OPAQUE_CHAT_CLAN_BROADCAST;
|
||||
case CLAN_GIM_MESSAGE:
|
||||
return VarPlayer.SETTINGS_OPAQUE_CHAT_IRON_GROUP_BROADCAST;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load all configured colors
|
||||
*/
|
||||
@@ -324,13 +390,13 @@ public class ChatMessageManager
|
||||
Color defaultTransparent = getDefaultColor(chatMessageType, true);
|
||||
if (defaultTransparent != null)
|
||||
{
|
||||
cacheColor(new ChatColor(ChatColorType.NORMAL, defaultTransparent, true, true), chatMessageType);
|
||||
cacheColor(new ChatColor(ChatColorType.NORMAL, defaultTransparent, true, true, getSettingsColor(chatMessageType, true)), chatMessageType);
|
||||
}
|
||||
|
||||
Color defaultOpaque = getDefaultColor(chatMessageType, false);
|
||||
if (defaultOpaque != null)
|
||||
{
|
||||
cacheColor(new ChatColor(ChatColorType.NORMAL, defaultOpaque, false, true), chatMessageType);
|
||||
cacheColor(new ChatColor(ChatColorType.NORMAL, defaultOpaque, false, true, getSettingsColor(chatMessageType, false)), chatMessageType);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -744,13 +810,11 @@ public class ChatMessageManager
|
||||
return;
|
||||
}
|
||||
|
||||
final String formattedMessage = formatRuneLiteMessage(message.getRuneLiteFormattedMessage(), message.getType());
|
||||
|
||||
// this updates chat cycle
|
||||
final MessageNode line = client.addChatMessage(
|
||||
message.getType(),
|
||||
MoreObjects.firstNonNull(message.getName(), ""),
|
||||
MoreObjects.firstNonNull(formattedMessage, message.getValue()),
|
||||
MoreObjects.firstNonNull(message.getRuneLiteFormattedMessage(), message.getValue()),
|
||||
message.getSender());
|
||||
|
||||
// Update the message with RuneLite additions
|
||||
@@ -763,55 +827,64 @@ public class ChatMessageManager
|
||||
}
|
||||
|
||||
/**
|
||||
* Rebuild the message node message from the RuneLite format message
|
||||
* Rebuild the message node message from the RuneLite format message.
|
||||
* DEPRECATED: no longer needs to be called.
|
||||
*
|
||||
* @param messageNode message node
|
||||
*/
|
||||
@Deprecated
|
||||
public void update(final MessageNode messageNode)
|
||||
{
|
||||
String message = formatRuneLiteMessage(messageNode.getRuneLiteFormatMessage(), messageNode.getType());
|
||||
if (message != null)
|
||||
{
|
||||
messageNode.setValue(message);
|
||||
}
|
||||
}
|
||||
|
||||
private String formatRuneLiteMessage(String runeLiteFormatMessage, ChatMessageType type)
|
||||
@VisibleForTesting
|
||||
String formatRuneLiteMessage(String runeLiteFormatMessage, ChatMessageType type, boolean pmbox)
|
||||
{
|
||||
if (Strings.isNullOrEmpty(runeLiteFormatMessage))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
final boolean transparent = client.isResized() && transparencyVarbit != 0;
|
||||
final boolean transparentChatbox = client.getVar(Varbits.TRANSPARENT_CHATBOX) != 0;
|
||||
final boolean transparent = client.isResized() && transparentChatbox;
|
||||
final Collection<ChatColor> chatColors = colorCache.get(type);
|
||||
|
||||
if (chatColors == null || chatColors.isEmpty())
|
||||
for (ChatColor chatColor : chatColors)
|
||||
{
|
||||
return runeLiteFormatMessage;
|
||||
if (chatColor.isTransparent() == transparent)
|
||||
{
|
||||
String colstr;
|
||||
|
||||
if (pmbox && chatColor.getType() == ChatColorType.NORMAL)
|
||||
{
|
||||
// The default ChatColors for private have the chatbox text color, not the split chat color,
|
||||
// and the split chat color is set by widget color, so just use </col>. The in-game
|
||||
// private chat color doesn't apply to split chat either so using that here also is incorrect.
|
||||
//
|
||||
// If we recolor the final message later we replace </col> with the desired color in
|
||||
// colorChatMessage()
|
||||
colstr = ColorUtil.CLOSING_COLOR_TAG;
|
||||
}
|
||||
else
|
||||
{
|
||||
Color color = chatColor.getColor();
|
||||
|
||||
VarPlayer varp = chatColor.getSetting();
|
||||
if (varp != null)
|
||||
{
|
||||
// Apply configured color from game settings, if set
|
||||
assert chatColor.isDefault();
|
||||
int v = client.getVar(varp);
|
||||
if (v != 0)
|
||||
{
|
||||
color = new Color(v - 1);
|
||||
}
|
||||
}
|
||||
|
||||
colstr = ColorUtil.colorTag(color);
|
||||
}
|
||||
|
||||
// Replace custom formatting with actual colors
|
||||
runeLiteFormatMessage = runeLiteFormatMessage.replaceAll(
|
||||
"<col" + chatColor.getType().name() + ">",
|
||||
colstr);
|
||||
}
|
||||
}
|
||||
|
||||
final AtomicReference<String> resultMessage = new AtomicReference<>(runeLiteFormatMessage);
|
||||
|
||||
// Replace custom formatting with actual colors
|
||||
chatColors.stream()
|
||||
.filter(chatColor -> chatColor.isTransparent() == transparent)
|
||||
.forEach(chatColor ->
|
||||
resultMessage.getAndUpdate(oldMessage -> oldMessage.replaceAll(
|
||||
"<col" + chatColor.getType().name() + ">",
|
||||
ColorUtil.colorTag(chatColor.getColor()))));
|
||||
|
||||
return resultMessage.get();
|
||||
}
|
||||
|
||||
private void refreshAll()
|
||||
{
|
||||
client.getChatLineMap().values().stream()
|
||||
.filter(Objects::nonNull)
|
||||
.flatMap(clb -> Arrays.stream(clb.getLines()))
|
||||
.filter(Objects::nonNull)
|
||||
.forEach(this::update);
|
||||
|
||||
client.refreshChat();
|
||||
return runeLiteFormatMessage;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,6 +37,8 @@ import net.runelite.api.ChatMessageType;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.GameObject;
|
||||
import net.runelite.api.GameState;
|
||||
import static net.runelite.api.GraphicID.CANNONBALL;
|
||||
import static net.runelite.api.GraphicID.GRANITE_CANNONBALL;
|
||||
import net.runelite.api.InventoryID;
|
||||
import net.runelite.api.Item;
|
||||
import net.runelite.api.ItemContainer;
|
||||
@@ -46,8 +48,6 @@ import net.runelite.api.ObjectID;
|
||||
import static net.runelite.api.ObjectID.CANNON_BASE;
|
||||
import net.runelite.api.Player;
|
||||
import net.runelite.api.Projectile;
|
||||
import static net.runelite.api.ProjectileID.CANNONBALL;
|
||||
import static net.runelite.api.ProjectileID.GRANITE_CANNONBALL;
|
||||
import net.runelite.api.coords.LocalPoint;
|
||||
import net.runelite.api.coords.WorldPoint;
|
||||
import net.runelite.api.events.ChatMessage;
|
||||
|
||||
-15
@@ -77,7 +77,6 @@ import net.runelite.client.chat.ChatClient;
|
||||
import net.runelite.client.chat.ChatColorType;
|
||||
import net.runelite.client.chat.ChatCommandManager;
|
||||
import net.runelite.client.chat.ChatMessageBuilder;
|
||||
import net.runelite.client.chat.ChatMessageManager;
|
||||
import net.runelite.client.config.ConfigManager;
|
||||
import net.runelite.client.config.RuneLiteConfig;
|
||||
import net.runelite.client.eventbus.Subscribe;
|
||||
@@ -175,9 +174,6 @@ public class ChatCommandsPlugin extends Plugin
|
||||
@Inject
|
||||
private ItemManager itemManager;
|
||||
|
||||
@Inject
|
||||
private ChatMessageManager chatMessageManager;
|
||||
|
||||
@Inject
|
||||
private ChatCommandManager chatCommandManager;
|
||||
|
||||
@@ -840,7 +836,6 @@ public class ChatCommandsPlugin extends Plugin
|
||||
log.debug("Setting response {}", response);
|
||||
final MessageNode messageNode = chatMessage.getMessageNode();
|
||||
messageNode.setRuneLiteFormatMessage(response);
|
||||
chatMessageManager.update(messageNode);
|
||||
client.refreshChat();
|
||||
}
|
||||
|
||||
@@ -930,7 +925,6 @@ public class ChatCommandsPlugin extends Plugin
|
||||
log.debug("Setting response {}", response);
|
||||
final MessageNode messageNode = chatMessage.getMessageNode();
|
||||
messageNode.setRuneLiteFormatMessage(response);
|
||||
chatMessageManager.update(messageNode);
|
||||
client.refreshChat();
|
||||
}
|
||||
|
||||
@@ -974,7 +968,6 @@ public class ChatCommandsPlugin extends Plugin
|
||||
log.debug("Setting response {}", response);
|
||||
final MessageNode messageNode = chatMessage.getMessageNode();
|
||||
messageNode.setRuneLiteFormatMessage(response);
|
||||
chatMessageManager.update(messageNode);
|
||||
client.refreshChat();
|
||||
}
|
||||
|
||||
@@ -1061,7 +1054,6 @@ public class ChatCommandsPlugin extends Plugin
|
||||
log.debug("Setting response {}", response);
|
||||
final MessageNode messageNode = chatMessage.getMessageNode();
|
||||
messageNode.setRuneLiteFormatMessage(response);
|
||||
chatMessageManager.update(messageNode);
|
||||
client.refreshChat();
|
||||
}
|
||||
|
||||
@@ -1137,7 +1129,6 @@ public class ChatCommandsPlugin extends Plugin
|
||||
log.debug("Setting response {}", response);
|
||||
final MessageNode messageNode = chatMessage.getMessageNode();
|
||||
messageNode.setRuneLiteFormatMessage(response);
|
||||
chatMessageManager.update(messageNode);
|
||||
client.refreshChat();
|
||||
}
|
||||
|
||||
@@ -1231,7 +1222,6 @@ public class ChatCommandsPlugin extends Plugin
|
||||
log.debug("Setting response {}", response);
|
||||
final MessageNode messageNode = chatMessage.getMessageNode();
|
||||
messageNode.setRuneLiteFormatMessage(response);
|
||||
chatMessageManager.update(messageNode);
|
||||
client.refreshChat();
|
||||
}
|
||||
|
||||
@@ -1321,7 +1311,6 @@ public class ChatCommandsPlugin extends Plugin
|
||||
|
||||
log.debug("Setting response {}", response);
|
||||
messageNode.setRuneLiteFormatMessage(response);
|
||||
chatMessageManager.update(messageNode);
|
||||
client.refreshChat();
|
||||
}
|
||||
}
|
||||
@@ -1403,7 +1392,6 @@ public class ChatCommandsPlugin extends Plugin
|
||||
log.debug("Setting response {}", response);
|
||||
final MessageNode messageNode = chatMessage.getMessageNode();
|
||||
messageNode.setRuneLiteFormatMessage(response);
|
||||
chatMessageManager.update(messageNode);
|
||||
client.refreshChat();
|
||||
}
|
||||
catch (IOException ex)
|
||||
@@ -1488,7 +1476,6 @@ public class ChatCommandsPlugin extends Plugin
|
||||
log.debug("Setting response {}", response);
|
||||
final MessageNode messageNode = chatMessage.getMessageNode();
|
||||
messageNode.setRuneLiteFormatMessage(response);
|
||||
chatMessageManager.update(messageNode);
|
||||
client.refreshChat();
|
||||
}
|
||||
catch (IOException ex)
|
||||
@@ -1616,7 +1603,6 @@ public class ChatCommandsPlugin extends Plugin
|
||||
log.debug("Setting response {}", response);
|
||||
final MessageNode messageNode = chatMessage.getMessageNode();
|
||||
messageNode.setRuneLiteFormatMessage(response);
|
||||
chatMessageManager.update(messageNode);
|
||||
client.refreshChat();
|
||||
}
|
||||
catch (IOException ex)
|
||||
@@ -1710,7 +1696,6 @@ public class ChatCommandsPlugin extends Plugin
|
||||
log.debug("Setting response {}", response);
|
||||
final MessageNode messageNode = chatMessage.getMessageNode();
|
||||
messageNode.setRuneLiteFormatMessage(response);
|
||||
chatMessageManager.update(messageNode);
|
||||
client.refreshChat();
|
||||
}
|
||||
catch (IOException ex)
|
||||
|
||||
+24
-27
@@ -47,7 +47,6 @@ import net.runelite.api.events.ChatMessage;
|
||||
import net.runelite.api.events.GameStateChanged;
|
||||
import net.runelite.client.Notifier;
|
||||
import net.runelite.client.chat.ChatColorType;
|
||||
import net.runelite.client.chat.ChatMessageManager;
|
||||
import net.runelite.client.config.ConfigManager;
|
||||
import net.runelite.client.eventbus.Subscribe;
|
||||
import net.runelite.client.events.ConfigChanged;
|
||||
@@ -69,9 +68,6 @@ public class ChatNotificationsPlugin extends Plugin
|
||||
@Inject
|
||||
private ChatNotificationsConfig config;
|
||||
|
||||
@Inject
|
||||
private ChatMessageManager chatMessageManager;
|
||||
|
||||
@Inject
|
||||
private Notifier notifier;
|
||||
|
||||
@@ -243,12 +239,24 @@ public class ChatNotificationsPlugin extends Plugin
|
||||
Matcher matcher = usernameMatcher.matcher(message);
|
||||
if (matcher.find())
|
||||
{
|
||||
final int start = matcher.start();
|
||||
final String username = client.getLocalPlayer().getName();
|
||||
final String closeColor = MoreObjects.firstNonNull(getLastColor(message.substring(0, start)), "</col>");
|
||||
final String replacement = "<col" + ChatColorType.HIGHLIGHT.name() + "><u>" + username + "</u>" + closeColor;
|
||||
messageNode.setValue(matcher.replaceAll(replacement));
|
||||
StringBuffer stringBuffer = new StringBuffer();
|
||||
do
|
||||
{
|
||||
final int start = matcher.start(); // start not end, since username won't contain a col tag
|
||||
final String closeColor = MoreObjects.firstNonNull(
|
||||
getLastColor(message.substring(0, start)),
|
||||
"<col" + ChatColorType.NORMAL + '>');
|
||||
final String replacement = "<col" + ChatColorType.HIGHLIGHT.name() + "><u>" + username + "</u>" + closeColor;
|
||||
matcher.appendReplacement(stringBuffer, replacement);
|
||||
}
|
||||
while (matcher.find());
|
||||
|
||||
matcher.appendTail(stringBuffer);
|
||||
|
||||
messageNode.setValue(stringBuffer.toString());
|
||||
update = true;
|
||||
|
||||
if (config.notifyOnOwnName() && (chatMessage.getType() == ChatMessageType.PUBLICCHAT
|
||||
|| chatMessage.getType() == ChatMessageType.PRIVATECHAT
|
||||
|| chatMessage.getType() == ChatMessageType.FRIENDSCHAT
|
||||
@@ -279,26 +287,16 @@ public class ChatNotificationsPlugin extends Plugin
|
||||
|
||||
do
|
||||
{
|
||||
String value = matcher.group();
|
||||
|
||||
// Determine the ending color by:
|
||||
// 1) use the color from value if it has one
|
||||
// 2) use the last color from stringBuffer + <content between last match and current match>
|
||||
// To do #2 we just search for the last col tag after calling appendReplacement
|
||||
String endColor = getLastColor(value);
|
||||
|
||||
final int end = matcher.end();
|
||||
// Determine the ending color by finding the last color tag up to and
|
||||
// including the match.
|
||||
final String closeColor = MoreObjects.firstNonNull(
|
||||
getLastColor(nodeValue.substring(0, end)),
|
||||
"<col" + ChatColorType.NORMAL + '>');
|
||||
// Strip color tags from the highlighted region so that it remains highlighted correctly
|
||||
value = stripColor(value);
|
||||
final String value = stripColor(matcher.group());
|
||||
|
||||
matcher.appendReplacement(stringBuffer, "<col" + ChatColorType.HIGHLIGHT + '>' + value);
|
||||
|
||||
if (endColor == null)
|
||||
{
|
||||
endColor = getLastColor(stringBuffer.toString());
|
||||
}
|
||||
|
||||
// Append end color
|
||||
stringBuffer.append(endColor == null ? "<col" + ChatColorType.NORMAL + ">" : endColor);
|
||||
matcher.appendReplacement(stringBuffer, "<col" + ChatColorType.HIGHLIGHT + '>' + value + closeColor);
|
||||
|
||||
update = true;
|
||||
matchesHighlight = true;
|
||||
@@ -322,7 +320,6 @@ public class ChatNotificationsPlugin extends Plugin
|
||||
if (update)
|
||||
{
|
||||
messageNode.setRuneLiteFormatMessage(messageNode.getValue());
|
||||
chatMessageManager.update(messageNode);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+724
-127
@@ -24,11 +24,12 @@
|
||||
*/
|
||||
package net.runelite.client.plugins.cluescrolls.clues;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics2D;
|
||||
import java.util.Set;
|
||||
import java.util.List;
|
||||
import javax.annotation.Nullable;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import net.runelite.api.NPC;
|
||||
import net.runelite.api.ObjectID;
|
||||
@@ -46,111 +47,728 @@ import net.runelite.client.ui.overlay.components.PanelComponent;
|
||||
import net.runelite.client.ui.overlay.components.TitleComponent;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueScroll, ObjectClueScroll
|
||||
{
|
||||
private static final String ANAGRAM_TEXT = "This anagram reveals who to speak to next: ";
|
||||
private static final String ANAGRAM_TEXT_BEGINNER = "The anagram reveals who to speak to next: ";
|
||||
|
||||
private static final Set<AnagramClue> CLUES = ImmutableSet.of(
|
||||
new AnagramClue("A BAKER", "Baraek", new WorldPoint(3217, 3434, 0), "Varrock square", "How many stalls are there in Varrock Square?", "5"),
|
||||
new AnagramClue("A BASIC ANTI POT", "Captain Tobias", new WorldPoint(3026, 3216, 0), "Port Sarim", "How many ships are there docked at Port Sarim currently?", "6"),
|
||||
new AnagramClue("A ELF KNOWS", "Snowflake", new WorldPoint(2872, 3934, 0), "Weiss"),
|
||||
new AnagramClue("A HEART", "Aretha", new WorldPoint(1814, 3851, 0), "Soul altar", "32 - 5x = 22, what is x?", "2"),
|
||||
new AnagramClue("AHA JAR", "Jaraah", new WorldPoint(3359, 3276, 0), "Duel Arena hospital"),
|
||||
new AnagramClue("ARC O LINE", "Caroline", new WorldPoint(2715, 3302, 0), "North Witchaven next to the row boat", "How many fishermen are there on the fishing platform?", "11"),
|
||||
new AnagramClue("ARE COL", "Oracle", new WorldPoint(3013, 3501, 0), "Ice Mountain West of Edgeville", "If x is 15 and y is 3 what is 3x + y?", "48"),
|
||||
new AnagramClue("ARMCHAIR THE PELT", "Charlie the Tramp", new WorldPoint(3209, 3392, 0), "South entrance of Varrock", "How many coins would I have if I have 0 coins and attempt to buy 10 loaves of bread for 3 coins each?", "0"),
|
||||
new AnagramClue("AT HERG", "Regath", new WorldPoint(1719, 3723, 0), "General Store, Arceuus, Zeah", "What is -5 to the power of 2?", "25"),
|
||||
new AnagramClue("A BAS", "Saba", new WorldPoint(2858, 3577, 0), "Death Plateau"),
|
||||
new AnagramClue("AREA CHEF TREK", "Father Aereck", new WorldPoint(3243, 3208, 0), "Lumbridge Church", "How many gravestones are in the church graveyard?", "19 or 20"),
|
||||
new AnagramClue("BAIL TRIMS", "Brimstail", new WorldPoint(2402, 3419, 0), "West of Stronghold Slayer Cave"),
|
||||
new AnagramClue("BAKER CLIMB", "Brambickle", new WorldPoint(2783, 3861, 0), "Trollweiss mountain"),
|
||||
new AnagramClue("BLUE GRIM GUIDED", "Lumbridge Guide", new WorldPoint(3238, 3220, 0), "Lumbridge"),
|
||||
new AnagramClue("BY LOOK", "Bolkoy", new WorldPoint(2529, 3162, 0), "Tree Gnome Village general store", "How many flowers are there in the clearing below this platform?", "13"),
|
||||
new AnagramClue("CALAMARI MADE MUD", "Madame Caldarium", new WorldPoint(2553, 2868, 0), "Corsair Cove", "What is 3(5-3)?", "6"),
|
||||
new AnagramClue("CAR IF ICES", "Sacrifice", new WorldPoint(2209, 3056, 0), "Zul-Andra"),
|
||||
new AnagramClue("CAREER IN MOON", "Oneiromancer", new WorldPoint(2150, 3866, 0), "Astral altar", "How many Suqah inhabit Lunar isle?", "25"),
|
||||
new AnagramClue("CLASH ION", "Nicholas", new WorldPoint(1841, 3803, 0), "North of Port Piscarilius fishing shop", "How many windows are in Tynan's shop?", "4"),
|
||||
new AnagramClue("C ON GAME HOC", "Gnome Coach", new WorldPoint(2395, 3486, 0), "Gnome Ball course", "How many gnomes on the Gnome ball field have red patches on their uniforms?", "6"),
|
||||
new AnagramClue("COOL NERD", "Old crone", new WorldPoint(3462, 3557, 0), "East of the Slayer Tower", "What is the combined combat level of each species that live in Slayer tower?", "619"),
|
||||
new AnagramClue("COPPER ORE CRYPTS", "Prospector Percy", new WorldPoint(3061, 3377, 0), "Motherlode Mine", "During a party, everyone shook hands with everybody else. There were 66 handshakes. How many people were at the party?", "12"),
|
||||
new AnagramClue("DARN DRAKE", "Daer Krand", new WorldPoint(3728, 3302, 0), "Sisterhood Sanctuary (Slepe Dungeon, northeast of Nightmare Arena)"),
|
||||
new AnagramClue("DED WAR", "Edward", new WorldPoint(3284, 3943, 0), "Inside Rogue's Castle"),
|
||||
new AnagramClue("DEKAGRAM", "Dark mage", new WorldPoint(3039, 4835, 0), "Centre of the Abyss", "How many rifts are found here in the abyss?", "13"),
|
||||
new AnagramClue("DO SAY MORE", "Doomsayer", new WorldPoint(3230, 3230, 0), "East of Lumbridge Castle", "What is 40 divided by 1/2 plus 15?", "95"),
|
||||
new AnagramClue("DIM THARN", "Mandrith", new WorldPoint(3182, 3946, 0), "Wilderness Resource Area"),
|
||||
new AnagramClue("DR HITMAN", "Mandrith", new WorldPoint(3182, 3946, 0), "Wilderness Resource Area", "How many scorpions live under the pit?", "28"),
|
||||
new AnagramClue("DR WARDEN FUNK", "Drunken Dwarf", new WorldPoint(2913, 10221, 0), "East Side of Keldagrim"),
|
||||
new AnagramClue("DRAGONS LAMENT", "Strange Old Man", new WorldPoint(3564, 3288, 0), "Barrows", "One pipe fills a barrel in 1 hour while another pipe can fill the same barrel in 2 hours. How many minutes will it take to fill the tank if both pipes are used?", "40"),
|
||||
new AnagramClue("DT RUN B", "Brundt the Chieftain", new WorldPoint(2658, 3670, 0), "Rellekka, main hall", "How many people are waiting for the next bard to perform?", "4"),
|
||||
new AnagramClue("DUO PLUG", "Dugopul", new WorldPoint(2803, 2744, 0), "Graveyard on Ape Atoll"),
|
||||
new AnagramClue("EEK ZERO OP", "Zoo keeper", new WorldPoint(2613, 3269, 0), "Ardougne Zoo", "How many animals in total are there in the zoo?", "40"),
|
||||
new AnagramClue("EL OW", "Lowe", new WorldPoint(3233, 3423, 0), "Varrock archery store"),
|
||||
new AnagramClue("FORLUN", "Runolf", new WorldPoint(2512, 10256, 0), "Miscellania & Etceteria Dungeon"),
|
||||
new AnagramClue("GOBLIN KERN", "King Bolren", new WorldPoint(2541, 3170, 0), "Tree Gnome Village"),
|
||||
new AnagramClue("GOT A BOY", "Gabooty", new WorldPoint(2790, 3066, 0), "Centre of Tai Bwo Wannai", "How many buildings are in the village?", "11"),
|
||||
new AnagramClue("GOBLETS ODD TOES", "Otto Godblessed", new WorldPoint(2501, 3487, 0), "Otto's Grotto", "How many types of dragon are there beneath the whirlpool's cavern?", "2"),
|
||||
new AnagramClue("HALT US", "Luthas", new WorldPoint(2938, 3152, 0), "Banana plantation, Karamja"),
|
||||
new AnagramClue("HEORIC", "Eohric", new WorldPoint(2900, 3565, 0), "Top floor of Burthorpe Castle", "King Arthur and Merlin sit down at the Round Table with 8 knights. How many degrees does each get?", "36"),
|
||||
new AnagramClue("HIS PHOR", "Horphis", new WorldPoint(1639, 3812, 0), "Arceuus Library, Zeah", "On a scale of 1-10, how helpful is Logosia?", "1"),
|
||||
new AnagramClue("I AM SIR", "Marisi", new WorldPoint(1737, 3557, 0), "Allotment patch, South of Hosidius chapel", "How many cities form the Kingdom of Great Kourend?", "5"),
|
||||
new AnagramClue("ICY FE", "Fycie", new WorldPoint(2630, 2997, 0), "East Feldip Hills"),
|
||||
new AnagramClue("I DOOM ICON INN", "Dominic Onion", new WorldPoint(2609, 3116, 0), "Nightmare Zone", "How many reward points does a herb box cost?", "9,500"),
|
||||
new AnagramClue("I EVEN", "Nieve", new WorldPoint(2432, 3422, 0), "The slayer master in Gnome Stronghold", "How many farming patches are there in Gnome stronghold?", "2"),
|
||||
new AnagramClue("IM N ZEZIM", "Immenizz", new WorldPoint(2592, 4324, 0), "The Imp inside Puro-Puro"),
|
||||
new AnagramClue("KAY SIR", "Sir Kay", new WorldPoint(2760, 3496, 0), "The courtyard in Camelot Castle", "How many fountains are there within the grounds of Camelot castle?", "6"),
|
||||
new AnagramClue("LEAKEY", "Kaylee", new WorldPoint(2957, 3370, 0), "Rising Sun Inn in Falador", "How many chairs are there in the Rising Sun?", "18"),
|
||||
new AnagramClue("LARK IN DOG", "King Roald", new WorldPoint(3220, 3476, 0), "Ground floor of Varrock castle", "How many bookcases are there in the palace library?", "24"),
|
||||
new AnagramClue("LOW LAG", "Gallow", new WorldPoint(1805, 3566, 0), "Vinery in the Great Kourend", "How many vine patches can you find in this vinery?", "12"),
|
||||
new AnagramClue("LADDER MEMO GUV", "Guard Vemmeldo", new WorldPoint(2447, 3418, 1), "Gnome Stronghold Bank", "How many magic trees can you find inside the Gnome Stronghold?", "3"),
|
||||
new AnagramClue("MAL IN TAU", "Luminata", new WorldPoint(3508, 3237, 0), "Near Burgh de Rott entrance"),
|
||||
new AnagramClue("MACHETE CLAM", "Cam the Camel", new WorldPoint(3300, 3231, 0), "Outside Duel Arena", "How many items can carry water in Gielinor?", "6"),
|
||||
new AnagramClue("ME IF", "Femi", new WorldPoint(2461, 3382, 0), "Gates of Tree Gnome Stronghold"),
|
||||
new AnagramClue("MOLD LA RAN", "Old Man Ral", new WorldPoint(3602, 3209, 0), "Meiyerditch"),
|
||||
new AnagramClue("MOTHERBOARD", "Brother Omad", new WorldPoint(2606, 3211, 0), "Monastery south of Ardougne", "What is the next number? 12, 13, 15, 17, 111, 113, 117, 119, 123....?", "129"),
|
||||
new AnagramClue("MUS KIL READER", "Radimus Erkle", new WorldPoint(2726, 3368, 0), "Legends' Guild"),
|
||||
new AnagramClue("MY MANGLE LAL", "Lammy Langle", new WorldPoint(1688, 3540, 0), "Hosidius spirit tree patch"),
|
||||
new AnagramClue("NO OWNER", "Oronwen", new WorldPoint(1162, 3178, 0), "Lletya Seamstress shop in Lletya", "What is the minimum amount of quest points required to reach Lletya?", "20"),
|
||||
new AnagramClue("NOD MED", "Edmond", new WorldPoint(2566, 3332, 0), "Behind the most NW house in East Ardougne", "How many pigeon cages are there around the back of Jerico's house?", "3"),
|
||||
new AnagramClue("O BIRDZ A ZANY EN PC", "Cap'n Izzy No-Beard", new WorldPoint(2807, 3191, 0), "Brimhaven Agility Arena", "How many Banana Trees are there in the plantation?", "33"),
|
||||
new AnagramClue("OK CO", "Cook", new WorldPoint(3207, 3214, 0), "Ground floor of Lumbridge Castle", "How many cannons does Lumbridge Castle have?", "9"),
|
||||
new AnagramClue("OUR OWN NEEDS", "Nurse Wooned", new WorldPoint(1511, 3619, 0), "Shayzien Infirmary", "How many wounded soldiers are there in the camp?", "16"),
|
||||
new AnagramClue("PACINNG A TAIE", "Captain Ginea", new WorldPoint(1504, 3632, 0), "Tent east of Shayzien Encampment war tent", "1 soldier can deal with 6 lizardmen. How many soldiers do we need for an army of 678 lizardmen?", "113"),
|
||||
new AnagramClue("PEAK REFLEX", "Flax keeper", new WorldPoint(2744, 3444, 0), "Flax field south of Seers Village", "If I have 1014 flax, and I spin a third of them into bowstring, how many flax do I have left?", "676"),
|
||||
new AnagramClue("PEATY PERT", "Party Pete", new WorldPoint(3047, 3376, 0), "Falador Party Room"),
|
||||
new AnagramClue("QUIT HORRIBLE TYRANT", "Brother Tranquility", new WorldPoint(3681, 2963, 0), "Mos Le'Harmless or Harmony Island", "If I have 49 bottles of rum to share between 7 pirates, how many would each pirate get?", "7"),
|
||||
new AnagramClue("QUE SIR", "Squire", new WorldPoint(2975, 3343, 0), "Falador Castle Courtyard", "White knights are superior to black knights. 2 white knights can handle 3 black knights. How many knights do we need for an army of 981 black knights?", "654"),
|
||||
new AnagramClue("R AK MI", "Karim", new WorldPoint(3273, 3181, 0), "Al Kharid Kebab shop", "I have 16 kebabs, I eat one myself and then share the rest equally between 3 friends. How many do they have each?", "5"),
|
||||
new AnagramClue("RAT MAT WITHIN", "Martin Thwait", new WorldPoint(2906, 3537, 0), "Rogues' Den", "How many natural fires burn in Rogue's Den?", "2"),
|
||||
new AnagramClue("RATAI", "Taria", new WorldPoint(2940, 3223, 0), "Rimmington bush patch", "How many buildings are there in Rimmington?", "7"),
|
||||
new AnagramClue("R SLICER", "Clerris", new WorldPoint(1761, 3850, 0), "Arceuus mine, Zeah", "If I have 1,000 blood runes, and cast 131 ice barrage spells, how many blood runes do I have left?", "738"),
|
||||
new AnagramClue("RIP MAUL", "Primula", new WorldPoint(2454, 2853, 1), "Myth's Guild, first floor"),
|
||||
new AnagramClue("SAND NUT", "Dunstan", new WorldPoint(2919, 3574, 0), "Anvil in north east Burthorpe", "How much smithing experience does one receive for smelting a blurite bar?", "8"),
|
||||
new AnagramClue("SLAM DUSTER GRAIL", "Guildmaster Lars", new WorldPoint(1649, 3498, 0), "Woodcutting guild, Zeah"),
|
||||
new AnagramClue("SLIDE WOMAN", "Wise Old Man", new WorldPoint(3088, 3253, 0), "Draynor Village", "How many bookcases are in the Wise Old Man's house?", "28"),
|
||||
new AnagramClue("SNAKES SO I SAIL", "Lisse Isaakson", new WorldPoint(2351, 3801, 0), "Neitiznot", "How many arctic logs are required to make a large fremennik round shield?", "2"),
|
||||
new AnagramClue("TAMED ROCKS", "Dockmaster", new WorldPoint(1822, 3739, 0), "Port Piscarilius, NE of General store", "What is the cube root of 125?", "5"),
|
||||
new AnagramClue("TEN WIGS ON", "Wingstone", new WorldPoint(3389, 2877, 0), "Between Nardah & Agility Pyramid"),
|
||||
new AnagramClue("THICKNO", "Hickton", new WorldPoint(2822, 3442, 0), "Catherby fletching shop", "How many ranges are there in Catherby?", "2"),
|
||||
new AnagramClue("TWENTY CURE IRON", "New Recruit Tony", new WorldPoint(1503, 3553, 0), "Shayzien Graveyard"),
|
||||
new AnagramClue("UNLEASH NIGHT MIST", "Sigli the Huntsman", new WorldPoint(2660, 3654, 0), "Rellekka", "What is the combined slayer requirement of every monster in the slayer cave?", "302"),
|
||||
new AnagramClue("VESTE", "Steve", new WorldPoint(2432, 3423, 0), "Upstairs Wyvern Area or Stronghold Slayer Cave", "How many farming patches are there in Gnome stronghold?", "2"),
|
||||
new AnagramClue("VEIL VEDA", "Evil Dave", new WorldPoint(3079, 9892, 0), "Doris' basement, Edgeville", "What is 333 multiplied by 2?", "666"),
|
||||
new AnagramClue("WOO AN EGG KIWI", "Awowogei", ObjectID.AWOWOGEI, new WorldPoint(2802, 2765, 0), "Ape Atoll", "If I have 303 bananas, and share them between 31 friends evenly, only handing out full bananas. How many will I have left over?", "24"),
|
||||
new AnagramClue("MAJORS LAVA BADS AIR", "Ambassador Alvijar", new WorldPoint(2736, 5351, 1), "Dorgesh-Kaan, NE Middle Level", "Double the miles before the initial Dorgeshuun veteran.", "2505"),
|
||||
new AnagramClue("AN EARL", "Ranael", new WorldPoint(3315, 3163, 0), "Al Kharid skirt shop"),
|
||||
new AnagramClue("CARPET AHOY", "Apothecary", new WorldPoint(3195, 3404, 0), "Southwest Varrock"),
|
||||
new AnagramClue("DISORDER", "Sedridor", new WorldPoint(3102, 9570, 0), "Wizards' Tower basement"),
|
||||
new AnagramClue("I CORD", "Doric", new WorldPoint(2951, 3450, 0), "North of Falador"),
|
||||
new AnagramClue("IN BAR", "Brian", new WorldPoint(3026, 3246, 0), "Port Sarim battleaxe shop"),
|
||||
new AnagramClue("RAIN COVE", "Veronica", new WorldPoint(3110, 3330, 0), "Outside Draynor Manor"),
|
||||
new AnagramClue("RUG DETER", "Gertrude", new WorldPoint(3151, 3412, 0), "West of Varrock, south of the Cooks' Guild"),
|
||||
new AnagramClue("SIR SHARE RED", "Hairdresser", new WorldPoint(2944, 3381, 0), "Western Falador"),
|
||||
new AnagramClue("TAUNT ROOF", "Fortunato", new WorldPoint(3080, 3250, 0), "Draynor Village Market"),
|
||||
new AnagramClue("HICK JET", "Jethick", new WorldPoint(2541, 3305, 0), "West Ardougne", "How many graves are there in the city graveyard?", "38"),
|
||||
new AnagramClue("RUE GO", "Goreu", new WorldPoint(2335, 3162, 0), "Lletya"),
|
||||
new AnagramClue("BRUCIE CATNAP", "Captain Bruce", new WorldPoint(1520, 3558, 0), "Graveyard of Heroes"),
|
||||
new AnagramClue("UESNKRL NRIEDDO", "Drunken soldier", new WorldPoint(1551, 3565, 0), "Shayzien pub", "If 13 Shayzien Soldiers kill 46 Lizardmen each in a day, how many Lizardmen have they killed in total in a single day?", "598")
|
||||
private static final List<AnagramClue> CLUES = ImmutableList.of(
|
||||
AnagramClue.builder()
|
||||
.text("A BAKER")
|
||||
.npc("Baraek")
|
||||
.location(new WorldPoint(3217, 3434, 0))
|
||||
.area("Varrock square")
|
||||
.question("How many stalls are there in Varrock Square?")
|
||||
.answer("5")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("A BASIC ANTI POT")
|
||||
.npc("Captain Tobias")
|
||||
.location(new WorldPoint(3026, 3216, 0))
|
||||
.area("Port Sarim")
|
||||
.question("How many ships are there docked at Port Sarim currently?")
|
||||
.answer("6")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("A ELF KNOWS")
|
||||
.npc("Snowflake")
|
||||
.location(new WorldPoint(2872, 3934, 0))
|
||||
.area("Weiss")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("A HEART")
|
||||
.npc("Aretha")
|
||||
.location(new WorldPoint(1814, 3851, 0))
|
||||
.area("Soul altar")
|
||||
.question("32 - 5x = 22, what is x?")
|
||||
.answer("2")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("AHA JAR")
|
||||
.npc("Jaraah")
|
||||
.location(new WorldPoint(3359, 3276, 0))
|
||||
.area("Duel Arena hospital")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("ARC O LINE")
|
||||
.npc("Caroline")
|
||||
.location(new WorldPoint(2715, 3302, 0))
|
||||
.area("North Witchaven next to the row boat")
|
||||
.question("How many fishermen are there on the fishing platform?")
|
||||
.answer("11")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("ARE COL")
|
||||
.npc("Oracle")
|
||||
.location(new WorldPoint(3013, 3501, 0))
|
||||
.area("Ice Mountain West of Edgeville")
|
||||
.question("If x is 15 and y is 3 what is 3x + y?")
|
||||
.answer("48")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("ARMCHAIR THE PELT")
|
||||
.npc("Charlie the Tramp")
|
||||
.location(new WorldPoint(3209, 3392, 0))
|
||||
.area("South entrance of Varrock")
|
||||
.question("How many coins would I have if I have 0 coins and attempt to buy 10 loaves of bread for 3 coins each?")
|
||||
.answer("0")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("AT HERG")
|
||||
.npc("Regath")
|
||||
.location(new WorldPoint(1719, 3723, 0))
|
||||
.area("General Store, Arceuus, Zeah")
|
||||
.question("What is -5 to the power of 2?")
|
||||
.answer("25")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("A BAS")
|
||||
.npc("Saba")
|
||||
.location(new WorldPoint(2858, 3577, 0))
|
||||
.area("Death Plateau")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("AREA CHEF TREK")
|
||||
.npc("Father Aereck")
|
||||
.location(new WorldPoint(3243, 3208, 0))
|
||||
.area("Lumbridge Church")
|
||||
.question("How many gravestones are in the church graveyard?")
|
||||
.answer("19 or 20")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("BAIL TRIMS")
|
||||
.npc("Brimstail")
|
||||
.location(new WorldPoint(2402, 3419, 0))
|
||||
.area("West of Stronghold Slayer Cave")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("BAKER CLIMB")
|
||||
.npc("Brambickle")
|
||||
.location(new WorldPoint(2783, 3861, 0))
|
||||
.area("Trollweiss mountain")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("BLUE GRIM GUIDED")
|
||||
.npc("Lumbridge Guide")
|
||||
.location(new WorldPoint(3238, 3220, 0))
|
||||
.area("Lumbridge")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("BY LOOK")
|
||||
.npc("Bolkoy")
|
||||
.location(new WorldPoint(2529, 3162, 0))
|
||||
.area("Tree Gnome Village general store")
|
||||
.question("How many flowers are there in the clearing below this platform?")
|
||||
.answer("13")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("CALAMARI MADE MUD")
|
||||
.npc("Madame Caldarium")
|
||||
.location(new WorldPoint(2553, 2868, 0))
|
||||
.area("Corsair Cove")
|
||||
.question("What is 3(5-3)?")
|
||||
.answer("6")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("CAR IF ICES")
|
||||
.npc("Sacrifice")
|
||||
.location(new WorldPoint(2209, 3056, 0))
|
||||
.area("Zul-Andra")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("CAREER IN MOON")
|
||||
.npc("Oneiromancer")
|
||||
.location(new WorldPoint(2150, 3866, 0))
|
||||
.area("Astral altar")
|
||||
.question("How many Suqah inhabit Lunar isle?")
|
||||
.answer("25")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("CLASH ION")
|
||||
.npc("Nicholas")
|
||||
.location(new WorldPoint(1841, 3803, 0))
|
||||
.area("North of Port Piscarilius fishing shop")
|
||||
.question("How many windows are in Tynan's shop?")
|
||||
.answer("4")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("C ON GAME HOC")
|
||||
.npc("Gnome Coach")
|
||||
.location(new WorldPoint(2395, 3486, 0))
|
||||
.area("Gnome Ball course")
|
||||
.question("How many gnomes on the Gnome ball field have red patches on their uniforms?")
|
||||
.answer("6")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("COOL NERD")
|
||||
.npc("Old crone")
|
||||
.location(new WorldPoint(3462, 3557, 0))
|
||||
.area("East of the Slayer Tower")
|
||||
.question("What is the combined combat level of each species that live in Slayer tower?")
|
||||
.answer("619")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("COPPER ORE CRYPTS")
|
||||
.npc("Prospector Percy")
|
||||
.location(new WorldPoint(3061, 3377, 0))
|
||||
.area("Motherlode Mine")
|
||||
.question("During a party, everyone shook hands with everybody else. There were 66 handshakes. How many people were at the party?")
|
||||
.answer("12")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("DARN DRAKE")
|
||||
.npc("Daer Krand")
|
||||
.location(new WorldPoint(3728, 3302, 0))
|
||||
.area("Sisterhood Sanctuary (Slepe Dungeon, northeast of Nightmare Arena)")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("DED WAR")
|
||||
.npc("Edward")
|
||||
.location(new WorldPoint(3284, 3943, 0))
|
||||
.area("Inside Rogue's Castle")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("DEKAGRAM")
|
||||
.npc("Dark mage")
|
||||
.location(new WorldPoint(3039, 4835, 0))
|
||||
.area("Centre of the Abyss")
|
||||
.question("How many rifts are found here in the abyss?")
|
||||
.answer("13")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("DO SAY MORE")
|
||||
.npc("Doomsayer")
|
||||
.location(new WorldPoint(3230, 3230, 0))
|
||||
.area("East of Lumbridge Castle")
|
||||
.question("What is 40 divided by 1/2 plus 15?")
|
||||
.answer("95")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("DIM THARN")
|
||||
.npc("Mandrith")
|
||||
.location(new WorldPoint(3182, 3946, 0))
|
||||
.area("Wilderness Resource Area")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("DR HITMAN")
|
||||
.npc("Mandrith")
|
||||
.location(new WorldPoint(3182, 3946, 0))
|
||||
.area("Wilderness Resource Area")
|
||||
.question("How many scorpions live under the pit?")
|
||||
.answer("28")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("DR WARDEN FUNK")
|
||||
.npc("Drunken Dwarf")
|
||||
.location(new WorldPoint(2913, 10221, 0))
|
||||
.area("East Side of Keldagrim")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("DRAGONS LAMENT")
|
||||
.npc("Strange Old Man")
|
||||
.location(new WorldPoint(3564, 3288, 0))
|
||||
.area("Barrows")
|
||||
.question("One pipe fills a barrel in 1 hour while another pipe can fill the same barrel in 2 hours. How many minutes will it take to fill the tank if both pipes are used?")
|
||||
.answer("40")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("DT RUN B")
|
||||
.npc("Brundt the Chieftain")
|
||||
.location(new WorldPoint(2658, 3670, 0))
|
||||
.area("Rellekka, main hall")
|
||||
.question("How many people are waiting for the next bard to perform?")
|
||||
.answer("4")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("DUO PLUG")
|
||||
.npc("Dugopul")
|
||||
.location(new WorldPoint(2803, 2744, 0))
|
||||
.area("Graveyard on Ape Atoll")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("EEK ZERO OP")
|
||||
.npc("Zoo keeper")
|
||||
.location(new WorldPoint(2613, 3269, 0))
|
||||
.area("Ardougne Zoo")
|
||||
.question("How many animals in total are there in the zoo?")
|
||||
.answer("40")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("EL OW")
|
||||
.npc("Lowe")
|
||||
.location(new WorldPoint(3233, 3423, 0))
|
||||
.area("Varrock archery store")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("FORLUN")
|
||||
.npc("Runolf")
|
||||
.location(new WorldPoint(2512, 10256, 0))
|
||||
.area("Miscellania & Etceteria Dungeon")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("GOBLIN KERN")
|
||||
.npc("King Bolren")
|
||||
.location(new WorldPoint(2541, 3170, 0))
|
||||
.area("Tree Gnome Village")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("GOT A BOY")
|
||||
.npc("Gabooty")
|
||||
.location(new WorldPoint(2790, 3066, 0))
|
||||
.area("Centre of Tai Bwo Wannai")
|
||||
.question("How many buildings are in the village?")
|
||||
.answer("11")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("GOBLETS ODD TOES")
|
||||
.npc("Otto Godblessed")
|
||||
.location(new WorldPoint(2501, 3487, 0))
|
||||
.area("Otto's Grotto")
|
||||
.question("How many types of dragon are there beneath the whirlpool's cavern?")
|
||||
.answer("2")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("HALT US")
|
||||
.npc("Luthas")
|
||||
.location(new WorldPoint(2938, 3152, 0))
|
||||
.area("Banana plantation, Karamja")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("HEORIC")
|
||||
.npc("Eohric")
|
||||
.location(new WorldPoint(2900, 3565, 0))
|
||||
.area("Top floor of Burthorpe Castle")
|
||||
.question("King Arthur and Merlin sit down at the Round Table with 8 knights. How many degrees does each get?")
|
||||
.answer("36")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("HIS PHOR")
|
||||
.npc("Horphis")
|
||||
.location(new WorldPoint(1639, 3812, 0))
|
||||
.area("Arceuus Library, Zeah")
|
||||
.question("On a scale of 1-10, how helpful is Logosia?")
|
||||
.answer("1")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("I AM SIR")
|
||||
.npc("Marisi")
|
||||
.location(new WorldPoint(1737, 3557, 0))
|
||||
.area("Allotment patch, South of Hosidius chapel")
|
||||
.question("How many cities form the Kingdom of Great Kourend?")
|
||||
.answer("5")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("ICY FE")
|
||||
.npc("Fycie")
|
||||
.location(new WorldPoint(2630, 2997, 0))
|
||||
.area("East Feldip Hills")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("I DOOM ICON INN")
|
||||
.npc("Dominic Onion")
|
||||
.location(new WorldPoint(2609, 3116, 0))
|
||||
.area("Nightmare Zone")
|
||||
.question("How many reward points does a herb box cost?")
|
||||
.answer("9,500")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("I EVEN")
|
||||
.npc("Nieve")
|
||||
.location(new WorldPoint(2432, 3422, 0))
|
||||
.area("The slayer master in Gnome Stronghold")
|
||||
.question("How many farming patches are there in Gnome stronghold?")
|
||||
.answer("2")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("IM N ZEZIM")
|
||||
.npc("Immenizz")
|
||||
.location(new WorldPoint(2592, 4324, 0))
|
||||
.area("The Imp inside Puro-Puro")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("KAY SIR")
|
||||
.npc("Sir Kay")
|
||||
.location(new WorldPoint(2760, 3496, 0))
|
||||
.area("The courtyard in Camelot Castle")
|
||||
.question("How many fountains are there within the grounds of Camelot castle?")
|
||||
.answer("6")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("LEAKEY")
|
||||
.npc("Kaylee")
|
||||
.location(new WorldPoint(2957, 3370, 0))
|
||||
.area("Rising Sun Inn in Falador")
|
||||
.question("How many chairs are there in the Rising Sun?")
|
||||
.answer("18")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("LARK IN DOG")
|
||||
.npc("King Roald")
|
||||
.location(new WorldPoint(3220, 3476, 0))
|
||||
.area("Ground floor of Varrock castle")
|
||||
.question("How many bookcases are there in the palace library?")
|
||||
.answer("24")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("LOW LAG")
|
||||
.npc("Gallow")
|
||||
.location(new WorldPoint(1805, 3566, 0))
|
||||
.area("Vinery in the Great Kourend")
|
||||
.question("How many vine patches can you find in this vinery?")
|
||||
.answer("12")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("LADDER MEMO GUV")
|
||||
.npc("Guard Vemmeldo")
|
||||
.location(new WorldPoint(2447, 3418, 1))
|
||||
.area("Gnome Stronghold Bank")
|
||||
.question("How many magic trees can you find inside the Gnome Stronghold?")
|
||||
.answer("3")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("MAL IN TAU")
|
||||
.npc("Luminata")
|
||||
.location(new WorldPoint(3508, 3237, 0))
|
||||
.area("Near Burgh de Rott entrance")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("MACHETE CLAM")
|
||||
.npc("Cam the Camel")
|
||||
.location(new WorldPoint(3300, 3231, 0))
|
||||
.area("Outside Duel Arena")
|
||||
.question("How many items can carry water in Gielinor?")
|
||||
.answer("6")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("ME IF")
|
||||
.npc("Femi")
|
||||
.location(new WorldPoint(2461, 3382, 0))
|
||||
.area("Gates of Tree Gnome Stronghold")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("MOLD LA RAN")
|
||||
.npc("Old Man Ral")
|
||||
.location(new WorldPoint(3602, 3209, 0))
|
||||
.area("Meiyerditch")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("MOTHERBOARD")
|
||||
.npc("Brother Omad")
|
||||
.location(new WorldPoint(2606, 3211, 0))
|
||||
.area("Monastery south of Ardougne")
|
||||
.question("What is the next number? 12, 13, 15, 17, 111, 113, 117, 119, 123....?")
|
||||
.answer("129")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("MUS KIL READER")
|
||||
.npc("Radimus Erkle")
|
||||
.location(new WorldPoint(2726, 3368, 0))
|
||||
.area("Legends' Guild")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("MY MANGLE LAL")
|
||||
.npc("Lammy Langle")
|
||||
.location(new WorldPoint(1688, 3540, 0))
|
||||
.area("Hosidius spirit tree patch")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("NO OWNER")
|
||||
.npc("Oronwen")
|
||||
.location(new WorldPoint(1162, 3178, 0))
|
||||
.area("Lletya Seamstress shop in Lletya")
|
||||
.question("What is the minimum amount of quest points required to reach Lletya?")
|
||||
.answer("20")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("NOD MED")
|
||||
.npc("Edmond")
|
||||
.location(new WorldPoint(2566, 3332, 0))
|
||||
.area("Behind the most NW house in East Ardougne")
|
||||
.question("How many pigeon cages are there around the back of Jerico's house?")
|
||||
.answer("3")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("O BIRDZ A ZANY EN PC")
|
||||
.npc("Cap'n Izzy No-Beard")
|
||||
.location(new WorldPoint(2807, 3191, 0))
|
||||
.area("Brimhaven Agility Arena")
|
||||
.question("How many Banana Trees are there in the plantation?")
|
||||
.answer("33")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("OK CO")
|
||||
.npc("Cook")
|
||||
.location(new WorldPoint(3207, 3214, 0))
|
||||
.area("Ground floor of Lumbridge Castle")
|
||||
.question("How many cannons does Lumbridge Castle have?")
|
||||
.answer("9")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("OUR OWN NEEDS")
|
||||
.npc("Nurse Wooned")
|
||||
.location(new WorldPoint(1511, 3619, 0))
|
||||
.area("Shayzien Infirmary")
|
||||
.question("How many wounded soldiers are there in the camp?")
|
||||
.answer("16")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("PACINNG A TAIE")
|
||||
.npc("Captain Ginea")
|
||||
.location(new WorldPoint(1504, 3632, 0))
|
||||
.area("Tent east of Shayzien Encampment war tent")
|
||||
.question("1 soldier can deal with 6 lizardmen. How many soldiers do we need for an army of 678 lizardmen?")
|
||||
.answer("113")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("PEAK REFLEX")
|
||||
.npc("Flax keeper")
|
||||
.location(new WorldPoint(2744, 3444, 0))
|
||||
.area("Flax field south of Seers Village")
|
||||
.question("If I have 1014 flax, and I spin a third of them into bowstring, how many flax do I have left?")
|
||||
.answer("676")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("PEATY PERT")
|
||||
.npc("Party Pete")
|
||||
.location(new WorldPoint(3047, 3376, 0))
|
||||
.area("Falador Party Room")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("QUIT HORRIBLE TYRANT")
|
||||
.npc("Brother Tranquility")
|
||||
.location(new WorldPoint(3681, 2963, 0))
|
||||
.area("Mos Le'Harmless or Harmony Island")
|
||||
.question("If I have 49 bottles of rum to share between 7 pirates, how many would each pirate get?")
|
||||
.answer("7")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("QUE SIR")
|
||||
.npc("Squire")
|
||||
.location(new WorldPoint(2975, 3343, 0))
|
||||
.area("Falador Castle Courtyard")
|
||||
.question("White knights are superior to black knights. 2 white knights can handle 3 black knights. How many knights do we need for an army of 981 black knights?")
|
||||
.answer("654")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("R AK MI")
|
||||
.npc("Karim")
|
||||
.location(new WorldPoint(3273, 3181, 0))
|
||||
.area("Al Kharid Kebab shop")
|
||||
.question("I have 16 kebabs, I eat one myself and then share the rest equally between 3 friends. How many do they have each?")
|
||||
.answer("5")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("RAT MAT WITHIN")
|
||||
.npc("Martin Thwait")
|
||||
.location(new WorldPoint(2906, 3537, 0))
|
||||
.area("Rogues' Den")
|
||||
.question("How many natural fires burn in Rogue's Den?")
|
||||
.answer("2")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("RATAI")
|
||||
.npc("Taria")
|
||||
.location(new WorldPoint(2940, 3223, 0))
|
||||
.area("Rimmington bush patch")
|
||||
.question("How many buildings are there in Rimmington?")
|
||||
.answer("7")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("R SLICER")
|
||||
.npc("Clerris")
|
||||
.location(new WorldPoint(1761, 3850, 0))
|
||||
.area("Arceuus mine, Zeah")
|
||||
.question("If I have 1,000 blood runes, and cast 131 ice barrage spells, how many blood runes do I have left?")
|
||||
.answer("738")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("RIP MAUL")
|
||||
.npc("Primula")
|
||||
.location(new WorldPoint(2454, 2853, 1))
|
||||
.area("Myth's Guild, first floor")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("SAND NUT")
|
||||
.npc("Dunstan")
|
||||
.location(new WorldPoint(2919, 3574, 0))
|
||||
.area("Anvil in north east Burthorpe")
|
||||
.question("How much smithing experience does one receive for smelting a blurite bar?")
|
||||
.answer("8")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("SLAM DUSTER GRAIL")
|
||||
.npc("Guildmaster Lars")
|
||||
.location(new WorldPoint(1649, 3498, 0))
|
||||
.area("Woodcutting guild, Zeah")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("SLIDE WOMAN")
|
||||
.npc("Wise Old Man")
|
||||
.location(new WorldPoint(3088, 3253, 0))
|
||||
.area("Draynor Village")
|
||||
.question("How many bookcases are in the Wise Old Man's house?")
|
||||
.answer("28")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("SNAKES SO I SAIL")
|
||||
.npc("Lisse Isaakson")
|
||||
.location(new WorldPoint(2351, 3801, 0))
|
||||
.area("Neitiznot")
|
||||
.question("How many arctic logs are required to make a large fremennik round shield?")
|
||||
.answer("2")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("TAMED ROCKS")
|
||||
.npc("Dockmaster")
|
||||
.location(new WorldPoint(1822, 3739, 0))
|
||||
.area("Port Piscarilius, NE of General store")
|
||||
.question("What is the cube root of 125?")
|
||||
.answer("5")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("TEN WIGS ON")
|
||||
.npc("Wingstone")
|
||||
.location(new WorldPoint(3389, 2877, 0))
|
||||
.area("Between Nardah & Agility Pyramid")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("THICKNO")
|
||||
.npc("Hickton")
|
||||
.location(new WorldPoint(2822, 3442, 0))
|
||||
.area("Catherby fletching shop")
|
||||
.question("How many ranges are there in Catherby?")
|
||||
.answer("2")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("TWENTY CURE IRON")
|
||||
.npc("New Recruit Tony")
|
||||
.location(new WorldPoint(1503, 3553, 0))
|
||||
.area("Shayzien Graveyard")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("UNLEASH NIGHT MIST")
|
||||
.npc("Sigli the Huntsman")
|
||||
.location(new WorldPoint(2660, 3654, 0))
|
||||
.area("Rellekka")
|
||||
.question("What is the combined slayer requirement of every monster in the slayer cave?")
|
||||
.answer("302")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("VESTE")
|
||||
.npc("Steve")
|
||||
.location(new WorldPoint(2432, 3423, 0))
|
||||
.area("Upstairs Wyvern Area or Stronghold Slayer Cave")
|
||||
.question("How many farming patches are there in Gnome stronghold?")
|
||||
.answer("2")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("VEIL VEDA")
|
||||
.npc("Evil Dave")
|
||||
.location(new WorldPoint(3079, 9892, 0))
|
||||
.area("Doris' basement, Edgeville")
|
||||
.question("What is 333 multiplied by 2?")
|
||||
.answer("666")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("WOO AN EGG KIWI")
|
||||
.npc("Awowogei")
|
||||
.objectId(ObjectID.AWOWOGEI)
|
||||
.location(new WorldPoint(2802, 2765, 0))
|
||||
.area("Ape Atoll")
|
||||
.question("If I have 303 bananas, and share them between 31 friends evenly, only handing out full bananas. How many will I have left over?")
|
||||
.answer("24")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("MAJORS LAVA BADS AIR")
|
||||
.npc("Ambassador Alvijar")
|
||||
.location(new WorldPoint(2736, 5351, 1))
|
||||
.area("Dorgesh-Kaan, NE Middle Level")
|
||||
.question("Double the miles before the initial Dorgeshuun veteran.")
|
||||
.answer("2505")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("AN EARL")
|
||||
.npc("Ranael")
|
||||
.location(new WorldPoint(3315, 3163, 0))
|
||||
.area("Al Kharid skirt shop")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("CARPET AHOY")
|
||||
.npc("Apothecary")
|
||||
.location(new WorldPoint(3195, 3404, 0))
|
||||
.area("Southwest Varrock")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("DISORDER")
|
||||
.npc("Sedridor")
|
||||
.location(new WorldPoint(3102, 9570, 0))
|
||||
.area("Wizards' Tower basement")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("I CORD")
|
||||
.npc("Doric")
|
||||
.location(new WorldPoint(2951, 3450, 0))
|
||||
.area("North of Falador")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("IN BAR")
|
||||
.npc("Brian")
|
||||
.location(new WorldPoint(3026, 3246, 0))
|
||||
.area("Port Sarim battleaxe shop")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("RAIN COVE")
|
||||
.npc("Veronica")
|
||||
.location(new WorldPoint(3110, 3330, 0))
|
||||
.area("Outside Draynor Manor")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("RUG DETER")
|
||||
.npc("Gertrude")
|
||||
.location(new WorldPoint(3151, 3412, 0))
|
||||
.area("West of Varrock, south of the Cooks' Guild")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("SIR SHARE RED")
|
||||
.npc("Hairdresser")
|
||||
.location(new WorldPoint(2944, 3381, 0))
|
||||
.area("Western Falador")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("TAUNT ROOF")
|
||||
.npc("Fortunato")
|
||||
.location(new WorldPoint(3080, 3250, 0))
|
||||
.area("Draynor Village Market")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("HICK JET")
|
||||
.npc("Jethick")
|
||||
.location(new WorldPoint(2541, 3305, 0))
|
||||
.area("West Ardougne")
|
||||
.question("How many graves are there in the city graveyard?")
|
||||
.answer("38")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("RUE GO")
|
||||
.npc("Goreu")
|
||||
.location(new WorldPoint(2335, 3162, 0))
|
||||
.area("Lletya")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("BRUCIE CATNAP")
|
||||
.npc("Captain Bruce")
|
||||
.location(new WorldPoint(1520, 3558, 0))
|
||||
.area("Graveyard of Heroes")
|
||||
.build(),
|
||||
AnagramClue.builder()
|
||||
.text("UESNKRL NRIEDDO")
|
||||
.npc("Drunken soldier")
|
||||
.location(new WorldPoint(1551, 3565, 0))
|
||||
.area("Shayzien pub")
|
||||
.question("If 13 Shayzien Soldiers kill 46 Lizardmen each in a day, how many Lizardmen have they killed in total in a single day?")
|
||||
.answer("598")
|
||||
.build()
|
||||
);
|
||||
|
||||
private final String text;
|
||||
@@ -161,29 +779,8 @@ public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueSc
|
||||
private final String question;
|
||||
@Nullable
|
||||
private final String answer;
|
||||
private int objectId;
|
||||
|
||||
private AnagramClue(String text, String npc, WorldPoint location, String area)
|
||||
{
|
||||
this(text, npc, location, area, null, null);
|
||||
}
|
||||
|
||||
private AnagramClue(String text, String npc, WorldPoint location, String area, @Nullable String question, @Nullable String answer)
|
||||
{
|
||||
this.text = text;
|
||||
this.npc = npc;
|
||||
this.location = location;
|
||||
this.area = area;
|
||||
this.question = question;
|
||||
this.answer = answer;
|
||||
this.objectId = -1;
|
||||
}
|
||||
|
||||
private AnagramClue(String text, String npc, int objectId, WorldPoint location, String area, String question, String answer)
|
||||
{
|
||||
this(text, npc, location, area, question, answer);
|
||||
this.objectId = objectId;
|
||||
}
|
||||
@Builder.Default
|
||||
private final int objectId = -1;
|
||||
|
||||
@Override
|
||||
public void makeOverlayHint(PanelComponent panelComponent, ClueScrollPlugin plugin)
|
||||
@@ -261,12 +858,12 @@ public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueSc
|
||||
@Override
|
||||
public String[] getNpcs()
|
||||
{
|
||||
return new String[] {npc};
|
||||
return new String[]{npc};
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] getObjectIds()
|
||||
{
|
||||
return new int[] {objectId};
|
||||
return new int[]{objectId};
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -24,10 +24,10 @@
|
||||
*/
|
||||
package net.runelite.client.plugins.cluescrolls.clues;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics2D;
|
||||
import java.util.Set;
|
||||
import java.util.List;
|
||||
import javax.annotation.Nullable;
|
||||
import lombok.Getter;
|
||||
import net.runelite.api.NPC;
|
||||
@@ -43,7 +43,7 @@ import net.runelite.client.ui.overlay.components.TitleComponent;
|
||||
@Getter
|
||||
public class CipherClue extends ClueScroll implements TextClueScroll, NpcClueScroll, LocationClueScroll
|
||||
{
|
||||
private static final Set<CipherClue> CLUES = ImmutableSet.of(
|
||||
private static final List<CipherClue> CLUES = ImmutableList.of(
|
||||
new CipherClue("BMJ UIF LFCBC TFMMFS", "Ali the Kebab seller", new WorldPoint(3354, 2974, 0), "Pollnivneach", "How many coins would you need to purchase 133 kebabs from me?", "399"),
|
||||
new CipherClue("GUHCHO", "Drezel", new WorldPoint(3440, 9895, 0), "Paterdomus", "Please solve this for x: 7x - 28=21", "7"),
|
||||
new CipherClue("HQNM LZM STSNQ", "Iron Man tutor", new WorldPoint(3227, 3227, 0), "Outside Lumbridge castle", "How many snakeskins are needed in order to craft 44 boots, 29 vambraces and 34 bandanas?", "666"),
|
||||
|
||||
+3
-3
@@ -24,10 +24,10 @@
|
||||
*/
|
||||
package net.runelite.client.plugins.cluescrolls.clues;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics2D;
|
||||
import java.util.Set;
|
||||
import java.util.List;
|
||||
import javax.annotation.Nullable;
|
||||
import lombok.Getter;
|
||||
import net.runelite.api.NPC;
|
||||
@@ -51,7 +51,7 @@ import net.runelite.client.ui.overlay.components.TitleComponent;
|
||||
@Getter
|
||||
public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueScroll, ObjectClueScroll
|
||||
{
|
||||
public static final Set<CrypticClue> CLUES = ImmutableSet.of(
|
||||
public static final List<CrypticClue> CLUES = ImmutableList.of(
|
||||
new CrypticClue("Show this to Sherlock.", "Sherlock", new WorldPoint(2733, 3415, 0), "Sherlock is located to the east of the Sorcerer's tower in Seers' Village."),
|
||||
new CrypticClue("Talk to the bartender of the Rusty Anchor in Port Sarim.", "Bartender", new WorldPoint(3045, 3256, 0), "The Rusty Anchor is located in the north of Port Sarim."),
|
||||
new CrypticClue("The keeper of Melzars... Spare? Skeleton? Anar?", "Oziach", new WorldPoint(3068, 3516, 0), "Speak to Oziach in Edgeville."),
|
||||
|
||||
+3
-3
@@ -24,11 +24,11 @@
|
||||
*/
|
||||
package net.runelite.client.plugins.cluescrolls.clues;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Polygon;
|
||||
import java.util.Set;
|
||||
import java.util.List;
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import lombok.Getter;
|
||||
@@ -100,7 +100,7 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu
|
||||
item(TZKAL_SLAYER_HELMET_I_25914)
|
||||
);
|
||||
|
||||
private static final Set<EmoteClue> CLUES = ImmutableSet.of(
|
||||
private static final List<EmoteClue> CLUES = ImmutableList.of(
|
||||
new EmoteClue("Beckon on the east coast of the Kharazi Jungle. Beware of double agents! Equip any vestment stole and a heraldic rune shield.", "Kharazi Jungle", NORTHEAST_CORNER_OF_THE_KHARAZI_JUNGLE, new WorldPoint(2954, 2933, 0), DOUBLE_AGENT_108, BECKON, any("Any stole", item(GUTHIX_STOLE), item(SARADOMIN_STOLE), item(ZAMORAK_STOLE), item(ARMADYL_STOLE), item(BANDOS_STOLE), item(ANCIENT_STOLE)), any("Any heraldic rune shield", item(RUNE_SHIELD_H1), item(RUNE_SHIELD_H2), item(RUNE_SHIELD_H3), item(RUNE_SHIELD_H4), item(RUNE_SHIELD_H5))),
|
||||
new EmoteClue("Cheer in the Barbarian Agility Arena. Headbang before you talk to me. Equip a steel platebody, maple shortbow and a Wilderness cape.", "Barbarian Outpost", BARBARIAN_OUTPOST_OBSTACLE_COURSE, new WorldPoint(2552, 3556, 0), CHEER, HEADBANG, item(STEEL_PLATEBODY), item(MAPLE_SHORTBOW), range("Any team cape", TEAM1_CAPE, TEAM50_CAPE)),
|
||||
new EmoteClue("Bow upstairs in the Edgeville Monastery. Equip a completed prayer book.", "Edgeville Monastery", SOUTHEAST_CORNER_OF_THE_MONASTERY, new WorldPoint(3056, 3484, 1), BOW, any("Any god book", item(HOLY_BOOK), item(BOOK_OF_BALANCE), item(UNHOLY_BOOK), item(BOOK_OF_LAW), item(BOOK_OF_WAR), item(BOOK_OF_DARKNESS))),
|
||||
|
||||
+3
-3
@@ -24,10 +24,10 @@
|
||||
*/
|
||||
package net.runelite.client.plugins.cluescrolls.clues;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics2D;
|
||||
import java.util.Set;
|
||||
import java.util.List;
|
||||
import lombok.Getter;
|
||||
import net.runelite.api.coords.LocalPoint;
|
||||
import net.runelite.api.coords.WorldPoint;
|
||||
@@ -41,7 +41,7 @@ import net.runelite.client.ui.overlay.components.TitleComponent;
|
||||
@Getter
|
||||
public class FairyRingClue extends ClueScroll implements TextClueScroll, LocationClueScroll
|
||||
{
|
||||
private static final Set<FairyRingClue> CLUES = ImmutableSet.of(
|
||||
private static final List<FairyRingClue> CLUES = ImmutableList.of(
|
||||
new FairyRingClue("A I R 2 3 3 1", new WorldPoint(2702, 3246, 0)),
|
||||
new FairyRingClue("A I Q 0 4 4 0", new WorldPoint(3000, 3110, 0)),
|
||||
new FairyRingClue("A L P 1 1 4 0", new WorldPoint(2504, 3633, 0)),
|
||||
|
||||
+3
-3
@@ -24,10 +24,10 @@
|
||||
*/
|
||||
package net.runelite.client.plugins.cluescrolls.clues;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics2D;
|
||||
import java.util.Set;
|
||||
import java.util.List;
|
||||
import lombok.Getter;
|
||||
import static net.runelite.api.ItemID.*;
|
||||
import net.runelite.api.ObjectComposition;
|
||||
@@ -58,7 +58,7 @@ public class MapClue extends ClueScroll implements ObjectClueScroll
|
||||
public static final String WIZARDS_TOWER_DIS = "On the south side of the Wizard's Tower (DIS)";
|
||||
public static final String SOUTH_OF_DRAYNOR_BANK = "South of Draynor Village Bank";
|
||||
|
||||
private static final Set<MapClue> CLUES = ImmutableSet.of(
|
||||
private static final List<MapClue> CLUES = ImmutableList.of(
|
||||
new MapClue(CLUE_SCROLL_EASY_12179, new WorldPoint(3300, 3291, 0), "Al Kharid mine"),
|
||||
new MapClue(CLUE_SCROLL_EASY_2713, new WorldPoint(3166, 3361, 0), CHAMPIONS_GUILD),
|
||||
new MapClue(CLUE_SCROLL_EASY_2716, new WorldPoint(3290, 3374, 0), VARROCK_EAST_MINE),
|
||||
|
||||
+2
-3
@@ -24,12 +24,11 @@
|
||||
*/
|
||||
package net.runelite.client.plugins.cluescrolls.clues;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics2D;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
@@ -129,7 +128,7 @@ public class SkillChallengeClue extends ClueScroll implements NpcClueScroll, Nam
|
||||
item(ItemID.IMCANDO_HAMMER)
|
||||
);
|
||||
|
||||
private static final Set<SkillChallengeClue> CLUES = ImmutableSet.of(
|
||||
private static final List<SkillChallengeClue> CLUES = ImmutableList.of(
|
||||
// Charlie Tasks
|
||||
new SkillChallengeClue("Cook a Pike", "i need to cook charlie a pike.", "i need to take the cooked pike to charlie.", item(ItemID.PIKE), item(ItemID.RAW_PIKE)),
|
||||
new SkillChallengeClue("Cook a Trout", "i need to cook charlie a trout.", "i need to take the cooked trout to charlie.", item(ItemID.TROUT), item(ItemID.RAW_TROUT)),
|
||||
|
||||
+2
-6
@@ -427,9 +427,7 @@ class DevToolsOverlay extends Overlay
|
||||
|
||||
private void renderProjectiles(Graphics2D graphics)
|
||||
{
|
||||
List<Projectile> projectiles = client.getProjectiles();
|
||||
|
||||
for (Projectile projectile : projectiles)
|
||||
for (Projectile projectile : client.getProjectiles())
|
||||
{
|
||||
int projectileId = projectile.getId();
|
||||
String text = "(ID: " + projectileId + ")";
|
||||
@@ -446,9 +444,7 @@ class DevToolsOverlay extends Overlay
|
||||
|
||||
private void renderGraphicsObjects(Graphics2D graphics)
|
||||
{
|
||||
List<GraphicsObject> graphicsObjects = client.getGraphicsObjects();
|
||||
|
||||
for (GraphicsObject graphicsObject : graphicsObjects)
|
||||
for (GraphicsObject graphicsObject : client.getGraphicsObjects())
|
||||
{
|
||||
LocalPoint lp = graphicsObject.getLocation();
|
||||
Polygon poly = Perspective.getCanvasTilePoly(client, lp);
|
||||
|
||||
+4
-2
@@ -233,8 +233,10 @@ public class DiscordPlugin extends Plugin
|
||||
return;
|
||||
}
|
||||
|
||||
CharMatcher matcher = CharMatcher.anyOf("abcdef0123456789");
|
||||
if (!matcher.matchesAllOf(event.getUserId()) || !matcher.matchesAllOf(event.getAvatarId()))
|
||||
final CharMatcher matcher = CharMatcher.anyOf("abcdef0123456789");
|
||||
|
||||
// animated avatars contain a_ as prefix so we need to get rid of that first to check against matcher
|
||||
if (!matcher.matchesAllOf(event.getUserId()) || !matcher.matchesAllOf(event.getAvatarId().replace("a_", "")))
|
||||
{
|
||||
// userid is actually a snowflake, but the matcher is sufficient
|
||||
return;
|
||||
|
||||
+1
@@ -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,
|
||||
|
||||
+22
@@ -131,6 +131,17 @@ public interface GroundItemsConfig extends Config
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "deprioritizeHiddenItems",
|
||||
name = "Deprioritize Menu Hidden Items",
|
||||
description = "Depriotizies the menu options for items which are hidden, requiring a right click to pick up.",
|
||||
position = 5
|
||||
)
|
||||
default boolean deprioritizeHiddenItems()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "highlightTiles",
|
||||
@@ -425,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;
|
||||
}
|
||||
}
|
||||
|
||||
+19
-27
@@ -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
|
||||
{
|
||||
@@ -116,8 +116,6 @@ public class GroundItemsPlugin extends Plugin
|
||||
// ItemID for coins
|
||||
private static final int COINS = ItemID.COINS_995;
|
||||
|
||||
private static final String TELEGRAB_TEXT = ColorUtil.wrapWithColorTag("Telekinetic Grab", Color.GREEN) + ColorUtil.prependColorTag(" -> ", Color.WHITE);
|
||||
|
||||
@Getter(AccessLevel.PACKAGE)
|
||||
@Setter(AccessLevel.PACKAGE)
|
||||
private Map.Entry<Rectangle, GroundItem> textBoxBounds;
|
||||
@@ -481,14 +479,11 @@ public class GroundItemsPlugin extends Plugin
|
||||
@Subscribe
|
||||
public void onMenuEntryAdded(MenuEntryAdded event)
|
||||
{
|
||||
if (config.itemHighlightMode() == ItemHighlightMode.MENU || config.itemHighlightMode() == ItemHighlightMode.BOTH)
|
||||
MenuAction type = MenuAction.of(event.getType());
|
||||
if (type == MenuAction.GROUND_ITEM_FIRST_OPTION || type == MenuAction.GROUND_ITEM_SECOND_OPTION ||
|
||||
type == MenuAction.GROUND_ITEM_THIRD_OPTION || type == MenuAction.GROUND_ITEM_FOURTH_OPTION ||
|
||||
type == MenuAction.GROUND_ITEM_FIFTH_OPTION || type == MenuAction.SPELL_CAST_ON_GROUND_ITEM)
|
||||
{
|
||||
final boolean telegrabEntry = event.getOption().equals("Cast") && event.getTarget().startsWith(TELEGRAB_TEXT) && event.getType() == MenuAction.SPELL_CAST_ON_GROUND_ITEM.getId();
|
||||
if (!(event.getOption().equals("Take") && event.getType() == MenuAction.GROUND_ITEM_THIRD_OPTION.getId()) && !telegrabEntry)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final int itemId = event.getIdentifier();
|
||||
final int sceneX = event.getActionParam0();
|
||||
final int sceneY = event.getActionParam1();
|
||||
@@ -507,33 +502,24 @@ public class GroundItemsPlugin extends Plugin
|
||||
final Color color = getItemColor(highlighted, hidden);
|
||||
final boolean canBeRecolored = highlighted != null || (hidden != null && config.recolorMenuHiddenItems());
|
||||
|
||||
if (color != null && canBeRecolored && !color.equals(config.defaultColor()))
|
||||
if ((config.itemHighlightMode() == ItemHighlightMode.MENU || config.itemHighlightMode() == ItemHighlightMode.BOTH) &&
|
||||
(color != null && canBeRecolored && !color.equals(config.defaultColor())))
|
||||
{
|
||||
final MenuHighlightMode mode = config.menuHighlightMode();
|
||||
|
||||
if (mode == BOTH || mode == OPTION)
|
||||
{
|
||||
final String optionText = telegrabEntry ? "Cast" : "Take";
|
||||
lastEntry.setOption(ColorUtil.prependColorTag(optionText, color));
|
||||
lastEntry.setOption(ColorUtil.prependColorTag(lastEntry.getOption(), color));
|
||||
}
|
||||
|
||||
if (mode == BOTH || mode == NAME)
|
||||
{
|
||||
// <col=ff9040>Logs
|
||||
// <col=00ff00>Telekinetic Grab</col><col=ffffff> -> <col=ff9040>Logs
|
||||
String target = lastEntry.getTarget();
|
||||
|
||||
if (telegrabEntry)
|
||||
{
|
||||
target = target.substring(TELEGRAB_TEXT.length());
|
||||
}
|
||||
|
||||
target = ColorUtil.prependColorTag(target.substring(target.indexOf('>') + 1), color);
|
||||
|
||||
if (telegrabEntry)
|
||||
{
|
||||
target = TELEGRAB_TEXT + target;
|
||||
}
|
||||
|
||||
lastEntry.setTarget(target);
|
||||
int i = target.lastIndexOf('>');
|
||||
lastEntry.setTarget(target.substring(0, i - 11) + ColorUtil.colorTag(color) + target.substring(i + 1));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -541,6 +527,11 @@ public class GroundItemsPlugin extends Plugin
|
||||
{
|
||||
lastEntry.setTarget(lastEntry.getTarget() + " (" + quantity + ")");
|
||||
}
|
||||
|
||||
if (hidden != null && highlighted == null && config.deprioritizeHiddenItems())
|
||||
{
|
||||
lastEntry.setDeprioritized(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -800,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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+68
-13
@@ -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<Lootbeam, Model> modelSupplier;
|
||||
private final Function<Lootbeam, Animation> animationSupplier;
|
||||
}
|
||||
|
||||
private static Function<Lootbeam, Animation> 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;
|
||||
});
|
||||
}
|
||||
|
||||
+13
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+28
@@ -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();
|
||||
|
||||
+2
-1
@@ -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<ItemChargeConfig> enabled;
|
||||
}
|
||||
|
||||
+4
@@ -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),
|
||||
|
||||
+2
-1
@@ -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;
|
||||
|
||||
+1
@@ -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),
|
||||
|
||||
+1
@@ -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;
|
||||
|
||||
|
||||
+29
@@ -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",
|
||||
|
||||
+6
-1
@@ -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<Boolean> 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);
|
||||
|
||||
+8
-7
@@ -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
|
||||
|
||||
@@ -830,7 +830,6 @@ public class RaidsPlugin extends Plugin
|
||||
log.debug("Setting response {}", response);
|
||||
final MessageNode messageNode = chatMessage.getMessageNode();
|
||||
messageNode.setRuneLiteFormatMessage(response);
|
||||
chatMessageManager.update(messageNode);
|
||||
client.refreshChat();
|
||||
}
|
||||
|
||||
|
||||
+1
@@ -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),
|
||||
|
||||
@@ -79,7 +79,6 @@ import net.runelite.client.chat.ChatClient;
|
||||
import net.runelite.client.chat.ChatColorType;
|
||||
import net.runelite.client.chat.ChatCommandManager;
|
||||
import net.runelite.client.chat.ChatMessageBuilder;
|
||||
import net.runelite.client.chat.ChatMessageManager;
|
||||
import net.runelite.client.config.ConfigManager;
|
||||
import net.runelite.client.eventbus.Subscribe;
|
||||
import net.runelite.client.events.ChatInput;
|
||||
@@ -161,9 +160,6 @@ public class SlayerPlugin extends Plugin
|
||||
@Inject
|
||||
private TargetWeaknessOverlay targetWeaknessOverlay;
|
||||
|
||||
@Inject
|
||||
private ChatMessageManager chatMessageManager;
|
||||
|
||||
@Inject
|
||||
private ChatCommandManager chatCommandManager;
|
||||
|
||||
@@ -875,7 +871,6 @@ public class SlayerPlugin extends Plugin
|
||||
|
||||
final MessageNode messageNode = chatMessage.getMessageNode();
|
||||
messageNode.setRuneLiteFormatMessage(response);
|
||||
chatMessageManager.update(messageNode);
|
||||
client.refreshChat();
|
||||
}
|
||||
|
||||
|
||||
-5
@@ -69,7 +69,6 @@ import net.runelite.api.events.GameTick;
|
||||
import net.runelite.api.events.ItemContainerChanged;
|
||||
import net.runelite.api.events.VarbitChanged;
|
||||
import net.runelite.client.Notifier;
|
||||
import net.runelite.client.chat.ChatMessageManager;
|
||||
import net.runelite.client.config.ConfigManager;
|
||||
import net.runelite.client.eventbus.Subscribe;
|
||||
import net.runelite.client.plugins.Plugin;
|
||||
@@ -105,9 +104,6 @@ public class WintertodtPlugin extends Plugin
|
||||
@Inject
|
||||
private WintertodtConfig config;
|
||||
|
||||
@Inject
|
||||
private ChatMessageManager chatMessageManager;
|
||||
|
||||
@Getter(AccessLevel.PACKAGE)
|
||||
private WintertodtActivity currentActivity = WintertodtActivity.IDLE;
|
||||
|
||||
@@ -314,7 +310,6 @@ public class WintertodtPlugin extends Plugin
|
||||
|
||||
// Recolor message for damage notification
|
||||
messageNode.setRuneLiteFormatMessage(ColorUtil.wrapWithColorTag(messageNode.getValue(), config.damageNotificationColor()));
|
||||
chatMessageManager.update(messageNode);
|
||||
client.refreshChat();
|
||||
|
||||
// all actions except woodcutting and idle are interrupted from damage
|
||||
|
||||
+2
-1
@@ -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)),
|
||||
|
||||
+1
-1
@@ -33,6 +33,7 @@ import net.runelite.api.Client;
|
||||
import net.runelite.api.GameObject;
|
||||
import net.runelite.api.GameState;
|
||||
import static net.runelite.api.GraphicID.GRAPHICS_OBJECT_ROCKFALL;
|
||||
import static net.runelite.api.GraphicID.ZALCANO_PROJECTILE_FIREBALL;
|
||||
import net.runelite.api.GraphicsObject;
|
||||
import net.runelite.api.Hitsplat;
|
||||
import net.runelite.api.NPC;
|
||||
@@ -40,7 +41,6 @@ import net.runelite.api.NpcID;
|
||||
import static net.runelite.api.NpcID.ZALCANO;
|
||||
import net.runelite.api.ObjectID;
|
||||
import net.runelite.api.Projectile;
|
||||
import static net.runelite.api.ProjectileID.ZALCANO_PROJECTILE_FIREBALL;
|
||||
import net.runelite.api.VarPlayer;
|
||||
import net.runelite.api.coords.LocalPoint;
|
||||
import net.runelite.api.coords.WorldPoint;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -35,7 +35,7 @@ public class JagexColors
|
||||
* Colors of chat text when displayed on an opaque background.
|
||||
*/
|
||||
public static final Color CHAT_PUBLIC_TEXT_OPAQUE_BACKGROUND = Color.BLUE;
|
||||
public static final Color CHAT_PRIVATE_MESSAGE_TEXT_OPAQUE_BACKGROUND = Color.CYAN;
|
||||
public static final Color CHAT_PRIVATE_MESSAGE_TEXT_OPAQUE_BACKGROUND = new Color(0x7F0000); // in chatbox, not split chat
|
||||
public static final Color CHAT_FC_TEXT_OPAQUE_BACKGROUND = new Color(127, 0, 0);
|
||||
public static final Color CHAT_FC_NAME_OPAQUE_BACKGROUND = Color.BLUE;
|
||||
public static final Color CHAT_GAME_EXAMINE_TEXT_OPAQUE_BACKGROUND = Color.BLACK;
|
||||
@@ -45,7 +45,7 @@ public class JagexColors
|
||||
* Colors of chat text when displayed on a transparent background.
|
||||
*/
|
||||
public static final Color CHAT_PUBLIC_TEXT_TRANSPARENT_BACKGROUND = new Color(144, 144, 255);
|
||||
public static final Color CHAT_PRIVATE_MESSAGE_TEXT_TRANSPARENT_BACKGROUND = Color.CYAN;
|
||||
public static final Color CHAT_PRIVATE_MESSAGE_TEXT_TRANSPARENT_BACKGROUND = new Color(0xBF2020); // in chatbox, not split chat
|
||||
public static final Color CHAT_FC_TEXT_TRANSPARENT_BACKGROUND = new Color(239, 80, 80);
|
||||
public static final Color CHAT_FC_NAME_TRANSPARENT_BACKGROUND = new Color(144, 112, 255);
|
||||
public static final Color CHAT_GAME_EXAMINE_TEXT_TRANSPARENT_BACKGROUND = Color.WHITE;
|
||||
|
||||
@@ -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
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 158 KiB |
@@ -440,14 +440,16 @@ LABEL391:
|
||||
if_icmpeq LABEL406
|
||||
jump LABEL1751
|
||||
LABEL406:
|
||||
iconst 0 ; splitpmbox
|
||||
iload 10 ; message uid
|
||||
sload 17 ; message channel
|
||||
sload 16 ; message name
|
||||
sload 18 ; message
|
||||
sload 21 ; message timestamp
|
||||
sconst "chatMessageBuilding"
|
||||
runelite_callback
|
||||
runelite_callback
|
||||
pop_int ; pop uid
|
||||
pop_int ; splitpmbox
|
||||
sstore 21 ; message timestamp
|
||||
sstore 18 ; message
|
||||
sstore 16 ; message name
|
||||
|
||||
@@ -413,14 +413,16 @@ CHAT_FILTER:
|
||||
if_icmpeq LABEL369 ; Check if we are building this message
|
||||
jump LABEL555
|
||||
LABEL369:
|
||||
iconst 1 ; splitpmbox
|
||||
iload 12 ; message uid
|
||||
sconst "" ; message channel
|
||||
sload 1 ; message name
|
||||
sload 0 ; message
|
||||
sload 2 ; message timestamp
|
||||
sconst "chatMessageBuilding"
|
||||
runelite_callback
|
||||
runelite_callback
|
||||
pop_int ; uid
|
||||
pop_int ; splitpmbox
|
||||
sstore 2 ; message timestamp
|
||||
sstore 0 ; message
|
||||
sstore 1 ; message name
|
||||
|
||||
@@ -1 +1 @@
|
||||
C85469C2529D794C523505679F14AA20E988513E8FBAF249E41F4760382B4BBB
|
||||
49856301491D162091426F3F788EA13FDBE3E5BE758471537F5E7AB7A588066B
|
||||
@@ -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
|
||||
|
||||
@@ -1 +1 @@
|
||||
A4641387DC1A542BDEB6F3728D23944F968EF2FD3EA2868B5B6AAF6961D0C6E0
|
||||
6D7631FB41674C37039A83E08EF9D82B807CC0438AC68FDF5600B3547140298C
|
||||
File diff suppressed because it is too large
Load Diff
@@ -43,7 +43,6 @@ import org.junit.runner.RunWith;
|
||||
import static org.mockito.ArgumentMatchers.anyLong;
|
||||
import org.mockito.Mock;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
@@ -86,6 +85,7 @@ public class ChatMessageManagerTest
|
||||
""
|
||||
};
|
||||
istack = new int[]{
|
||||
0, // splitpmbox
|
||||
1
|
||||
};
|
||||
when(client.getStringStack()).thenReturn(sstack);
|
||||
@@ -183,12 +183,8 @@ public class ChatMessageManagerTest
|
||||
.append("%)")
|
||||
.build();
|
||||
|
||||
MessageNode messageNode = mock(MessageNode.class);
|
||||
when(messageNode.getType()).thenReturn(ChatMessageType.FRIENDSCHATNOTIFICATION);
|
||||
when(messageNode.getRuneLiteFormatMessage()).thenReturn(chatMessage);
|
||||
String formattedMessage = chatMessageManager.formatRuneLiteMessage(chatMessage, ChatMessageType.FRIENDSCHATNOTIFICATION, false);
|
||||
|
||||
chatMessageManager.update(messageNode);
|
||||
|
||||
verify(messageNode).setValue("<col=000000>Total points: <col=ff0000>42<col=000000>, Personal points: <col=ff0000>43<col=000000> (<col=ff0000>44<col=000000>%)");
|
||||
assertEquals("<col=000000>Total points: <col=ff0000>42<col=000000>, Personal points: <col=ff0000>43<col=000000> (<col=ff0000>44<col=000000>%)", formattedMessage);
|
||||
}
|
||||
}
|
||||
-5
@@ -51,7 +51,6 @@ import static net.runelite.api.widgets.WidgetID.DIARY_QUEST_GROUP_ID;
|
||||
import net.runelite.api.widgets.WidgetInfo;
|
||||
import net.runelite.client.chat.ChatClient;
|
||||
import net.runelite.client.chat.ChatCommandManager;
|
||||
import net.runelite.client.chat.ChatMessageManager;
|
||||
import net.runelite.client.config.ChatColorConfig;
|
||||
import net.runelite.client.config.ConfigManager;
|
||||
import net.runelite.client.config.RuneLiteConfig;
|
||||
@@ -105,10 +104,6 @@ public class ChatCommandsPluginTest
|
||||
@Bind
|
||||
HiscoreClient hiscoreClient;
|
||||
|
||||
@Mock
|
||||
@Bind
|
||||
ChatMessageManager chatMessageManager;
|
||||
|
||||
@Mock
|
||||
@Bind
|
||||
ChatClient chatClient;
|
||||
|
||||
+2
-7
@@ -37,14 +37,13 @@ import net.runelite.api.MessageNode;
|
||||
import net.runelite.api.Player;
|
||||
import net.runelite.api.events.ChatMessage;
|
||||
import net.runelite.client.Notifier;
|
||||
import net.runelite.client.chat.ChatMessageManager;
|
||||
import net.runelite.client.util.Text;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import org.mockito.Mock;
|
||||
import static org.mockito.Mockito.lenient;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.times;
|
||||
@@ -63,10 +62,6 @@ public class ChatNotificationsPluginTest
|
||||
@Bind
|
||||
private ChatNotificationsConfig config;
|
||||
|
||||
@Mock
|
||||
@Bind
|
||||
private ChatMessageManager chatMessageManager;
|
||||
|
||||
@Mock
|
||||
@Bind
|
||||
private Notifier notifier;
|
||||
@@ -307,7 +302,7 @@ public class ChatNotificationsPluginTest
|
||||
ChatMessage chatMessage = new ChatMessage(messageNode, ChatMessageType.GAMEMESSAGE, "", "", "", 0);
|
||||
chatNotificationsPlugin.onChatMessage(chatMessage);
|
||||
|
||||
verify(messageNode).setValue("<colHIGHLIGHT><u>Logic Knot</u></col> received a drop: Adamant longsword");
|
||||
verify(messageNode).setValue("<colHIGHLIGHT><u>Logic Knot</u><colNORMAL> received a drop: Adamant longsword");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+29
@@ -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. <col=ff0000>It then crumbles to dust.</col>";
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
+6
-9
@@ -54,7 +54,6 @@ import net.runelite.api.widgets.WidgetInfo;
|
||||
import net.runelite.client.Notifier;
|
||||
import net.runelite.client.chat.ChatClient;
|
||||
import net.runelite.client.chat.ChatCommandManager;
|
||||
import net.runelite.client.chat.ChatMessageManager;
|
||||
import net.runelite.client.config.ConfigManager;
|
||||
import net.runelite.client.game.ItemManager;
|
||||
import net.runelite.client.game.npcoverlay.NpcOverlayService;
|
||||
@@ -158,10 +157,6 @@ public class SlayerPluginTest
|
||||
@Bind
|
||||
Notifier notifier;
|
||||
|
||||
@Mock
|
||||
@Bind
|
||||
ChatMessageManager chatMessageManager;
|
||||
|
||||
@Mock
|
||||
@Bind
|
||||
ChatCommandManager chatCommandManager;
|
||||
@@ -788,14 +783,15 @@ public class SlayerPluginTest
|
||||
when(slayerConfig.taskCommand()).thenReturn(true);
|
||||
when(chatClient.getTask(anyString())).thenReturn(task);
|
||||
|
||||
MessageNode messageNode = mock(MessageNode.class);
|
||||
ChatMessage setMessage = new ChatMessage();
|
||||
setMessage.setType(ChatMessageType.PUBLICCHAT);
|
||||
setMessage.setName("Adam");
|
||||
setMessage.setMessageNode(mock(MessageNode.class));
|
||||
setMessage.setMessageNode(messageNode);
|
||||
|
||||
slayerPlugin.taskLookup(setMessage, "!task");
|
||||
|
||||
verify(chatMessageManager).update(any(MessageNode.class));
|
||||
verify(messageNode).setRuneLiteFormatMessage(anyString());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -810,14 +806,15 @@ public class SlayerPluginTest
|
||||
when(slayerConfig.taskCommand()).thenReturn(true);
|
||||
when(chatClient.getTask(anyString())).thenReturn(task);
|
||||
|
||||
MessageNode messageNode = mock(MessageNode.class);
|
||||
ChatMessage chatMessage = new ChatMessage();
|
||||
chatMessage.setType(ChatMessageType.PUBLICCHAT);
|
||||
chatMessage.setName("Adam");
|
||||
chatMessage.setMessageNode(mock(MessageNode.class));
|
||||
chatMessage.setMessageNode(messageNode);
|
||||
|
||||
slayerPlugin.taskLookup(chatMessage, "!task");
|
||||
|
||||
verify(chatMessageManager, never()).update(any(MessageNode.class));
|
||||
verify(messageNode, never()).setRuneLiteFormatMessage(anyString());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+150
@@ -0,0 +1,150 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Kusha Gharahi<kusha.me>
|
||||
* Copyright (c) 2019, Adam <Adam@sigterm.info>
|
||||
* 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.client.plugins.wintertodt;
|
||||
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.testing.fieldbinder.Bind;
|
||||
import com.google.inject.testing.fieldbinder.BoundFieldModule;
|
||||
import javax.inject.Inject;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.Varbits;
|
||||
import net.runelite.api.events.VarbitChanged;
|
||||
import net.runelite.client.Notifier;
|
||||
import net.runelite.client.ui.overlay.OverlayManager;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class WintertodtPluginTest
|
||||
{
|
||||
@Inject
|
||||
WintertodtPlugin wintertodtPlugin;
|
||||
|
||||
@Mock
|
||||
@Bind
|
||||
WintertodtConfig config;
|
||||
|
||||
@Mock
|
||||
@Bind
|
||||
WintertodtOverlay wintertodtOverlay;
|
||||
|
||||
@Mock
|
||||
@Bind
|
||||
OverlayManager overlayManager;
|
||||
|
||||
@Mock
|
||||
@Bind
|
||||
Notifier notifier;
|
||||
|
||||
@Mock
|
||||
@Bind
|
||||
Client client;
|
||||
|
||||
@Before
|
||||
public void before()
|
||||
{
|
||||
Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void matchStartingNotification_shouldNotify_when15SecondsOptionSelected()
|
||||
{
|
||||
when(config.roundNotification()).thenReturn(15);
|
||||
|
||||
when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(35);
|
||||
wintertodtPlugin.onVarbitChanged(new VarbitChanged());
|
||||
//(15 * 50) / 30 = ~25
|
||||
when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(25);
|
||||
wintertodtPlugin.onVarbitChanged(new VarbitChanged());
|
||||
|
||||
verify(notifier, times(1)).notify("Wintertodt round is about to start");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void matchStartingNotification_shouldNotify_when10SecondsOptionSelected()
|
||||
{
|
||||
when(config.roundNotification()).thenReturn(10);
|
||||
|
||||
when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(20);
|
||||
wintertodtPlugin.onVarbitChanged(new VarbitChanged());
|
||||
//(10 * 50) / 30 = ~16
|
||||
when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(16);
|
||||
wintertodtPlugin.onVarbitChanged(new VarbitChanged());
|
||||
|
||||
verify(notifier, times(1)).notify("Wintertodt round is about to start");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void matchStartingNotification_shouldNotify_when5SecondsOptionSelected()
|
||||
{
|
||||
when(config.roundNotification()).thenReturn(5);
|
||||
|
||||
when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(10);
|
||||
wintertodtPlugin.onVarbitChanged(new VarbitChanged());
|
||||
//(5 * 50) / 30 = ~8
|
||||
when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(8);
|
||||
wintertodtPlugin.onVarbitChanged(new VarbitChanged());
|
||||
|
||||
verify(notifier, times(1)).notify("Wintertodt round is about to start");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void matchStartingNotification_shouldNotifyOnce()
|
||||
{
|
||||
when(config.roundNotification()).thenReturn(5);
|
||||
|
||||
when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(0);
|
||||
wintertodtPlugin.onVarbitChanged(new VarbitChanged());
|
||||
when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(10);
|
||||
wintertodtPlugin.onVarbitChanged(new VarbitChanged());
|
||||
when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(8);
|
||||
wintertodtPlugin.onVarbitChanged(new VarbitChanged());
|
||||
when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(6);
|
||||
wintertodtPlugin.onVarbitChanged(new VarbitChanged());
|
||||
when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(5);
|
||||
wintertodtPlugin.onVarbitChanged(new VarbitChanged());
|
||||
when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(4);
|
||||
wintertodtPlugin.onVarbitChanged(new VarbitChanged());
|
||||
|
||||
verify(notifier, times(1)).notify("Wintertodt round is about to start");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void matchStartingNotification_shouldNotNotify_whenNoneOptionSelected()
|
||||
{
|
||||
when(config.roundNotification()).thenReturn(5);
|
||||
when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(25);
|
||||
|
||||
wintertodtPlugin.onVarbitChanged(new VarbitChanged());
|
||||
verify(notifier, times(0)).notify("Wintertodt round is about to start");
|
||||
}
|
||||
}
|
||||
@@ -47,13 +47,11 @@ public abstract class RSClanSettingsMixin implements RSClanSettings
|
||||
public List<ClanMember> getMembers()
|
||||
{
|
||||
int memberCount = getMemberCount();
|
||||
String[] memberNames = getMemberNames();
|
||||
byte[] memberRanks = getMemberRanks();
|
||||
List<ClanMember> memberList = new ArrayList<>(memberCount);
|
||||
|
||||
for (int i = 0; i < memberCount; i++)
|
||||
{
|
||||
memberList.add(new ClanMember(memberNames[i], client.getClanRankFromRs(memberRanks[i])));
|
||||
memberList.add((ClanMember) client.runeliteClanMember(this, i));
|
||||
}
|
||||
|
||||
return memberList;
|
||||
@@ -65,7 +63,6 @@ public abstract class RSClanSettingsMixin implements RSClanSettings
|
||||
{
|
||||
name = name.replace(" ", "\u00A0").toLowerCase();
|
||||
String[] memberNames = getMemberNames();
|
||||
byte[] memberRanks = getMemberRanks();
|
||||
int[] sorted = getSortedMembers();
|
||||
|
||||
int i = 0;
|
||||
@@ -82,7 +79,7 @@ public abstract class RSClanSettingsMixin implements RSClanSettings
|
||||
}
|
||||
else if (compare == 0)
|
||||
{
|
||||
return new ClanMember(memberName, client.getClanRankFromRs(memberRanks[tag]));
|
||||
return (ClanMember) client.runeliteClanMember(this, memberIndex);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -39,8 +39,10 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import net.runelite.api.Actor;
|
||||
import net.runelite.api.Animation;
|
||||
import net.runelite.api.ChatMessageType;
|
||||
import net.runelite.api.Deque;
|
||||
import net.runelite.api.EnumComposition;
|
||||
import net.runelite.api.FriendContainer;
|
||||
import net.runelite.api.GameState;
|
||||
@@ -67,10 +69,10 @@ import static net.runelite.api.MenuAction.UNKNOWN;
|
||||
import net.runelite.api.MenuEntry;
|
||||
import net.runelite.api.MessageNode;
|
||||
import net.runelite.api.Model;
|
||||
import net.runelite.api.ModelData;
|
||||
import net.runelite.api.NPC;
|
||||
import net.runelite.api.NPCComposition;
|
||||
import net.runelite.api.NameableContainer;
|
||||
import net.runelite.api.Node;
|
||||
import net.runelite.api.NodeCache;
|
||||
import net.runelite.api.ObjectComposition;
|
||||
import net.runelite.api.Perspective;
|
||||
@@ -144,6 +146,7 @@ import net.runelite.rs.api.RSArchive;
|
||||
import net.runelite.rs.api.RSChatChannel;
|
||||
import net.runelite.rs.api.RSClanChannel;
|
||||
import net.runelite.rs.api.RSClient;
|
||||
import net.runelite.rs.api.RSDualNode;
|
||||
import net.runelite.rs.api.RSEnumComposition;
|
||||
import net.runelite.rs.api.RSEvictingDualNodeHashTable;
|
||||
import net.runelite.rs.api.RSFriendSystem;
|
||||
@@ -158,6 +161,8 @@ import net.runelite.rs.api.RSNodeDeque;
|
||||
import net.runelite.rs.api.RSNodeHashTable;
|
||||
import net.runelite.rs.api.RSPacketBuffer;
|
||||
import net.runelite.rs.api.RSPlayer;
|
||||
import net.runelite.rs.api.RSProjectile;
|
||||
import net.runelite.rs.api.RSRuneLiteClanMember;
|
||||
import net.runelite.rs.api.RSRuneLiteMenuEntry;
|
||||
import net.runelite.rs.api.RSScene;
|
||||
import net.runelite.rs.api.RSScriptEvent;
|
||||
@@ -289,6 +294,9 @@ public abstract class RSClientMixin implements RSClient
|
||||
@Inject
|
||||
public long delayNanoTime;
|
||||
|
||||
@Inject
|
||||
public RSEvictingDualNodeHashTable tmpModelDataCache = newEvictingDualNodeHashTable(16);
|
||||
|
||||
@Inject
|
||||
private List<String> outdatedScripts = new ArrayList<>();
|
||||
|
||||
@@ -1046,34 +1054,36 @@ public abstract class RSClientMixin implements RSClient
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public List<Projectile> getProjectiles()
|
||||
public Projectile createProjectile(int id, int plane, int startX, int startY, int startZ, int startCycle, int endCycle, int slope, int startHeight, int endHeight, Actor target, int targetX, int targetY)
|
||||
{
|
||||
List<Projectile> projectiles = new ArrayList<Projectile>();
|
||||
RSNodeDeque projectileDeque = this.getProjectilesDeque();
|
||||
Node head = projectileDeque.getSentinel();
|
||||
|
||||
for (Node node = head.getNext(); node != head; node = node.getNext())
|
||||
int targetIndex = 0;
|
||||
if (target instanceof NPC)
|
||||
{
|
||||
projectiles.add((Projectile) node);
|
||||
targetIndex = ((NPC) target).getIndex() + 1;
|
||||
}
|
||||
else if (target instanceof Player)
|
||||
{
|
||||
targetIndex = -(((Player) target).getPlayerId() + 1);
|
||||
}
|
||||
|
||||
return projectiles;
|
||||
RSProjectile projectile = client.newProjectile(id, plane, startX, startY, startZ, startCycle, endCycle, slope, startHeight, targetIndex, endHeight);
|
||||
projectile.setDestination(targetX, targetY, Perspective.getTileHeight(client, new LocalPoint(targetX, targetY), client.getPlane()), startCycle + client.getGameCycle());
|
||||
|
||||
return projectile;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public List<GraphicsObject> getGraphicsObjects()
|
||||
public Deque<Projectile> getProjectiles()
|
||||
{
|
||||
List<GraphicsObject> graphicsObjects = new ArrayList<GraphicsObject>();
|
||||
RSNodeDeque graphicsObjectDeque = this.getGraphicsObjectDeque();
|
||||
Node head = graphicsObjectDeque.getSentinel();
|
||||
return this.getProjectilesDeque();
|
||||
}
|
||||
|
||||
for (Node node = head.getNext(); node != head; node = node.getNext())
|
||||
{
|
||||
graphicsObjects.add((GraphicsObject) node);
|
||||
}
|
||||
|
||||
return graphicsObjects;
|
||||
@Inject
|
||||
@Override
|
||||
public Deque<GraphicsObject> getGraphicsObjects()
|
||||
{
|
||||
return this.getGraphicsObjectDeque();
|
||||
}
|
||||
|
||||
@Inject
|
||||
@@ -1448,6 +1458,12 @@ public abstract class RSClientMixin implements RSClient
|
||||
}
|
||||
}
|
||||
|
||||
@Inject
|
||||
public static RSRuneLiteClanMember runeLiteClanMember()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
@FieldHook("friendsChat")
|
||||
@Inject
|
||||
public static void clanMemberManagerChanged(int idx)
|
||||
@@ -2600,7 +2616,7 @@ public abstract class RSClientMixin implements RSClient
|
||||
{
|
||||
for (int i = 0; i < colorToFind.length; ++i)
|
||||
{
|
||||
modeldata.recolor(colorToFind[i], colorToReplace[i]);
|
||||
modeldata.rs$recolor(colorToFind[i], colorToReplace[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2780,5 +2796,45 @@ public abstract class RSClientMixin implements RSClient
|
||||
check("Widget_cachedSpriteMasks", client.getSpriteMasksCache());
|
||||
check("WorldMapElement_cachedSprites", client.getSpritesCache());
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData mergeModels(ModelData[] var0, int var1)
|
||||
{
|
||||
return newModelData(var0, var1);
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData mergeModels(ModelData... var0)
|
||||
{
|
||||
return newModelData(var0, var0.length);
|
||||
}
|
||||
|
||||
@Inject
|
||||
public IndexDataBase getIndex(int id)
|
||||
{
|
||||
return RSClientMixin.archives[id];
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData loadModelData(int var0)
|
||||
{
|
||||
RSModelData modelData = (RSModelData) this.tmpModelDataCache.get(var0);
|
||||
|
||||
if (modelData == null)
|
||||
{
|
||||
modelData = getModelData(RSClientMixin.archives[7], var0, 0);
|
||||
if (modelData == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
this.tmpModelDataCache.put((RSDualNode) modelData, (long) var0);
|
||||
}
|
||||
|
||||
return modelData.newModelData(modelData, true, true, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,23 @@ import net.runelite.rs.api.RSLinkDeque;
|
||||
@Mixin(RSLinkDeque.class)
|
||||
public abstract class RSLinkDequeMixin implements RSLinkDeque
|
||||
{
|
||||
@Inject
|
||||
@Override
|
||||
public void addLast(Object o)
|
||||
{
|
||||
RSLink var1 = (RSLink) o;
|
||||
|
||||
if (var1.getNext() != null)
|
||||
{
|
||||
var1.remove();
|
||||
}
|
||||
|
||||
var1.setNext(this.getSentinel());
|
||||
var1.setPrevious(this.getSentinel().getPrevious());
|
||||
var1.getNext().setPrevious(var1);
|
||||
var1.getPrevious().setNext(var1);
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public void clear()
|
||||
|
||||
@@ -24,12 +24,18 @@
|
||||
*/
|
||||
package net.runelite.mixins;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import net.runelite.api.Model;
|
||||
import net.runelite.api.ModelData;
|
||||
import net.runelite.api.mixins.Copy;
|
||||
import net.runelite.api.mixins.Inject;
|
||||
import net.runelite.api.mixins.Mixin;
|
||||
import net.runelite.api.mixins.Replace;
|
||||
import net.runelite.api.mixins.Shadow;
|
||||
import net.runelite.api.model.Triangle;
|
||||
import net.runelite.api.model.Vertex;
|
||||
import net.runelite.rs.api.RSClient;
|
||||
import net.runelite.rs.api.RSModel;
|
||||
import net.runelite.rs.api.RSModelData;
|
||||
@@ -124,13 +130,13 @@ public abstract class RSModelDataMixin implements RSModelData
|
||||
return;
|
||||
}
|
||||
|
||||
final int[] vertexPositionsX = getVertexX();
|
||||
final int[] vertexPositionsY = getVertexY();
|
||||
final int[] vertexPositionsZ = getVertexZ();
|
||||
final int[] vertexPositionsX = getVerticesX();
|
||||
final int[] vertexPositionsY = getVerticesY();
|
||||
final int[] vertexPositionsZ = getVerticesZ();
|
||||
|
||||
final int[] trianglePointsX = getTrianglePointsX();
|
||||
final int[] trianglePointsY = getTrianglePointsY();
|
||||
final int[] trianglePointsZ = getTrianglePointsZ();
|
||||
final int[] trianglePointsX = getFaceIndices1();
|
||||
final int[] trianglePointsY = getFaceIndices2();
|
||||
final int[] trianglePointsZ = getFaceIndices3();
|
||||
|
||||
final short[] texTriangleX = getTexTriangleX();
|
||||
final short[] texTriangleY = getTexTriangleY();
|
||||
@@ -138,7 +144,7 @@ public abstract class RSModelDataMixin implements RSModelData
|
||||
|
||||
final byte[] textureCoords = getTextureCoords();
|
||||
|
||||
int faceCount = getTriangleFaceCount();
|
||||
int faceCount = getFaceCount();
|
||||
float[] faceTextureUCoordinates = new float[faceCount * 6];
|
||||
|
||||
for (int i = 0; i < faceCount; i++)
|
||||
@@ -222,4 +228,215 @@ public abstract class RSModelDataMixin implements RSModelData
|
||||
|
||||
faceTextureUVCoordinates = faceTextureUCoordinates;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Inject
|
||||
public List<Vertex> getVertices()
|
||||
{
|
||||
int[] verticesX = getVerticesX();
|
||||
int[] verticesY = getVerticesY();
|
||||
int[] verticesZ = getVerticesZ();
|
||||
|
||||
List<Vertex> vertices = new ArrayList<Vertex>(getVerticesCount());
|
||||
|
||||
for (int i = 0; i < getVerticesCount(); ++i)
|
||||
{
|
||||
Vertex v = new Vertex(
|
||||
verticesX[i],
|
||||
verticesY[i],
|
||||
verticesZ[i]
|
||||
);
|
||||
vertices.add(v);
|
||||
}
|
||||
|
||||
return vertices;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Inject
|
||||
public List<Triangle> getTriangles()
|
||||
{
|
||||
int[] trianglesX = getFaceIndices1();
|
||||
int[] trianglesY = getFaceIndices2();
|
||||
int[] trianglesZ = getFaceIndices3();
|
||||
|
||||
List<Vertex> vertices = getVertices();
|
||||
List<Triangle> triangles = new ArrayList<>(getFaceCount());
|
||||
|
||||
for (int i = 0; i < getFaceCount(); ++i)
|
||||
{
|
||||
int triangleX = trianglesX[i];
|
||||
int triangleY = trianglesY[i];
|
||||
int triangleZ = trianglesZ[i];
|
||||
|
||||
Triangle triangle = new Triangle(
|
||||
vertices.get(triangleX),
|
||||
vertices.get(triangleY),
|
||||
vertices.get(triangleZ)
|
||||
);
|
||||
triangles.add(triangle);
|
||||
}
|
||||
|
||||
return triangles;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModel light()
|
||||
{
|
||||
return this.toModel(ModelData.DEFAULT_AMBIENT, ModelData.DEFAULT_CONTRAST, ModelData.DEFAULT_X, ModelData.DEFAULT_Y, ModelData.DEFAULT_Z);
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModel light(int var1, int var2, int var3, int var4, int var5)
|
||||
{
|
||||
return this.toModel(var1, var2, var3, var4, var5);
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData recolor(short colorToReplace, short colorToReplaceWith)
|
||||
{
|
||||
this.rs$recolor(colorToReplace, colorToReplaceWith);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData retexture(short find, short replace)
|
||||
{
|
||||
this.rs$retexture(find, replace);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData cloneVertices()
|
||||
{
|
||||
int[] newVericesX = Arrays.copyOf(this.getVerticesX(), this.getVerticesX().length);
|
||||
int[] newVericesY = Arrays.copyOf(this.getVerticesY(), this.getVerticesX().length);
|
||||
int[] newVericesZ = Arrays.copyOf(this.getVerticesZ(), this.getVerticesX().length);
|
||||
|
||||
this.setVerticesX(newVericesX);
|
||||
this.setVerticesY(newVericesY);
|
||||
this.setVerticesZ(newVericesZ);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData cloneColors()
|
||||
{
|
||||
short[] newFaceColor = Arrays.copyOf(this.getFaceColors(), this.getFaceColors().length);
|
||||
this.setFaceColors(newFaceColor);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData cloneTextures()
|
||||
{
|
||||
short[] newFaceColor = Arrays.copyOf(this.getFaceTextures(), this.getFaceTextures().length);
|
||||
this.setFaceTextures(newFaceColor);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData cloneTransparencies()
|
||||
{
|
||||
byte[] newFaceColor = Arrays.copyOf(this.getFaceTransparencies(), this.getFaceTransparencies().length);
|
||||
this.setFaceTransparencies(newFaceColor);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData rotateY90Ccw()
|
||||
{
|
||||
for (int var1 = 0; var1 < this.getVerticesCount(); ++var1)
|
||||
{
|
||||
int var2 = this.getVerticesX()[var1];
|
||||
this.getVerticesX()[var1] = this.getVerticesZ()[var1];
|
||||
this.getVerticesZ()[var1] = -var2;
|
||||
}
|
||||
|
||||
this.invalidate();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData rotateY180Ccw()
|
||||
{
|
||||
for (int var1 = 0; var1 < this.getVerticesCount(); ++var1)
|
||||
{
|
||||
this.getVerticesX()[var1] = -this.getVerticesX()[var1];
|
||||
this.getVerticesZ()[var1] = -this.getVerticesZ()[var1];
|
||||
}
|
||||
|
||||
this.invalidate();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData rotateY270Ccw()
|
||||
{
|
||||
for (int var1 = 0; var1 < this.getVerticesCount(); ++var1)
|
||||
{
|
||||
int var2 = this.getVerticesZ()[var1];
|
||||
this.getVerticesZ()[var1] = this.getVerticesX()[var1];
|
||||
this.getVerticesX()[var1] = -var2;
|
||||
}
|
||||
|
||||
this.invalidate();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData scale(int var1, int var2, int var3)
|
||||
{
|
||||
for (int i = 0; i < this.getVerticesCount(); ++i)
|
||||
{
|
||||
this.getVerticesX()[i] = this.getVerticesX()[i] * var1 / 128;
|
||||
this.getVerticesY()[i] = this.getVerticesY()[i] * var2 / 128;
|
||||
this.getVerticesZ()[i] = this.getVerticesZ()[i] * var3 / 128;
|
||||
}
|
||||
|
||||
this.invalidate();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData translate(int var1, int var2, int var3)
|
||||
{
|
||||
for (int i = 0; i < this.getVerticesCount(); ++i)
|
||||
{
|
||||
int[] vertexX = this.getVerticesX();
|
||||
int[] vertexY = this.getVerticesY();
|
||||
int[] vertexZ = this.getVerticesZ();
|
||||
|
||||
vertexX[i] += var1;
|
||||
vertexY[i] += var2;
|
||||
vertexZ[i] += var3;
|
||||
}
|
||||
|
||||
this.invalidate();
|
||||
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -196,6 +196,51 @@ public abstract class RSModelMixin implements RSModel
|
||||
rsModel.setFaceTextureUVCoordinates(rl$faceTextureUVCoordinates);
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModel rotateY90Ccw()
|
||||
{
|
||||
this.rs$rotateY90Ccw();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModel rotateY180Ccw()
|
||||
{
|
||||
this.rs$rotateY180Ccw();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModel rotateY270Ccw()
|
||||
{
|
||||
this.rs$rotateY270Ccw();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModel scale(int var1, int var2, int var3)
|
||||
{
|
||||
this.rs$scale(var1, var2, var3);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModel translate(int var1, int var2, int var3)
|
||||
{
|
||||
this.rs$translate(var1, var2, var3);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void interpolateFrames(RSFrames frames, int frameId, RSFrames nextFrames, int nextFrameId, int interval, int intervalCount)
|
||||
{
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2017, Adam <Adam@sigterm.info>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package net.runelite.mixins;
|
||||
|
||||
import net.runelite.api.mixins.Inject;
|
||||
import net.runelite.api.mixins.Mixin;
|
||||
import net.runelite.rs.api.RSNode;
|
||||
import net.runelite.rs.api.RSNodeDeque;
|
||||
|
||||
@Mixin(RSNodeDeque.class)
|
||||
public abstract class RSNodeDequeMixin implements RSNodeDeque
|
||||
{
|
||||
@Inject
|
||||
@Override
|
||||
public void addLast(Object o)
|
||||
{
|
||||
RSNode var1 = (RSNode) o;
|
||||
|
||||
if (var1.getNext() != null)
|
||||
{
|
||||
var1.unlink();
|
||||
}
|
||||
|
||||
var1.setNext(this.getSentinel());
|
||||
var1.setPrevious(this.getSentinel().getPrevious());
|
||||
var1.getNext().setPrevious(var1);
|
||||
var1.getPrevious().setNext(var1);
|
||||
}
|
||||
}
|
||||
@@ -43,6 +43,12 @@ public abstract class RSProjectileMixin implements RSProjectile
|
||||
@Shadow("client")
|
||||
private static RSClient client;
|
||||
|
||||
@Inject
|
||||
private int targetX;
|
||||
|
||||
@Inject
|
||||
private int targetY;
|
||||
|
||||
@Inject
|
||||
RSProjectileMixin()
|
||||
{
|
||||
@@ -90,6 +96,13 @@ public abstract class RSProjectileMixin implements RSProjectile
|
||||
}
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public LocalPoint getTarget()
|
||||
{
|
||||
return new LocalPoint(this.targetX, this.targetY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a projectile is set to move towards a point. For
|
||||
* projectiles that target the ground, like AoE projectiles from
|
||||
@@ -104,6 +117,8 @@ public abstract class RSProjectileMixin implements RSProjectile
|
||||
@MethodHook("setDestination")
|
||||
public void projectileMoved(int targetX, int targetY, int targetZ, int cycle)
|
||||
{
|
||||
this.targetX = targetX;
|
||||
this.targetY = targetY;
|
||||
final LocalPoint position = new LocalPoint(targetX, targetY);
|
||||
final ProjectileMoved projectileMoved = new ProjectileMoved();
|
||||
projectileMoved.setProjectile(this);
|
||||
|
||||
@@ -125,30 +125,30 @@ public abstract class RSSequenceDefinitionMixin implements RSSequenceDefinition
|
||||
rotation &= 3;
|
||||
if (rotation == 1)
|
||||
{
|
||||
animatedModel.rotateY270Ccw();
|
||||
animatedModel.rs$rotateY270Ccw();
|
||||
}
|
||||
else if (rotation == 2)
|
||||
{
|
||||
animatedModel.rotateY180Ccw();
|
||||
animatedModel.rs$rotateY180Ccw();
|
||||
}
|
||||
else if (rotation == 3)
|
||||
{
|
||||
animatedModel.rotateY90Ccw();
|
||||
animatedModel.rs$rotateY90Ccw();
|
||||
}
|
||||
animatedModel.interpolateFrames(frames, frameIdx, nextFrames, nextFrameIdx, interval,
|
||||
getFrameLengths()[frame]);
|
||||
// reapply rotation after animating
|
||||
if (rotation == 1)
|
||||
{
|
||||
animatedModel.rotateY90Ccw();
|
||||
animatedModel.rs$rotateY90Ccw();
|
||||
}
|
||||
else if (rotation == 2)
|
||||
{
|
||||
animatedModel.rotateY180Ccw();
|
||||
animatedModel.rs$rotateY180Ccw();
|
||||
}
|
||||
else if (rotation == 3)
|
||||
{
|
||||
animatedModel.rotateY270Ccw();
|
||||
animatedModel.rs$rotateY270Ccw();
|
||||
}
|
||||
return animatedModel;
|
||||
}
|
||||
|
||||
@@ -21,10 +21,6 @@ public interface RSAbstractArchive extends IndexDataBase
|
||||
@Override
|
||||
int[][] getFileIds();
|
||||
|
||||
@Import("getFile")
|
||||
@Override
|
||||
byte[] getFile(int groupId, int fileId);
|
||||
|
||||
@Import("getGroupFileCount")
|
||||
@Override
|
||||
int getGroupFileCount(int groupId);
|
||||
@@ -32,4 +28,8 @@ public interface RSAbstractArchive extends IndexDataBase
|
||||
@Import("fileCounts")
|
||||
@Override
|
||||
int[] getFileCounts();
|
||||
|
||||
@Import("getFile")
|
||||
@Override
|
||||
byte[] loadData(int groupId, int fileId);
|
||||
}
|
||||
|
||||
@@ -98,6 +98,14 @@ public interface RSActor extends RSRenderable, Actor
|
||||
@Override
|
||||
void setGraphic(int id);
|
||||
|
||||
@Import("spotAnimationHeight")
|
||||
@Override
|
||||
int getGraphicHeight();
|
||||
|
||||
@Import("spotAnimationHeight")
|
||||
@Override
|
||||
void setGraphicHeight(int id);
|
||||
|
||||
@Import("spotAnimationFrame")
|
||||
int getSpotAnimFrame();
|
||||
|
||||
|
||||
@@ -29,9 +29,11 @@ import java.util.Map;
|
||||
import net.runelite.api.AmbientSoundEffect;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.Deque;
|
||||
import net.runelite.api.ModelData;
|
||||
import net.runelite.api.SpritePixels;
|
||||
import net.runelite.api.World;
|
||||
import net.runelite.api.clan.ClanRank;
|
||||
import net.runelite.api.clan.ClanSettings;
|
||||
import net.runelite.api.widgets.Widget;
|
||||
import net.runelite.mapping.Construct;
|
||||
import net.runelite.mapping.Import;
|
||||
@@ -1570,4 +1572,16 @@ public interface RSClient extends RSGameEngine, Client
|
||||
|
||||
@Construct
|
||||
RSIterableNodeHashTable createIterableNodeHashTable(int size);
|
||||
|
||||
@Construct
|
||||
RSRuneLiteClanMember runeliteClanMember(ClanSettings var1, int var2);
|
||||
|
||||
@Construct
|
||||
RSProjectile newProjectile(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11);
|
||||
|
||||
@Construct
|
||||
RSModelData newModelData(ModelData[] var1, int var2);
|
||||
|
||||
@Construct
|
||||
RSEvictingDualNodeHashTable newEvictingDualNodeHashTable(int var1);
|
||||
}
|
||||
|
||||
@@ -8,6 +8,9 @@ public interface RSEvictingDualNodeHashTable extends NodeCache
|
||||
@Import("get")
|
||||
RSDualNode get(long id);
|
||||
|
||||
@Import("put")
|
||||
void put(RSDualNode var1, long var2);
|
||||
|
||||
@Import("dualNode")
|
||||
RSDualNode getDualNode();
|
||||
|
||||
|
||||
@@ -7,9 +7,18 @@ public interface RSLink
|
||||
@Import("previous")
|
||||
RSLink getPrevious();
|
||||
|
||||
@Import("previous")
|
||||
void setPrevious(RSLink var1);
|
||||
|
||||
@Import("next")
|
||||
RSLink next();
|
||||
|
||||
@Import("next")
|
||||
RSLink getNext();
|
||||
|
||||
@Import("next")
|
||||
void setNext(RSLink var1);
|
||||
|
||||
@Import("remove")
|
||||
void remove();
|
||||
}
|
||||
|
||||
@@ -110,13 +110,19 @@ public interface RSModel extends RSRenderable, Model
|
||||
RSModel toSharedSpotAnimModel(boolean b);
|
||||
|
||||
@Import("rotateY90Ccw")
|
||||
void rotateY90Ccw();
|
||||
void rs$rotateY90Ccw();
|
||||
|
||||
@Import("rotateY180")
|
||||
void rotateY180Ccw();
|
||||
void rs$rotateY180Ccw();
|
||||
|
||||
@Import("rotateY270Ccw")
|
||||
void rotateY270Ccw();
|
||||
void rs$rotateY270Ccw();
|
||||
|
||||
@Import("scale")
|
||||
void rs$scale(int var1, int var2, int var3);
|
||||
|
||||
@Import("offsetBy")
|
||||
void rs$translate(int var1, int var2, int var3);
|
||||
|
||||
@Import("radius")
|
||||
@Override
|
||||
|
||||
@@ -1,29 +1,40 @@
|
||||
package net.runelite.rs.api;
|
||||
|
||||
import net.runelite.api.ModelData;
|
||||
import net.runelite.mapping.Construct;
|
||||
import net.runelite.mapping.Import;
|
||||
|
||||
public interface RSModelData extends RSRenderable
|
||||
public interface RSModelData extends RSRenderable, ModelData
|
||||
{
|
||||
@Import("faceCount")
|
||||
int getTriangleFaceCount();
|
||||
int getFaceCount();
|
||||
|
||||
@Import("indices1")
|
||||
int[] getTrianglePointsX();
|
||||
int[] getFaceIndices1();
|
||||
|
||||
@Import("indices2")
|
||||
int[] getTrianglePointsY();
|
||||
int[] getFaceIndices2();
|
||||
|
||||
@Import("indices3")
|
||||
int[] getTrianglePointsZ();
|
||||
int[] getFaceIndices3();
|
||||
|
||||
@Import("verticesX")
|
||||
int[] getVertexX();
|
||||
int[] getVerticesX();
|
||||
|
||||
@Import("verticesX")
|
||||
void setVerticesX(int[] var1);
|
||||
|
||||
@Import("verticesY")
|
||||
int[] getVertexY();
|
||||
int[] getVerticesY();
|
||||
|
||||
@Import("verticesY")
|
||||
void setVerticesY(int[] var1);
|
||||
|
||||
@Import("verticesZ")
|
||||
int[] getVertexZ();
|
||||
int[] getVerticesZ();
|
||||
|
||||
@Import("verticesZ")
|
||||
void setVerticesZ(int[] var1);
|
||||
|
||||
@Import("texTriangleX")
|
||||
short[] getTexTriangleX();
|
||||
@@ -37,6 +48,21 @@ public interface RSModelData extends RSRenderable
|
||||
@Import("faceTextures")
|
||||
short[] getFaceTextures();
|
||||
|
||||
@Import("faceTextures")
|
||||
void setFaceTextures(short[] var1);
|
||||
|
||||
@Import("faceAlphas")
|
||||
byte[] getFaceTransparencies();
|
||||
|
||||
@Import("faceAlphas")
|
||||
void setFaceTransparencies(byte[] var1);
|
||||
|
||||
@Import("faceColors")
|
||||
short[] getFaceColors();
|
||||
|
||||
@Import("faceColors")
|
||||
void setFaceColors(short[] var1);
|
||||
|
||||
@Import("textureCoords")
|
||||
byte[] getTextureCoords();
|
||||
|
||||
@@ -53,7 +79,10 @@ public interface RSModelData extends RSRenderable
|
||||
RSVertexNormal[] getVertexVertices();
|
||||
|
||||
@Import("recolor")
|
||||
void recolor(short var1, short var2);
|
||||
void rs$recolor(short var1, short var2);
|
||||
|
||||
@Import("retexture")
|
||||
void rs$retexture(short var1, short var2);
|
||||
|
||||
@Import("toModel")
|
||||
RSModel toModel(int var1, int var2, int var3, int var4, int var5);
|
||||
@@ -63,4 +92,13 @@ public interface RSModelData extends RSRenderable
|
||||
|
||||
@Import("contrast")
|
||||
short getContrast();
|
||||
|
||||
@Import("invalidate")
|
||||
void invalidate();
|
||||
|
||||
@Import("copyModelData")
|
||||
RSModelData shallowCopy();
|
||||
|
||||
@Construct
|
||||
RSModelData newModelData(ModelData var1, boolean var2, boolean var3, boolean var4, boolean var5);
|
||||
}
|
||||
|
||||
@@ -33,14 +33,20 @@ public interface RSNode extends Node
|
||||
@Override
|
||||
RSNode getNext();
|
||||
|
||||
@Import("key")
|
||||
@Override
|
||||
long getHash();
|
||||
@Import("previous")
|
||||
void setNext(RSNode var1);
|
||||
|
||||
@Import("next")
|
||||
@Override
|
||||
RSNode getPrevious();
|
||||
|
||||
@Import("next")
|
||||
void setPrevious(RSNode var1);
|
||||
|
||||
@Import("key")
|
||||
@Override
|
||||
long getHash();
|
||||
|
||||
@Import("remove")
|
||||
void unlink();
|
||||
|
||||
|
||||
@@ -44,6 +44,9 @@ public interface RSNodeDeque extends Deque
|
||||
@Import("addFirst")
|
||||
void addFirst(RSNode val);
|
||||
|
||||
@Import("addLast")
|
||||
void addLast(RSNode val);
|
||||
|
||||
@Import("removeLast")
|
||||
RSNode removeLast();
|
||||
|
||||
|
||||
@@ -62,12 +62,16 @@ public interface RSProjectile extends RSRenderable, Projectile
|
||||
|
||||
@Import("cycleStart")
|
||||
@Override
|
||||
int getStartMovementCycle();
|
||||
int getStartCycle();
|
||||
|
||||
@Import("cycleEnd")
|
||||
@Override
|
||||
int getEndCycle();
|
||||
|
||||
@Import("cycleEnd")
|
||||
@Override
|
||||
void setEndCycle(int cycle);
|
||||
|
||||
@Import("slope")
|
||||
@Override
|
||||
int getSlope();
|
||||
@@ -103,4 +107,7 @@ public interface RSProjectile extends RSRenderable, Projectile
|
||||
@Import("speedZ")
|
||||
@Override
|
||||
double getVelocityZ();
|
||||
|
||||
@Import("setDestination")
|
||||
void setDestination(int targetX, int targetY, int targetZ, int cycle);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package net.runelite.rs.api;
|
||||
|
||||
import net.runelite.api.MenuEntry;
|
||||
import net.runelite.api.clan.ClanRank;
|
||||
|
||||
public interface RSRuneLiteClanMember extends MenuEntry
|
||||
{
|
||||
ClanRank getRank();
|
||||
|
||||
String getName();
|
||||
}
|
||||
@@ -233,7 +233,8 @@ public abstract class Actor extends Renderable {
|
||||
@ObfuscatedGetter(
|
||||
intValue = -2034554825
|
||||
)
|
||||
int field1131;
|
||||
@Export("spotAnimationHeight")
|
||||
int spotAnimationHeight;
|
||||
@ObfuscatedName("bo")
|
||||
@ObfuscatedGetter(
|
||||
intValue = -873586319
|
||||
|
||||
@@ -358,7 +358,7 @@ public class GrandExchangeOfferOwnWorldComparator implements Comparator {
|
||||
if ((var5 & 2) != 0) {
|
||||
var15.spotAnimation = var1.method7403();
|
||||
var6 = var1.method7412();
|
||||
var15.field1131 = var6 >> 16;
|
||||
var15.spotAnimationHeight = var6 >> 16;
|
||||
var15.field1130 = (var6 & 65535) + Client.cycle;
|
||||
var15.spotAnimationFrame = 0;
|
||||
var15.spotAnimationFrameCycle = 0;
|
||||
|
||||
@@ -1640,7 +1640,8 @@ public class ModelData extends Renderable {
|
||||
@ObfuscatedSignature(
|
||||
descriptor = "()Lge;"
|
||||
)
|
||||
public ModelData method3751() {
|
||||
@Export("copyModelData")
|
||||
public ModelData copyModelData() {
|
||||
ModelData var1 = new ModelData();
|
||||
if (this.faceRenderTypes != null) {
|
||||
var1.faceRenderTypes = new byte[this.faceCount];
|
||||
|
||||
@@ -118,7 +118,7 @@ public final class NPC extends Actor {
|
||||
if (super.spotAnimation != -1 && super.spotAnimationFrame != -1) {
|
||||
Model var4 = AccessFile.SpotAnimationDefinition_get(super.spotAnimation).getModel(super.spotAnimationFrame);
|
||||
if (var4 != null) {
|
||||
var4.offsetBy(0, -super.field1131, 0);
|
||||
var4.offsetBy(0, -super.spotAnimationHeight, 0);
|
||||
Model[] var5 = new Model[]{var3, var4};
|
||||
var3 = new Model(var5, 2);
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user