diff --git a/runelite-api/src/main/java/net/runelite/api/kit/KitType.java b/runelite-api/src/main/java/net/runelite/api/kit/KitType.java index 67876def5b..0ecf57790a 100644 --- a/runelite-api/src/main/java/net/runelite/api/kit/KitType.java +++ b/runelite-api/src/main/java/net/runelite/api/kit/KitType.java @@ -26,6 +26,7 @@ package net.runelite.api.kit; import lombok.AllArgsConstructor; import lombok.Getter; +import net.runelite.api.widgets.WidgetInfo; /** * Represents an equipment slot in a players composition. @@ -39,19 +40,19 @@ import lombok.Getter; @AllArgsConstructor public enum KitType { - HELMET("Helmet", 0), - CAPE("Cape", 1), - AMULET("Amulet", 2), - WEAPON("Weapon", 3), - TORSO("Torso", 4), - SHIELD("Shield", 5), - LEGS("Legs", 7), - HEAD("Head", 8), - HANDS("Hands", 9), - BOOTS("Boots", 10), - JAW("Jaw", 11), - RING("Ring", 12), - AMMUNITION("Ammo", 13); + HELMET("Helmet", 0, WidgetInfo.EQUIPMENT_HELMET), + CAPE("Cape", 1, WidgetInfo.EQUIPMENT_CAPE), + AMULET("Amulet", 2, WidgetInfo.EQUIPMENT_AMULET), + WEAPON("Weapon", 3, WidgetInfo.EQUIPMENT_WEAPON), + TORSO("Torso", 4, WidgetInfo.EQUIPMENT_BODY), + SHIELD("Shield", 5, WidgetInfo.EQUIPMENT_SHIELD), + LEGS("Legs", 7, WidgetInfo.EQUIPMENT_LEGS), + HEAD("Head", 8, null), + HANDS("Hands", 9, WidgetInfo.EQUIPMENT_GLOVES), + BOOTS("Boots", 10, WidgetInfo.EQUIPMENT_BOOTS), + JAW("Jaw", 11, null), + RING("Ring", 12, WidgetInfo.EQUIPMENT_RING), + AMMUNITION("Ammo", 13, WidgetInfo.EQUIPMENT_AMMO); private final String name; @@ -59,4 +60,6 @@ public enum KitType * Gets the raw equipment index for use in {PlayerAppearance#getEquipmentIds()}. */ private final int index; -} + + private final WidgetInfo widgetInfo; +} \ No newline at end of file diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java index c664425e9a..46b5b4a218 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java @@ -315,6 +315,17 @@ public class WidgetID static class Equipment { + static final int HELMET = 14; + static final int CAPE = 15; + static final int AMULET = 16; + static final int WEAPON = 17; + static final int BODY = 18; + static final int SHIELD = 19; + static final int LEGS = 20; + static final int GLOVES = 21; + static final int BOOTS = 22; + static final int RING = 23; + static final int AMMO = 24; static final int INVENTORY_ITEM_CONTAINER = 0; } @@ -1202,4 +1213,4 @@ public class WidgetID { static final int CONTAINER = 0; } -} +} \ No newline at end of file diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java index e7c426defd..fe181fbf92 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java @@ -63,6 +63,18 @@ public enum WidgetInfo EQUIPMENT(WidgetID.EQUIPMENT_GROUP_ID, 0), EQUIPMENT_INVENTORY_ITEMS_CONTAINER(WidgetID.EQUIPMENT_INVENTORY_GROUP_ID, WidgetID.Equipment.INVENTORY_ITEM_CONTAINER), + EQUIPMENT_HELMET(WidgetID.EQUIPMENT_GROUP_ID, WidgetID.Equipment.HELMET), + EQUIPMENT_CAPE(WidgetID.EQUIPMENT_GROUP_ID, WidgetID.Equipment.CAPE), + EQUIPMENT_AMULET(WidgetID.EQUIPMENT_GROUP_ID, WidgetID.Equipment.AMULET), + EQUIPMENT_WEAPON(WidgetID.EQUIPMENT_GROUP_ID, WidgetID.Equipment.WEAPON), + EQUIPMENT_BODY(WidgetID.EQUIPMENT_GROUP_ID, WidgetID.Equipment.BODY), + EQUIPMENT_SHIELD(WidgetID.EQUIPMENT_GROUP_ID, WidgetID.Equipment.SHIELD), + EQUIPMENT_LEGS(WidgetID.EQUIPMENT_GROUP_ID, WidgetID.Equipment.LEGS), + EQUIPMENT_GLOVES(WidgetID.EQUIPMENT_GROUP_ID, WidgetID.Equipment.GLOVES), + EQUIPMENT_BOOTS(WidgetID.EQUIPMENT_GROUP_ID, WidgetID.Equipment.BOOTS), + EQUIPMENT_RING(WidgetID.EQUIPMENT_GROUP_ID, WidgetID.Equipment.RING), + EQUIPMENT_AMMO(WidgetID.EQUIPMENT_GROUP_ID, WidgetID.Equipment.AMMO), + EMOTE_WINDOW(WidgetID.EMOTES_GROUP_ID, WidgetID.Emotes.EMOTE_WINDOW), EMOTE_CONTAINER(WidgetID.EMOTES_GROUP_ID, WidgetID.Emotes.EMOTE_CONTAINER), EMOTE_SCROLLBAR(WidgetID.EMOTES_GROUP_ID, WidgetID.Emotes.EMOTE_SCROLLBAR), @@ -860,4 +872,4 @@ public enum WidgetInfo return groupId << 16 | childId; } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/database/GenerateClasses.java b/runelite-client/src/main/java/net/runelite/client/database/GenerateClasses.java index dc595527d5..f6125b55e1 100644 --- a/runelite-client/src/main/java/net/runelite/client/database/GenerateClasses.java +++ b/runelite-client/src/main/java/net/runelite/client/database/GenerateClasses.java @@ -26,7 +26,7 @@ public class GenerateClasses ) .withTarget(new Target() .withPackageName("net.runelite.client.database.data") - .withDirectory("runelite-client/src/main/java/net/runelite/client/database/data") + .withDirectory("runelite-client/src/main/java/") ) ); diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/DefaultCatalog.java b/runelite-client/src/main/java/net/runelite/client/database/data/DefaultCatalog.java index 4a2a9d4eff..139bcaf234 100644 --- a/runelite-client/src/main/java/net/runelite/client/database/data/DefaultCatalog.java +++ b/runelite-client/src/main/java/net/runelite/client/database/data/DefaultCatalog.java @@ -7,7 +7,7 @@ package net.runelite.client.database.data; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import javax.annotation.Generated; +import javax.annotation.processing.Generated; import org.jooq.Schema; import org.jooq.impl.CatalogImpl; @@ -18,7 +18,7 @@ import org.jooq.impl.CatalogImpl; @Generated( value = { "http://www.jooq.org", - "jOOQ version:3.11.12" + "jOOQ version:3.12.3" }, comments = "This class is generated by jOOQ" ) @@ -26,7 +26,7 @@ import org.jooq.impl.CatalogImpl; public class DefaultCatalog extends CatalogImpl { - private static final long serialVersionUID = 836257769; + private static final long serialVersionUID = -102989253; /** * The reference instance of diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/Indexes.java b/runelite-client/src/main/java/net/runelite/client/database/data/Indexes.java index b736e0093e..72626efa54 100644 --- a/runelite-client/src/main/java/net/runelite/client/database/data/Indexes.java +++ b/runelite-client/src/main/java/net/runelite/client/database/data/Indexes.java @@ -4,10 +4,11 @@ package net.runelite.client.database.data; -import javax.annotation.Generated; +import javax.annotation.processing.Generated; import net.runelite.client.database.data.tables.Loottrackerevents; import net.runelite.client.database.data.tables.Loottrackerlink; import net.runelite.client.database.data.tables.Loottrackerloot; +import net.runelite.client.database.data.tables.TmorphSets; import net.runelite.client.database.data.tables.User; import org.jooq.Index; import org.jooq.OrderField; @@ -20,7 +21,7 @@ import org.jooq.impl.Internal; @Generated( value = { "http://www.jooq.org", - "jOOQ version:3.11.12" + "jOOQ version:3.12.3" }, comments = "This class is generated by jOOQ" ) @@ -33,11 +34,13 @@ public class Indexes // ------------------------------------------------------------------------- public static final Index PRIMARY_KEY_B = Indexes0.PRIMARY_KEY_B; + public static final Index FK_LOOTTRACKERDROP_INDEX_6 = Indexes0.FK_LOOTTRACKERDROP_INDEX_6; public static final Index FK_LOOTTRACKEREVENT_INDEX_6 = Indexes0.FK_LOOTTRACKEREVENT_INDEX_6; - public static final Index FK_LOOTTRACKERLOOT_INDEX_6 = Indexes0.FK_LOOTTRACKERLOOT_INDEX_6; - public static final Index PRIMARY_KEY_6B = Indexes0.PRIMARY_KEY_6B; + public static final Index FK_USER_INDEX_6 = Indexes0.FK_USER_INDEX_6; public static final Index PRIMARY_KEY_6 = Indexes0.PRIMARY_KEY_6; + public static final Index TMORPH_SETS_SET_NAME_UINDEX = Indexes0.TMORPH_SETS_SET_NAME_UINDEX; public static final Index PRIMARY_KEY_2 = Indexes0.PRIMARY_KEY_2; + public static final Index UN_USERNAME_INDEX_2 = Indexes0.UN_USERNAME_INDEX_2; // ------------------------------------------------------------------------- // [#1459] distribute members to avoid static initialisers > 64kb @@ -46,10 +49,12 @@ public class Indexes private static class Indexes0 { public static Index PRIMARY_KEY_B = Internal.createIndex("PRIMARY_KEY_B", Loottrackerevents.LOOTTRACKEREVENTS, new OrderField[]{Loottrackerevents.LOOTTRACKEREVENTS.UNIQUEID}, true); + public static Index FK_LOOTTRACKERDROP_INDEX_6 = Internal.createIndex("FK_LOOTTRACKERDROP_INDEX_6", Loottrackerlink.LOOTTRACKERLINK, new OrderField[]{Loottrackerlink.LOOTTRACKERLINK.DROPUNIQUEID}, false); public static Index FK_LOOTTRACKEREVENT_INDEX_6 = Internal.createIndex("FK_LOOTTRACKEREVENT_INDEX_6", Loottrackerlink.LOOTTRACKERLINK, new OrderField[]{Loottrackerlink.LOOTTRACKERLINK.EVENTUNIQUEID}, false); - public static Index FK_LOOTTRACKERLOOT_INDEX_6 = Internal.createIndex("FK_LOOTTRACKERLOOT_INDEX_6", Loottrackerlink.LOOTTRACKERLINK, new OrderField[]{Loottrackerlink.LOOTTRACKERLINK.DROPUNIQUEID}, false); - public static Index PRIMARY_KEY_6B = Internal.createIndex("PRIMARY_KEY_6B", Loottrackerlink.LOOTTRACKERLINK, new OrderField[]{Loottrackerlink.LOOTTRACKERLINK.LINKUNIQUEID}, true); + public static Index FK_USER_INDEX_6 = Internal.createIndex("FK_USER_INDEX_6", Loottrackerlink.LOOTTRACKERLINK, new OrderField[]{Loottrackerlink.LOOTTRACKERLINK.USERUNIQUEID}, false); public static Index PRIMARY_KEY_6 = Internal.createIndex("PRIMARY_KEY_6", Loottrackerloot.LOOTTRACKERLOOT, new OrderField[]{Loottrackerloot.LOOTTRACKERLOOT.UNIQUEID}, true); + public static Index TMORPH_SETS_SET_NAME_UINDEX = Internal.createIndex("TMORPH_SETS_SET_NAME_UINDEX", TmorphSets.TMORPH_SETS, new OrderField[]{TmorphSets.TMORPH_SETS.SET_NAME}, true); public static Index PRIMARY_KEY_2 = Internal.createIndex("PRIMARY_KEY_2", User.USER, new OrderField[]{User.USER.UNIQUEID}, true); + public static Index UN_USERNAME_INDEX_2 = Internal.createIndex("UN_USERNAME_INDEX_2", User.USER, new OrderField[]{User.USER.USERNAME}, true); } } diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/Keys.java b/runelite-client/src/main/java/net/runelite/client/database/data/Keys.java index fc561055c9..2f01544f08 100644 --- a/runelite-client/src/main/java/net/runelite/client/database/data/Keys.java +++ b/runelite-client/src/main/java/net/runelite/client/database/data/Keys.java @@ -4,7 +4,7 @@ package net.runelite.client.database.data; -import javax.annotation.Generated; +import javax.annotation.processing.Generated; import net.runelite.client.database.data.tables.Loottrackerevents; import net.runelite.client.database.data.tables.Loottrackerlink; import net.runelite.client.database.data.tables.Loottrackerloot; @@ -25,7 +25,7 @@ import org.jooq.impl.Internal; @Generated( value = { "http://www.jooq.org", - "jOOQ version:3.11.12" + "jOOQ version:3.12.3" }, comments = "This class is generated by jOOQ" ) @@ -42,17 +42,17 @@ public class Keys // UNIQUE and PRIMARY KEY definitions // ------------------------------------------------------------------------- - public static final UniqueKey PK_EVENTUNIQUEID = UniqueKeys0.PK_EVENTUNIQUEID; - public static final UniqueKey PK_LOOTTRACKERLINK = UniqueKeys0.PK_LOOTTRACKERLINK; - public static final UniqueKey PK_LOOTUNIQUEID = UniqueKeys0.PK_LOOTUNIQUEID; + public static final UniqueKey PK_LOOTTRACKEREVENTS = UniqueKeys0.PK_LOOTTRACKEREVENTS; + public static final UniqueKey PK_LOOTTRACKERDROPS = UniqueKeys0.PK_LOOTTRACKERDROPS; public static final UniqueKey PK_USER = UniqueKeys0.PK_USER; + public static final UniqueKey UN_USERNAME = UniqueKeys0.UN_USERNAME; // ------------------------------------------------------------------------- // FOREIGN KEY definitions // ------------------------------------------------------------------------- public static final ForeignKey FK_LOOTTRACKEREVENT = ForeignKeys0.FK_LOOTTRACKEREVENT; - public static final ForeignKey FK_LOOTTRACKERLOOT = ForeignKeys0.FK_LOOTTRACKERLOOT; + public static final ForeignKey FK_LOOTTRACKERDROP = ForeignKeys0.FK_LOOTTRACKERDROP; public static final ForeignKey FK_USER = ForeignKeys0.FK_USER; // ------------------------------------------------------------------------- @@ -61,16 +61,16 @@ public class Keys private static class UniqueKeys0 { - public static final UniqueKey PK_EVENTUNIQUEID = Internal.createUniqueKey(Loottrackerevents.LOOTTRACKEREVENTS, "PK_EVENTUNIQUEID", Loottrackerevents.LOOTTRACKEREVENTS.UNIQUEID); - public static final UniqueKey PK_LOOTTRACKERLINK = Internal.createUniqueKey(Loottrackerlink.LOOTTRACKERLINK, "PK_LOOTTRACKERLINK", Loottrackerlink.LOOTTRACKERLINK.LINKUNIQUEID); - public static final UniqueKey PK_LOOTUNIQUEID = Internal.createUniqueKey(Loottrackerloot.LOOTTRACKERLOOT, "PK_LOOTUNIQUEID", Loottrackerloot.LOOTTRACKERLOOT.UNIQUEID); + public static final UniqueKey PK_LOOTTRACKEREVENTS = Internal.createUniqueKey(Loottrackerevents.LOOTTRACKEREVENTS, "PK_LOOTTRACKEREVENTS", Loottrackerevents.LOOTTRACKEREVENTS.UNIQUEID); + public static final UniqueKey PK_LOOTTRACKERDROPS = Internal.createUniqueKey(Loottrackerloot.LOOTTRACKERLOOT, "PK_LOOTTRACKERDROPS", Loottrackerloot.LOOTTRACKERLOOT.UNIQUEID); public static final UniqueKey PK_USER = Internal.createUniqueKey(User.USER, "PK_USER", User.USER.UNIQUEID); + public static final UniqueKey UN_USERNAME = Internal.createUniqueKey(User.USER, "UN_USERNAME", User.USER.USERNAME); } private static class ForeignKeys0 { - public static final ForeignKey FK_LOOTTRACKEREVENT = Internal.createForeignKey(net.runelite.client.database.data.Keys.PK_EVENTUNIQUEID, Loottrackerlink.LOOTTRACKERLINK, "FK_LOOTTRACKEREVENT", Loottrackerlink.LOOTTRACKERLINK.EVENTUNIQUEID); - public static final ForeignKey FK_LOOTTRACKERLOOT = Internal.createForeignKey(net.runelite.client.database.data.Keys.PK_LOOTUNIQUEID, Loottrackerlink.LOOTTRACKERLINK, "FK_LOOTTRACKERLOOT", Loottrackerlink.LOOTTRACKERLINK.DROPUNIQUEID); - public static final ForeignKey FK_USER = Internal.createForeignKey(net.runelite.client.database.data.Keys.PK_USER, Loottrackerlink.LOOTTRACKERLINK, "FK_USER", Loottrackerlink.LOOTTRACKERLINK.DROPUNIQUEID); + public static final ForeignKey FK_LOOTTRACKEREVENT = Internal.createForeignKey(net.runelite.client.database.data.Keys.PK_LOOTTRACKEREVENTS, Loottrackerlink.LOOTTRACKERLINK, "FK_LOOTTRACKEREVENT", Loottrackerlink.LOOTTRACKERLINK.EVENTUNIQUEID); + public static final ForeignKey FK_LOOTTRACKERDROP = Internal.createForeignKey(net.runelite.client.database.data.Keys.PK_LOOTTRACKERDROPS, Loottrackerlink.LOOTTRACKERLINK, "FK_LOOTTRACKERDROP", Loottrackerlink.LOOTTRACKERLINK.DROPUNIQUEID); + public static final ForeignKey FK_USER = Internal.createForeignKey(net.runelite.client.database.data.Keys.PK_USER, Loottrackerlink.LOOTTRACKERLINK, "FK_USER", Loottrackerlink.LOOTTRACKERLINK.USERUNIQUEID); } } diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/Public.java b/runelite-client/src/main/java/net/runelite/client/database/data/Public.java index 7120f8ad40..b560fe5538 100644 --- a/runelite-client/src/main/java/net/runelite/client/database/data/Public.java +++ b/runelite-client/src/main/java/net/runelite/client/database/data/Public.java @@ -7,10 +7,11 @@ package net.runelite.client.database.data; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import javax.annotation.Generated; +import javax.annotation.processing.Generated; import net.runelite.client.database.data.tables.Loottrackerevents; import net.runelite.client.database.data.tables.Loottrackerlink; import net.runelite.client.database.data.tables.Loottrackerloot; +import net.runelite.client.database.data.tables.TmorphSets; import net.runelite.client.database.data.tables.User; import org.jooq.Catalog; import org.jooq.Table; @@ -23,7 +24,7 @@ import org.jooq.impl.SchemaImpl; @Generated( value = { "http://www.jooq.org", - "jOOQ version:3.11.12" + "jOOQ version:3.12.3" }, comments = "This class is generated by jOOQ" ) @@ -31,7 +32,7 @@ import org.jooq.impl.SchemaImpl; public class Public extends SchemaImpl { - private static final long serialVersionUID = 1499404561; + private static final long serialVersionUID = 1268129010; /** * The reference instance of PUBLIC @@ -53,6 +54,11 @@ public class Public extends SchemaImpl */ public final Loottrackerloot LOOTTRACKERLOOT = net.runelite.client.database.data.tables.Loottrackerloot.LOOTTRACKERLOOT; + /** + * The table PUBLIC.TMORPH_SETS. + */ + public final TmorphSets TMORPH_SETS = net.runelite.client.database.data.tables.TmorphSets.TMORPH_SETS; + /** * The table PUBLIC.USER. */ @@ -67,9 +73,6 @@ public class Public extends SchemaImpl } - /** - * {@inheritDoc} - */ @Override public Catalog getCatalog() { @@ -90,6 +93,7 @@ public class Public extends SchemaImpl Loottrackerevents.LOOTTRACKEREVENTS, Loottrackerlink.LOOTTRACKERLINK, Loottrackerloot.LOOTTRACKERLOOT, + TmorphSets.TMORPH_SETS, User.USER); } } diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/Tables.java b/runelite-client/src/main/java/net/runelite/client/database/data/Tables.java index f55ce70631..0b8ca41d45 100644 --- a/runelite-client/src/main/java/net/runelite/client/database/data/Tables.java +++ b/runelite-client/src/main/java/net/runelite/client/database/data/Tables.java @@ -4,10 +4,11 @@ package net.runelite.client.database.data; -import javax.annotation.Generated; +import javax.annotation.processing.Generated; import net.runelite.client.database.data.tables.Loottrackerevents; import net.runelite.client.database.data.tables.Loottrackerlink; import net.runelite.client.database.data.tables.Loottrackerloot; +import net.runelite.client.database.data.tables.TmorphSets; import net.runelite.client.database.data.tables.User; @@ -17,7 +18,7 @@ import net.runelite.client.database.data.tables.User; @Generated( value = { "http://www.jooq.org", - "jOOQ version:3.11.12" + "jOOQ version:3.12.3" }, comments = "This class is generated by jOOQ" ) @@ -28,20 +29,25 @@ public class Tables /** * The table PUBLIC.LOOTTRACKEREVENTS. */ - public static final Loottrackerevents LOOTTRACKEREVENTS = net.runelite.client.database.data.tables.Loottrackerevents.LOOTTRACKEREVENTS; + public static final Loottrackerevents LOOTTRACKEREVENTS = Loottrackerevents.LOOTTRACKEREVENTS; /** * The table PUBLIC.LOOTTRACKERLINK. */ - public static final Loottrackerlink LOOTTRACKERLINK = net.runelite.client.database.data.tables.Loottrackerlink.LOOTTRACKERLINK; + public static final Loottrackerlink LOOTTRACKERLINK = Loottrackerlink.LOOTTRACKERLINK; /** * The table PUBLIC.LOOTTRACKERLOOT. */ - public static final Loottrackerloot LOOTTRACKERLOOT = net.runelite.client.database.data.tables.Loottrackerloot.LOOTTRACKERLOOT; + public static final Loottrackerloot LOOTTRACKERLOOT = Loottrackerloot.LOOTTRACKERLOOT; + + /** + * The table PUBLIC.TMORPH_SETS. + */ + public static final TmorphSets TMORPH_SETS = TmorphSets.TMORPH_SETS; /** * The table PUBLIC.USER. */ - public static final User USER = net.runelite.client.database.data.tables.User.USER; + public static final User USER = User.USER; } diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerevents.java b/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerevents.java index d139de8d1f..5bceae62d6 100644 --- a/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerevents.java +++ b/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerevents.java @@ -8,7 +8,7 @@ import java.sql.Timestamp; import java.util.Arrays; import java.util.List; import java.util.UUID; -import javax.annotation.Generated; +import javax.annotation.processing.Generated; import net.runelite.client.database.data.Indexes; import net.runelite.client.database.data.Keys; import net.runelite.client.database.data.Public; @@ -18,6 +18,7 @@ import org.jooq.ForeignKey; import org.jooq.Index; import org.jooq.Name; import org.jooq.Record; +import org.jooq.Row4; import org.jooq.Schema; import org.jooq.Table; import org.jooq.TableField; @@ -32,7 +33,7 @@ import org.jooq.impl.TableImpl; @Generated( value = { "http://www.jooq.org", - "jOOQ version:3.11.12" + "jOOQ version:3.12.3" }, comments = "This class is generated by jOOQ" ) @@ -40,7 +41,7 @@ import org.jooq.impl.TableImpl; public class Loottrackerevents extends TableImpl { - private static final long serialVersionUID = -824670812; + private static final long serialVersionUID = 1578403652; /** * The reference instance of PUBLIC.LOOTTRACKEREVENTS @@ -59,22 +60,22 @@ public class Loottrackerevents extends TableImpl /** * The column PUBLIC.LOOTTRACKEREVENTS.UNIQUEID. */ - public final TableField UNIQUEID = createField("UNIQUEID", org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); + public final TableField UNIQUEID = createField(DSL.name("UNIQUEID"), org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); /** * The column PUBLIC.LOOTTRACKEREVENTS.EVENTID. */ - public final TableField EVENTID = createField("EVENTID", org.jooq.impl.SQLDataType.VARCHAR(255).nullable(false), this, ""); + public final TableField EVENTID = createField(DSL.name("EVENTID"), org.jooq.impl.SQLDataType.VARCHAR(255).nullable(false), this, ""); /** * The column PUBLIC.LOOTTRACKEREVENTS.TYPE. */ - public final TableField TYPE = createField("TYPE", org.jooq.impl.SQLDataType.VARCHAR(255).nullable(false), this, ""); + public final TableField TYPE = createField(DSL.name("TYPE"), org.jooq.impl.SQLDataType.VARCHAR(255).nullable(false), this, ""); /** * The column PUBLIC.LOOTTRACKEREVENTS.TIME. */ - public final TableField TIME = createField("TIME", org.jooq.impl.SQLDataType.TIMESTAMP.precision(6).nullable(false), this, ""); + public final TableField TIME = createField(DSL.name("TIME"), org.jooq.impl.SQLDataType.TIMESTAMP.precision(6).nullable(false), this, ""); /** * Create a PUBLIC.LOOTTRACKEREVENTS table reference @@ -115,54 +116,36 @@ public class Loottrackerevents extends TableImpl super(child, key, LOOTTRACKEREVENTS); } - /** - * {@inheritDoc} - */ @Override public Schema getSchema() { return Public.PUBLIC; } - /** - * {@inheritDoc} - */ @Override public List getIndexes() { return Arrays.asList(Indexes.PRIMARY_KEY_B); } - /** - * {@inheritDoc} - */ @Override public UniqueKey getPrimaryKey() { - return Keys.PK_EVENTUNIQUEID; + return Keys.PK_LOOTTRACKEREVENTS; } - /** - * {@inheritDoc} - */ @Override public List> getKeys() { - return Arrays.>asList(Keys.PK_EVENTUNIQUEID); + return Arrays.>asList(Keys.PK_LOOTTRACKEREVENTS); } - /** - * {@inheritDoc} - */ @Override public Loottrackerevents as(String alias) { return new Loottrackerevents(DSL.name(alias), this); } - /** - * {@inheritDoc} - */ @Override public Loottrackerevents as(Name alias) { @@ -186,4 +169,14 @@ public class Loottrackerevents extends TableImpl { return new Loottrackerevents(name, null); } + + // ------------------------------------------------------------------------- + // Row4 type methods + // ------------------------------------------------------------------------- + + @Override + public Row4 fieldsRow() + { + return (Row4) super.fieldsRow(); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerlink.java b/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerlink.java index c720d8e5f5..f800608007 100644 --- a/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerlink.java +++ b/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerlink.java @@ -7,7 +7,7 @@ package net.runelite.client.database.data.tables; import java.util.Arrays; import java.util.List; import java.util.UUID; -import javax.annotation.Generated; +import javax.annotation.processing.Generated; import net.runelite.client.database.data.Indexes; import net.runelite.client.database.data.Keys; import net.runelite.client.database.data.Public; @@ -17,10 +17,10 @@ import org.jooq.ForeignKey; import org.jooq.Index; import org.jooq.Name; import org.jooq.Record; +import org.jooq.Row4; import org.jooq.Schema; import org.jooq.Table; import org.jooq.TableField; -import org.jooq.UniqueKey; import org.jooq.impl.DSL; import org.jooq.impl.TableImpl; @@ -31,7 +31,7 @@ import org.jooq.impl.TableImpl; @Generated( value = { "http://www.jooq.org", - "jOOQ version:3.11.12" + "jOOQ version:3.12.3" }, comments = "This class is generated by jOOQ" ) @@ -39,7 +39,7 @@ import org.jooq.impl.TableImpl; public class Loottrackerlink extends TableImpl { - private static final long serialVersionUID = 1145289106; + private static final long serialVersionUID = -1694278583; /** * The reference instance of PUBLIC.LOOTTRACKERLINK @@ -58,22 +58,22 @@ public class Loottrackerlink extends TableImpl /** * The column PUBLIC.LOOTTRACKERLINK.LINKUNIQUEID. */ - public final TableField LINKUNIQUEID = createField("LINKUNIQUEID", org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); + public final TableField LINKUNIQUEID = createField(DSL.name("LINKUNIQUEID"), org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); /** * The column PUBLIC.LOOTTRACKERLINK.EVENTUNIQUEID. */ - public final TableField EVENTUNIQUEID = createField("EVENTUNIQUEID", org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); + public final TableField EVENTUNIQUEID = createField(DSL.name("EVENTUNIQUEID"), org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); /** * The column PUBLIC.LOOTTRACKERLINK.DROPUNIQUEID. */ - public final TableField DROPUNIQUEID = createField("DROPUNIQUEID", org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); + public final TableField DROPUNIQUEID = createField(DSL.name("DROPUNIQUEID"), org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); /** * The column PUBLIC.LOOTTRACKERLINK.USERUNIQUEID. */ - public final TableField USERUNIQUEID = createField("USERUNIQUEID", org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); + public final TableField USERUNIQUEID = createField(DSL.name("USERUNIQUEID"), org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); /** * Create a PUBLIC.LOOTTRACKERLINK table reference @@ -114,49 +114,22 @@ public class Loottrackerlink extends TableImpl super(child, key, LOOTTRACKERLINK); } - /** - * {@inheritDoc} - */ @Override public Schema getSchema() { return Public.PUBLIC; } - /** - * {@inheritDoc} - */ @Override public List getIndexes() { - return Arrays.asList(Indexes.FK_LOOTTRACKEREVENT_INDEX_6, Indexes.FK_LOOTTRACKERLOOT_INDEX_6, Indexes.PRIMARY_KEY_6B); + return Arrays.asList(Indexes.FK_LOOTTRACKERDROP_INDEX_6, Indexes.FK_LOOTTRACKEREVENT_INDEX_6, Indexes.FK_USER_INDEX_6); } - /** - * {@inheritDoc} - */ - @Override - public UniqueKey getPrimaryKey() - { - return Keys.PK_LOOTTRACKERLINK; - } - - /** - * {@inheritDoc} - */ - @Override - public List> getKeys() - { - return Arrays.>asList(Keys.PK_LOOTTRACKERLINK); - } - - /** - * {@inheritDoc} - */ @Override public List> getReferences() { - return Arrays.>asList(Keys.FK_LOOTTRACKEREVENT, Keys.FK_LOOTTRACKERLOOT, Keys.FK_USER); + return Arrays.>asList(Keys.FK_LOOTTRACKEREVENT, Keys.FK_LOOTTRACKERDROP, Keys.FK_USER); } public Loottrackerevents loottrackerevents() @@ -166,7 +139,7 @@ public class Loottrackerlink extends TableImpl public Loottrackerloot loottrackerloot() { - return new Loottrackerloot(this, Keys.FK_LOOTTRACKERLOOT); + return new Loottrackerloot(this, Keys.FK_LOOTTRACKERDROP); } public User user() @@ -174,18 +147,12 @@ public class Loottrackerlink extends TableImpl return new User(this, Keys.FK_USER); } - /** - * {@inheritDoc} - */ @Override public Loottrackerlink as(String alias) { return new Loottrackerlink(DSL.name(alias), this); } - /** - * {@inheritDoc} - */ @Override public Loottrackerlink as(Name alias) { @@ -209,4 +176,14 @@ public class Loottrackerlink extends TableImpl { return new Loottrackerlink(name, null); } + + // ------------------------------------------------------------------------- + // Row4 type methods + // ------------------------------------------------------------------------- + + @Override + public Row4 fieldsRow() + { + return (Row4) super.fieldsRow(); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerloot.java b/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerloot.java index 6ea79852d8..a9d6b574a3 100644 --- a/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerloot.java +++ b/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerloot.java @@ -7,7 +7,7 @@ package net.runelite.client.database.data.tables; import java.util.Arrays; import java.util.List; import java.util.UUID; -import javax.annotation.Generated; +import javax.annotation.processing.Generated; import net.runelite.client.database.data.Indexes; import net.runelite.client.database.data.Keys; import net.runelite.client.database.data.Public; @@ -17,6 +17,7 @@ import org.jooq.ForeignKey; import org.jooq.Index; import org.jooq.Name; import org.jooq.Record; +import org.jooq.Row3; import org.jooq.Schema; import org.jooq.Table; import org.jooq.TableField; @@ -31,7 +32,7 @@ import org.jooq.impl.TableImpl; @Generated( value = { "http://www.jooq.org", - "jOOQ version:3.11.12" + "jOOQ version:3.12.3" }, comments = "This class is generated by jOOQ" ) @@ -39,7 +40,7 @@ import org.jooq.impl.TableImpl; public class Loottrackerloot extends TableImpl { - private static final long serialVersionUID = 1952959378; + private static final long serialVersionUID = 1461948279; /** * The reference instance of PUBLIC.LOOTTRACKERLOOT @@ -58,17 +59,17 @@ public class Loottrackerloot extends TableImpl /** * The column PUBLIC.LOOTTRACKERLOOT.UNIQUEID. */ - public final TableField UNIQUEID = createField("UNIQUEID", org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); + public final TableField UNIQUEID = createField(DSL.name("UNIQUEID"), org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); /** * The column PUBLIC.LOOTTRACKERLOOT.ITEMID. */ - public final TableField ITEMID = createField("ITEMID", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); + public final TableField ITEMID = createField(DSL.name("ITEMID"), org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); /** * The column PUBLIC.LOOTTRACKERLOOT.QUANTITY. */ - public final TableField QUANTITY = createField("QUANTITY", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); + public final TableField QUANTITY = createField(DSL.name("QUANTITY"), org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); /** * Create a PUBLIC.LOOTTRACKERLOOT table reference @@ -109,54 +110,36 @@ public class Loottrackerloot extends TableImpl super(child, key, LOOTTRACKERLOOT); } - /** - * {@inheritDoc} - */ @Override public Schema getSchema() { return Public.PUBLIC; } - /** - * {@inheritDoc} - */ @Override public List getIndexes() { return Arrays.asList(Indexes.PRIMARY_KEY_6); } - /** - * {@inheritDoc} - */ @Override public UniqueKey getPrimaryKey() { - return Keys.PK_LOOTUNIQUEID; + return Keys.PK_LOOTTRACKERDROPS; } - /** - * {@inheritDoc} - */ @Override public List> getKeys() { - return Arrays.>asList(Keys.PK_LOOTUNIQUEID); + return Arrays.>asList(Keys.PK_LOOTTRACKERDROPS); } - /** - * {@inheritDoc} - */ @Override public Loottrackerloot as(String alias) { return new Loottrackerloot(DSL.name(alias), this); } - /** - * {@inheritDoc} - */ @Override public Loottrackerloot as(Name alias) { @@ -180,4 +163,14 @@ public class Loottrackerloot extends TableImpl { return new Loottrackerloot(name, null); } + + // ------------------------------------------------------------------------- + // Row3 type methods + // ------------------------------------------------------------------------- + + @Override + public Row3 fieldsRow() + { + return (Row3) super.fieldsRow(); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/tables/TmorphSets.java b/runelite-client/src/main/java/net/runelite/client/database/data/tables/TmorphSets.java new file mode 100644 index 0000000000..fcc76b8504 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/database/data/tables/TmorphSets.java @@ -0,0 +1,196 @@ +/* + * This file is generated by jOOQ. + */ +package net.runelite.client.database.data.tables; + + +import java.util.Arrays; +import java.util.List; +import javax.annotation.processing.Generated; +import net.runelite.client.database.data.Indexes; +import net.runelite.client.database.data.Public; +import net.runelite.client.database.data.tables.records.TmorphSetsRecord; +import org.jooq.Field; +import org.jooq.ForeignKey; +import org.jooq.Index; +import org.jooq.Name; +import org.jooq.Record; +import org.jooq.Row10; +import org.jooq.Schema; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.DSL; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.12.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({"all", "unchecked", "rawtypes"}) +public class TmorphSets extends TableImpl +{ + + private static final long serialVersionUID = -2027086786; + + /** + * The reference instance of PUBLIC.TMORPH_SETS + */ + public static final TmorphSets TMORPH_SETS = new TmorphSets(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() + { + return TmorphSetsRecord.class; + } + + /** + * The column PUBLIC.TMORPH_SETS.SET_NAME. + */ + public final TableField SET_NAME = createField(DSL.name("SET_NAME"), org.jooq.impl.SQLDataType.VARCHAR(255).nullable(false), this, ""); + + /** + * The column PUBLIC.TMORPH_SETS.HELMET. + */ + public final TableField HELMET = createField(DSL.name("HELMET"), org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); + + /** + * The column PUBLIC.TMORPH_SETS.CAPE. + */ + public final TableField CAPE = createField(DSL.name("CAPE"), org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); + + /** + * The column PUBLIC.TMORPH_SETS.AMULET. + */ + public final TableField AMULET = createField(DSL.name("AMULET"), org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); + + /** + * The column PUBLIC.TMORPH_SETS.WEAPON. + */ + public final TableField WEAPON = createField(DSL.name("WEAPON"), org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); + + /** + * The column PUBLIC.TMORPH_SETS.TORSO. + */ + public final TableField TORSO = createField(DSL.name("TORSO"), org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); + + /** + * The column PUBLIC.TMORPH_SETS.SHIELD. + */ + public final TableField SHIELD = createField(DSL.name("SHIELD"), org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); + + /** + * The column PUBLIC.TMORPH_SETS.LEGS. + */ + public final TableField LEGS = createField(DSL.name("LEGS"), org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); + + /** + * The column PUBLIC.TMORPH_SETS.HANDS. + */ + public final TableField HANDS = createField(DSL.name("HANDS"), org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); + + /** + * The column PUBLIC.TMORPH_SETS.BOOTS. + */ + public final TableField BOOTS = createField(DSL.name("BOOTS"), org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); + + /** + * Create a PUBLIC.TMORPH_SETS table reference + */ + public TmorphSets() + { + this(DSL.name("TMORPH_SETS"), null); + } + + /** + * Create an aliased PUBLIC.TMORPH_SETS table reference + */ + public TmorphSets(String alias) + { + this(DSL.name(alias), TMORPH_SETS); + } + + /** + * Create an aliased PUBLIC.TMORPH_SETS table reference + */ + public TmorphSets(Name alias) + { + this(alias, TMORPH_SETS); + } + + private TmorphSets(Name alias, Table aliased) + { + this(alias, aliased, null); + } + + private TmorphSets(Name alias, Table aliased, Field[] parameters) + { + super(alias, null, aliased, parameters, DSL.comment("")); + } + + public TmorphSets(Table child, ForeignKey key) + { + super(child, key, TMORPH_SETS); + } + + @Override + public Schema getSchema() + { + return Public.PUBLIC; + } + + @Override + public List getIndexes() + { + return Arrays.asList(Indexes.TMORPH_SETS_SET_NAME_UINDEX); + } + + @Override + public TmorphSets as(String alias) + { + return new TmorphSets(DSL.name(alias), this); + } + + @Override + public TmorphSets as(Name alias) + { + return new TmorphSets(alias, this); + } + + /** + * Rename this table + */ + @Override + public TmorphSets rename(String name) + { + return new TmorphSets(DSL.name(name), null); + } + + /** + * Rename this table + */ + @Override + public TmorphSets rename(Name name) + { + return new TmorphSets(name, null); + } + + // ------------------------------------------------------------------------- + // Row10 type methods + // ------------------------------------------------------------------------- + + @Override + public Row10 fieldsRow() + { + return (Row10) super.fieldsRow(); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/tables/User.java b/runelite-client/src/main/java/net/runelite/client/database/data/tables/User.java index b9295a486d..15588c223d 100644 --- a/runelite-client/src/main/java/net/runelite/client/database/data/tables/User.java +++ b/runelite-client/src/main/java/net/runelite/client/database/data/tables/User.java @@ -7,7 +7,7 @@ package net.runelite.client.database.data.tables; import java.util.Arrays; import java.util.List; import java.util.UUID; -import javax.annotation.Generated; +import javax.annotation.processing.Generated; import net.runelite.client.database.data.Indexes; import net.runelite.client.database.data.Keys; import net.runelite.client.database.data.Public; @@ -17,6 +17,7 @@ import org.jooq.ForeignKey; import org.jooq.Index; import org.jooq.Name; import org.jooq.Record; +import org.jooq.Row2; import org.jooq.Schema; import org.jooq.Table; import org.jooq.TableField; @@ -31,7 +32,7 @@ import org.jooq.impl.TableImpl; @Generated( value = { "http://www.jooq.org", - "jOOQ version:3.11.12" + "jOOQ version:3.12.3" }, comments = "This class is generated by jOOQ" ) @@ -39,7 +40,7 @@ import org.jooq.impl.TableImpl; public class User extends TableImpl { - private static final long serialVersionUID = 270848699; + private static final long serialVersionUID = -668009102; /** * The reference instance of PUBLIC.USER @@ -58,12 +59,12 @@ public class User extends TableImpl /** * The column PUBLIC.USER.UNIQUEID. */ - public final TableField UNIQUEID = createField("UNIQUEID", org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); + public final TableField UNIQUEID = createField(DSL.name("UNIQUEID"), org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); /** * The column PUBLIC.USER.USERNAME. */ - public final TableField USERNAME = createField("USERNAME", org.jooq.impl.SQLDataType.VARCHAR(12).nullable(false), this, ""); + public final TableField USERNAME = createField(DSL.name("USERNAME"), org.jooq.impl.SQLDataType.VARCHAR(12).nullable(false), this, ""); /** * Create a PUBLIC.USER table reference @@ -104,54 +105,36 @@ public class User extends TableImpl super(child, key, USER); } - /** - * {@inheritDoc} - */ @Override public Schema getSchema() { return Public.PUBLIC; } - /** - * {@inheritDoc} - */ @Override public List getIndexes() { - return Arrays.asList(Indexes.PRIMARY_KEY_2); + return Arrays.asList(Indexes.PRIMARY_KEY_2, Indexes.UN_USERNAME_INDEX_2); } - /** - * {@inheritDoc} - */ @Override public UniqueKey getPrimaryKey() { return Keys.PK_USER; } - /** - * {@inheritDoc} - */ @Override public List> getKeys() { - return Arrays.>asList(Keys.PK_USER); + return Arrays.>asList(Keys.PK_USER, Keys.UN_USERNAME); } - /** - * {@inheritDoc} - */ @Override public User as(String alias) { return new User(DSL.name(alias), this); } - /** - * {@inheritDoc} - */ @Override public User as(Name alias) { @@ -175,4 +158,14 @@ public class User extends TableImpl { return new User(name, null); } + + // ------------------------------------------------------------------------- + // Row2 type methods + // ------------------------------------------------------------------------- + + @Override + public Row2 fieldsRow() + { + return (Row2) super.fieldsRow(); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/tables/records/LoottrackereventsRecord.java b/runelite-client/src/main/java/net/runelite/client/database/data/tables/records/LoottrackereventsRecord.java index 9bd71f4468..00f0095252 100644 --- a/runelite-client/src/main/java/net/runelite/client/database/data/tables/records/LoottrackereventsRecord.java +++ b/runelite-client/src/main/java/net/runelite/client/database/data/tables/records/LoottrackereventsRecord.java @@ -6,7 +6,7 @@ package net.runelite.client.database.data.tables.records; import java.sql.Timestamp; import java.util.UUID; -import javax.annotation.Generated; +import javax.annotation.processing.Generated; import net.runelite.client.database.data.tables.Loottrackerevents; import org.jooq.Field; import org.jooq.Record1; @@ -21,7 +21,7 @@ import org.jooq.impl.UpdatableRecordImpl; @Generated( value = { "http://www.jooq.org", - "jOOQ version:3.11.12" + "jOOQ version:3.12.3" }, comments = "This class is generated by jOOQ" ) @@ -29,7 +29,7 @@ import org.jooq.impl.UpdatableRecordImpl; public class LoottrackereventsRecord extends UpdatableRecordImpl implements Record4 { - private static final long serialVersionUID = -1505143967; + private static final long serialVersionUID = -1418522415; /** * Setter for PUBLIC.LOOTTRACKEREVENTS.UNIQUEID. @@ -99,9 +99,6 @@ public class LoottrackereventsRecord extends UpdatableRecordImpl key() { @@ -112,135 +109,90 @@ public class LoottrackereventsRecord extends UpdatableRecordImpl fieldsRow() { return (Row4) super.fieldsRow(); } - /** - * {@inheritDoc} - */ @Override public Row4 valuesRow() { return (Row4) super.valuesRow(); } - /** - * {@inheritDoc} - */ @Override public Field field1() { return Loottrackerevents.LOOTTRACKEREVENTS.UNIQUEID; } - /** - * {@inheritDoc} - */ @Override public Field field2() { return Loottrackerevents.LOOTTRACKEREVENTS.EVENTID; } - /** - * {@inheritDoc} - */ @Override public Field field3() { return Loottrackerevents.LOOTTRACKEREVENTS.TYPE; } - /** - * {@inheritDoc} - */ @Override public Field field4() { return Loottrackerevents.LOOTTRACKEREVENTS.TIME; } - /** - * {@inheritDoc} - */ @Override public UUID component1() { return getUniqueid(); } - /** - * {@inheritDoc} - */ @Override public String component2() { return getEventid(); } - /** - * {@inheritDoc} - */ @Override public String component3() { return getType(); } - /** - * {@inheritDoc} - */ @Override public Timestamp component4() { return getTime(); } - /** - * {@inheritDoc} - */ @Override public UUID value1() { return getUniqueid(); } - /** - * {@inheritDoc} - */ @Override public String value2() { return getEventid(); } - /** - * {@inheritDoc} - */ @Override public String value3() { return getType(); } - /** - * {@inheritDoc} - */ @Override public Timestamp value4() { return getTime(); } - /** - * {@inheritDoc} - */ @Override public LoottrackereventsRecord value1(UUID value) { @@ -248,9 +200,6 @@ public class LoottrackereventsRecord extends UpdatableRecordImpl implements Record4 +public class LoottrackerlinkRecord extends TableRecordImpl implements Record4 { - private static final long serialVersionUID = 1985117517; + private static final long serialVersionUID = -1701074584; /** * Setter for PUBLIC.LOOTTRACKERLINK.LINKUNIQUEID. @@ -94,152 +93,94 @@ public class LoottrackerlinkRecord extends UpdatableRecordImpl key() - { - return (Record1) super.key(); - } - // ------------------------------------------------------------------------- // Record4 type implementation // ------------------------------------------------------------------------- - /** - * {@inheritDoc} - */ @Override public Row4 fieldsRow() { return (Row4) super.fieldsRow(); } - /** - * {@inheritDoc} - */ @Override public Row4 valuesRow() { return (Row4) super.valuesRow(); } - /** - * {@inheritDoc} - */ @Override public Field field1() { return Loottrackerlink.LOOTTRACKERLINK.LINKUNIQUEID; } - /** - * {@inheritDoc} - */ @Override public Field field2() { return Loottrackerlink.LOOTTRACKERLINK.EVENTUNIQUEID; } - /** - * {@inheritDoc} - */ @Override public Field field3() { return Loottrackerlink.LOOTTRACKERLINK.DROPUNIQUEID; } - /** - * {@inheritDoc} - */ @Override public Field field4() { return Loottrackerlink.LOOTTRACKERLINK.USERUNIQUEID; } - /** - * {@inheritDoc} - */ @Override public UUID component1() { return getLinkuniqueid(); } - /** - * {@inheritDoc} - */ @Override public UUID component2() { return getEventuniqueid(); } - /** - * {@inheritDoc} - */ @Override public UUID component3() { return getDropuniqueid(); } - /** - * {@inheritDoc} - */ @Override public UUID component4() { return getUseruniqueid(); } - /** - * {@inheritDoc} - */ @Override public UUID value1() { return getLinkuniqueid(); } - /** - * {@inheritDoc} - */ @Override public UUID value2() { return getEventuniqueid(); } - /** - * {@inheritDoc} - */ @Override public UUID value3() { return getDropuniqueid(); } - /** - * {@inheritDoc} - */ @Override public UUID value4() { return getUseruniqueid(); } - /** - * {@inheritDoc} - */ @Override public LoottrackerlinkRecord value1(UUID value) { @@ -247,9 +188,6 @@ public class LoottrackerlinkRecord extends UpdatableRecordImpl implements Record3 { - private static final long serialVersionUID = -1894768090; + private static final long serialVersionUID = 693470968; /** * Setter for PUBLIC.LOOTTRACKERLOOT.UNIQUEID. @@ -82,9 +82,6 @@ public class LoottrackerlootRecord extends UpdatableRecordImpl key() { @@ -95,108 +92,72 @@ public class LoottrackerlootRecord extends UpdatableRecordImpl fieldsRow() { return (Row3) super.fieldsRow(); } - /** - * {@inheritDoc} - */ @Override public Row3 valuesRow() { return (Row3) super.valuesRow(); } - /** - * {@inheritDoc} - */ @Override public Field field1() { return Loottrackerloot.LOOTTRACKERLOOT.UNIQUEID; } - /** - * {@inheritDoc} - */ @Override public Field field2() { return Loottrackerloot.LOOTTRACKERLOOT.ITEMID; } - /** - * {@inheritDoc} - */ @Override public Field field3() { return Loottrackerloot.LOOTTRACKERLOOT.QUANTITY; } - /** - * {@inheritDoc} - */ @Override public UUID component1() { return getUniqueid(); } - /** - * {@inheritDoc} - */ @Override public Integer component2() { return getItemid(); } - /** - * {@inheritDoc} - */ @Override public Integer component3() { return getQuantity(); } - /** - * {@inheritDoc} - */ @Override public UUID value1() { return getUniqueid(); } - /** - * {@inheritDoc} - */ @Override public Integer value2() { return getItemid(); } - /** - * {@inheritDoc} - */ @Override public Integer value3() { return getQuantity(); } - /** - * {@inheritDoc} - */ @Override public LoottrackerlootRecord value1(UUID value) { @@ -204,9 +165,6 @@ public class LoottrackerlootRecord extends UpdatableRecordImpl implements Record10 +{ + + private static final long serialVersionUID = 546214401; + + /** + * Setter for PUBLIC.TMORPH_SETS.SET_NAME. + */ + public void setSetName(String value) + { + set(0, value); + } + + /** + * Getter for PUBLIC.TMORPH_SETS.SET_NAME. + */ + public String getSetName() + { + return (String) get(0); + } + + /** + * Setter for PUBLIC.TMORPH_SETS.HELMET. + */ + public void setHelmet(Integer value) + { + set(1, value); + } + + /** + * Getter for PUBLIC.TMORPH_SETS.HELMET. + */ + public Integer getHelmet() + { + return (Integer) get(1); + } + + /** + * Setter for PUBLIC.TMORPH_SETS.CAPE. + */ + public void setCape(Integer value) + { + set(2, value); + } + + /** + * Getter for PUBLIC.TMORPH_SETS.CAPE. + */ + public Integer getCape() + { + return (Integer) get(2); + } + + /** + * Setter for PUBLIC.TMORPH_SETS.AMULET. + */ + public void setAmulet(Integer value) + { + set(3, value); + } + + /** + * Getter for PUBLIC.TMORPH_SETS.AMULET. + */ + public Integer getAmulet() + { + return (Integer) get(3); + } + + /** + * Setter for PUBLIC.TMORPH_SETS.WEAPON. + */ + public void setWeapon(Integer value) + { + set(4, value); + } + + /** + * Getter for PUBLIC.TMORPH_SETS.WEAPON. + */ + public Integer getWeapon() + { + return (Integer) get(4); + } + + /** + * Setter for PUBLIC.TMORPH_SETS.TORSO. + */ + public void setTorso(Integer value) + { + set(5, value); + } + + /** + * Getter for PUBLIC.TMORPH_SETS.TORSO. + */ + public Integer getTorso() + { + return (Integer) get(5); + } + + /** + * Setter for PUBLIC.TMORPH_SETS.SHIELD. + */ + public void setShield(Integer value) + { + set(6, value); + } + + /** + * Getter for PUBLIC.TMORPH_SETS.SHIELD. + */ + public Integer getShield() + { + return (Integer) get(6); + } + + /** + * Setter for PUBLIC.TMORPH_SETS.LEGS. + */ + public void setLegs(Integer value) + { + set(7, value); + } + + /** + * Getter for PUBLIC.TMORPH_SETS.LEGS. + */ + public Integer getLegs() + { + return (Integer) get(7); + } + + /** + * Setter for PUBLIC.TMORPH_SETS.HANDS. + */ + public void setHands(Integer value) + { + set(8, value); + } + + /** + * Getter for PUBLIC.TMORPH_SETS.HANDS. + */ + public Integer getHands() + { + return (Integer) get(8); + } + + /** + * Setter for PUBLIC.TMORPH_SETS.BOOTS. + */ + public void setBoots(Integer value) + { + set(9, value); + } + + /** + * Getter for PUBLIC.TMORPH_SETS.BOOTS. + */ + public Integer getBoots() + { + return (Integer) get(9); + } + + // ------------------------------------------------------------------------- + // Record10 type implementation + // ------------------------------------------------------------------------- + + @Override + public Row10 fieldsRow() + { + return (Row10) super.fieldsRow(); + } + + @Override + public Row10 valuesRow() + { + return (Row10) super.valuesRow(); + } + + @Override + public Field field1() + { + return TmorphSets.TMORPH_SETS.SET_NAME; + } + + @Override + public Field field2() + { + return TmorphSets.TMORPH_SETS.HELMET; + } + + @Override + public Field field3() + { + return TmorphSets.TMORPH_SETS.CAPE; + } + + @Override + public Field field4() + { + return TmorphSets.TMORPH_SETS.AMULET; + } + + @Override + public Field field5() + { + return TmorphSets.TMORPH_SETS.WEAPON; + } + + @Override + public Field field6() + { + return TmorphSets.TMORPH_SETS.TORSO; + } + + @Override + public Field field7() + { + return TmorphSets.TMORPH_SETS.SHIELD; + } + + @Override + public Field field8() + { + return TmorphSets.TMORPH_SETS.LEGS; + } + + @Override + public Field field9() + { + return TmorphSets.TMORPH_SETS.HANDS; + } + + @Override + public Field field10() + { + return TmorphSets.TMORPH_SETS.BOOTS; + } + + @Override + public String component1() + { + return getSetName(); + } + + @Override + public Integer component2() + { + return getHelmet(); + } + + @Override + public Integer component3() + { + return getCape(); + } + + @Override + public Integer component4() + { + return getAmulet(); + } + + @Override + public Integer component5() + { + return getWeapon(); + } + + @Override + public Integer component6() + { + return getTorso(); + } + + @Override + public Integer component7() + { + return getShield(); + } + + @Override + public Integer component8() + { + return getLegs(); + } + + @Override + public Integer component9() + { + return getHands(); + } + + @Override + public Integer component10() + { + return getBoots(); + } + + @Override + public String value1() + { + return getSetName(); + } + + @Override + public Integer value2() + { + return getHelmet(); + } + + @Override + public Integer value3() + { + return getCape(); + } + + @Override + public Integer value4() + { + return getAmulet(); + } + + @Override + public Integer value5() + { + return getWeapon(); + } + + @Override + public Integer value6() + { + return getTorso(); + } + + @Override + public Integer value7() + { + return getShield(); + } + + @Override + public Integer value8() + { + return getLegs(); + } + + @Override + public Integer value9() + { + return getHands(); + } + + @Override + public Integer value10() + { + return getBoots(); + } + + @Override + public TmorphSetsRecord value1(String value) + { + setSetName(value); + return this; + } + + @Override + public TmorphSetsRecord value2(Integer value) + { + setHelmet(value); + return this; + } + + @Override + public TmorphSetsRecord value3(Integer value) + { + setCape(value); + return this; + } + + @Override + public TmorphSetsRecord value4(Integer value) + { + setAmulet(value); + return this; + } + + @Override + public TmorphSetsRecord value5(Integer value) + { + setWeapon(value); + return this; + } + + @Override + public TmorphSetsRecord value6(Integer value) + { + setTorso(value); + return this; + } + + @Override + public TmorphSetsRecord value7(Integer value) + { + setShield(value); + return this; + } + + @Override + public TmorphSetsRecord value8(Integer value) + { + setLegs(value); + return this; + } + + @Override + public TmorphSetsRecord value9(Integer value) + { + setHands(value); + return this; + } + + @Override + public TmorphSetsRecord value10(Integer value) + { + setBoots(value); + return this; + } + + @Override + public TmorphSetsRecord values(String value1, Integer value2, Integer value3, Integer value4, Integer value5, Integer value6, Integer value7, Integer value8, Integer value9, Integer value10) + { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + value6(value6); + value7(value7); + value8(value8); + value9(value9); + value10(value10); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached TmorphSetsRecord + */ + public TmorphSetsRecord() + { + super(TmorphSets.TMORPH_SETS); + } + + /** + * Create a detached, initialised TmorphSetsRecord + */ + public TmorphSetsRecord(String setName, Integer helmet, Integer cape, Integer amulet, Integer weapon, Integer torso, Integer shield, Integer legs, Integer hands, Integer boots) + { + super(TmorphSets.TMORPH_SETS); + + set(0, setName); + set(1, helmet); + set(2, cape); + set(3, amulet); + set(4, weapon); + set(5, torso); + set(6, shield); + set(7, legs); + set(8, hands); + set(9, boots); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/tables/records/UserRecord.java b/runelite-client/src/main/java/net/runelite/client/database/data/tables/records/UserRecord.java index b57e450a8e..2aeec56d34 100644 --- a/runelite-client/src/main/java/net/runelite/client/database/data/tables/records/UserRecord.java +++ b/runelite-client/src/main/java/net/runelite/client/database/data/tables/records/UserRecord.java @@ -5,7 +5,7 @@ package net.runelite.client.database.data.tables.records; import java.util.UUID; -import javax.annotation.Generated; +import javax.annotation.processing.Generated; import net.runelite.client.database.data.tables.User; import org.jooq.Field; import org.jooq.Record1; @@ -20,7 +20,7 @@ import org.jooq.impl.UpdatableRecordImpl; @Generated( value = { "http://www.jooq.org", - "jOOQ version:3.11.12" + "jOOQ version:3.12.3" }, comments = "This class is generated by jOOQ" ) @@ -28,7 +28,7 @@ import org.jooq.impl.UpdatableRecordImpl; public class UserRecord extends UpdatableRecordImpl implements Record2 { - private static final long serialVersionUID = 628808107; + private static final long serialVersionUID = 2077804101; /** * Setter for PUBLIC.USER.UNIQUEID. @@ -66,9 +66,6 @@ public class UserRecord extends UpdatableRecordImpl implements Recor // Primary key information // ------------------------------------------------------------------------- - /** - * {@inheritDoc} - */ @Override public Record1 key() { @@ -79,81 +76,54 @@ public class UserRecord extends UpdatableRecordImpl implements Recor // Record2 type implementation // ------------------------------------------------------------------------- - /** - * {@inheritDoc} - */ @Override public Row2 fieldsRow() { return (Row2) super.fieldsRow(); } - /** - * {@inheritDoc} - */ @Override public Row2 valuesRow() { return (Row2) super.valuesRow(); } - /** - * {@inheritDoc} - */ @Override public Field field1() { return User.USER.UNIQUEID; } - /** - * {@inheritDoc} - */ @Override public Field field2() { return User.USER.USERNAME; } - /** - * {@inheritDoc} - */ @Override public UUID component1() { return getUniqueid(); } - /** - * {@inheritDoc} - */ @Override public String component2() { return getUsername(); } - /** - * {@inheritDoc} - */ @Override public UUID value1() { return getUniqueid(); } - /** - * {@inheritDoc} - */ @Override public String value2() { return getUsername(); } - /** - * {@inheritDoc} - */ @Override public UserRecord value1(UUID value) { @@ -161,9 +131,6 @@ public class UserRecord extends UpdatableRecordImpl implements Recor return this; } - /** - * {@inheritDoc} - */ @Override public UserRecord value2(String value) { @@ -171,9 +138,6 @@ public class UserRecord extends UpdatableRecordImpl implements Recor return this; } - /** - * {@inheritDoc} - */ @Override public UserRecord values(UUID value1, String value2) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/Hydra.java b/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/AlchemicalHydra.java similarity index 89% rename from runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/Hydra.java rename to runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/AlchemicalHydra.java index 3b332f3589..97782f5c8a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/Hydra.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/AlchemicalHydra.java @@ -40,7 +40,7 @@ import net.runelite.client.util.ImageUtil; @Getter(AccessLevel.PACKAGE) @RequiredArgsConstructor @Singleton -class Hydra +class AlchemicalHydra { @Getter(AccessLevel.PACKAGE) @RequiredArgsConstructor @@ -61,7 +61,7 @@ class Hydra if (image == null) { BufferedImage tmp = spriteManager.getSprite(spriteID, 0); - image = tmp == null ? null : ImageUtil.resizeImage(tmp, HydraOverlay.IMGSIZE, HydraOverlay.IMGSIZE); + image = tmp == null ? null : ImageUtil.resizeImage(tmp, AlchemicalHydraOverlay.IMGSIZE, AlchemicalHydraOverlay.IMGSIZE); } return image; @@ -70,7 +70,7 @@ class Hydra private final NPC npc; - private HydraPhase phase = HydraPhase.ONE; + private AlchemicalHydraPhase phase = AlchemicalHydraPhase.ONE; private int attackCount = 0; private int nextSwitch = phase.getAttacksPerSwitch(); @@ -84,14 +84,14 @@ class Hydra @Setter(AccessLevel.PACKAGE) private boolean weakened = false; - void changePhase(HydraPhase newPhase) + void changePhase(AlchemicalHydraPhase newPhase) { phase = newPhase; nextSpecial = 3; attackCount = 0; weakened = false; - if (newPhase == HydraPhase.FOUR) + if (newPhase == AlchemicalHydraPhase.FOUR) { weakened = true; switchStyles(); @@ -101,9 +101,9 @@ class Hydra private void switchStyles() { - nextAttack = lastAttack == Hydra.AttackStyle.MAGIC - ? Hydra.AttackStyle.RANGED - : Hydra.AttackStyle.MAGIC; + nextAttack = lastAttack == AlchemicalHydra.AttackStyle.MAGIC + ? AlchemicalHydra.AttackStyle.RANGED + : AlchemicalHydra.AttackStyle.MAGIC; } void handleAttack(int id) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/AlchemicalHydraConfig.java similarity index 98% rename from runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraConfig.java rename to runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/AlchemicalHydraConfig.java index 4cf308f3e7..90ac1350cb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/AlchemicalHydraConfig.java @@ -32,7 +32,7 @@ import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigSection; @ConfigGroup("betterHydra") -public interface HydraConfig extends Config +public interface AlchemicalHydraConfig extends Config { @ConfigSection( keyName = "features", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/AlchemicalHydraOverlay.java similarity index 93% rename from runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraOverlay.java rename to runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/AlchemicalHydraOverlay.java index 38572c9ee2..e844f897b3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/AlchemicalHydraOverlay.java @@ -47,11 +47,11 @@ import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.util.ImageUtil; @Singleton -class HydraOverlay extends Overlay +class AlchemicalHydraOverlay extends Overlay { static final int IMGSIZE = 36; - private final HydraPlugin plugin; + private final AlchemicalHydraPlugin plugin; private final Client client; private final SpriteManager spriteManager; private final PanelComponent panelComponent = new PanelComponent(); @@ -71,7 +71,7 @@ class HydraOverlay extends Overlay private int stunTicks; @Inject - HydraOverlay(final HydraPlugin plugin, final Client client, final SpriteManager spriteManager) + AlchemicalHydraOverlay(final AlchemicalHydraPlugin plugin, final Client client, final SpriteManager spriteManager) { this.plugin = plugin; this.client = client; @@ -83,7 +83,7 @@ class HydraOverlay extends Overlay @Override public Dimension render(Graphics2D graphics2D) { - final Hydra hydra = plugin.getHydra(); + final AlchemicalHydra hydra = plugin.getHydra(); panelComponent.getChildren().clear(); if (hydra == null) @@ -125,9 +125,9 @@ class HydraOverlay extends Overlay panelComponent.getChildren().add(stunComponent); } - private void addSpecOverlay(final Hydra hydra) + private void addSpecOverlay(final AlchemicalHydra hydra) { - final HydraPhase phase = hydra.getPhase(); + final AlchemicalHydraPhase phase = hydra.getPhase(); final int nextSpec = hydra.getNextSpecialRelative(); if (nextSpec > 3) @@ -152,7 +152,7 @@ class HydraOverlay extends Overlay panelComponent.getChildren().add(specComponent); } - private void addPrayOverlay(final Hydra hydra) + private void addPrayOverlay(final AlchemicalHydra hydra) { final Prayer nextPrayer = hydra.getNextAttack().getPrayer(); final int nextSwitch = hydra.getNextSwitch(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraPhase.java b/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/AlchemicalHydraPhase.java similarity index 94% rename from runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraPhase.java rename to runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/AlchemicalHydraPhase.java index 4fa739e6d8..97e577d6ef 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraPhase.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/AlchemicalHydraPhase.java @@ -37,7 +37,7 @@ import net.runelite.client.util.ImageUtil; @Getter(AccessLevel.PACKAGE) @RequiredArgsConstructor -enum HydraPhase +enum AlchemicalHydraPhase { ONE(3, AnimationID.HYDRA_1_1, AnimationID.HYDRA_1_2, ProjectileID.HYDRA_POISON, 0, SpriteID.BIG_ASS_GUTHIX_SPELL, new WorldPoint(1371, 10263, 0)), TWO(3, AnimationID.HYDRA_2_1, AnimationID.HYDRA_2_2, 0, AnimationID.HYDRA_LIGHTNING, SpriteID.BIG_SPEC_TRANSFER, new WorldPoint(1371, 10272, 0)), @@ -61,7 +61,7 @@ enum HydraPhase if (specImage == null) { BufferedImage tmp = spriteManager.getSprite(specImageID, 0); - specImage = tmp == null ? null : ImageUtil.resizeImage(tmp, HydraOverlay.IMGSIZE, HydraOverlay.IMGSIZE); + specImage = tmp == null ? null : ImageUtil.resizeImage(tmp, AlchemicalHydraOverlay.IMGSIZE, AlchemicalHydraOverlay.IMGSIZE); } return specImage; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/AlchemicalHydraPlugin.java similarity index 91% rename from runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraPlugin.java rename to runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/AlchemicalHydraPlugin.java index 39f0cf3a52..c51dde9e2d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/AlchemicalHydraPlugin.java @@ -56,7 +56,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; -import net.runelite.client.plugins.alchemicalhydra.Hydra.AttackStyle; +import net.runelite.client.plugins.alchemicalhydra.AlchemicalHydra.AttackStyle; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( @@ -68,7 +68,7 @@ import net.runelite.client.ui.overlay.OverlayManager; ) @Slf4j @Singleton -public class HydraPlugin extends Plugin +public class AlchemicalHydraPlugin extends Plugin { private static final int[] HYDRA_REGIONS = { 5279, 5280, @@ -80,7 +80,7 @@ public class HydraPlugin extends Plugin private Map poisonProjectiles = new HashMap<>(); @Getter(AccessLevel.PACKAGE) - private Hydra hydra; + private AlchemicalHydra hydra; @Getter(AccessLevel.PACKAGE) private boolean counting; @@ -101,21 +101,21 @@ public class HydraPlugin extends Plugin private EventBus eventBus; @Inject - private HydraConfig config; + private AlchemicalHydraConfig config; @Inject - private HydraOverlay overlay; + private AlchemicalHydraOverlay overlay; @Inject - private HydraSceneOverlay sceneOverlay; + private AlchemicalHydraSceneOverlay sceneOverlay; @Inject private OverlayManager overlayManager; @Provides - HydraConfig provideConfig(ConfigManager configManager) + AlchemicalHydraConfig provideConfig(ConfigManager configManager) { - return configManager.getConfig(HydraConfig.class); + return configManager.getConfig(AlchemicalHydraConfig.class); } @Override @@ -235,7 +235,7 @@ public class HydraPlugin extends Plugin { if (npc.getId() == NpcID.ALCHEMICAL_HYDRA) { - hydra = new Hydra(npc); + hydra = new AlchemicalHydra(npc); addFightSubscriptions(); break; } @@ -252,7 +252,7 @@ public class HydraPlugin extends Plugin } eventBus.unregister("npcSpawned"); - hydra = new Hydra(event.getNpc()); + hydra = new AlchemicalHydra(event.getNpc()); addFightSubscriptions(); addOverlays(); } @@ -266,23 +266,23 @@ public class HydraPlugin extends Plugin return; } - HydraPhase phase = hydra.getPhase(); + AlchemicalHydraPhase phase = hydra.getPhase(); if (actor.getAnimation() == phase.getDeathAnim2() && - phase != HydraPhase.THREE // Else log's gonna say "Tried some weird shit" + phase != AlchemicalHydraPhase.THREE // Else log's gonna say "Tried some weird shit" || actor.getAnimation() == phase.getDeathAnim1() && - phase == HydraPhase.THREE) // We want the pray to switch ye ok ty + phase == AlchemicalHydraPhase.THREE) // We want the pray to switch ye ok ty { switch (phase) { case ONE: - hydra.changePhase(HydraPhase.TWO); + hydra.changePhase(AlchemicalHydraPhase.TWO); return; case TWO: - hydra.changePhase(HydraPhase.THREE); + hydra.changePhase(AlchemicalHydraPhase.THREE); return; case THREE: - hydra.changePhase(HydraPhase.FOUR); + hydra.changePhase(AlchemicalHydraPhase.FOUR); return; case FOUR: hydra = null; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraSceneOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/AlchemicalHydraSceneOverlay.java similarity index 93% rename from runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraSceneOverlay.java rename to runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/AlchemicalHydraSceneOverlay.java index 257bf9f6b6..71e24470b8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraSceneOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/AlchemicalHydraSceneOverlay.java @@ -47,7 +47,7 @@ import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; @Singleton -class HydraSceneOverlay extends Overlay +class AlchemicalHydraSceneOverlay extends Overlay { @Setter(AccessLevel.PACKAGE) private Color poisonBorder; @@ -61,11 +61,11 @@ class HydraSceneOverlay extends Overlay @Setter(AccessLevel.PACKAGE) private Color badFountain; - private final HydraPlugin plugin; + private final AlchemicalHydraPlugin plugin; private final Client client; @Inject - public HydraSceneOverlay(final Client client, final HydraPlugin plugin) + public AlchemicalHydraSceneOverlay(final Client client, final AlchemicalHydraPlugin plugin) { setPosition(OverlayPosition.DYNAMIC); setLayer(OverlayLayer.UNDER_WIDGETS); @@ -76,7 +76,7 @@ class HydraSceneOverlay extends Overlay @Override public Dimension render(Graphics2D graphics) { - Hydra hydra = plugin.getHydra(); + AlchemicalHydra hydra = plugin.getHydra(); final Map poisonProjectiles = plugin.getPoisonProjectiles(); if (plugin.isCounting() && !poisonProjectiles.isEmpty()) @@ -119,7 +119,7 @@ class HydraSceneOverlay extends Overlay graphics.fill(poisonTiles); } - private void drawFountain(Graphics2D graphics, Hydra hydra) + private void drawFountain(Graphics2D graphics, AlchemicalHydra hydra) { Collection fountainWorldPoint = WorldPoint.toLocalInstance(client, hydra.getPhase().getFountain()); // thanks if (fountainWorldPoint.size() > 1) // for diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hydra/BabyHydraOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/BabyHydraOverlay.java deleted file mode 100644 index c252ec0949..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hydra/BabyHydraOverlay.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (c) 2018, https://openosrs.com - * 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.hydra; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics2D; -import javax.inject.Inject; -import javax.inject.Singleton; -import net.runelite.api.Client; -import net.runelite.api.NPC; -import net.runelite.api.Point; -import net.runelite.client.ui.FontManager; -import net.runelite.client.ui.overlay.Overlay; -import net.runelite.client.ui.overlay.OverlayLayer; -import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; -import net.runelite.client.ui.overlay.OverlayUtil; - -@Singleton -public class BabyHydraOverlay extends Overlay -{ - private final BabyHydraPlugin plugin; - - @Inject - private Client client; - - @Inject - private BabyHydraOverlay(final BabyHydraPlugin plugin) - { - this.plugin = plugin; - setLayer(OverlayLayer.ABOVE_SCENE); - setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.MED); - } - - @Override - public Dimension render(Graphics2D graphics) - { - for (NPC hydra : client.getNpcs()) - { - if (hydra == null || hydra.getName() == null) - { - continue; - } - if (hydra.getName().equalsIgnoreCase("Hydra") && plugin.getHydras().containsKey(hydra.getIndex())) - { - int val = plugin.getHydras().get(hydra.getIndex()); - if (val != 0) - { - if (plugin.isBoldText()) - { - graphics.setFont(FontManager.getRunescapeBoldFont()); - } - if (plugin.getHydraattacks().containsKey(hydra.getIndex())) - { - int attack = plugin.getHydraattacks().get(hydra.getIndex()); - - Point textLocation = hydra.getCanvasTextLocation(graphics, "TEMP!!", hydra.getLogicalHeight() + 100); - - if (textLocation != null && attack == 8261) - { - if (val == 3) - { - OverlayUtil.renderTextLocation(graphics, textLocation, "MAGE", Color.BLUE); - } - else - { - OverlayUtil.renderTextLocation(graphics, textLocation, "RANGE", Color.GREEN); - } - } - else if (textLocation != null && attack == 8262) - { - if (val == 3) - { - OverlayUtil.renderTextLocation(graphics, textLocation, "RANGE", Color.GREEN); - } - else - { - OverlayUtil.renderTextLocation(graphics, textLocation, "MAGE", Color.BLUE); - } - } - } - Point hydraPoint = hydra.getCanvasTextLocation(graphics, Integer.toString(val), hydra.getLogicalHeight() + 40); - if (hydraPoint != null) - { - OverlayUtil.renderTextLocation(graphics, hydraPoint, Integer.toString(val), Color.WHITE); - } - } - } - - } - graphics.setFont(FontManager.getRunescapeFont()); - return null; - } -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hydra/BabyHydraPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/BabyHydraPlugin.java deleted file mode 100644 index dc063bdcc3..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hydra/BabyHydraPlugin.java +++ /dev/null @@ -1,253 +0,0 @@ -/* - * Copyright (c) 2018, https://openosrs.com - * 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.hydra; - -import com.google.inject.Provides; -import java.util.HashMap; -import java.util.Map; -import javax.inject.Inject; -import javax.inject.Singleton; -import lombok.AccessLevel; -import lombok.Getter; -import net.runelite.api.Actor; -import net.runelite.api.Client; -import net.runelite.api.NPC; -import net.runelite.api.events.AnimationChanged; -import net.runelite.api.events.NpcDespawned; -import net.runelite.api.events.NpcSpawned; -import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.Subscribe; -import net.runelite.client.events.ConfigChanged; -import net.runelite.client.plugins.Plugin; -import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.plugins.PluginType; -import net.runelite.client.ui.overlay.OverlayManager; - -@PluginDescriptor( - name = "Hydra Helper", - description = "Overlays for small hydras", - tags = {"Hydra", "Helper", "you", "probably", "want", "the", "other", "one"}, - type = PluginType.PVM, - enabledByDefault = false -) -@Singleton -public class BabyHydraPlugin extends Plugin -{ - @Inject - private OverlayManager overlayManager; - - @Inject - private BabyHydraConfig config; - - @Inject - private BabyHydraOverlay hydraOverlay; - - @Inject - private BabyHydraPrayOverlay hydraPrayOverlay; - - @Inject - private BabyHydraIndicatorOverlay hydraIndicatorOverlay; - - @Inject - private Client client; - - @Provides - BabyHydraConfig provideConfig(ConfigManager configManager) - { - return configManager.getConfig(BabyHydraConfig.class); - } - - @Getter(AccessLevel.PACKAGE) - private Map hydras = new HashMap<>(); - - @Getter(AccessLevel.PACKAGE) - private Map hydraattacks = new HashMap<>(); - - @Getter(AccessLevel.PACKAGE) - private NPC hydra; - - private boolean TextIndicator; - @Getter(AccessLevel.PACKAGE) - private boolean BoldText; - private boolean PrayerHelper; - - @Override - protected void startUp() - { - updateConfig(); - - if (this.TextIndicator) - { - overlayManager.add(hydraOverlay); - } - if (this.PrayerHelper) - { - overlayManager.add(hydraPrayOverlay); - overlayManager.add(hydraIndicatorOverlay); - } - } - - @Override - protected void shutDown() - { - overlayManager.remove(hydraOverlay); - overlayManager.remove(hydraPrayOverlay); - overlayManager.remove(hydraIndicatorOverlay); - hydras.clear(); - hydraattacks.clear(); - } - - @Subscribe - private void onConfigChanged(ConfigChanged event) - { - if (!event.getGroup().equals("hydra")) - { - return; - } - - updateConfig(); - - if (event.getKey().equals("textindicators")) - { - if (Boolean.parseBoolean(event.getNewValue())) - { - overlayManager.add(hydraOverlay); - } - else - { - overlayManager.remove(hydraOverlay); - } - } - else if (event.getKey().equals("prayerhelper")) - { - if (Boolean.parseBoolean(event.getNewValue())) - { - overlayManager.add(hydraPrayOverlay); - overlayManager.add(hydraIndicatorOverlay); - } - else - { - overlayManager.remove(hydraPrayOverlay); - overlayManager.remove(hydraIndicatorOverlay); - } - } - } - - @Subscribe - private void onNpcSpawned(NpcSpawned event) - { - NPC hydra = event.getNpc(); - if (hydra.getCombatLevel() != 0 && hydra.getName() != null && hydra.getName().equalsIgnoreCase("Hydra") && !hydras.containsKey(hydra.getIndex())) - { - hydras.put(hydra.getIndex(), 3); - } - } - - @Subscribe - private void onNpcDespawned(NpcDespawned event) - { - NPC hydra = event.getNpc(); - if (hydra.getCombatLevel() != 0 && hydra.getName() != null && hydra.getName().equalsIgnoreCase("Hydra")) - { - hydras.remove(hydra.getIndex()); - hydraattacks.remove(hydra.getIndex()); - } - } - - @Subscribe - private void onAnimationChanged(AnimationChanged event) - { - Actor monster = event.getActor(); - Actor local = client.getLocalPlayer(); - if (!(monster instanceof NPC) || local == null) - { - return; - } - NPC hydra = (NPC) monster; - - if (hydra.getCombatLevel() == 0 || hydra.getName() == null) - { - return; - } - - if (!hydra.getName().equalsIgnoreCase("Hydra") || !hydras.containsKey(hydra.getIndex())) - { - return; - } - - if (hydra.getAnimation() != 8261 && hydra.getAnimation() != 8262) - { - return; - } - - if (hydra.getInteracting() != null && hydra.getInteracting() == local) - { - this.hydra = hydra; - } - - if (hydraattacks.containsKey(hydra.getIndex())) - { - int lastattack = hydraattacks.get(hydra.getIndex()); - hydraattacks.replace(hydra.getIndex(), hydra.getAnimation()); - - if (lastattack != hydra.getAnimation()) - { - hydras.replace(hydra.getIndex(), 2); - } - else - { - int currval = hydras.get(hydra.getIndex()); - if (currval == 1) - { - hydras.replace(hydra.getIndex(), 3); - } - else - { - hydras.replace(hydra.getIndex(), currval - 1); - } - } - } - else - { - hydraattacks.put(hydra.getIndex(), hydra.getAnimation()); - int currval = hydras.get(hydra.getIndex()); - if (currval == 1) - { - hydras.replace(hydra.getIndex(), 3); - } - else - { - hydras.replace(hydra.getIndex(), currval - 1); - } - } - } - - private void updateConfig() - { - this.TextIndicator = config.TextIndicator(); - this.BoldText = config.BoldText(); - this.PrayerHelper = config.PrayerHelper(); - } -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hydra/BabyHydraPrayOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/BabyHydraPrayOverlay.java deleted file mode 100644 index 67b5703bb7..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hydra/BabyHydraPrayOverlay.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (c) 2018, https://openosrs.com - * 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.hydra; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics2D; -import java.awt.image.BufferedImage; -import javax.inject.Inject; -import javax.inject.Singleton; -import net.runelite.api.Client; -import net.runelite.api.Prayer; -import net.runelite.api.SpriteID; -import net.runelite.client.game.SpriteManager; -import net.runelite.client.ui.overlay.Overlay; -import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; -import net.runelite.client.ui.overlay.components.ComponentConstants; -import net.runelite.client.ui.overlay.components.ImageComponent; -import net.runelite.client.ui.overlay.components.PanelComponent; - -@Singleton -public class BabyHydraPrayOverlay extends Overlay -{ - private final BabyHydraPlugin plugin; - - private static final Color NOT_ACTIVATED_BACKGROUND_COLOR = new Color(150, 0, 0, 150); - private BufferedImage prayMage; - private BufferedImage prayRanged; - private final PanelComponent imagePanelComponent = new PanelComponent(); - - @Inject - private SpriteManager spriteManager; - - @Inject - private Client client; - - @Inject - private BabyHydraPrayOverlay(final BabyHydraPlugin plugin, final SpriteManager spriteManager) - { - this.plugin = plugin; - this.spriteManager = spriteManager; - setPosition(OverlayPosition.BOTTOM_RIGHT); - setPriority(OverlayPriority.HIGH); - } - - @Override - public Dimension render(Graphics2D graphics) - { - if (prayMage == null) - { - prayMage = spriteManager.getSprite(SpriteID.PRAYER_PROTECT_FROM_MAGIC, 0); - } - if (prayRanged == null) - { - prayRanged = spriteManager.getSprite(SpriteID.PRAYER_PROTECT_FROM_MISSILES, 0); - } - - if (plugin.getHydra() != null && plugin.getHydras().containsKey(plugin.getHydra().getIndex())) - { - int val = plugin.getHydras().get(plugin.getHydra().getIndex()); - if (val != 0 && plugin.getHydraattacks().containsKey(plugin.getHydra().getIndex())) - { - int attack = plugin.getHydraattacks().get(plugin.getHydra().getIndex()); - if (attack == 8261) - { - if (val == 3) - { - imagePanelComponent.getChildren().clear(); - imagePanelComponent.getChildren().add(new ImageComponent(prayMage)); - imagePanelComponent.setBackgroundColor(client.isPrayerActive(Prayer.PROTECT_FROM_MAGIC) - ? ComponentConstants.STANDARD_BACKGROUND_COLOR - : NOT_ACTIVATED_BACKGROUND_COLOR); - - return imagePanelComponent.render(graphics); - } - else - { - imagePanelComponent.getChildren().clear(); - imagePanelComponent.getChildren().add(new ImageComponent(prayRanged)); - imagePanelComponent.setBackgroundColor(client.isPrayerActive(Prayer.PROTECT_FROM_MISSILES) - ? ComponentConstants.STANDARD_BACKGROUND_COLOR - : NOT_ACTIVATED_BACKGROUND_COLOR); - - return imagePanelComponent.render(graphics); - } - } - else if (attack == 8262) - { - if (val == 3) - { - imagePanelComponent.getChildren().clear(); - imagePanelComponent.getChildren().add(new ImageComponent(prayRanged)); - imagePanelComponent.setBackgroundColor(client.isPrayerActive(Prayer.PROTECT_FROM_MISSILES) - ? ComponentConstants.STANDARD_BACKGROUND_COLOR - : NOT_ACTIVATED_BACKGROUND_COLOR); - - return imagePanelComponent.render(graphics); - } - else - { - imagePanelComponent.getChildren().clear(); - imagePanelComponent.getChildren().add(new ImageComponent(prayMage)); - imagePanelComponent.setBackgroundColor(client.isPrayerActive(Prayer.PROTECT_FROM_MAGIC) - ? ComponentConstants.STANDARD_BACKGROUND_COLOR - : NOT_ACTIVATED_BACKGROUND_COLOR); - - return imagePanelComponent.render(graphics); - } - } - } - } - return null; - } -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hydra/Hydra.java b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/Hydra.java new file mode 100644 index 0000000000..e1540682a9 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/Hydra.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2020, Dutta64 + * 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.hydra; + +import java.awt.Graphics2D; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.Setter; +import net.runelite.api.NPC; +import net.runelite.api.Point; + +public class Hydra +{ + static final int MAX_ATTACK_COUNT = 3; + + private final NPC npc; + + @Getter(AccessLevel.PACKAGE) + private int attackCount; + + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) + private HydraAnimation hydraAnimation; + + public Hydra(final NPC npc) + { + this.npc = npc; + this.attackCount = MAX_ATTACK_COUNT; + this.hydraAnimation = null; + } + + void updateAttackCount() + { + attackCount = attackCount == 1 ? MAX_ATTACK_COUNT : --attackCount; + } + + void resetAttackCount() + { + attackCount = MAX_ATTACK_COUNT; + } + + Point getCanvasTextLocation(final Graphics2D graphics, final String text, final int zOffset) + { + return npc.getCanvasTextLocation(graphics, text, zOffset); + } + + int getLogicalHeight() + { + return npc.getLogicalHeight(); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraAnimation.java b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraAnimation.java new file mode 100644 index 0000000000..05f4bc6f3a --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraAnimation.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2020, Dutta64 + * 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.hydra; + +import java.awt.Color; +import java.util.Objects; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +public enum HydraAnimation +{ + RANGE(8261, "RANGE", new Color(0, 255, 0)), + MAGIC(8262, "MAGIC", new Color(52, 152, 219)), + POISON(8263, "POISON", new Color(255, 0, 0)); // Not used currently + + @Getter(AccessLevel.PACKAGE) + private final int id; + + @Getter(AccessLevel.PACKAGE) + private final String text; + + @Getter(AccessLevel.PACKAGE) + private final Color color; + + public static HydraAnimation fromId(final int id) + { + for (final HydraAnimation hydraAnimation : HydraAnimation.values()) + { + if (Objects.equals(hydraAnimation.id, id)) + { + return hydraAnimation; + } + } + + throw new IllegalArgumentException(); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraAttackCounterOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraAttackCounterOverlay.java new file mode 100644 index 0000000000..da429d5976 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraAttackCounterOverlay.java @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2018, https://openosrs.com + * Copyright (c) 2020, Dutta64 + * 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.hydra; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.util.HashMap; +import java.util.Map; +import javax.inject.Inject; +import javax.inject.Singleton; +import lombok.AccessLevel; +import lombok.Setter; +import net.runelite.api.Client; +import net.runelite.api.NPC; +import net.runelite.api.Point; +import net.runelite.client.ui.FontManager; +import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayLayer; +import net.runelite.client.ui.overlay.OverlayPosition; +import net.runelite.client.ui.overlay.OverlayPriority; +import net.runelite.client.ui.overlay.OverlayUtil; + +@Singleton +public class HydraAttackCounterOverlay extends Overlay +{ + private final HydraPlugin hydraPlugin; + + private final Client client; + + @Setter(AccessLevel.PACKAGE) + private Map hydras; + + @Setter(AccessLevel.PACKAGE) + private boolean isBoldAttackCounterOverlay; + + @Inject + private HydraAttackCounterOverlay(final HydraPlugin hydraPlugin, final Client client) + { + this.hydraPlugin = hydraPlugin; + this.client = client; + this.hydras = new HashMap<>(); + this.isBoldAttackCounterOverlay = false; + setLayer(OverlayLayer.ABOVE_SCENE); + setPosition(OverlayPosition.DYNAMIC); + setPriority(OverlayPriority.MED); + } + + @Override + public Dimension render(final Graphics2D graphics) + { + if (!hydraPlugin.isPlayerAtHydraRegion()) + { + return null; + } + + for (final NPC npc : client.getNpcs()) + { + final Hydra hydra = hydras.get(npc.getIndex()); + + if (hydra == null) + { + continue; + } + + if (isBoldAttackCounterOverlay) + { + graphics.setFont(FontManager.getRunescapeBoldFont()); + } + else + { + graphics.setFont(FontManager.getRunescapeFont()); + } + + renderAnimationAttackType(graphics, hydra); + renderAttackCount(graphics, hydra); + } + + return null; + } + + private void renderAnimationAttackType(final Graphics2D graphics, final Hydra hydra) + { + final HydraAnimation hydraAnimation = hydra.getHydraAnimation(); + + if (hydraAnimation == null) + { + return; + } + + final int heightOffset = 100; + + final Point textLocation = hydra.getCanvasTextLocation(graphics, "TEMP!", + hydra.getLogicalHeight() + heightOffset); + + if (textLocation == null) + { + return; + } + + final boolean attackCountIsMax = hydra.getAttackCount() == Hydra.MAX_ATTACK_COUNT; + + switch (hydraAnimation) + { + case RANGE: + if (attackCountIsMax) + { + OverlayUtil.renderTextLocation(graphics, textLocation, HydraAnimation.MAGIC.getText(), + HydraAnimation.MAGIC.getColor()); + } + else + { + OverlayUtil.renderTextLocation(graphics, textLocation, HydraAnimation.RANGE.getText(), + HydraAnimation.RANGE.getColor()); + } + break; + case MAGIC: + if (attackCountIsMax) + { + OverlayUtil.renderTextLocation(graphics, textLocation, HydraAnimation.RANGE.getText(), + HydraAnimation.RANGE.getColor()); + } + else + { + OverlayUtil.renderTextLocation(graphics, textLocation, HydraAnimation.MAGIC.getText(), + HydraAnimation.MAGIC.getColor()); + } + break; + default: + break; + } + } + + private void renderAttackCount(final Graphics2D graphics, final Hydra hydra) + { + final int attackCount = hydra.getAttackCount(); + + final int heightOffset = 30; + + final Point textLocation = hydra.getCanvasTextLocation(graphics, Integer.toString(attackCount), + hydra.getLogicalHeight() + heightOffset); + + if (textLocation != null) + { + OverlayUtil.renderTextLocation(graphics, textLocation, Integer.toString(attackCount), Color.WHITE); + } + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hydra/BabyHydraConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraConfig.java similarity index 64% rename from runelite-client/src/main/java/net/runelite/client/plugins/hydra/BabyHydraConfig.java rename to runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraConfig.java index a92a3789ea..9733fbfcf3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hydra/BabyHydraConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraConfig.java @@ -1,5 +1,6 @@ /* * Copyright (c) 2018, https://openosrs.com + * Copyright (c) 2020, Dutta64 * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -29,38 +30,49 @@ import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; @ConfigGroup("hydra") -public interface BabyHydraConfig extends Config +public interface HydraConfig extends Config { @ConfigItem( position = 1, - keyName = "textindicators", - name = "Text Indicator", - description = "Configures if text indicator is shown above hydra's or not." + keyName = "attackCounterOverlay", + name = "Attack Counter Overlay", + description = "Configures if an attack counter overlay is shown." ) - default boolean TextIndicator() + default boolean isAttackCounterOverlay() { return true; } @ConfigItem( position = 2, - keyName = "countersize", - name = "Bold indicator", - description = "Configures if text indicator is bold or not." + keyName = "boldAttackCounterOverlay", + name = "Bold Attack Counter", + description = "Configures if the attack counter is bold.
Attack Counter Overlay must be enabled." ) - default boolean BoldText() + default boolean isBoldAttackCounterOverlay() { return false; } @ConfigItem( position = 3, - keyName = "prayerhelper", - name = "Prayer Helper", - description = "Configures if prayer helper is shown or not." + keyName = "prayerOverlay", + name = "Prayer Overlay", + description = "Configures if a prayer overlay is shown.
This overlay includes a mini attack counter." ) - default boolean PrayerHelper() + default boolean isPrayerOverlay() + { + return true; + } + + @ConfigItem( + position = 4, + keyName = "poisonProjectileOverlay", + name = "Poison Projectile Overlay", + description = "Configures if a poison projectile overlay is shown." + ) + default boolean isPoisonOverlay() { return true; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraPlugin.java new file mode 100644 index 0000000000..eef36dff89 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraPlugin.java @@ -0,0 +1,421 @@ +/* + * Copyright (c) 2018, https://openosrs.com + * Copyright (c) 2020, Dutta64 + * 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.hydra; + +import com.google.inject.Provides; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import javax.inject.Inject; +import javax.inject.Singleton; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import net.runelite.api.Actor; +import net.runelite.api.Client; +import net.runelite.api.NPC; +import net.runelite.api.Player; +import net.runelite.api.Projectile; +import net.runelite.api.ProjectileID; +import net.runelite.api.coords.LocalPoint; +import net.runelite.api.coords.WorldPoint; +import net.runelite.api.events.AnimationChanged; +import net.runelite.api.events.InteractingChanged; +import net.runelite.api.events.NpcDespawned; +import net.runelite.api.events.NpcSpawned; +import net.runelite.api.events.ProjectileMoved; +import net.runelite.client.config.ConfigManager; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; +import net.runelite.client.plugins.Plugin; +import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; +import net.runelite.client.ui.overlay.OverlayManager; + +@PluginDescriptor( + name = "Hydra Helper", + description = "Overlays for normal Hydras.", + tags = {"hydra", "helper", "baby", "small", "normal", "regular"}, + type = PluginType.PVM, + enabledByDefault = false +) +@Slf4j +@Singleton +public class HydraPlugin extends Plugin +{ + static final Set VALID_HYDRA_ANIMATIONS = EnumSet.of( + HydraAnimation.RANGE, + HydraAnimation.MAGIC + ); + + private static final String CONFIG_GROUP_NAME = "hydra"; + private static final String CONFIG_ITEM_ATTACK_COUNTER = "attackCounterOverlay"; + private static final String CONFIG_ITEM_PRAYER_OVERLAY = "prayerOverlay"; + private static final String CONFIG_ITEM_POISON_PROJECTILE_OVERLAY = "poisonProjectileOverlay"; + private static final String CONFIG_ITEM_BOLD_ATTACK_COUNTER_OVERLAY = "boldAttackCounterOverlay"; + + private static final String NPC_NAME_HYDRA = "Hydra"; + + private static final int HYDRA_REGION_1 = 5279; + private static final int HYDRA_REGION_2 = 5280; + + @Inject + private Client client; + + @Inject + private HydraConfig hydraConfig; + + @Inject + private OverlayManager overlayManager; + + @Inject + private HydraAttackCounterOverlay hydraAttackCounterOverlay; + + @Inject + private HydraPrayerOverlay hydraPrayerOverlay; + + @Inject + private HydraPrayerAttackCounterOverlay hydraPrayerAttackCounterOverlay; + + @Inject + private HydraPoisonOverlay hydraPoisonOverlay; + + private final Map hydras = new HashMap<>(); + + private final Map poisonProjectiles = new HashMap<>(); + + @Getter(AccessLevel.PACKAGE) + private NPC interactingNpc = null; + + @Provides + HydraConfig provideConfig(final ConfigManager configManager) + { + return configManager.getConfig(HydraConfig.class); + } + + @Override + protected void startUp() + { + if (hydraConfig.isAttackCounterOverlay()) + { + overlayManager.add(hydraAttackCounterOverlay); + } + + if (hydraConfig.isPrayerOverlay()) + { + overlayManager.add(hydraPrayerOverlay); + overlayManager.add(hydraPrayerAttackCounterOverlay); + } + + if (hydraConfig.isPoisonOverlay()) + { + overlayManager.add(hydraPoisonOverlay); + } + + hydraAttackCounterOverlay.setBoldAttackCounterOverlay(hydraConfig.isBoldAttackCounterOverlay()); + + hydraAttackCounterOverlay.setHydras(hydras); + hydraPrayerOverlay.setHydras(hydras); + hydraPrayerAttackCounterOverlay.setHydras(hydras); + + hydraPoisonOverlay.setPoisonProjectiles(poisonProjectiles); + + resetHydras(); + poisonProjectiles.clear(); + } + + @Override + protected void shutDown() + { + overlayManager.remove(hydraAttackCounterOverlay); + overlayManager.remove(hydraPrayerOverlay); + overlayManager.remove(hydraPrayerAttackCounterOverlay); + overlayManager.remove(hydraPoisonOverlay); + resetHydras(); + poisonProjectiles.clear(); + + } + + @Subscribe + private void onConfigChanged(final ConfigChanged event) + { + if (!event.getGroup().equals(CONFIG_GROUP_NAME)) + { + return; + } + + final boolean newConfigValue = Boolean.parseBoolean(event.getNewValue()); + + switch (event.getKey()) + { + case CONFIG_ITEM_ATTACK_COUNTER: + if (newConfigValue) + { + overlayManager.add(hydraAttackCounterOverlay); + } + else + { + overlayManager.remove(hydraAttackCounterOverlay); + } + break; + case CONFIG_ITEM_PRAYER_OVERLAY: + if (newConfigValue) + { + overlayManager.add(hydraPrayerOverlay); + overlayManager.add(hydraPrayerAttackCounterOverlay); + } + else + { + overlayManager.remove(hydraPrayerOverlay); + overlayManager.remove(hydraPrayerAttackCounterOverlay); + } + break; + case CONFIG_ITEM_POISON_PROJECTILE_OVERLAY: + if (newConfigValue) + { + overlayManager.add(hydraPoisonOverlay); + } + else + { + overlayManager.remove(hydraPoisonOverlay); + } + break; + case CONFIG_ITEM_BOLD_ATTACK_COUNTER_OVERLAY: + hydraAttackCounterOverlay.setBoldAttackCounterOverlay(hydraConfig.isBoldAttackCounterOverlay()); + break; + default: + break; + } + } + + @Subscribe + private void onNpcSpawned(final NpcSpawned event) + { + final NPC npc = event.getNpc(); + + if (isActorHydra(npc)) + { + addHydra(npc); + } + } + + @Subscribe + private void onNpcDespawned(final NpcDespawned event) + { + final NPC npc = event.getNpc(); + + if (isActorHydra(npc)) + { + removeHydra(npc); + poisonProjectiles.clear(); + } + } + + @Subscribe + private void onInteractingChanged(final InteractingChanged event) + { + final Actor source = event.getSource(); + + if (!isActorHydra(source)) + { + return; + } + + final NPC npc = (NPC) source; + + addHydra(npc); + updateInteractingNpc(npc); + } + + @Subscribe + private void onAnimationChanged(final AnimationChanged event) + { + final Actor actor = event.getActor(); + + if (!isActorHydra(actor)) + { + return; + } + + final NPC npc = (NPC) event.getActor(); + + addHydra(npc); + updateInteractingNpc(npc); + + HydraAnimation hydraAnimation; + + try + { + hydraAnimation = HydraAnimation.fromId(npc.getAnimation()); + } + catch (final IllegalArgumentException e) + { + hydraAnimation = null; + } + + if (hydraAnimation == null || !VALID_HYDRA_ANIMATIONS.contains(hydraAnimation)) + { + // If the animation is not range/magic then do nothing. + return; + } + + final Hydra hydra = hydras.get(npc.getIndex()); + + if (hydra.getHydraAnimation() == null) + { + // If this is the first observed animation then set it + hydra.setHydraAnimation(hydraAnimation); + } + else + { + if (!Objects.equals(hydra.getHydraAnimation(), hydraAnimation)) + { + // If the animation switched from range/magic then set it and reset attack count + hydra.setHydraAnimation(hydraAnimation); + hydra.resetAttackCount(); + } + } + + hydra.updateAttackCount(); + + if (!poisonProjectiles.isEmpty()) + { + updatePoisonProjectiles(); + } + } + + /** + * See net.runelite.client.plugins.alchemicalhydra.AlchemicalHydraPlugin + * Copyright (c) 2019, Lucas + * + * @param event event object + */ + @Subscribe + private void onProjectileMoved(final ProjectileMoved event) + { + if (interactingNpc == null || client.getGameCycle() >= event.getProjectile().getStartMovementCycle()) + { + return; + } + + final Projectile projectile = event.getProjectile(); + + final int projectileId = projectile.getId(); + + if (projectileId == ProjectileID.HYDRA_POISON) + { + poisonProjectiles.put(event.getPosition(), projectile); + } + } + + /** + * See net.runelite.client.plugins.alchemicalhydra.AlchemicalHydraPlugin + * Copyright (c) 2019, Lucas + */ + private void updatePoisonProjectiles() + { + final Set expiredPoisonProjectiles = new HashSet<>(); + + for (final Map.Entry entry : poisonProjectiles.entrySet()) + { + if (entry.getValue().getEndCycle() < client.getGameCycle()) + { + expiredPoisonProjectiles.add(entry.getKey()); + } + } + + for (final LocalPoint projectileLocalPoint : expiredPoisonProjectiles) + { + poisonProjectiles.remove(projectileLocalPoint); + } + } + + boolean isPlayerAtHydraRegion() + { + final Player player = client.getLocalPlayer(); + + if (player == null) + { + return false; + } + + final WorldPoint worldPoint = player.getWorldLocation(); + + if (worldPoint == null) + { + return false; + } + + final int regionId = worldPoint.getRegionID(); + + return regionId == HYDRA_REGION_1 || regionId == HYDRA_REGION_2; + } + + private static boolean isActorHydra(final Actor actor) + { + return Objects.equals(actor.getName(), NPC_NAME_HYDRA); + } + + private void updateInteractingNpc(final NPC npc) + { + if (!Objects.equals(interactingNpc, npc) && + Objects.equals(npc.getInteracting(), client.getLocalPlayer())) + { + interactingNpc = npc; + } + } + + private void addHydra(final NPC npc) + { + final int npcIndex = npc.getIndex(); + + if (!hydras.containsKey(npcIndex)) + { + hydras.put(npcIndex, new Hydra(npc)); + } + } + + private void removeHydra(final NPC npc) + { + final int npcIndex = npc.getIndex(); + + hydras.remove(npcIndex); + + if (Objects.equals(interactingNpc, npc)) + { + interactingNpc = null; + } + } + + private void resetHydras() + { + hydras.clear(); + interactingNpc = null; + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraPoisonOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraPoisonOverlay.java new file mode 100644 index 0000000000..847f4af5df --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraPoisonOverlay.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2018, https://openosrs.com + * Copyright (c) 2020, Dutta64 + * 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.hydra; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.awt.Polygon; +import java.awt.geom.Area; +import java.util.HashMap; +import java.util.Map; +import javax.inject.Inject; +import javax.inject.Singleton; +import lombok.AccessLevel; +import lombok.Setter; +import net.runelite.api.Client; +import static net.runelite.api.Perspective.getCanvasTileAreaPoly; +import net.runelite.api.Projectile; +import net.runelite.api.coords.LocalPoint; +import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayLayer; +import net.runelite.client.ui.overlay.OverlayPosition; + +@Singleton +public class HydraPoisonOverlay extends Overlay +{ + private static final Color poisonBorder = new Color(255, 0, 0, 100);; + private static final Color poisonFill = new Color(255, 0, 0, 50);; + + private final Client client; + + @Setter(AccessLevel.PACKAGE) + private Map poisonProjectiles; + + @Inject + public HydraPoisonOverlay(final Client client) + { + this.client = client; + this.poisonProjectiles = new HashMap<>(); + setPosition(OverlayPosition.DYNAMIC); + setLayer(OverlayLayer.UNDER_WIDGETS); + } + + @Override + public Dimension render(final Graphics2D graphics) + { + if (!poisonProjectiles.isEmpty()) + { + drawPoisonArea(graphics, poisonProjectiles); + } + + return null; + } + + /** + * See net.runelite.client.plugins.alchemicalhydra.AlchemicalHydraSceneOverlay + * Copyright (c) 2019, Lucas + * + * @param graphics graphics object + * @param poisonProjectiles poisonProjectiles object + */ + private void drawPoisonArea(final Graphics2D graphics, final Map poisonProjectiles) + { + final Area poisonTiles = new Area(); + + for (final Map.Entry entry : poisonProjectiles.entrySet()) + { + if (entry.getValue().getEndCycle() < client.getGameCycle()) + { + continue; + } + + final LocalPoint point = entry.getKey(); + final Polygon poly = getCanvasTileAreaPoly(client, point, 3); + + if (poly != null) + { + poisonTiles.add(new Area(poly)); + } + } + + graphics.setPaintMode(); + graphics.setColor(poisonBorder); + graphics.draw(poisonTiles); + graphics.setColor(poisonFill); + graphics.fill(poisonTiles); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hydra/BabyHydraIndicatorOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraPrayerAttackCounterOverlay.java similarity index 63% rename from runelite-client/src/main/java/net/runelite/client/plugins/hydra/BabyHydraIndicatorOverlay.java rename to runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraPrayerAttackCounterOverlay.java index 6d87a08567..54075f119f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hydra/BabyHydraIndicatorOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraPrayerAttackCounterOverlay.java @@ -1,5 +1,6 @@ /* * Copyright (c) 2018, https://openosrs.com + * Copyright (c) 2020, Dutta64 * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,8 +27,13 @@ package net.runelite.client.plugins.hydra; import java.awt.Dimension; import java.awt.Graphics2D; +import java.util.HashMap; +import java.util.Map; import javax.inject.Inject; import javax.inject.Singleton; +import lombok.AccessLevel; +import lombok.Setter; +import net.runelite.api.NPC; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPriority; @@ -35,34 +41,48 @@ import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.ui.overlay.components.PanelComponent; @Singleton -public class BabyHydraIndicatorOverlay extends Overlay +public class HydraPrayerAttackCounterOverlay extends Overlay { - private final BabyHydraPlugin plugin; + private final HydraPlugin hydraPlugin; - private final PanelComponent panelComponent = new PanelComponent(); + private final PanelComponent panelComponent; + + @Setter(AccessLevel.PACKAGE) + private Map hydras; @Inject - private BabyHydraIndicatorOverlay(final BabyHydraPlugin plugin) + private HydraPrayerAttackCounterOverlay(final HydraPlugin hydraPlugin) { - this.plugin = plugin; + this.hydraPlugin = hydraPlugin; + this.panelComponent = new PanelComponent(); + this.panelComponent.setPreferredSize(new Dimension(14, 0)); + this.hydras = new HashMap<>(); setPosition(OverlayPosition.BOTTOM_RIGHT); setPriority(OverlayPriority.MED); - panelComponent.setPreferredSize(new Dimension(14, 0)); } @Override - public Dimension render(Graphics2D graphics) + public Dimension render(final Graphics2D graphics) { - if (plugin.getHydra() != null && plugin.getHydras().containsKey(plugin.getHydra().getIndex())) + final NPC npc = hydraPlugin.getInteractingNpc(); + + if (npc == null) { - int val = plugin.getHydras().get(plugin.getHydra().getIndex()); - if (val != 0) - { - panelComponent.getChildren().clear(); - panelComponent.getChildren().add(LineComponent.builder().right(Integer.toString(val)).build()); - return panelComponent.render(graphics); - } + return null; } - return null; + + final Hydra hydra = hydras.get(npc.getIndex()); + + if (hydra == null) + { + return null; + } + + final String attackCount = String.valueOf(hydra.getAttackCount()); + + panelComponent.getChildren().clear(); + panelComponent.getChildren().add(LineComponent.builder().right(attackCount).build()); + + return panelComponent.render(graphics); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraPrayerOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraPrayerOverlay.java new file mode 100644 index 0000000000..c74fdb1ad4 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraPrayerOverlay.java @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2018, https://openosrs.com + * Copyright (c) 2020, Dutta64 + * 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.hydra; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.util.HashMap; +import java.util.Map; +import javax.inject.Inject; +import javax.inject.Singleton; +import lombok.AccessLevel; +import lombok.Setter; +import net.runelite.api.Client; +import net.runelite.api.NPC; +import net.runelite.api.Prayer; +import net.runelite.api.SpriteID; +import net.runelite.client.game.SpriteManager; +import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayPosition; +import net.runelite.client.ui.overlay.OverlayPriority; +import net.runelite.client.ui.overlay.components.ImageComponent; +import net.runelite.client.ui.overlay.components.PanelComponent; + +@Singleton +public class HydraPrayerOverlay extends Overlay +{ + private static final Color ACTIVATED_BACKGROUND_COLOR = new Color(0, 150, 0, 150); + private static final Color NOT_ACTIVATED_BACKGROUND_COLOR = new Color(150, 0, 0, 150); + + private final HydraPlugin hydraPlugin; + + private final Client client; + + private final SpriteManager spriteManager; + + private final PanelComponent panelComponent; + + @Setter(AccessLevel.PACKAGE) + private Map hydras; + + private BufferedImage bufferedImageRange; + private BufferedImage bufferedImageMagic; + + @Inject + private HydraPrayerOverlay(final HydraPlugin hydraPlugin, final Client client, final SpriteManager spriteManager) + { + this.hydraPlugin = hydraPlugin; + this.client = client; + this.spriteManager = spriteManager; + this.panelComponent = new PanelComponent(); + this.hydras = new HashMap<>(); + this.bufferedImageRange = null; + this.bufferedImageMagic = null; + setPosition(OverlayPosition.BOTTOM_RIGHT); + setPriority(OverlayPriority.HIGH); + } + + @Override + public Dimension render(final Graphics2D graphics) + { + final NPC npc = hydraPlugin.getInteractingNpc(); + + if (npc == null) + { + return null; + } + + final Hydra hydra = hydras.get(npc.getIndex()); + + if (hydra == null) + { + return null; + } + + final HydraAnimation hydraAnimation = hydra.getHydraAnimation(); + + if (hydraAnimation == null || !HydraPlugin.VALID_HYDRA_ANIMATIONS.contains(hydraAnimation)) + { + return null; + } + + if (bufferedImageMagic == null) + { + bufferedImageMagic = spriteManager.getSprite(SpriteID.PRAYER_PROTECT_FROM_MAGIC, 0); + } + + if (bufferedImageRange == null) + { + bufferedImageRange = spriteManager.getSprite(SpriteID.PRAYER_PROTECT_FROM_MISSILES, 0); + } + + final boolean attackCountIsMax = hydra.getAttackCount() == Hydra.MAX_ATTACK_COUNT; + + switch (hydraAnimation) + { + case RANGE: + if (attackCountIsMax) + { + return renderPanelMagic(graphics); + } + else + { + return renderPanelRange(graphics); + } + case MAGIC: + if (attackCountIsMax) + { + return renderPanelRange(graphics); + } + else + { + return renderPanelMagic(graphics); + } + default: + break; + } + + return null; + } + + private Dimension renderPanelMagic(final Graphics2D graphics) + { + panelComponent.getChildren().clear(); + panelComponent.getChildren().add(new ImageComponent(bufferedImageMagic)); + panelComponent.setBackgroundColor(client.isPrayerActive(Prayer.PROTECT_FROM_MAGIC) + ? ACTIVATED_BACKGROUND_COLOR + : NOT_ACTIVATED_BACKGROUND_COLOR); + + return panelComponent.render(graphics); + } + + private Dimension renderPanelRange(final Graphics2D graphics) + { + panelComponent.getChildren().clear(); + panelComponent.getChildren().add(new ImageComponent(bufferedImageRange)); + panelComponent.setBackgroundColor(client.isPrayerActive(Prayer.PROTECT_FROM_MISSILES) + ? ACTIVATED_BACKGROUND_COLOR + : NOT_ACTIVATED_BACKGROUND_COLOR); + + return panelComponent.render(graphics); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java index 73030cbf92..eb69cd59c2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java @@ -1974,7 +1974,6 @@ public interface MenuEntrySwapperConfig extends Config position = 2, section = "hotkeySwapping" ) - default boolean swapNpcContact() { return false; @@ -1987,7 +1986,6 @@ public interface MenuEntrySwapperConfig extends Config position = 3, section = "hotkeySwapping" ) - default boolean bankWieldItem() { return false; @@ -2000,7 +1998,6 @@ public interface MenuEntrySwapperConfig extends Config position = 4, section = "hotkeySwapping" ) - default boolean bankWearItem() { return false; @@ -2013,7 +2010,6 @@ public interface MenuEntrySwapperConfig extends Config position = 5, section = "hotkeySwapping" ) - default boolean bankEatItem() { return false; @@ -2026,7 +2022,6 @@ public interface MenuEntrySwapperConfig extends Config position = 6, section = "hotkeySwapping" ) - default boolean bankDrinkItem() { return false; @@ -2039,7 +2034,6 @@ public interface MenuEntrySwapperConfig extends Config position = 7, section = "hotkeySwapping" ) - default boolean bankEquipItem() { return false; @@ -2052,9 +2046,32 @@ public interface MenuEntrySwapperConfig extends Config position = 8, section = "hotkeySwapping" ) - default boolean bankInvigorateItem() { return false; } + + @ConfigItem( + keyName = "hotKeyWalk", + name = "Hotkey to Walk", + description = "For when you want Walk here as a priority", + position = 9, + section = "hotkeySwapping" + ) + default boolean hotKeyWalk() + { + return false; + } + + @ConfigItem( + keyName = "hotKeyLoot", + name = "Hotkey to Loot", + description = "For when people stand on your loot", + position = 10, + section = "hotkeySwapping" + ) + default boolean hotKeyLoot() + { + return false; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java index 0c2cecb932..5a15504b65 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java @@ -149,6 +149,74 @@ public class MenuEntrySwapperPlugin extends Plugin "mazchna", "vannaka", "chaeldar", "nieve", "steve", "duradel", "krystilia", "konar", "murphy", "cyrisus", "smoggy", "ginea", "watson", "barbarian guard", "random" ); + + private static final AbstractComparableEntry WALK = new AbstractComparableEntry() + { + private final int hash = "WALK".hashCode() * 79 + getPriority(); + + @Override + public int hashCode() + { + return hash; + } + + @Override + public boolean equals(Object entry) + { + return entry.getClass() == this.getClass() && entry.hashCode() == this.hashCode(); + } + + @Override + public int getPriority() + { + return 99; + } + + @Override + public boolean matches(MenuEntry entry) + { + return + entry.getOpcode() == MenuOpcode.WALK.getId() || + entry.getOpcode() == MenuOpcode.WALK.getId() + MenuOpcode.MENU_ACTION_DEPRIORITIZE_OFFSET; + } + }; + + private static final AbstractComparableEntry TAKE = new AbstractComparableEntry() + { + private final int hash = "TAKE".hashCode() * 79 + getPriority(); + + @Override + public int hashCode() + { + return hash; + } + + @Override + public boolean equals(Object entry) + { + return entry.getClass() == this.getClass() && entry.hashCode() == this.hashCode(); + } + + @Override + public int getPriority() + { + return 100; + } + + @Override + public boolean matches(MenuEntry entry) + { + int opcode = entry.getOpcode(); + if (opcode > MenuOpcode.MENU_ACTION_DEPRIORITIZE_OFFSET) + { + opcode -= MenuOpcode.MENU_ACTION_DEPRIORITIZE_OFFSET; + } + + return + opcode >= MenuOpcode.GROUND_ITEM_FIRST_OPTION.getId() && + opcode <= MenuOpcode.GROUND_ITEM_FIFTH_OPTION.getId(); + } + }; private static final Splitter NEWLINE_SPLITTER = Splitter .on("\n") @@ -300,6 +368,8 @@ public class MenuEntrySwapperPlugin extends Plugin private boolean swapWildernessLever; private boolean swapJewelleryBox; private boolean getSwapOffer; + private boolean hotKeyLoot; + private boolean hotKeyWalk; private final HotkeyListener hotkey = new HotkeyListener(() -> this.hotkeyMod) { @Override @@ -1525,7 +1595,14 @@ public class MenuEntrySwapperPlugin extends Plugin { menuManager.addPriorityEntry("climb-up").setPriority(100); } - + if (this.hotKeyLoot) + { + menuManager.addPriorityEntry(TAKE); + } + if (this.hotKeyWalk) + { + menuManager.addPriorityEntry(WALK); + } if (this.swapNpcContact) { for (String npccontact : npcContact) @@ -1551,6 +1628,8 @@ public class MenuEntrySwapperPlugin extends Plugin menuManager.removePriorityEntry(new BankComparableEntry("equip", "", false)); menuManager.removePriorityEntry(new BankComparableEntry("invigorate", "", false)); menuManager.removePriorityEntry("climb-up"); + menuManager.removePriorityEntry(TAKE); + menuManager.removePriorityEntry(WALK); for (String npccontact : npcContact) { @@ -1796,6 +1875,8 @@ public class MenuEntrySwapperPlugin extends Plugin this.bankInvigorateItem = config.bankInvigorateItem(); this.swapNpcContact = config.swapNpcContact(); this.getSwapOffer = config.getSwapOffer(); + this.hotKeyWalk = config.hotKeyWalk(); + this.hotKeyLoot = config.hotKeyLoot(); } private void addBuySellEntries() diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsConfig.java index 2b8ba7c95f..b7841dc5f7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsConfig.java @@ -129,4 +129,24 @@ public interface NpcIndicatorsConfig extends Config { return false; } + + @ConfigItem( + position = 7, + keyName = "notifyOnRespawn", + name = "Notify on Respawn", + description = "Enable notification on respawn") + default boolean getNotifyOnRespawn() + { + return false; + } + + @ConfigItem( + position = 8, + keyName = "notifyOnRespawnDelay", + name = "Notification Delay", + description = "Notify when NPC is x ms from respawning") + default int getNotifyOnRespawnDelay() + { + return -1; + } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java index 413c69a44a..226997b2ff 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java @@ -29,6 +29,8 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableSet; import com.google.inject.Provides; import java.awt.Color; +import java.text.DecimalFormat; +import java.text.NumberFormat; import java.time.Instant; import java.util.ArrayList; import java.util.Collections; @@ -38,6 +40,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.Locale; import javax.inject.Inject; import javax.inject.Singleton; import lombok.AccessLevel; @@ -61,6 +64,7 @@ import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.events.NpcDefinitionChanged; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; +import net.runelite.client.Notifier; import net.runelite.api.util.Text; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; @@ -86,6 +90,16 @@ public class NpcIndicatorsPlugin extends Plugin { private static final int MAX_ACTOR_VIEW_RANGE = 15; + // Estimated time of a game tick in seconds + private static final double ESTIMATED_TICK_LENGTH = 0.6; + + private static final NumberFormat TIME_LEFT_FORMATTER = DecimalFormat.getInstance(Locale.getDefault()); + + static + { + ((DecimalFormat)TIME_LEFT_FORMATTER).applyPattern("#0.0"); + } + // Option added to NPC menu private static final String TAG = "Tag"; private static final String UNTAG = "Un-tag"; @@ -125,12 +139,21 @@ public class NpcIndicatorsPlugin extends Plugin @Setter(AccessLevel.PACKAGE) private boolean hotKeyPressed = false; + @Inject + private Notifier notifier; + /** * NPCs to highlight */ @Getter(AccessLevel.PACKAGE) private final Set highlightedNpcs = new HashSet<>(); + /** + * NPCs to notify when close to spawning + */ + @Getter(AccessLevel.PACKAGE) + private final Set pendingNotificationNpcs = new HashSet<>(); + /** * Dead NPCs that should be displayed with a respawn indicator if the config is on. */ @@ -206,6 +229,10 @@ public class NpcIndicatorsPlugin extends Plugin private boolean highlightMenuNames; @Getter(AccessLevel.PACKAGE) private boolean showRespawnTimer; + @Getter(AccessLevel.PACKAGE) + private boolean getNotifyOnRespawn; + @Getter(AccessLevel.PACKAGE) + private int getNotifyOnRespawnDelay; @Provides NpcIndicatorsConfig provideConfig(ConfigManager configManager) @@ -235,6 +262,7 @@ public class NpcIndicatorsPlugin extends Plugin overlayManager.remove(npcSceneOverlay); overlayManager.remove(npcMinimapOverlay); deadNpcsToDisplay.clear(); + pendingNotificationNpcs.clear(); memorizedNpcs.clear(); spawnedNpcsThisTick.clear(); despawnedNpcsThisTick.clear(); @@ -252,6 +280,7 @@ public class NpcIndicatorsPlugin extends Plugin { highlightedNpcs.clear(); deadNpcsToDisplay.clear(); + pendingNotificationNpcs.clear(); memorizedNpcs.forEach((id, npc) -> npc.setDiedOnTick(-1)); lastPlayerLocation = null; skipNextSpawnCheck = true; @@ -388,6 +417,12 @@ public class NpcIndicatorsPlugin extends Plugin if (memorizedNpcs.containsKey(npc.getIndex())) { despawnedNpcsThisTick.add(npc); + MemorizedNpc mn = memorizedNpcs.get(npc.getIndex()); + + if (!mn.getPossibleRespawnLocations().isEmpty()) + { + pendingNotificationNpcs.add(mn); + } } highlightedNpcs.remove(npc); @@ -409,6 +444,7 @@ public class NpcIndicatorsPlugin extends Plugin { removeOldHighlightedRespawns(); validateSpawnedNpcs(); + checkNotifyNpcs(); lastTickUpdate = Instant.now(); lastPlayerLocation = client.getLocalPlayer().getWorldLocation(); } @@ -486,6 +522,16 @@ public class NpcIndicatorsPlugin extends Plugin highlightedNpcs.remove(npc); } + public double getTimeLeftForNpc(MemorizedNpc npc) + { + final Instant now = Instant.now(); + final double baseTick = NpcIndicatorsPlugin.ESTIMATED_TICK_LENGTH * ( + npc.getDiedOnTick() + npc.getRespawnTime() - client.getTickCount() + ); + final double sinceLast = (now.toEpochMilli() - lastTickUpdate.toEpochMilli()) / 1000.0; + return Math.max(0.0, baseTick - sinceLast); + } + private void memorizeNpc(NPC npc) { final int npcIndex = npc.getIndex(); @@ -561,6 +607,33 @@ public class NpcIndicatorsPlugin extends Plugin } } + public String formatTime(double time) + { + return TIME_LEFT_FORMATTER.format(time); + } + + private void checkNotifyNpcs() + { + if (!this.getNotifyOnRespawn) + { + return; + } + + final double notifyDelay = ((double)this.getNotifyOnRespawnDelay) / 1000; + final String notifyDelayStr = notifyDelay > 0 + ? " is less than " + formatTime(notifyDelay) + " seconds from respawn" + : " respawned."; + + for (MemorizedNpc npc : pendingNotificationNpcs) + { + if (getTimeLeftForNpc(npc) <= notifyDelay) + { + pendingNotificationNpcs.remove(npc); + notifier.notify(npc.getNpcNames() + notifyDelayStr); + } + } + } + private void validateSpawnedNpcs() { if (skipNextSpawnCheck) @@ -569,6 +642,7 @@ public class NpcIndicatorsPlugin extends Plugin } else { + for (NPC npc : despawnedNpcsThisTick) { if (!teleportGraphicsObjectSpawnedThisTick.isEmpty() && teleportGraphicsObjectSpawnedThisTick.contains(npc.getWorldLocation())) @@ -657,5 +731,7 @@ public class NpcIndicatorsPlugin extends Plugin this.drawMinimapNames = config.drawMinimapNames(); this.highlightMenuNames = config.highlightMenuNames(); this.showRespawnTimer = config.showRespawnTimer(); + this.getNotifyOnRespawn = config.getNotifyOnRespawn(); + this.getNotifyOnRespawnDelay = config.getNotifyOnRespawnDelay(); } -} \ No newline at end of file +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcSceneOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcSceneOverlay.java index 300a29c33c..e3cee750a1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcSceneOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcSceneOverlay.java @@ -31,15 +31,10 @@ import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Polygon; import java.awt.Shape; -import java.text.DecimalFormat; -import java.text.NumberFormat; -import java.time.Instant; import java.util.List; -import java.util.Locale; import javax.inject.Inject; import javax.inject.Singleton; import net.runelite.api.Client; -import net.runelite.api.Constants; import net.runelite.api.NPC; import net.runelite.api.NPCDefinition; import net.runelite.api.Perspective; @@ -63,12 +58,7 @@ public class NpcSceneOverlay extends Overlay // a dark background private static final Color TEXT_COLOR = Color.WHITE; - private static final NumberFormat TIME_LEFT_FORMATTER = DecimalFormat.getInstance(Locale.US); - static - { - ((DecimalFormat) TIME_LEFT_FORMATTER).applyPattern("#0.0"); - } private final Client client; private final NpcIndicatorsPlugin plugin; @@ -128,11 +118,8 @@ public class NpcSceneOverlay extends Overlay OverlayUtil.renderPolygon(graphics, poly, color); } - final Instant now = Instant.now(); - final double baseTick = ((npc.getDiedOnTick() + npc.getRespawnTime()) - client.getTickCount()) * (Constants.GAME_TICK_LENGTH / 1000.0); - final double sinceLast = (now.toEpochMilli() - plugin.getLastTickUpdate().toEpochMilli()) / 1000.0; - final double timeLeft = Math.max(0.0, baseTick - sinceLast); - final String timeLeftStr = TIME_LEFT_FORMATTER.format(timeLeft); + + final String timeLeftStr = plugin.formatTime(plugin.getTimeLeftForNpc(npc)); final int textWidth = graphics.getFontMetrics().stringWidth(timeLeftStr); final int textHeight = graphics.getFontMetrics().getAscent(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/shiftwalker/ShiftWalkerConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/shiftwalker/ShiftWalkerConfig.java deleted file mode 100644 index 7f5d9baca9..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/shiftwalker/ShiftWalkerConfig.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2018, Plinko60 - * 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.shiftwalker; - -import net.runelite.client.config.Config; -import net.runelite.client.config.ConfigGroup; -import net.runelite.client.config.ConfigItem; - -@ConfigGroup("shiftwalkhere") -public interface ShiftWalkerConfig extends Config -{ - @ConfigItem( - keyName = "shiftWalk", - name = "Shift to Walk", - description = "For when you want Walk here as a priority" - ) - default boolean shiftWalk() - { - return false; - } - - @ConfigItem( - keyName = "shiftLoot", - name = "Shift to Loot", - description = "For when people stand on your loot" - ) - default boolean shiftLoot() - { - return false; - } -/* - - @ConfigItem( - keyName = "shiftWalkEverything", - name = "Walk Under Everything", - description = "Enable this option when you do not want to interact with anything while Shift is pressed. " + - "If Walk Here is an option it will be the action taken." - ) - default boolean shiftWalkEverything() - { - return true; - } - - @ConfigItem( - keyName = "shiftWalkBoxTraps", - name = "Walk Under Box Traps", - description = "Press \"Shift\" to be able to walk under instead of picking up a Box Trap." - ) - default boolean shiftWalkBoxTraps() - { - return true; - } - - @ConfigItem( - keyName = "shiftWalkAttackOption", - name = "Walk Under Attack Options", - description = "Press \"Shift\" to be able to walk instead of attacking. Make sure Left Click Attack is on." - ) - default boolean shiftWalkAttackOption() - { - return true; - } -*/ - -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/shiftwalker/ShiftWalkerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/shiftwalker/ShiftWalkerPlugin.java deleted file mode 100644 index 7e9858769c..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/shiftwalker/ShiftWalkerPlugin.java +++ /dev/null @@ -1,281 +0,0 @@ -/* - * Copyright (c) 2018, Plinko60 - * 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.shiftwalker; - -import com.google.inject.Provides; -import javax.inject.Inject; -import javax.inject.Singleton; -import lombok.AccessLevel; -import lombok.Setter; -import net.runelite.api.Client; -import net.runelite.api.GameState; -import net.runelite.api.MenuEntry; -import net.runelite.api.MenuOpcode; -import net.runelite.api.events.ClientTick; -import net.runelite.api.events.FocusChanged; -import net.runelite.api.events.GameStateChanged; -import net.runelite.client.config.ConfigManager; -import net.runelite.client.config.Keybind; -import net.runelite.client.eventbus.EventBus; -import net.runelite.client.eventbus.Subscribe; -import net.runelite.client.events.ConfigChanged; -import net.runelite.client.input.KeyManager; -import net.runelite.client.menus.AbstractComparableEntry; -import net.runelite.client.menus.MenuManager; -import net.runelite.client.plugins.Plugin; -import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.plugins.PluginType; -import net.runelite.client.util.HotkeyListener; - -/** - * Shift Walker Plugin. Credit to MenuEntrySwapperPlugin for code some code structure used here. - */ -@PluginDescriptor( - name = "Shift Walk Under", - description = "Use Shift to toggle the Walk Here menu option. While pressed you will Walk rather than interact with objects.", - tags = {"npcs", "items", "objects"}, - type = PluginType.UTILITY, - enabledByDefault = false -) -@Singleton -public class ShiftWalkerPlugin extends Plugin -{ - - private static final AbstractComparableEntry WALK = new AbstractComparableEntry() - { - private final int hash = "WALK".hashCode() * 79 + getPriority(); - - @Override - public int hashCode() - { - return hash; - } - - @Override - public boolean equals(Object entry) - { - return entry.getClass() == this.getClass() && entry.hashCode() == this.hashCode(); - } - - @Override - public int getPriority() - { - return 99; - } - - @Override - public boolean matches(MenuEntry entry) - { - return - entry.getOpcode() == MenuOpcode.WALK.getId() || - entry.getOpcode() == MenuOpcode.WALK.getId() + MenuOpcode.MENU_ACTION_DEPRIORITIZE_OFFSET; - } - }; - - private static final AbstractComparableEntry TAKE = new AbstractComparableEntry() - { - private final int hash = "TAKE".hashCode() * 79 + getPriority(); - - @Override - public int hashCode() - { - return hash; - } - - @Override - public boolean equals(Object entry) - { - return entry.getClass() == this.getClass() && entry.hashCode() == this.hashCode(); - } - - @Override - public int getPriority() - { - return 100; - } - - @Override - public boolean matches(MenuEntry entry) - { - int opcode = entry.getOpcode(); - if (opcode > MenuOpcode.MENU_ACTION_DEPRIORITIZE_OFFSET) - { - opcode -= MenuOpcode.MENU_ACTION_DEPRIORITIZE_OFFSET; - } - - return - opcode >= MenuOpcode.GROUND_ITEM_FIRST_OPTION.getId() && - opcode <= MenuOpcode.GROUND_ITEM_FIFTH_OPTION.getId(); - } - }; - - private static final String EVENTBUS_THING = "shiftwalker shift"; - private static final String SHIFT_CHECK = "shiftwalker hotkey check"; - @Inject - private Client client; - @Inject - private ShiftWalkerConfig config; - @Inject - private MenuManager menuManager; - @Inject - private KeyManager keyManager; - @Inject - private EventBus eventBus; - @Setter(AccessLevel.PRIVATE) - private boolean hotkeyActive; - private boolean shiftWalk; - private boolean shiftLoot; - - @Provides - ShiftWalkerConfig provideConfig(ConfigManager configManager) - { - return configManager.getConfig(ShiftWalkerConfig.class); - } - - private final HotkeyListener shift = new HotkeyListener(() -> Keybind.SHIFT) - { - @Override - public void hotkeyPressed() - { - startPrioritizing(); - setHotkeyActive(true); - } - - @Override - public void hotkeyReleased() - { - stopPrioritizing(); - setHotkeyActive(false); - } - }; - - @Override - public void startUp() - { - this.shiftWalk = config.shiftWalk(); - this.shiftLoot = config.shiftLoot(); - if (client.getGameState() == GameState.LOGGED_IN) - { - keyManager.registerKeyListener(shift); - } - } - - @Override - public void shutDown() - { - keyManager.unregisterKeyListener(shift); - } - - @Subscribe - private void onGameStateChanged(GameStateChanged event) - { - if (event.getGameState() != GameState.LOGGED_IN) - { - keyManager.unregisterKeyListener(shift); - return; - } - keyManager.registerKeyListener(shift); - } - - @Subscribe - private void onFocusChanged(FocusChanged event) - { - if (!event.isFocused()) - { - stopPrioritizing(); - } - } - - @Subscribe - private void onConfigChanged(ConfigChanged event) - { - if (!event.getGroup().equals("shiftwalkhere")) - { - return; - } - - if ("shiftWalk".equals(event.getKey())) - { - this.shiftWalk = "true".equals(event.getNewValue()); - } - else - { - this.shiftLoot = "true".equals(event.getNewValue()); - } - } - - private void hotkeyCheck(ClientTick event) - { - if (hotkeyActive) - { - int i = 0; - for (boolean bol : client.getPressedKeys()) - { - if (bol) - { - i++; - } - } - if (i == 0) - { - stopPrioritizing(); - setHotkeyActive(false); - eventBus.unregister(SHIFT_CHECK); - } - } - } - - private void startPrioritizing() - { - eventBus.subscribe(ClientTick.class, EVENTBUS_THING, this::addEntries); - eventBus.subscribe(ClientTick.class, SHIFT_CHECK, this::hotkeyCheck); - } - - private void addEntries(ClientTick event) - { - if (this.shiftLoot) - { - menuManager.addPriorityEntry(TAKE); - } - if (this.shiftWalk) - { - menuManager.addPriorityEntry(WALK); - } - - eventBus.unregister(EVENTBUS_THING); - } - - private void stopPrioritizing() - { - eventBus.subscribe(ClientTick.class, EVENTBUS_THING, this::removeEntries); - } - - private void removeEntries(ClientTick event) - { - menuManager.removePriorityEntry(TAKE); - menuManager.removePriorityEntry(WALK); - eventBus.unregister(EVENTBUS_THING); - } -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/nylocas/NyloHandler.java b/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/nylocas/NyloHandler.java index e87e99e37a..1cdd6341c5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/nylocas/NyloHandler.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/nylocas/NyloHandler.java @@ -20,26 +20,36 @@ import lombok.Setter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; +import net.runelite.api.MenuOpcode; import net.runelite.api.NPC; import net.runelite.api.Perspective; +import net.runelite.api.Player; +import net.runelite.api.PlayerAppearance; import net.runelite.api.Point; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; +import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; +import net.runelite.api.kit.KitType; import net.runelite.client.eventbus.EventBus; -import net.runelite.client.menus.AbstractComparableEntry; import net.runelite.client.menus.MenuManager; import net.runelite.client.plugins.theatre.RoomHandler; import net.runelite.client.plugins.theatre.TheatreConstant; import net.runelite.client.plugins.theatre.TheatrePlugin; import net.runelite.client.plugins.theatre.TheatreRoom; +import net.runelite.client.util.WeaponMap; +import net.runelite.client.util.WeaponStyle; +import org.apache.commons.lang3.ObjectUtils; @Slf4j public class NyloHandler extends RoomHandler { private static final String MESNAME = "tobmes"; + private static final String MAGE_NYLO = "Nylocas Hagios"; + private static final String RANGE_NYLO = "Nylocas Toxobolos"; + private static final String MELEE_NYLO = "Nylocas Ischyros"; final List waveSpawns = new ArrayList<>(); final List waveAgros = new ArrayList<>(); private final MenuManager menuManager; @@ -55,6 +65,8 @@ public class NyloHandler extends RoomHandler private int wave = 0; private NyloOverlay overlay = null; private NyloPredictor predictor = null; + private WeaponStyle currentWeaponStyle; + private boolean skipTickCheck = false; public NyloHandler(final Client client, final TheatrePlugin plugin, final MenuManager menuManager, final EventBus eventBus) { @@ -85,6 +97,7 @@ public class NyloHandler extends RoomHandler if (plugin.isNylocasMenuSwap()) { eventBus.subscribe(MenuOptionClicked.class, MESNAME, this::onMenuOptionClicked); + eventBus.subscribe(MenuEntryAdded.class, MESNAME, this::onMenuEntryAdded); } } @@ -126,7 +139,6 @@ public class NyloHandler extends RoomHandler this.waveSpawns.clear(); this.waveAgros.clear(); this.predictor.reset(); - menuManager.removeSwaps("Nylocas Hagios", "Nylocas Toxobolos", "Nylocas Ischyros"); } public void onConfigChanged() @@ -134,6 +146,7 @@ public class NyloHandler extends RoomHandler if (plugin.isNylocasMenuSwap()) { eventBus.subscribe(MenuOptionClicked.class, MESNAME, this::onMenuOptionClicked); + eventBus.subscribe(MenuEntryAdded.class, MESNAME, this::onMenuEntryAdded); } else { @@ -337,7 +350,7 @@ public class NyloHandler extends RoomHandler if (polygon != null) { graphics.setColor(color); - graphics.setStroke(new BasicStroke(2)); + graphics.setStroke(new BasicStroke(1)); graphics.draw(polygon); graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), 20)); graphics.fill(polygon); @@ -350,25 +363,42 @@ public class NyloHandler extends RoomHandler { return; } + if (skipTickCheck) + { + skipTickCheck = false; + } else { - boolean findPillar = false; - - for (NPC npc : client.getNpcs()) + Player p = client.getLocalPlayer(); + if (p == null) { - if (npc.getId() == 8358) - { - findPillar = true; - break; - } - } - - if (!findPillar) - { - this.onStop(); return; } + PlayerAppearance pa = p.getPlayerAppearance(); + if (pa == null) + { + return; + } + int weaponID = ObjectUtils.defaultIfNull(pa.getEquipmentId(KitType.WEAPON), -1); + currentWeaponStyle = WeaponMap.StyleMap.get(weaponID); } + boolean findPillar = false; + + for (NPC npc : client.getNpcs()) + { + if (npc.getId() == 8358) + { + findPillar = true; + break; + } + } + + if (!findPillar) + { + this.onStop(); + return; + } + for (NPC spider : new ArrayList<>(spiders.keySet())) { @@ -396,23 +426,49 @@ public class NyloHandler extends RoomHandler private void onMenuOptionClicked(MenuOptionClicked event) { - final String option = event.getOption().toLowerCase(); - - if (!option.equals("equip") && !option.equals("wield") && !option.equals("hold")) + int opcode = event.getOpcode(); + if (opcode == MenuOpcode.ITEM_SECOND_OPTION.getId()) { - return; + WeaponStyle newStyle = WeaponMap.StyleMap.get(event.getIdentifier()); + if (newStyle != null) + { + skipTickCheck = true; + currentWeaponStyle = newStyle; + } } + } - final int id = event.getIdentifier(); - final Set entries = Weapons.getEntries(id); - menuManager.removeSwaps("Nylocas Hagios", "Nylocas Toxobolos", "Nylocas Ischyros"); - - if (entries.isEmpty()) + private void onMenuEntryAdded(MenuEntryAdded event) + { + if (plugin.isNylocasMenuSwap()) { - return; + if (event.getOpcode() == MenuOpcode.NPC_SECOND_OPTION.getId() && event.getOption().equals("Attack")) + { + String target = event.getTarget(); + switch (currentWeaponStyle) + { + case MAGIC: + if (target.equals(RANGE_NYLO) || target.equals(MELEE_NYLO)) + { + client.setMenuOptionCount(client.getMenuOptionCount() - 1); + } + break; + case RANGE: + if (target.contains(MAGE_NYLO) || target.contains(MELEE_NYLO)) + { + client.setMenuOptionCount(client.getMenuOptionCount() - 1); + } + break; + case MELEE: + if (target.contains(MAGE_NYLO) || target.contains(RANGE_NYLO)) + { + client.setMenuOptionCount(client.getMenuOptionCount() - 1); + } + break; + default: + } + } } - - entries.forEach(menuManager::addHiddenEntry); } private void recalculateLocal() @@ -447,11 +503,4 @@ public class NyloHandler extends RoomHandler } } - private enum AttackStyle - { - MELEE, - MAGE, - RANGE, - RANGE2H - } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/nylocas/Weapons.java b/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/nylocas/Weapons.java deleted file mode 100644 index 6883fe0840..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/nylocas/Weapons.java +++ /dev/null @@ -1,72 +0,0 @@ -package net.runelite.client.plugins.theatre.rooms.nylocas; - -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import javax.annotation.Nullable; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Getter; -import net.runelite.api.ItemID; -import net.runelite.client.menus.AbstractComparableEntry; -import net.runelite.client.menus.ComparableEntries; - -@Getter(AccessLevel.PACKAGE) -@AllArgsConstructor -public enum Weapons -{ - MELEE(ImmutableSet.of(ItemID.ABYSSAL_WHIP, ItemID.ABYSSAL_TENTACLE, ItemID.SCYTHE_OF_VITUR, - ItemID.SCYTHE_OF_VITUR_22664, ItemID.SCYTHE_OF_VITUR_UNCHARGED, ItemID.HAM_JOINT, ItemID.SWIFT_BLADE, - ItemID.BANDOS_GODSWORD, ItemID.BANDOS_GODSWORD_20782, ItemID.BANDOS_GODSWORD_21060, ItemID.BANDOS_GODSWORD_OR, - ItemID.DRAGON_WARHAMMER, ItemID.DRAGON_CLAWS, ItemID.EVENT_RPG, ItemID.GHRAZI_RAPIER, ItemID.GHRAZI_RAPIER_23628, - ItemID.BLADE_OF_SAELDOR, ItemID.CRYSTAL_HALBERD, ItemID.DRAGON_SCIMITAR, ItemID.RUNE_SCIMITAR, ItemID.BLADE_OF_SAELDOR_23996, - ItemID.BLADE_OF_SAELDOR_INACTIVE, ItemID.BLADE_OF_SAELDOR_INACTIVE_23999), - ImmutableSet.of(ComparableEntries.newBaseComparableEntry("Attack", "Nylocas Hagios"), - ComparableEntries.newBaseComparableEntry("Attack", "Nylocas Toxobolos")) - ), - MAGE(ImmutableSet.of(ItemID.KODAI_WAND, ItemID.MASTER_WAND, ItemID.TRIDENT_OF_THE_SEAS, - ItemID.TRIDENT_OF_THE_SWAMP, ItemID.SANGUINESTI_STAFF, ItemID.IBANS_STAFF, ItemID.IBANS_STAFF_1410, - ItemID.IBANS_STAFF_U, ItemID.TRIDENT_OF_THE_SWAMP_E, ItemID.TRIDENT_OF_THE_SEAS_E), - ImmutableSet.of(ComparableEntries.newBaseComparableEntry("Attack", "Nylocas Ischyros"), - ComparableEntries.newBaseComparableEntry("Attack", "Nylocas Toxobolos")) - ), - RANGE(ImmutableSet.of(ItemID.TOXIC_BLOWPIPE, ItemID.TWISTED_BOW, ItemID.CRAWS_BOW, - ItemID.RED_CHINCHOMPA, ItemID.CHINCHOMPA, ItemID.BLACK_CHINCHOMPA, ItemID.ARMADYL_CROSSBOW, - ItemID.DRAGON_CROSSBOW, ItemID.RUNE_CROSSBOW, ItemID.DORGESHUUN_CROSSBOW), - ImmutableSet.of(ComparableEntries.newBaseComparableEntry("Attack", "Nylocas Hagios"), - ComparableEntries.newBaseComparableEntry("Attack", "Nylocas Ischyros")) - ); - - private final Set ids; - private final Set entries; - private static final Map, Set> map; - - static - { - final ImmutableMap.Builder, Set> builder = new ImmutableMap.Builder<>(); - for (Weapons weps : Weapons.values()) - { - builder.put(weps.getIds(), weps.getEntries()); - } - map = builder.build(); - } - - @Nullable - static Set getEntries(int id) - { - final Set entries = new HashSet<>(); - - for (Map.Entry, Set> entry : map.entrySet()) - { - if (entry.getKey().contains(id)) - { - entries.addAll(entry.getValue()); - break; - } - } - - return entries; - } -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tmorph/TMorph.java b/runelite-client/src/main/java/net/runelite/client/plugins/tmorph/TMorph.java index 6398a84b30..eaeb8d7e00 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/tmorph/TMorph.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tmorph/TMorph.java @@ -27,12 +27,15 @@ import com.google.common.base.Splitter; import com.google.common.collect.ImmutableMap; import com.google.inject.Provides; import java.awt.Color; +import java.awt.image.BufferedImage; import java.util.Arrays; +import java.util.HashMap; import java.util.Map; import javax.inject.Inject; import javax.inject.Singleton; import lombok.AccessLevel; import lombok.Getter; +import lombok.Setter; import net.runelite.api.Actor; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; @@ -40,10 +43,12 @@ import net.runelite.api.GameState; import net.runelite.api.Player; import net.runelite.api.events.AnimationChanged; import net.runelite.api.events.CommandExecuted; +import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.SpotAnimationChanged; import net.runelite.api.kit.KitType; import net.runelite.api.widgets.WidgetInfo; +import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; import net.runelite.client.eventbus.Subscribe; @@ -51,8 +56,12 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; +import net.runelite.client.plugins.tmorph.ui.TPanel; +import net.runelite.client.ui.ClientToolbar; +import net.runelite.client.ui.NavigationButton; import net.runelite.client.util.Clipboard; import net.runelite.client.util.ColorUtil; +import net.runelite.client.util.ImageUtil; import org.apache.commons.lang3.ObjectUtils; @PluginDescriptor( @@ -67,19 +76,20 @@ public class TMorph extends Plugin { @Getter(AccessLevel.PACKAGE) private static final Map kit; - private static final Color COLOR = new Color(10, 134, 74, 255); static { final ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); + for (KitType kit : KitType.values()) { builder.put(kit.getName(), kit); } + kit = builder.build(); } - @Getter(AccessLevel.PACKAGE) + @Getter(AccessLevel.PUBLIC) private static final Splitter NEWLINE_SPLITTER = Splitter .on("\n") .omitEmptyStrings() @@ -94,15 +104,25 @@ public class TMorph extends Plugin @Inject private EventBus eventBus; - private Map set1; - private Map set2; - private Map set3; + @Inject + private ClientToolbar clientToolbar; + + @Inject + private ClientThread clientThread; + + private TPanel panel; + private NavigationButton navButton; private int animation; private int globalAnimSwap; private int globalGraphicSwap; private int graphic; private int targetAnimation; private int targetGraphic; + @Setter + private Map panelMorph = new HashMap<>(); + private Map set1; + private Map set2; + private Map set3; @Provides TMorphConfig provideConfig(ConfigManager configManager) @@ -113,8 +133,20 @@ public class TMorph extends Plugin @Override protected void startUp() { + final BufferedImage icon = ImageUtil.getResourceStreamFromClass(getClass(), "nav.png"); + + panel = injector.getInstance(TPanel.class); + + navButton = NavigationButton.builder() + .tooltip("TMorph") + .icon(icon) + .priority(100) + .panel(panel) + .build(); + + clientToolbar.addNavigation(navButton); + updateConfig(); - addSubscriptions(); } @Override @@ -123,15 +155,8 @@ public class TMorph extends Plugin eventBus.unregister(this); } - private void addSubscriptions() - { - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(SpotAnimationChanged.class, this, this::onSpotAnimationChanged); - eventBus.subscribe(CommandExecuted.class, this, this::onCommandExecuted); - } - - private void onCommandExecuted(CommandExecuted event) + @Subscribe + public void onCommandExecuted(CommandExecuted event) { final String[] args = event.getArguments(); @@ -172,23 +197,47 @@ public class TMorph extends Plugin sb.append(kitType.getName()); sb.append("\n"); } - client.addChatMessage(ChatMessageType.GAMEMESSAGE, "TMorph", ColorUtil.prependColorTag("Your current gear has been copied to your clipboard", COLOR), null); + client.addChatMessage( + ChatMessageType.GAMEMESSAGE, + "TMorph", + ColorUtil.prependColorTag("Your current gear has been copied to your clipboard", Color.RED), + null + ); Clipboard.store(sb.toString()); } else { - client.addChatMessage(ChatMessageType.GAMEMESSAGE, "TMorph", ColorUtil.prependColorTag("Invalid syntax, do ::tmorph copy", Color.RED), null); + client.addChatMessage( + ChatMessageType.GAMEMESSAGE, + "TMorph", + ColorUtil.prependColorTag("Invalid syntax, do ::tmorph copy", Color.RED), + null + ); } } catch (Exception e) { - client.addChatMessage(ChatMessageType.GAMEMESSAGE, "TMorph", ColorUtil.prependColorTag("Invalid syntax, do ::tmorph copy", Color.RED), null); + client.addChatMessage( + ChatMessageType.GAMEMESSAGE, + "TMorph", + ColorUtil.prependColorTag("Invalid syntax, do ::tmorph copy", Color.RED), + null + ); } } } @Subscribe - private void onConfigChanged(ConfigChanged event) + public void onGameStateChanged(GameStateChanged event) + { + if (event.getGameState() == GameState.LOGIN_SCREEN) + { + clientThread.invokeLater(() -> panel.populateSlots()); + } + } + + @Subscribe + public void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("TMorph")) { @@ -196,7 +245,8 @@ public class TMorph extends Plugin } } - private void onSpotAnimationChanged(SpotAnimationChanged event) + @Subscribe + public void onSpotAnimationChanged(SpotAnimationChanged event) { final Actor actor = event.getActor(); @@ -218,7 +268,8 @@ public class TMorph extends Plugin } } - private void onAnimationChanged(AnimationChanged event) + @Subscribe + public void onAnimationChanged(AnimationChanged event) { final Actor actor = event.getActor(); @@ -240,7 +291,8 @@ public class TMorph extends Plugin } } - private void onGameTick(GameTick event) + @Subscribe + public void onGameTick(GameTick event) { if (client.getGameState() != GameState.LOGGED_IN) { @@ -257,14 +309,15 @@ public class TMorph extends Plugin return; } + updateGear(panelMorph, player); updateGear(set1, player); updateGear(set2, player); updateGear(set3, player); } - private void updateGear(Map map, Player player) + public void updateGear(Map map, Player player) { - if (map == null || map.isEmpty()) + if (map == null || map.isEmpty() || player.getPlayerAppearance() == null) { return; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tmorph/TmorphSet.java b/runelite-client/src/main/java/net/runelite/client/plugins/tmorph/TmorphSet.java new file mode 100644 index 0000000000..d4514c336b --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tmorph/TmorphSet.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2019, ganom + * 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.tmorph; + +import lombok.Data; + +@Data +public class TmorphSet +{ + private String name; + private int helmet; + private int cape; + private int amulet; + private int weapon; + private int torso; + private int shield; + private int legs; + private int hands; + private int boots; +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tmorph/ui/EquipSlot.java b/runelite-client/src/main/java/net/runelite/client/plugins/tmorph/ui/EquipSlot.java new file mode 100644 index 0000000000..3793a2270e --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tmorph/ui/EquipSlot.java @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2019, ganom + * 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.tmorph.ui; + +import java.awt.Component; +import java.awt.Dimension; +import java.util.LinkedHashMap; +import java.util.Map; +import javax.swing.ImageIcon; +import javax.swing.JComboBox; +import lombok.Getter; +import net.runelite.api.Client; +import net.runelite.api.kit.KitType; +import net.runelite.client.game.ItemManager; +import net.runelite.client.plugins.tmorph.TMorph; +import net.runelite.client.ui.ColorScheme; +import net.runelite.client.ui.components.ComboBoxIconEntry; +import net.runelite.client.ui.components.ComboBoxListRenderer; +import net.runelite.client.util.AsyncBufferedImage; +import net.runelite.client.util.ImageUtil; +import net.runelite.http.api.item.ItemEquipmentStats; +import net.runelite.http.api.item.ItemStats; +import org.pushingpixels.substance.internal.utils.SubstanceDropDownButton; + +@Getter +public class EquipSlot extends JComboBox +{ + private final ComboBoxIconEntry original; + private Map boxMap; + private KitType kitType; + + EquipSlot(KitType kitType) + { + super(); + this.kitType = kitType; + this.boxMap = new LinkedHashMap<>(); + setPreferredSize(new Dimension(200, 42)); + setBackground(ColorScheme.DARK_GRAY_COLOR); + setRenderer(new ComboBoxListRenderer()); + original = new ComboBoxIconEntry( + new ImageIcon(ImageUtil.getResourceStreamFromClass(TMorph.class, kitType.getName().toLowerCase() + ".png")), + kitType.getName(), + null + ); + addItem(original); + setSelectedIndex(0); + for (Component component : getComponents()) + { + if (component instanceof SubstanceDropDownButton) + { + remove(component); + } + } + } + + public void populate(Client client, ItemManager itemManager) + { + assert client.isClientThread() : "Populate must be called on client thread"; + + for (int i = 0; i < client.getItemCount(); i++) + { + ItemStats stats = itemManager.getItemStats(i, false); + + if (stats == null) + { + continue; + } + + if (!stats.isEquipable()) + { + continue; + } + + ItemEquipmentStats equipment = stats.getEquipment(); + + if (equipment == null) + { + continue; + } + + if (equipment.getSlot() != kitType.getIndex()) + { + continue; + } + + AsyncBufferedImage image = itemManager.getImage(i); + + if (image == null) + { + continue; + } + + final ComboBoxIconEntry entry = new ComboBoxIconEntry( + new ImageIcon(image), + client.getItemDefinition(i).getName(), + client.getItemDefinition(i) + ); + boxMap.put(i, entry); + addItem(entry); + } + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tmorph/ui/TPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/tmorph/ui/TPanel.java new file mode 100644 index 0000000000..3331a9257d --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tmorph/ui/TPanel.java @@ -0,0 +1,453 @@ +/* + * Copyright (c) 2019, ganom + * 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.tmorph.ui; + +import com.google.common.collect.ImmutableSet; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.GridLayout; +import java.awt.event.ItemEvent; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import javax.inject.Inject; +import javax.swing.Box; +import javax.swing.BoxLayout; +import static javax.swing.BoxLayout.Y_AXIS; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.border.EmptyBorder; +import lombok.extern.slf4j.Slf4j; +import net.runelite.api.Client; +import net.runelite.api.GameState; +import net.runelite.api.ItemDefinition; +import net.runelite.api.Player; +import net.runelite.api.kit.KitType; +import static net.runelite.api.kit.KitType.AMULET; +import static net.runelite.api.kit.KitType.BOOTS; +import static net.runelite.api.kit.KitType.CAPE; +import static net.runelite.api.kit.KitType.HANDS; +import static net.runelite.api.kit.KitType.HELMET; +import static net.runelite.api.kit.KitType.LEGS; +import static net.runelite.api.kit.KitType.SHIELD; +import static net.runelite.api.kit.KitType.TORSO; +import static net.runelite.api.kit.KitType.WEAPON; +import net.runelite.api.widgets.Widget; +import net.runelite.api.widgets.WidgetInfo; +import net.runelite.client.Notifier; +import net.runelite.client.database.DatabaseManager; +import static net.runelite.client.database.data.Tables.TMORPH_SETS; +import net.runelite.client.database.data.tables.records.TmorphSetsRecord; +import net.runelite.client.game.ItemManager; +import net.runelite.client.plugins.tmorph.TMorph; +import net.runelite.client.plugins.tmorph.TmorphSet; +import net.runelite.client.ui.PluginPanel; +import net.runelite.client.ui.components.ComboBoxIconEntry; +import net.runelite.client.util.Clipboard; +import org.jooq.Record; +import org.jooq.Result; +import org.jooq.TableField; +import org.jooq.impl.SQLDataType; + +@Slf4j +public class TPanel extends PluginPanel +{ + private static final Set BLACKLIST = ImmutableSet.of(KitType.AMMUNITION, KitType.RING, KitType.HEAD, KitType.JAW); + + private final Client client; + private final DatabaseManager databaseManager; + private final ItemManager itemManager; + private final TMorph plugin; + private final Notifier notifier; + + private final JComboBox selector; + private final Map equipSlots; + private final Map kitToId; + private final Map setMap; + private final ExecutorService executor; + private JPanel equipPanel; + + @Inject + public TPanel( + final Client client, + final DatabaseManager databaseManager, + final ItemManager itemManager, + final TMorph plugin, + final Notifier notifier + ) + { + super(false); + this.client = client; + this.databaseManager = databaseManager; + this.itemManager = itemManager; + this.plugin = plugin; + this.notifier = notifier; + this.equipSlots = new LinkedHashMap<>(); + this.kitToId = new HashMap<>(); + this.setMap = new HashMap<>(); + this.selector = new JComboBox<>(); + this.executor = Executors.newSingleThreadExecutor(); + init(); + } + + private void init() + { + selector.addItem("Populating fields..."); + selector.setSelectedIndex(0); + selector.addActionListener((e) -> + { + String name = (String) selector.getSelectedItem(); + Result recs = databaseManager.getDsl() + .selectFrom(TMORPH_SETS) + .where(TMORPH_SETS.SET_NAME.eq(name)) + .fetch(); + + for (TmorphSetsRecord rec : recs) + { + for (Map.Entry entry : equipSlots.entrySet()) + { + int id = rec.getValue(kitToField(entry.getKey())); + EquipSlot es = entry.getValue(); + es.setSelectedItem(es.getBoxMap().getOrDefault(id, es.getOriginal())); + } + } + }); + + final JLabel title = new JLabel(); + title.setText("Tmorph Sets"); + title.setForeground(Color.WHITE); + title.setHorizontalAlignment(JLabel.CENTER); + title.setVerticalAlignment(JLabel.CENTER); + + final JPanel titleAndMarkersPanel = new JPanel(); + titleAndMarkersPanel.setLayout(new BorderLayout()); + titleAndMarkersPanel.add(title, BorderLayout.CENTER); + + final JPanel northAnchoredPanel = new JPanel(); + northAnchoredPanel.setLayout(new BoxLayout(northAnchoredPanel, Y_AXIS)); + northAnchoredPanel.setBorder(new EmptyBorder(0, 0, 10, 0)); + northAnchoredPanel.add(titleAndMarkersPanel); + northAnchoredPanel.add(Box.createRigidArea(new Dimension(0, 10))); + northAnchoredPanel.add(selector); + + final JPanel containerHolder = new JPanel(); + final JPanel containerPanel = new JPanel(); + + final JLabel caption = new JLabel(); + caption.setText("Morph Selector"); + caption.setForeground(Color.WHITE); + caption.setHorizontalAlignment(JLabel.CENTER); + caption.setVerticalAlignment(JLabel.CENTER); + + final JPanel captionPanel = new JPanel(); + captionPanel.add(caption); + + equipPanel = new JPanel(); + equipPanel.setLayout(new GridLayout(11, 1, 1, 1)); + addSlots(); + + containerPanel.setLayout(new BorderLayout()); + containerPanel.add(captionPanel, BorderLayout.NORTH); + containerPanel.add(equipPanel, BorderLayout.CENTER); + + containerHolder.add(containerPanel); + + final JPanel contentPanel = new JPanel(); + final BoxLayout contentLayout = new BoxLayout(contentPanel, Y_AXIS); + contentPanel.setLayout(contentLayout); + contentPanel.add(containerHolder); + + final JPanel contentWrapper = new JPanel(new BorderLayout()); + contentWrapper.add(Box.createGlue(), BorderLayout.CENTER); + contentWrapper.add(contentPanel, BorderLayout.NORTH); + final JScrollPane contentWrapperPane = new JScrollPane(contentWrapper); + contentWrapperPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); + + setLayout(new BorderLayout()); + setBorder(new EmptyBorder(10, 10, 10, 10)); + add(northAnchoredPanel, BorderLayout.NORTH); + add(contentWrapperPane, BorderLayout.CENTER); + executor.submit(this::populateSelector); + } + + private void populateSelector() + { + if (!databaseManager.checkTableExists("TMORPH_SETS")) + { + databaseManager.getDsl().createTable(TMORPH_SETS) + .column(TMORPH_SETS.SET_NAME, SQLDataType.VARCHAR(255).nullable(false)) + .column(TMORPH_SETS.HELMET, SQLDataType.INTEGER.nullable(false)) + .column(TMORPH_SETS.CAPE, SQLDataType.INTEGER.nullable(false)) + .column(TMORPH_SETS.AMULET, SQLDataType.INTEGER.nullable(false)) + .column(TMORPH_SETS.WEAPON, SQLDataType.INTEGER.nullable(false)) + .column(TMORPH_SETS.TORSO, SQLDataType.INTEGER.nullable(false)) + .column(TMORPH_SETS.SHIELD, SQLDataType.INTEGER.nullable(false)) + .column(TMORPH_SETS.LEGS, SQLDataType.INTEGER.nullable(false)) + .column(TMORPH_SETS.HANDS, SQLDataType.INTEGER.nullable(false)) + .column(TMORPH_SETS.BOOTS, SQLDataType.INTEGER.nullable(false)) + .execute(); + } + + Result recs = databaseManager.getDsl().selectFrom(TMORPH_SETS).fetch(); + setMap.clear(); + selector.removeAllItems(); + selector.addItem("Select your set..."); + selector.setSelectedIndex(0); + + for (Record record : recs) + { + TmorphSet tmo = new TmorphSet(); + String name = record.getValue(TMORPH_SETS.SET_NAME); + tmo.setName(name); + tmo.setHelmet(record.getValue(TMORPH_SETS.HELMET)); + tmo.setCape(record.getValue(TMORPH_SETS.CAPE)); + tmo.setAmulet(record.getValue(TMORPH_SETS.AMULET)); + tmo.setWeapon(record.getValue(TMORPH_SETS.WEAPON)); + tmo.setTorso(record.getValue(TMORPH_SETS.TORSO)); + tmo.setShield(record.getValue(TMORPH_SETS.SHIELD)); + tmo.setLegs(record.getValue(TMORPH_SETS.LEGS)); + tmo.setHands(record.getValue(TMORPH_SETS.HANDS)); + tmo.setBoots(record.getValue(TMORPH_SETS.BOOTS)); + setMap.put(name, tmo); + selector.addItem(name); + } + } + + private void addSlots() + { + int i = 0; + + for (KitType kitType : KitType.values()) + { + if (BLACKLIST.contains(kitType)) + { + continue; + } + + final EquipSlot equip = new EquipSlot(kitType); + + equip.addItemListener((e) -> + { + if (e.getStateChange() == ItemEvent.SELECTED) + { + ComboBoxIconEntry combo = (ComboBoxIconEntry) e.getItem(); + + if (combo.getData() == null) + { + return; + } + + ItemDefinition def = (ItemDefinition) combo.getData(); + KitType type = null; + + for (Map.Entry entry : equipSlots.entrySet()) + { + if (entry.getValue() == e.getSource()) + { + type = entry.getKey(); + break; + } + } + + if (type == null) + { + return; + } + + if (kitToId.containsKey(type)) + { + kitToId.replace(type, def.getId()); + } + else + { + kitToId.put(type, def.getId()); + } + + if (client.getGameState() == GameState.LOGGED_IN) + { + generate(false); + } + } + }); + + equipSlots.put(kitType, equip); + equipPanel.add(equip); + i++; + } + + final JButton setButton = new JButton("Set/Copy Active Morph"); + setButton.addActionListener((e) -> plugin.setPanelMorph(generate(true))); + equipPanel.add(setButton); + + final JButton saveButton = new JButton("Save Active Morph"); + saveButton.addActionListener((e) -> + { + final String s = JOptionPane.showInputDialog(saveButton, "What would you like to name the set?"); + + if (s == null || s.isEmpty()) + { + return; + } + + Result records = databaseManager.getDsl() + .selectFrom(TMORPH_SETS) + .where(TMORPH_SETS.SET_NAME.eq(s)) + .fetch(); + + boolean exists = records.isNotEmpty(); + + if (!exists) + { + databaseManager.getDsl().insertInto(TMORPH_SETS) + .set(TMORPH_SETS.SET_NAME, s) + .set(TMORPH_SETS.HELMET, kitToId.getOrDefault(HELMET, -1)) + .set(TMORPH_SETS.CAPE, kitToId.getOrDefault(CAPE, -1)) + .set(TMORPH_SETS.AMULET, kitToId.getOrDefault(AMULET, -1)) + .set(TMORPH_SETS.WEAPON, kitToId.getOrDefault(WEAPON, -1)) + .set(TMORPH_SETS.TORSO, kitToId.getOrDefault(TORSO, -1)) + .set(TMORPH_SETS.SHIELD, kitToId.getOrDefault(SHIELD, -1)) + .set(TMORPH_SETS.LEGS, kitToId.getOrDefault(LEGS, -1)) + .set(TMORPH_SETS.HANDS, kitToId.getOrDefault(HANDS, -1)) + .set(TMORPH_SETS.BOOTS, kitToId.getOrDefault(BOOTS, -1)) + .execute(); + executor.submit(this::populateSelector); + } + else + { + databaseManager.getDsl().update(TMORPH_SETS) + .set(TMORPH_SETS.HELMET, kitToId.getOrDefault(HELMET, -1)) + .set(TMORPH_SETS.CAPE, kitToId.getOrDefault(CAPE, -1)) + .set(TMORPH_SETS.AMULET, kitToId.getOrDefault(AMULET, -1)) + .set(TMORPH_SETS.WEAPON, kitToId.getOrDefault(WEAPON, -1)) + .set(TMORPH_SETS.TORSO, kitToId.getOrDefault(TORSO, -1)) + .set(TMORPH_SETS.SHIELD, kitToId.getOrDefault(SHIELD, -1)) + .set(TMORPH_SETS.LEGS, kitToId.getOrDefault(LEGS, -1)) + .set(TMORPH_SETS.HANDS, kitToId.getOrDefault(HANDS, -1)) + .set(TMORPH_SETS.BOOTS, kitToId.getOrDefault(BOOTS, -1)) + .where(TMORPH_SETS.SET_NAME.eq(s)) + .execute(); + } + }); + equipPanel.add(saveButton); + } + + public void populateSlots() + { + for (EquipSlot slot : equipSlots.values()) + { + slot.populate(client, itemManager); + } + } + + public Map generate(boolean copy) + { + final StringBuilder sb = new StringBuilder(); + final Player player = client.getLocalPlayer(); + + if (player == null + || player.getPlayerAppearance() == null + || client.getWidget(WidgetInfo.LOGIN_CLICK_TO_PLAY_SCREEN) != null + || client.getViewportWidget() == null) + { + return new HashMap<>(); + } + + for (KitType kitType : KitType.values()) + { + if (BLACKLIST.contains(kitType)) + { + continue; + } + + final Widget widget = client.getWidget(kitType.getWidgetInfo()); + + if (widget == null || widget.getDynamicChildren() == null || widget.getDynamicChildren().length < 1) + { + continue; + } + + final int id = itemManager.canonicalize(widget.getDynamicChildren()[1].getItemId()); + final int kitId = kitToId.getOrDefault(kitType, -1); + + if (kitId == -1) + { + continue; + } + + sb.append(id); + sb.append(","); + sb.append(kitId); + sb.append(":"); + sb.append(kitType.getName()); + sb.append("\n"); + } + + final String s = sb.toString(); + + if (copy) + { + Clipboard.store(s); + notifier.notify("Saved to clipboard."); + } + + return plugin.getNEWLINE_SPLITTER() + .withKeyValueSeparator(":") + .split(s); + } + + private TableField kitToField(KitType kitType) + { + switch (kitType) + { + case HELMET: + return TMORPH_SETS.HELMET; + case CAPE: + return TMORPH_SETS.CAPE; + case AMULET: + return TMORPH_SETS.AMULET; + case WEAPON: + return TMORPH_SETS.WEAPON; + case TORSO: + return TMORPH_SETS.TORSO; + case SHIELD: + return TMORPH_SETS.SHIELD; + case LEGS: + return TMORPH_SETS.LEGS; + case HANDS: + return TMORPH_SETS.HANDS; + case BOOTS: + return TMORPH_SETS.BOOTS; + default: + return null; + } + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/util/MiscUtils.java b/runelite-client/src/main/java/net/runelite/client/util/MiscUtils.java index 29e7d7b93f..e489bdc20d 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/MiscUtils.java +++ b/runelite-client/src/main/java/net/runelite/client/util/MiscUtils.java @@ -70,7 +70,7 @@ public class MiscUtils if (client.getWorldType().stream().anyMatch(worldType -> worldType == WorldType.PVP || worldType == WorldType.HIGH_RISK)) { - wildernessLevel += 15; + wildernessLevel += 10; } return Math.max(0, wildernessLevel); diff --git a/runelite-client/src/main/java/net/runelite/client/util/PvPUtil.java b/runelite-client/src/main/java/net/runelite/client/util/PvPUtil.java index 03c2a1a07c..22b277b0d0 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/PvPUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/util/PvPUtil.java @@ -72,9 +72,9 @@ public class PvPUtil { if (client.getVar(Varbits.IN_WILDERNESS) != 1) { - return Math.abs(client.getLocalPlayer().getCombatLevel() - player.getCombatLevel()) <= 15; + return Math.abs(client.getLocalPlayer().getCombatLevel() - player.getCombatLevel()) <= 10; } - wildernessLevel = 15; + wildernessLevel = 10; } return Math.abs(client.getLocalPlayer().getCombatLevel() - player.getCombatLevel()) < (getWildernessLevelFrom(client.getLocalPlayer().getWorldLocation()) + wildernessLevel); diff --git a/runelite-client/src/main/java/net/runelite/client/util/WeaponMap.java b/runelite-client/src/main/java/net/runelite/client/util/WeaponMap.java new file mode 100644 index 0000000000..300c4a6e43 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/util/WeaponMap.java @@ -0,0 +1,735 @@ +package net.runelite.client.util; + +import java.util.HashMap; +import net.runelite.api.ItemID; + +public class WeaponMap +{ + public static HashMap StyleMap = new HashMap<>(); + + static + { + //Melee + StyleMap.put(ItemID._3RD_AGE_AXE, WeaponStyle.MELEE); + StyleMap.put(ItemID._3RD_AGE_LONGSWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID._3RD_AGE_PICKAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.ABYSSAL_BLUDGEON, WeaponStyle.MELEE); + StyleMap.put(ItemID.ABYSSAL_DAGGER, WeaponStyle.MELEE); + StyleMap.put(ItemID.ABYSSAL_DAGGER_P, WeaponStyle.MELEE); + StyleMap.put(ItemID.ABYSSAL_DAGGER_P_13269, WeaponStyle.MELEE); + StyleMap.put(ItemID.ABYSSAL_DAGGER_P_13271, WeaponStyle.MELEE); + StyleMap.put(ItemID.ABYSSAL_TENTACLE, WeaponStyle.MELEE); + StyleMap.put(ItemID.ABYSSAL_WHIP, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_2H_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_AXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_BATTLEAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_CANE, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_CLAWS, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_DAGGER, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_DAGGERP, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_DAGGERP_5676, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_DAGGERP_5694, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_HALBERD, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_HASTA, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_LONGSWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_MACE, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_PICKAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_SCIMITAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_SPEAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_SPEARP, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_SPEARP_5712, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_SPEARP_5726, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.ADAMANT_WARHAMMER, WeaponStyle.MELEE); + StyleMap.put(ItemID.ALE_OF_THE_GODS, WeaponStyle.MELEE); + StyleMap.put(ItemID.ANCIENT_MACE, WeaponStyle.MELEE); + StyleMap.put(ItemID.ARMADYL_GODSWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.ARMADYL_GODSWORD_OR, WeaponStyle.MELEE); + StyleMap.put(ItemID.ARMADYL_GODSWORD_20593, WeaponStyle.MELEE); + StyleMap.put(ItemID.ARMADYL_GODSWORD_22665, WeaponStyle.MELEE); + StyleMap.put(ItemID.ARCLIGHT, WeaponStyle.MELEE); + StyleMap.put(ItemID.BANDOS_GODSWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.BANDOS_GODSWORD_OR, WeaponStyle.MELEE); + StyleMap.put(ItemID.BANDOS_GODSWORD_20782, WeaponStyle.MELEE); + StyleMap.put(ItemID.BANDOS_GODSWORD_21060, WeaponStyle.MELEE); + StyleMap.put(ItemID.BARBTAIL_HARPOON, WeaponStyle.MELEE); + StyleMap.put(ItemID.BARRELCHEST_ANCHOR, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_2H_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_AXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_BATTLEAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_CANE, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_CLAWS, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_DAGGER, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_DAGGERP, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_DAGGERP_5682, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_DAGGERP_5700, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_HALBERD, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_LONGSWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_MACE, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_PICKAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_SALAMANDER, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_SCIMITAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_SPEAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_SPEARP, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_SPEARP_5734, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_SPEARP_5736, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_WARHAMMER, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLESSED_AXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLADE_OF_SAELDOR, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLURITE_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.BONE_CLUB, WeaponStyle.MELEE); + StyleMap.put(ItemID.BONE_DAGGER, WeaponStyle.MELEE); + StyleMap.put(ItemID.BONE_DAGGER_P, WeaponStyle.MELEE); + StyleMap.put(ItemID.BONE_DAGGER_P_8876, WeaponStyle.MELEE); + StyleMap.put(ItemID.BONE_DAGGER_P_8878, WeaponStyle.MELEE); + StyleMap.put(ItemID.BONE_SPEAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.BOXING_GLOVES, WeaponStyle.MELEE); + StyleMap.put(ItemID.BOXING_GLOVES_7673, WeaponStyle.MELEE); + StyleMap.put(ItemID.BEACH_BOXING_GLOVES, WeaponStyle.MELEE); + StyleMap.put(ItemID.BEACH_BOXING_GLOVES_11706, WeaponStyle.MELEE); + StyleMap.put(ItemID.PET_ROCK, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRINE_SABRE, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRONZE_2H_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRONZE_AXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRONZE_BATTLEAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRONZE_CLAWS, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRONZE_DAGGER, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRONZE_DAGGERP, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRONZE_DAGGERP_5670, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRONZE_DAGGERP_5688, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRONZE_HALBERD, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRONZE_HASTA, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRONZE_LONGSWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRONZE_MACE, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRONZE_PICKAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRONZE_SCIMITAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRONZE_SPEAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRONZE_SPEARP, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRONZE_SPEARP_5704, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRONZE_SPEARP_5718, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRONZE_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRONZE_WARHAMMER, WeaponStyle.MELEE); + StyleMap.put(ItemID.BRUMA_TORCH, WeaponStyle.MELEE); + StyleMap.put(ItemID.CATTLEPROD, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRIER_BELL, WeaponStyle.MELEE); + StyleMap.put(ItemID.NEW_CRYSTAL_HALBERD_FULL_I, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRYSTAL_HALBERD_FULL_I, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRYSTAL_HALBERD_910_I, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRYSTAL_HALBERD_810_I, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRYSTAL_HALBERD_710_I, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRYSTAL_HALBERD_610_I, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRYSTAL_HALBERD_510_I, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRYSTAL_HALBERD_410_I, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRYSTAL_HALBERD_310_I, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRYSTAL_HALBERD_210_I, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRYSTAL_HALBERD_110_I, WeaponStyle.MELEE); + StyleMap.put(ItemID.NEW_CRYSTAL_HALBERD_FULL, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRYSTAL_HALBERD_FULL, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRYSTAL_HALBERD_910, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRYSTAL_HALBERD_810, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRYSTAL_HALBERD_710, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRYSTAL_HALBERD_610, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRYSTAL_HALBERD_510, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRYSTAL_HALBERD_410, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRYSTAL_HALBERD_310, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRYSTAL_HALBERD_210, WeaponStyle.MELEE); + StyleMap.put(ItemID.CRYSTAL_HALBERD_110, WeaponStyle.MELEE); + StyleMap.put(ItemID.CURSED_GOBLIN_HAMMER, WeaponStyle.MELEE); + StyleMap.put(ItemID.DARK_DAGGER, WeaponStyle.MELEE); + StyleMap.put(ItemID.DARKLIGHT, WeaponStyle.MELEE); + StyleMap.put(ItemID.DECORATIVE_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.DECORATIVE_SWORD_4503, WeaponStyle.MELEE); + StyleMap.put(ItemID.DECORATIVE_SWORD_4508, WeaponStyle.MELEE); + StyleMap.put(ItemID.DHAROKS_GREATAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.DHAROKS_GREATAXE_100, WeaponStyle.MELEE); + StyleMap.put(ItemID.DHAROKS_GREATAXE_75, WeaponStyle.MELEE); + StyleMap.put(ItemID.DHAROKS_GREATAXE_50, WeaponStyle.MELEE); + StyleMap.put(ItemID.DHAROKS_GREATAXE_25, WeaponStyle.MELEE); + StyleMap.put(ItemID.DHAROKS_GREATAXE_0, WeaponStyle.MELEE); + StyleMap.put(ItemID.DINHS_BULWARK, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_2H_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_2H_SWORD_20559, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_AXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_BATTLEAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_CANE, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_CLAWS, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_CLAWS_20784, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_DAGGER, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_DAGGERP, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_DAGGERP_5680, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_DAGGERP_5698, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_HALBERD, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_HARPOON, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_HASTA, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_HASTAP, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_HASTAP_22737, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_HASTAP_22740, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_HASTAKP, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_HUNTER_LANCE, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_LONGSWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_MACE, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_PICKAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_PICKAXE_12797, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_SCIMITAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_SCIMITAR_OR, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_SCIMITAR_20406, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_SPEAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_SPEARP, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_SPEARP_5716, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_SPEARP_5730, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_WARHAMMER, WeaponStyle.MELEE); + StyleMap.put(ItemID.DRAGON_WARHAMMER_20785, WeaponStyle.MELEE); + StyleMap.put(ItemID.EXCALIBUR, WeaponStyle.MELEE); + StyleMap.put(ItemID.EXCALIBUR_8280, WeaponStyle.MELEE); + StyleMap.put(ItemID.ELDER_MAUL, WeaponStyle.MELEE); + StyleMap.put(ItemID.ELDER_MAUL_21205, WeaponStyle.MELEE); + StyleMap.put(ItemID.EVENT_RPG, WeaponStyle.MELEE); + StyleMap.put(ItemID.FLAMTAER_HAMMER, WeaponStyle.MELEE); + StyleMap.put(ItemID.FREMENNIK_BLADE, WeaponStyle.MELEE); + StyleMap.put(ItemID.FROZEN_ABYSSAL_WHIP, WeaponStyle.MELEE); + StyleMap.put(ItemID.GADDERHAMMER, WeaponStyle.MELEE); + StyleMap.put(ItemID.GHRAZI_RAPIER, WeaponStyle.MELEE); + StyleMap.put(ItemID.GOLDEN_TENCH, WeaponStyle.MELEE); + StyleMap.put(ItemID.GILDED_HASTA, WeaponStyle.MELEE); + StyleMap.put(ItemID.GILDED_2H_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.GILDED_SCIMITAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.GILDED_SPEAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.GLOWING_DAGGER, WeaponStyle.MELEE); + StyleMap.put(ItemID.GRANITE_LONGSWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.GRANITE_HAMMER, WeaponStyle.MELEE); + StyleMap.put(ItemID.GRANITE_MAUL, WeaponStyle.MELEE); + StyleMap.put(ItemID.GRANITE_MAUL_12848, WeaponStyle.MELEE); + StyleMap.put(ItemID.GRANITE_MAUL_20557, WeaponStyle.MELEE); + StyleMap.put(ItemID.GUTHANS_WARSPEAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.GUTHANS_WARSPEAR_100, WeaponStyle.MELEE); + StyleMap.put(ItemID.GUTHANS_WARSPEAR_75, WeaponStyle.MELEE); + StyleMap.put(ItemID.GUTHANS_WARSPEAR_50, WeaponStyle.MELEE); + StyleMap.put(ItemID.GUTHANS_WARSPEAR_25, WeaponStyle.MELEE); + StyleMap.put(ItemID.GUTHANS_WARSPEAR_0, WeaponStyle.MELEE); + StyleMap.put(ItemID.HALBERD, WeaponStyle.MELEE); + StyleMap.put(ItemID.HAND_FAN, WeaponStyle.MELEE); + StyleMap.put(ItemID.INFERNAL_AXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.INFERNAL_AXE_UNCHARGED, WeaponStyle.MELEE); + StyleMap.put(ItemID.INFERNAL_HARPOON, WeaponStyle.MELEE); + StyleMap.put(ItemID.INFERNAL_HARPOON_UNCHARGED, WeaponStyle.MELEE); + StyleMap.put(ItemID.INFERNAL_PICKAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.INFERNAL_PICKAXE_UNCHARGED, WeaponStyle.MELEE); + StyleMap.put(ItemID.BUTTERFLY_NET, WeaponStyle.MELEE); + StyleMap.put(ItemID.HILL_GIANT_CLUB, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUBBER_CHICKEN, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUBBER_CHICKEN_10732, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUBBER_CHICKEN_22666, WeaponStyle.MELEE); + StyleMap.put(ItemID.OILY_FISHING_ROD, WeaponStyle.MELEE); + StyleMap.put(ItemID.OILY_PEARL_FISHING_ROD, WeaponStyle.MELEE); + StyleMap.put(ItemID.SARAS_BLESSED_SWORD_FULL, WeaponStyle.MELEE); + StyleMap.put(ItemID.GREEN_BANNER, WeaponStyle.MELEE); + StyleMap.put(ItemID.IRON_2H_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.IRON_AXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.IRON_BATTLEAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.IRON_CLAWS, WeaponStyle.MELEE); + StyleMap.put(ItemID.IRON_DAGGER, WeaponStyle.MELEE); + StyleMap.put(ItemID.IRON_DAGGERP, WeaponStyle.MELEE); + StyleMap.put(ItemID.IRON_DAGGERP_5668, WeaponStyle.MELEE); + StyleMap.put(ItemID.IRON_DAGGERP_5686, WeaponStyle.MELEE); + StyleMap.put(ItemID.IRON_HALBERD, WeaponStyle.MELEE); + StyleMap.put(ItemID.IRON_HASTA, WeaponStyle.MELEE); + StyleMap.put(ItemID.IRON_LONGSWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.IRON_MACE, WeaponStyle.MELEE); + StyleMap.put(ItemID.IRON_PICKAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.IRON_SCIMITAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.IRON_SPEAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.IRON_SPEARP, WeaponStyle.MELEE); + StyleMap.put(ItemID.IRON_SPEARP_5706, WeaponStyle.MELEE); + StyleMap.put(ItemID.IRON_SPEARP_5720, WeaponStyle.MELEE); + StyleMap.put(ItemID.IRON_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.IRON_WARHAMMER, WeaponStyle.MELEE); + StyleMap.put(ItemID.KATANA, WeaponStyle.MELEE); + StyleMap.put(ItemID.KERIS, WeaponStyle.MELEE); + StyleMap.put(ItemID.LEAFBLADED_SPEAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.LEAFBLADED_SPEAR_4159, WeaponStyle.MELEE); + StyleMap.put(ItemID.LEAFBLADED_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.LEAFBLADED_BATTLEAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.LYRE, WeaponStyle.MELEE); + StyleMap.put(ItemID.ENCHANTED_LYRE, WeaponStyle.MELEE); + StyleMap.put(ItemID.ENCHANTED_LYRE5, WeaponStyle.MELEE); + StyleMap.put(ItemID.ENCHANTED_LYRE4, WeaponStyle.MELEE); + StyleMap.put(ItemID.ENCHANTED_LYRE3, WeaponStyle.MELEE); + StyleMap.put(ItemID.ENCHANTED_LYRE2, WeaponStyle.MELEE); + StyleMap.put(ItemID.ENCHANTED_LYRE1, WeaponStyle.MELEE); + StyleMap.put(ItemID.MAGIC_SECATEURS, WeaponStyle.MELEE); + StyleMap.put(ItemID.MAGIC_SECATEURS_NZ, WeaponStyle.MELEE); + StyleMap.put(ItemID.MAGIC_BUTTERFLY_NET, WeaponStyle.MELEE); + StyleMap.put(ItemID.MACE, WeaponStyle.MELEE); + StyleMap.put(ItemID.MERFOLK_TRIDENT, WeaponStyle.MELEE); + StyleMap.put(ItemID.MITHRIL_2H_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.MITHRIL_AXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.MITHRIL_BATTLEAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.MITHRIL_CLAWS, WeaponStyle.MELEE); + StyleMap.put(ItemID.MITHRIL_DAGGER, WeaponStyle.MELEE); + StyleMap.put(ItemID.MITHRIL_DAGGERP, WeaponStyle.MELEE); + StyleMap.put(ItemID.MITHRIL_DAGGERP_5674, WeaponStyle.MELEE); + StyleMap.put(ItemID.MITHRIL_DAGGERP_5692, WeaponStyle.MELEE); + StyleMap.put(ItemID.MITHRIL_HALBERD, WeaponStyle.MELEE); + StyleMap.put(ItemID.MITHRIL_HASTA, WeaponStyle.MELEE); + StyleMap.put(ItemID.MITHRIL_LONGSWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.MITHRIL_MACE, WeaponStyle.MELEE); + StyleMap.put(ItemID.MITHRIL_PICKAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.MITHRIL_SCIMITAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.MITHRIL_SPEAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.MITHRIL_SPEARP, WeaponStyle.MELEE); + StyleMap.put(ItemID.MITHRIL_SPEARP_5710, WeaponStyle.MELEE); + StyleMap.put(ItemID.MITHRIL_SPEARP_5724, WeaponStyle.MELEE); + StyleMap.put(ItemID.MITHRIL_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.MITHRIL_WARHAMMER, WeaponStyle.MELEE); + StyleMap.put(ItemID.MIXED_FLOWERS, WeaponStyle.MELEE); + StyleMap.put(ItemID.RED_FLOWERS, WeaponStyle.MELEE); + StyleMap.put(ItemID.ASSORTED_FLOWERS, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLACK_FLOWERS, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLUE_FLOWERS, WeaponStyle.MELEE); + StyleMap.put(ItemID.ORANGE_FLOWERS, WeaponStyle.MELEE); + StyleMap.put(ItemID.PURPLE_FLOWERS, WeaponStyle.MELEE); + StyleMap.put(ItemID.WHITE_FLOWERS, WeaponStyle.MELEE); + StyleMap.put(ItemID.YELLOW_FLOWERS, WeaponStyle.MELEE); + StyleMap.put(ItemID.BLUE_FLOWERS_8936, WeaponStyle.MELEE); + StyleMap.put(ItemID.RED_FLOWERS_8938, WeaponStyle.MELEE); + StyleMap.put(ItemID.MOUSE_TOY, WeaponStyle.MELEE); + StyleMap.put(ItemID.NUNCHAKU, WeaponStyle.MELEE); + StyleMap.put(ItemID.ORANGE_SALAMANDER, WeaponStyle.MELEE); + StyleMap.put(ItemID.CHAOTIC_HANDEGG, WeaponStyle.MELEE); + StyleMap.put(ItemID.PEACEFUL_HANDEGG, WeaponStyle.MELEE); + StyleMap.put(ItemID.HOLY_HANDEGG, WeaponStyle.MELEE); + StyleMap.put(ItemID.PROP_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.MEAT_TENDERISER, WeaponStyle.MELEE); + StyleMap.put(ItemID.STONE_BOWL, WeaponStyle.MELEE); + StyleMap.put(ItemID.MACHETE, WeaponStyle.MELEE); + StyleMap.put(ItemID.JADE_MACHETE, WeaponStyle.MELEE); + StyleMap.put(ItemID.OPAL_MACHETE, WeaponStyle.MELEE); + StyleMap.put(ItemID.RED_TOPAZ_MACHETE, WeaponStyle.MELEE); + StyleMap.put(ItemID.RAPIER, WeaponStyle.MELEE); + StyleMap.put(ItemID.RAT_POLE, WeaponStyle.MELEE); + StyleMap.put(ItemID.RAT_POLE_6774, WeaponStyle.MELEE); + StyleMap.put(ItemID.RAT_POLE_6775, WeaponStyle.MELEE); + StyleMap.put(ItemID.RAT_POLE_6776, WeaponStyle.MELEE); + StyleMap.put(ItemID.RAT_POLE_6777, WeaponStyle.MELEE); + StyleMap.put(ItemID.RAT_POLE_6778, WeaponStyle.MELEE); + StyleMap.put(ItemID.RAT_POLE_6779, WeaponStyle.MELEE); + StyleMap.put(ItemID.RED_SALAMANDER, WeaponStyle.MELEE); + StyleMap.put(ItemID.ROCK_HAMMER, WeaponStyle.MELEE); + StyleMap.put(ItemID.ROYAL_SCEPTRE, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_2H_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_AXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_CANE, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_CLAWS, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_DAGGER, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_DAGGERP, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_DAGGERP_5678, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_DAGGERP_5696, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_HALBERD, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_HASTA, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_LONGSWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_MACE, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_PICKAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_SCIMITAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_SPEAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_SPEARP, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_SPEARP_5714, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_SPEARP_5728, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_WARHAMMER, WeaponStyle.MELEE); + StyleMap.put(ItemID.SARADOMIN_GODSWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.SARADOMIN_GODSWORD_OR, WeaponStyle.MELEE); + StyleMap.put(ItemID.SARADOMIN_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.SARADOMIN_MJOLNIR, WeaponStyle.MELEE); + StyleMap.put(ItemID.SARADOMINS_BLESSED_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.SHADOW_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.SCYTHE, WeaponStyle.MELEE); + StyleMap.put(ItemID.SCYTHE_10735, WeaponStyle.MELEE); + StyleMap.put(ItemID.SCYTHE_OF_VITUR, WeaponStyle.MELEE); + StyleMap.put(ItemID.SCYTHE_OF_VITUR_UNCHARGED, WeaponStyle.MELEE); + StyleMap.put(ItemID.SCYTHE_OF_VITUR_22664, WeaponStyle.MELEE); + StyleMap.put(ItemID.SILVER_SICKLE, WeaponStyle.MELEE); + StyleMap.put(ItemID.SILVER_SICKLE_B, WeaponStyle.MELEE); + StyleMap.put(ItemID.SILVERLIGHT, WeaponStyle.MELEE); + StyleMap.put(ItemID.SILVERLIGHT_6745, WeaponStyle.MELEE); + StyleMap.put(ItemID.SILVERLIGHT_8279, WeaponStyle.MELEE); + StyleMap.put(ItemID.SPEAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.STEEL_2H_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.STEEL_AXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.STEEL_BATTLEAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.STEEL_CLAWS, WeaponStyle.MELEE); + StyleMap.put(ItemID.STEEL_DAGGER, WeaponStyle.MELEE); + StyleMap.put(ItemID.STEEL_DAGGERP, WeaponStyle.MELEE); + StyleMap.put(ItemID.STEEL_DAGGERP_5672, WeaponStyle.MELEE); + StyleMap.put(ItemID.STEEL_DAGGERP_5690, WeaponStyle.MELEE); + StyleMap.put(ItemID.STEEL_HALBERD, WeaponStyle.MELEE); + StyleMap.put(ItemID.STEEL_HASTA, WeaponStyle.MELEE); + StyleMap.put(ItemID.STEEL_LONGSWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.STEEL_PICKAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.STEEL_SCIMITAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.STEEL_SPEAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.STEEL_SPEARP, WeaponStyle.MELEE); + StyleMap.put(ItemID.STEEL_SPEARP_5708, WeaponStyle.MELEE); + StyleMap.put(ItemID.STEEL_SPEARP_5722, WeaponStyle.MELEE); + StyleMap.put(ItemID.STEEL_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.STEEL_WARHAMMER, WeaponStyle.MELEE); + StyleMap.put(ItemID.SWAMP_LIZARD, WeaponStyle.MELEE); + StyleMap.put(ItemID.TOKTZXILAK, WeaponStyle.MELEE); + StyleMap.put(ItemID.TOKTZXILAK_20554, WeaponStyle.MELEE); + StyleMap.put(ItemID.TOKTZXILEK, WeaponStyle.MELEE); + StyleMap.put(ItemID.TORAGS_HAMMERS, WeaponStyle.MELEE); + StyleMap.put(ItemID.TORAGS_HAMMERS_100, WeaponStyle.MELEE); + StyleMap.put(ItemID.TORAGS_HAMMERS_75, WeaponStyle.MELEE); + StyleMap.put(ItemID.TORAGS_HAMMERS_50, WeaponStyle.MELEE); + StyleMap.put(ItemID.TORAGS_HAMMERS_25, WeaponStyle.MELEE); + StyleMap.put(ItemID.TORAGS_HAMMERS_0, WeaponStyle.MELEE); + StyleMap.put(ItemID.TRAINING_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.TZHAARKETEM, WeaponStyle.MELEE); + StyleMap.put(ItemID.TZHAARKETOM, WeaponStyle.MELEE); + StyleMap.put(ItemID.VERACS_FLAIL, WeaponStyle.MELEE); + StyleMap.put(ItemID.VERACS_FLAIL_100, WeaponStyle.MELEE); + StyleMap.put(ItemID.VERACS_FLAIL_75, WeaponStyle.MELEE); + StyleMap.put(ItemID.VERACS_FLAIL_50, WeaponStyle.MELEE); + StyleMap.put(ItemID.VERACS_FLAIL_25, WeaponStyle.MELEE); + StyleMap.put(ItemID.VERACS_FLAIL_0, WeaponStyle.MELEE); + StyleMap.put(ItemID.VIGGORAS_CHAINMACE, WeaponStyle.MELEE); + StyleMap.put(ItemID.VIGGORAS_CHAINMACE_U, WeaponStyle.MELEE); + StyleMap.put(ItemID.VOLCANIC_ABYSSAL_WHIP, WeaponStyle.MELEE); + StyleMap.put(ItemID.WESTERN_BANNER_1, WeaponStyle.MELEE); + StyleMap.put(ItemID.WESTERN_BANNER_2, WeaponStyle.MELEE); + StyleMap.put(ItemID.WESTERN_BANNER_3, WeaponStyle.MELEE); + StyleMap.put(ItemID.WESTERN_BANNER_4, WeaponStyle.MELEE); + StyleMap.put(ItemID.ARCEUUS_BANNER, WeaponStyle.MELEE); + StyleMap.put(ItemID.HOSIDIUS_BANNER, WeaponStyle.MELEE); + StyleMap.put(ItemID.LOVAKENGJ_BANNER, WeaponStyle.MELEE); + StyleMap.put(ItemID.PISCARILIUS_BANNER, WeaponStyle.MELEE); + StyleMap.put(ItemID.SHAYZIEN_BANNER, WeaponStyle.MELEE); + StyleMap.put(ItemID.EASTER_BASKET, WeaponStyle.MELEE); + StyleMap.put(ItemID.TROLLWEISS, WeaponStyle.MELEE); + StyleMap.put(ItemID.SNOWBALL, WeaponStyle.MELEE); + StyleMap.put(ItemID.STALE_BAGUETTE, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_BATTLEAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.RUNE_BATTLEAXE_20552, WeaponStyle.MELEE); + StyleMap.put(ItemID.LARGE_SPADE, WeaponStyle.MELEE); + StyleMap.put(ItemID.CANDY_CANE, WeaponStyle.MELEE); + StyleMap.put(ItemID.WOODEN_SPOON, WeaponStyle.MELEE); + StyleMap.put(ItemID.WHITE_2H_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.WHITE_BATTLEAXE, WeaponStyle.MELEE); + StyleMap.put(ItemID.WHITE_CLAWS, WeaponStyle.MELEE); + StyleMap.put(ItemID.WHITE_DAGGER, WeaponStyle.MELEE); + StyleMap.put(ItemID.WHITE_DAGGERP, WeaponStyle.MELEE); + StyleMap.put(ItemID.WHITE_DAGGERP_6595, WeaponStyle.MELEE); + StyleMap.put(ItemID.WHITE_DAGGERP_6597, WeaponStyle.MELEE); + StyleMap.put(ItemID.WHITE_HALBERD, WeaponStyle.MELEE); + StyleMap.put(ItemID.WHITE_LONGSWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.WHITE_MACE, WeaponStyle.MELEE); + StyleMap.put(ItemID.WHITE_SCIMITAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.WHITE_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.WHITE_WARHAMMER, WeaponStyle.MELEE); + StyleMap.put(ItemID.WILDERNESS_SWORD_1, WeaponStyle.MELEE); + StyleMap.put(ItemID.WILDERNESS_SWORD_2, WeaponStyle.MELEE); + StyleMap.put(ItemID.WILDERNESS_SWORD_3, WeaponStyle.MELEE); + StyleMap.put(ItemID.WILDERNESS_SWORD_4, WeaponStyle.MELEE); + StyleMap.put(ItemID.WOLFBANE, WeaponStyle.MELEE); + StyleMap.put(ItemID.WOODEN_SWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.ZAMORAK_GODSWORD, WeaponStyle.MELEE); + StyleMap.put(ItemID.ZAMORAK_GODSWORD_OR, WeaponStyle.MELEE); + StyleMap.put(ItemID.ZAMORAKIAN_HASTA, WeaponStyle.MELEE); + StyleMap.put(ItemID.ZAMORAKIAN_SPEAR, WeaponStyle.MELEE); + StyleMap.put(ItemID.ZOMBIE_HEAD, WeaponStyle.MELEE); + StyleMap.put(ItemID.OAK_BLACKJACK, WeaponStyle.MELEE); + StyleMap.put(ItemID.WILLOW_BLACKJACK, WeaponStyle.MELEE); + StyleMap.put(ItemID.MAPLE_BLACKJACK, WeaponStyle.MELEE); + StyleMap.put(ItemID.OAK_BLACKJACKD, WeaponStyle.MELEE); + StyleMap.put(ItemID.WILLOW_BLACKJACKD, WeaponStyle.MELEE); + StyleMap.put(ItemID.MAPLE_BLACKJACKD, WeaponStyle.MELEE); + StyleMap.put(ItemID.OAK_BLACKJACKO, WeaponStyle.MELEE); + StyleMap.put(ItemID.WILLOW_BLACKJACKO, WeaponStyle.MELEE); + StyleMap.put(ItemID.MAPLE_BLACKJACKO, WeaponStyle.MELEE); + StyleMap.put(ItemID.BIRTHDAY_BALLOONS, WeaponStyle.MELEE); + StyleMap.put(ItemID.BIRTHDAY_CAKE, WeaponStyle.MELEE); + StyleMap.put(ItemID.NOOSE_WAND, WeaponStyle.MELEE); + + //Ranged + StyleMap.put(ItemID._3RD_AGE_BOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.ADAMANT_CROSSBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.ADAMANT_DART, WeaponStyle.RANGE); + StyleMap.put(ItemID.ADAMANT_DARTP, WeaponStyle.RANGE); + StyleMap.put(ItemID.ADAMANT_DARTP_5633, WeaponStyle.RANGE); + StyleMap.put(ItemID.ADAMANT_DARTP_5640, WeaponStyle.RANGE); + StyleMap.put(ItemID.ADAMANT_KNIFE, WeaponStyle.RANGE); + StyleMap.put(ItemID.ADAMANT_KNIFEP, WeaponStyle.RANGE); + StyleMap.put(ItemID.ADAMANT_KNIFEP_5659, WeaponStyle.RANGE); + StyleMap.put(ItemID.ADAMANT_KNIFEP_5666, WeaponStyle.RANGE); + StyleMap.put(ItemID.ADAMANT_THROWNAXE, WeaponStyle.RANGE); + StyleMap.put(ItemID.ARMADYL_CROSSBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.BLACK_CHINCHOMPA, WeaponStyle.RANGE); + StyleMap.put(ItemID.BLACK_DART, WeaponStyle.RANGE); + StyleMap.put(ItemID.BLACK_DARTP, WeaponStyle.RANGE); + StyleMap.put(ItemID.BLACK_DARTP_5631, WeaponStyle.RANGE); + StyleMap.put(ItemID.BLACK_DARTP_5638, WeaponStyle.RANGE); + StyleMap.put(ItemID.BLACK_KNIFE, WeaponStyle.RANGE); + StyleMap.put(ItemID.BLACK_KNIFEP, WeaponStyle.RANGE); + StyleMap.put(ItemID.BLACK_KNIFEP_5658, WeaponStyle.RANGE); + StyleMap.put(ItemID.BLACK_KNIFEP_5665, WeaponStyle.RANGE); + StyleMap.put(ItemID.BLURITE_CROSSBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.BRONZE_CROSSBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.BRONZE_DART, WeaponStyle.RANGE); + StyleMap.put(ItemID.BRONZE_DARTP, WeaponStyle.RANGE); + StyleMap.put(ItemID.BRONZE_DARTP_5628, WeaponStyle.RANGE); + StyleMap.put(ItemID.BRONZE_DARTP_5635, WeaponStyle.RANGE); + StyleMap.put(ItemID.BRONZE_KNIFE, WeaponStyle.RANGE); + StyleMap.put(ItemID.BRONZE_KNIFEP, WeaponStyle.RANGE); + StyleMap.put(ItemID.BRONZE_KNIFEP_5654, WeaponStyle.RANGE); + StyleMap.put(ItemID.BRONZE_KNIFEP_5661, WeaponStyle.RANGE); + StyleMap.put(ItemID.BRONZE_THROWNAXE, WeaponStyle.RANGE); + StyleMap.put(ItemID.CHINCHOMPA, WeaponStyle.RANGE); + StyleMap.put(ItemID.CHINCHOMPA_10033, WeaponStyle.RANGE); + StyleMap.put(ItemID.COMP_OGRE_BOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRAWS_BOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRAWS_BOW_U, WeaponStyle.RANGE); + StyleMap.put(ItemID.CROSSBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.NEW_CRYSTAL_BOW_I, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRYSTAL_BOW_FULL_I, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRYSTAL_BOW_910_I, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRYSTAL_BOW_810_I, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRYSTAL_BOW_710_I, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRYSTAL_BOW_610_I, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRYSTAL_BOW_510_I, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRYSTAL_BOW_410_I, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRYSTAL_BOW_310_I, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRYSTAL_BOW_210_I, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRYSTAL_BOW_110_I, WeaponStyle.RANGE); + StyleMap.put(ItemID.NEW_CRYSTAL_BOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRYSTAL_BOW_FULL, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRYSTAL_BOW_910, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRYSTAL_BOW_810, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRYSTAL_BOW_710, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRYSTAL_BOW_610, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRYSTAL_BOW_510, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRYSTAL_BOW_410, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRYSTAL_BOW_310, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRYSTAL_BOW_210, WeaponStyle.RANGE); + StyleMap.put(ItemID.CRYSTAL_BOW_110, WeaponStyle.RANGE); + StyleMap.put(ItemID.CURSED_GOBLIN_BOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.DARK_BOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.DARK_BOW_12765, WeaponStyle.RANGE); + StyleMap.put(ItemID.DARK_BOW_12766, WeaponStyle.RANGE); + StyleMap.put(ItemID.DARK_BOW_12767, WeaponStyle.RANGE); + StyleMap.put(ItemID.DARK_BOW_12768, WeaponStyle.RANGE); + StyleMap.put(ItemID.DARK_BOW_20408, WeaponStyle.RANGE); + StyleMap.put(ItemID.DART, WeaponStyle.RANGE); + StyleMap.put(ItemID.DORGESHUUN_CROSSBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.DRAGON_CROSSBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.DRAGON_DART, WeaponStyle.RANGE); + StyleMap.put(ItemID.DRAGON_DARTP, WeaponStyle.RANGE); + StyleMap.put(ItemID.DRAGON_DARTP_11233, WeaponStyle.RANGE); + StyleMap.put(ItemID.DRAGON_DARTP_11234, WeaponStyle.RANGE); + StyleMap.put(ItemID.DRAGON_HUNTER_CROSSBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.DRAGON_KNIFE, WeaponStyle.RANGE); + StyleMap.put(ItemID.DRAGON_KNIFEP, WeaponStyle.RANGE); + StyleMap.put(ItemID.DRAGON_KNIFEP_22808, WeaponStyle.RANGE); + StyleMap.put(ItemID.DRAGON_KNIFEP_22810, WeaponStyle.RANGE); + StyleMap.put(ItemID.DRAGON_THROWNAXE, WeaponStyle.RANGE); + StyleMap.put(ItemID.HEAVY_BALLISTA, WeaponStyle.RANGE); + StyleMap.put(ItemID.HOLY_WATER, WeaponStyle.RANGE); + StyleMap.put(ItemID.HUNTERS_CROSSBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.IRON_CROSSBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.IRON_DART, WeaponStyle.RANGE); + StyleMap.put(ItemID.IRON_DARTP, WeaponStyle.RANGE); + StyleMap.put(ItemID.IRON_DARTP_5629, WeaponStyle.RANGE); + StyleMap.put(ItemID.IRON_DARTP_5636, WeaponStyle.RANGE); + StyleMap.put(ItemID.IRON_KNIFE, WeaponStyle.RANGE); + StyleMap.put(ItemID.IRON_KNIFEP, WeaponStyle.RANGE); + StyleMap.put(ItemID.IRON_KNIFEP_5655, WeaponStyle.RANGE); + StyleMap.put(ItemID.IRON_KNIFEP_5662, WeaponStyle.RANGE); + StyleMap.put(ItemID.IRON_THROWNAXE, WeaponStyle.RANGE); + StyleMap.put(ItemID.KARILS_CROSSBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.KARILS_CROSSBOW_100, WeaponStyle.RANGE); + StyleMap.put(ItemID.KARILS_CROSSBOW_75, WeaponStyle.RANGE); + StyleMap.put(ItemID.KARILS_CROSSBOW_50, WeaponStyle.RANGE); + StyleMap.put(ItemID.KARILS_CROSSBOW_25, WeaponStyle.RANGE); + StyleMap.put(ItemID.KARILS_CROSSBOW_0, WeaponStyle.RANGE); + StyleMap.put(ItemID.LIGHT_BALLISTA, WeaponStyle.RANGE); + StyleMap.put(ItemID.LONGBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.MAGIC_COMP_BOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.MAGIC_LONGBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.MAGIC_SHORTBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.MAGIC_SHORTBOW_I, WeaponStyle.RANGE); + StyleMap.put(ItemID.MAGIC_SHORTBOW_20558, WeaponStyle.RANGE); + StyleMap.put(ItemID.MAPLE_LONGBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.MAPLE_SHORTBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.MITH_CROSSBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.MITHRIL_DART, WeaponStyle.RANGE); + StyleMap.put(ItemID.MITHRIL_DARTP, WeaponStyle.RANGE); + StyleMap.put(ItemID.MITHRIL_DARTP_5632, WeaponStyle.RANGE); + StyleMap.put(ItemID.MITHRIL_DARTP_5639, WeaponStyle.RANGE); + StyleMap.put(ItemID.MITHRIL_KNIFE, WeaponStyle.RANGE); + StyleMap.put(ItemID.MITHRIL_KNIFEP, WeaponStyle.RANGE); + StyleMap.put(ItemID.MITHRIL_KNIFEP_5657, WeaponStyle.RANGE); + StyleMap.put(ItemID.MITHRIL_KNIFEP_5664, WeaponStyle.RANGE); + StyleMap.put(ItemID.MITHRIL_THROWNAXE, WeaponStyle.RANGE); + StyleMap.put(ItemID.MONKEY_TALISMAN, WeaponStyle.RANGE); + StyleMap.put(ItemID.MORRIGANS_THROWING_AXE, WeaponStyle.RANGE); + StyleMap.put(ItemID.MORRIGANS_JAVELIN, WeaponStyle.RANGE); + StyleMap.put(ItemID.MUD_PIE, WeaponStyle.RANGE); + StyleMap.put(ItemID.OAK_LONGBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.OAK_SHORTBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.OGRE_BOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.PHOENIX_CROSSBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.RED_CHINCHOMPA, WeaponStyle.RANGE); + StyleMap.put(ItemID.RED_CHINCHOMPA_10034, WeaponStyle.RANGE); + StyleMap.put(ItemID.RUNE_CROSSBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.RUNE_DART, WeaponStyle.RANGE); + StyleMap.put(ItemID.RUNE_DARTP, WeaponStyle.RANGE); + StyleMap.put(ItemID.RUNE_DARTP_5634, WeaponStyle.RANGE); + StyleMap.put(ItemID.RUNE_DARTP_5641, WeaponStyle.RANGE); + StyleMap.put(ItemID.RUNE_KNIFE, WeaponStyle.RANGE); + StyleMap.put(ItemID.RUNE_KNIFEP, WeaponStyle.RANGE); + StyleMap.put(ItemID.RUNE_KNIFEP_5660, WeaponStyle.RANGE); + StyleMap.put(ItemID.RUNE_KNIFEP_5667, WeaponStyle.RANGE); + StyleMap.put(ItemID.RUNE_THROWNAXE, WeaponStyle.RANGE); + StyleMap.put(ItemID.SEERCULL, WeaponStyle.RANGE); + StyleMap.put(ItemID.SHORTBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.SIGNED_OAK_BOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.STARTER_BOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.STEEL_CROSSBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.STEEL_DART, WeaponStyle.RANGE); + StyleMap.put(ItemID.STEEL_DARTP, WeaponStyle.RANGE); + StyleMap.put(ItemID.STEEL_DARTP_5630, WeaponStyle.RANGE); + StyleMap.put(ItemID.STEEL_DARTP_5637, WeaponStyle.RANGE); + StyleMap.put(ItemID.STEEL_KNIFE, WeaponStyle.RANGE); + StyleMap.put(ItemID.STEEL_KNIFEP, WeaponStyle.RANGE); + StyleMap.put(ItemID.STEEL_KNIFEP_5656, WeaponStyle.RANGE); + StyleMap.put(ItemID.STEEL_KNIFEP_5663, WeaponStyle.RANGE); + StyleMap.put(ItemID.STEEL_THROWNAXE, WeaponStyle.RANGE); + StyleMap.put(ItemID.TOKTZXILUL, WeaponStyle.RANGE); + StyleMap.put(ItemID.TOXIC_BLOWPIPE, WeaponStyle.RANGE); + StyleMap.put(ItemID.TOXIC_BLOWPIPE_EMPTY, WeaponStyle.RANGE); + StyleMap.put(ItemID.TRAINING_BOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.TWISTED_BOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.WILLOW_COMP_BOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.WILLOW_LONGBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.WILLOW_SHORTBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.YEW_COMP_BOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.YEW_LONGBOW, WeaponStyle.RANGE); + StyleMap.put(ItemID.YEW_SHORTBOW, WeaponStyle.RANGE); + + //Magic + StyleMap.put(ItemID._3RD_AGE_WAND, WeaponStyle.MAGIC); + StyleMap.put(ItemID.AHRIMS_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.AHRIMS_STAFF_100, WeaponStyle.MAGIC); + StyleMap.put(ItemID.AHRIMS_STAFF_75, WeaponStyle.MAGIC); + StyleMap.put(ItemID.AHRIMS_STAFF_50, WeaponStyle.MAGIC); + StyleMap.put(ItemID.AHRIMS_STAFF_25, WeaponStyle.MAGIC); + StyleMap.put(ItemID.AHRIMS_STAFF_0, WeaponStyle.MAGIC); + StyleMap.put(ItemID.AIR_BATTLESTAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.ANCIENT_CROZIER, WeaponStyle.MAGIC); + StyleMap.put(ItemID.ANCIENT_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.APPRENTICE_WAND, WeaponStyle.MAGIC); + StyleMap.put(ItemID.ARMADYL_CROZIER, WeaponStyle.MAGIC); + StyleMap.put(ItemID.BANDOS_CROZIER, WeaponStyle.MAGIC); + StyleMap.put(ItemID.BATTLESTAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.BEGINNER_WAND, WeaponStyle.MAGIC); + StyleMap.put(ItemID.BROKEN_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.BRYOPHYTAS_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.BRYOPHYTAS_STAFF_UNCHARGED, WeaponStyle.MAGIC); + StyleMap.put(ItemID.CURSED_GOBLIN_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.DAWNBRINGER, WeaponStyle.MAGIC); + StyleMap.put(ItemID.DRAMEN_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.DUST_BATTLESTAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.EARTH_BATTLESTAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.FIRE_BATTLESTAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.GUTHIX_CROZIER, WeaponStyle.MAGIC); + StyleMap.put(ItemID.GUTHIX_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.IBANS_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.IBANS_STAFF_U, WeaponStyle.MAGIC); + StyleMap.put(ItemID.IBANS_STAFF_1410, WeaponStyle.MAGIC); + StyleMap.put(ItemID.IVANDIS_FLAIL, WeaponStyle.MAGIC); + StyleMap.put(ItemID.KODAI_WAND, WeaponStyle.MAGIC); + StyleMap.put(ItemID.LAVA_BATTLESTAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.LAVA_BATTLESTAFF_21198, WeaponStyle.MAGIC); + StyleMap.put(ItemID.LUNAR_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.MAGIC_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.MASTER_WAND, WeaponStyle.MAGIC); + StyleMap.put(ItemID.MASTER_WAND_20560, WeaponStyle.MAGIC); + StyleMap.put(ItemID.MIST_BATTLESTAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.MUD_BATTLESTAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.MYSTIC_AIR_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.MYSTIC_DUST_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.MYSTIC_EARTH_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.MYSTIC_FIRE_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.MYSTIC_LAVA_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.MYSTIC_LAVA_STAFF_21200, WeaponStyle.MAGIC); + StyleMap.put(ItemID.MYSTIC_MIST_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.MYSTIC_MUD_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.MYSTIC_SMOKE_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.MYSTIC_STEAM_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.MYSTIC_STEAM_STAFF_12796, WeaponStyle.MAGIC); + StyleMap.put(ItemID.MYSTIC_WATER_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.PHARAOHS_SCEPTRE, WeaponStyle.MAGIC); + StyleMap.put(ItemID.PHARAOHS_SCEPTRE_8, WeaponStyle.MAGIC); + StyleMap.put(ItemID.PHARAOHS_SCEPTRE_7, WeaponStyle.MAGIC); + StyleMap.put(ItemID.PHARAOHS_SCEPTRE_6, WeaponStyle.MAGIC); + StyleMap.put(ItemID.PHARAOHS_SCEPTRE_5, WeaponStyle.MAGIC); + StyleMap.put(ItemID.PHARAOHS_SCEPTRE_4, WeaponStyle.MAGIC); + StyleMap.put(ItemID.PHARAOHS_SCEPTRE_3, WeaponStyle.MAGIC); + StyleMap.put(ItemID.PHARAOHS_SCEPTRE_2, WeaponStyle.MAGIC); + StyleMap.put(ItemID.PHARAOHS_SCEPTRE_1, WeaponStyle.MAGIC); + StyleMap.put(ItemID.ROD_OF_IVANDIS_10, WeaponStyle.MAGIC); + StyleMap.put(ItemID.ROD_OF_IVANDIS_9, WeaponStyle.MAGIC); + StyleMap.put(ItemID.ROD_OF_IVANDIS_8, WeaponStyle.MAGIC); + StyleMap.put(ItemID.ROD_OF_IVANDIS_7, WeaponStyle.MAGIC); + StyleMap.put(ItemID.ROD_OF_IVANDIS_6, WeaponStyle.MAGIC); + StyleMap.put(ItemID.ROD_OF_IVANDIS_5, WeaponStyle.MAGIC); + StyleMap.put(ItemID.ROD_OF_IVANDIS_4, WeaponStyle.MAGIC); + StyleMap.put(ItemID.ROD_OF_IVANDIS_3, WeaponStyle.MAGIC); + StyleMap.put(ItemID.ROD_OF_IVANDIS_2, WeaponStyle.MAGIC); + StyleMap.put(ItemID.ROD_OF_IVANDIS_1, WeaponStyle.MAGIC); + StyleMap.put(ItemID.SANGUINESTI_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.SANGUINESTI_STAFF_UNCHARGED, WeaponStyle.MAGIC); + StyleMap.put(ItemID.SARADOMIN_CROZIER, WeaponStyle.MAGIC); + StyleMap.put(ItemID.SARADOMIN_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.SKULL_SCEPTRE, WeaponStyle.MAGIC); + StyleMap.put(ItemID.SKULL_SCEPTRE_I, WeaponStyle.MAGIC); + StyleMap.put(ItemID.SLAYERS_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.SLAYERS_STAFF_E, WeaponStyle.MAGIC); + StyleMap.put(ItemID.SMOKE_BATTLESTAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.STAFF_OF_AIR, WeaponStyle.MAGIC); + StyleMap.put(ItemID.STAFF_OF_EARTH, WeaponStyle.MAGIC); + StyleMap.put(ItemID.STAFF_OF_FIRE, WeaponStyle.MAGIC); + StyleMap.put(ItemID.STAFF_OF_LIGHT, WeaponStyle.MAGIC); + StyleMap.put(ItemID.STAFF_OF_THE_DEAD, WeaponStyle.MAGIC); + StyleMap.put(ItemID.STAFF_OF_WATER, WeaponStyle.MAGIC); + StyleMap.put(ItemID.STARTER_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.STEAM_BATTLESTAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.STEAM_BATTLESTAFF_12795, WeaponStyle.MAGIC); + StyleMap.put(ItemID.TEACHER_WAND, WeaponStyle.MAGIC); + StyleMap.put(ItemID.THAMMARONS_SCEPTRE, WeaponStyle.MAGIC); + StyleMap.put(ItemID.THAMMARONS_SCEPTRE_U, WeaponStyle.MAGIC); + StyleMap.put(ItemID.TOKTZMEJTAL, WeaponStyle.MAGIC); + StyleMap.put(ItemID.TOXIC_STAFF_OF_THE_DEAD, WeaponStyle.MAGIC); + StyleMap.put(ItemID.TOXIC_STAFF_UNCHARGED, WeaponStyle.MAGIC); + StyleMap.put(ItemID.UNCHARGED_TRIDENT, WeaponStyle.MAGIC); + StyleMap.put(ItemID.UNCHARGED_TRIDENT_E, WeaponStyle.MAGIC); + StyleMap.put(ItemID.UNCHARGED_TOXIC_TRIDENT, WeaponStyle.MAGIC); + StyleMap.put(ItemID.UNCHARGED_TOXIC_TRIDENT_E, WeaponStyle.MAGIC); + StyleMap.put(ItemID.TRIDENT_OF_THE_SEAS, WeaponStyle.MAGIC); + StyleMap.put(ItemID.TRIDENT_OF_THE_SEAS_E, WeaponStyle.MAGIC); + StyleMap.put(ItemID.TRIDENT_OF_THE_SEAS_FULL, WeaponStyle.MAGIC); + StyleMap.put(ItemID.TRIDENT_OF_THE_SWAMP, WeaponStyle.MAGIC); + StyleMap.put(ItemID.TRIDENT_OF_THE_SWAMP_E, WeaponStyle.MAGIC); + StyleMap.put(ItemID.VOID_KNIGHT_MACE, WeaponStyle.MAGIC); + StyleMap.put(ItemID.VOID_KNIGHT_MACE_BROKEN, WeaponStyle.MAGIC); + StyleMap.put(ItemID.WAND, WeaponStyle.MAGIC); + StyleMap.put(ItemID.WATER_BATTLESTAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.WHITE_MAGIC_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.ZAMORAK_CROZIER, WeaponStyle.MAGIC); + StyleMap.put(ItemID.ZAMORAK_STAFF, WeaponStyle.MAGIC); + StyleMap.put(ItemID.ZURIELS_STAFF, WeaponStyle.MAGIC); + //what the fuck... + StyleMap.put(ItemID.GNOMEBALL, WeaponStyle.MAGIC); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/util/WeaponStyle.java b/runelite-client/src/main/java/net/runelite/client/util/WeaponStyle.java new file mode 100644 index 0000000000..f5e2a03cde --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/util/WeaponStyle.java @@ -0,0 +1,6 @@ +package net.runelite.client.util; + +public enum WeaponStyle +{ + MAGIC, RANGE, MELEE +} diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/ammo.png b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/ammo.png new file mode 100644 index 0000000000..51c9374c01 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/ammo.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/amulet.png b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/amulet.png new file mode 100644 index 0000000000..6cf342730d Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/amulet.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/boots.png b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/boots.png new file mode 100644 index 0000000000..c9580b9ef6 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/boots.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/cape.png b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/cape.png new file mode 100644 index 0000000000..2050dbeab0 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/cape.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/hands.png b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/hands.png new file mode 100644 index 0000000000..adb70ef4c0 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/hands.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/helmet.png b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/helmet.png new file mode 100644 index 0000000000..798dbbb78f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/helmet.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/legs.png b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/legs.png new file mode 100644 index 0000000000..085779915f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/legs.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/nav.png b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/nav.png new file mode 100644 index 0000000000..1a23abe2dc Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/nav.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/shield.png b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/shield.png new file mode 100644 index 0000000000..52f1aa3330 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/shield.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/torso.png b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/torso.png new file mode 100644 index 0000000000..96f50a04d9 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/torso.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/weapon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/weapon.png new file mode 100644 index 0000000000..44f7534fa6 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/tmorph/weapon.png differ diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPluginTest.java index 14b295a338..ccb8fb0451 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPluginTest.java @@ -34,6 +34,7 @@ import javax.inject.Inject; import net.runelite.api.Client; import net.runelite.client.config.OpenOSRSConfig; import static org.junit.Assert.assertEquals; +import net.runelite.client.Notifier; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -59,6 +60,10 @@ public class NpcIndicatorsPluginTest @Bind private OpenOSRSConfig openOSRSConfig; + @Mock + @Bind + private Notifier notifier; + @Inject private NpcIndicatorsPlugin npcIndicatorsPlugin;