Use client Varbit for index, lsb, msb
This commit is contained in:
@@ -130,6 +130,8 @@ public interface Client extends GameEngine
|
||||
|
||||
int[] getWidgetSettings();
|
||||
|
||||
int getSetting(Setting setting);
|
||||
|
||||
int getSetting(Varbits varbit);
|
||||
|
||||
HashTable getComponentTable();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
||||
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -24,44 +24,17 @@
|
||||
*/
|
||||
package net.runelite.api;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
public class VarbitsTest
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum Setting
|
||||
{
|
||||
@Test
|
||||
public void testGet()
|
||||
{
|
||||
// 28 24 20 16 12 8 4 0
|
||||
int value = 0b1101_1110_1010_1101_1011_1110_1110_1111;
|
||||
ATTACK_STYLE(43),
|
||||
|
||||
// Bit indexes are inclusive
|
||||
// Small pouch is bits 0-2
|
||||
// Medium pouch is bits 3-8
|
||||
// Large pouch is bits 9-17
|
||||
// Giant pouch is bits 18-29
|
||||
Varbits small = Varbits.POUCH_SMALL;
|
||||
Varbits med = Varbits.POUCH_MEDIUM;
|
||||
Varbits large = Varbits.POUCH_LARGE;
|
||||
Varbits giant = Varbits.POUCH_GIANT;
|
||||
SPECIAL_ATTACK_PERCENT(300),
|
||||
SPECIAL_ATTACK_ENABLED(301);
|
||||
|
||||
Assert.assertEquals(7, small.get(value));
|
||||
Assert.assertEquals(29, med.get(value));
|
||||
Assert.assertEquals(223, large.get(value));
|
||||
Assert.assertEquals(1963, giant.get(value));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSet()
|
||||
{
|
||||
// 28 24 20 16 12 8 4 0
|
||||
int value = 0b1101_1110_1010_1101_1011_1110_1110_1111;
|
||||
int mask = 0b0000_0000_0000_0011_1111_1110_0000_0000; // mask for large pouch
|
||||
|
||||
Varbits large = Varbits.POUCH_LARGE;
|
||||
|
||||
int newValue = large.set(value, 42);
|
||||
int expect = (value & ~mask) | (42 << large.getLeastSignificantBit());
|
||||
Assert.assertEquals(expect, newValue);
|
||||
}
|
||||
private final int id;
|
||||
}
|
||||
@@ -24,309 +24,194 @@
|
||||
*/
|
||||
package net.runelite.api;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum Varbits
|
||||
{
|
||||
/*
|
||||
* If chatbox is transparent or not
|
||||
*/
|
||||
TRANSPARANT_CHATBOX(4608, 1055, 9, 9),
|
||||
SPLIT_CHAT(287, 0, 0),
|
||||
TRANSPARANT_CHATBOX(4608),
|
||||
|
||||
/**
|
||||
* Runecraft pouches
|
||||
*/
|
||||
POUCH_SMALL(603, 486, 0, 2),
|
||||
POUCH_MEDIUM(604, 486, 3, 8),
|
||||
POUCH_LARGE(605, 486, 9, 17),
|
||||
POUCH_GIANT(606, 486, 18, 29),
|
||||
POUCH_SMALL(603),
|
||||
POUCH_MEDIUM(604),
|
||||
POUCH_LARGE(605),
|
||||
POUCH_GIANT(606),
|
||||
|
||||
/**
|
||||
* Runepouch
|
||||
*/
|
||||
RUNE_POUCH_RUNE1(29, 1139, 0, 5),
|
||||
RUNE_POUCH_RUNE2(1622, 1139, 6, 11),
|
||||
RUNE_POUCH_RUNE3(1623, 1139, 12, 17),
|
||||
RUNE_POUCH_AMOUNT1(1624, 1139, 18, 31),
|
||||
RUNE_POUCH_AMOUNT2(1625, 1140, 0, 13),
|
||||
RUNE_POUCH_AMOUNT3(1626, 1140, 14, 27),
|
||||
RUNE_POUCH_RUNE1(29),
|
||||
RUNE_POUCH_RUNE2(1622),
|
||||
RUNE_POUCH_RUNE3(1623),
|
||||
RUNE_POUCH_AMOUNT1(1624),
|
||||
RUNE_POUCH_AMOUNT2(1625),
|
||||
RUNE_POUCH_AMOUNT3(1626),
|
||||
|
||||
/**
|
||||
* Prayers
|
||||
*/
|
||||
PRAYER_THICK_SKIN(4104, 83, 0, 0),
|
||||
PRAYER_BURST_OF_STRENGTH(4105, 83, 1, 1),
|
||||
PRAYER_CLARITY_OF_THOUGHT(4106, 83, 2, 2),
|
||||
PRAYER_SHARP_EYE(4122, 83, 18, 18),
|
||||
PRAYER_MYSTIC_WILL(4123, 83, 19, 19),
|
||||
PRAYER_ROCK_SKIN(4107, 83, 3, 3),
|
||||
PRAYER_SUPERHUMAN_STRENGTH(4108, 83, 4, 4),
|
||||
PRAYER_IMPROVED_REFLEXES(4109, 83, 5, 5),
|
||||
PRAYER_RAPID_RESTORE(4110, 83, 6, 6),
|
||||
PRAYER_RAPID_HEAL(4111, 83, 7, 7),
|
||||
PRAYER_PROTECT_ITEM(4112, 83, 8, 8),
|
||||
PRAYER_HAWK_EYE(4124, 83, 20, 20),
|
||||
PRAYER_MYSTIC_LORE(4125, 83, 21, 21),
|
||||
PRAYER_STEEL_SKIN(4113, 83, 9, 9),
|
||||
PRAYER_ULTIMATE_STRENGTH(4114, 83, 10, 10),
|
||||
PRAYER_INCREDIBLE_REFLEXES(4115, 83, 11, 11),
|
||||
PRAYER_PROTECT_FROM_MAGIC(4116, 83, 12, 12),
|
||||
PRAYER_PROTECT_FROM_MISSILES(4117, 83, 13, 13),
|
||||
PRAYER_PROTECT_FROM_MELEE(4118, 83, 14, 14),
|
||||
PRAYER_EAGLE_EYE(4126, 83, 22, 22),
|
||||
PRAYER_MYSTIC_MIGHT(4127, 83, 23, 23),
|
||||
PRAYER_RETRIBUTION(4119, 83, 15, 15),
|
||||
PRAYER_REDEMPTION(4120, 83, 16, 16),
|
||||
PRAYER_SMITE(4121, 83, 17, 17),
|
||||
PRAYER_CHIVALRY(4128, 83, 25, 25),
|
||||
PRAYER_PIETY(4129, 83, 26, 26),
|
||||
PRAYER_PRESERVE(5466, 83, 28, 28),
|
||||
PRAYER_RIGOUR(5464, 83, 24, 24),
|
||||
PRAYER_AUGURY(5465, 83, 27, 27),
|
||||
PRAYER_THICK_SKIN(4104),
|
||||
PRAYER_BURST_OF_STRENGTH(4105),
|
||||
PRAYER_CLARITY_OF_THOUGHT(4106),
|
||||
PRAYER_SHARP_EYE(4122),
|
||||
PRAYER_MYSTIC_WILL(4123),
|
||||
PRAYER_ROCK_SKIN(4107),
|
||||
PRAYER_SUPERHUMAN_STRENGTH(4108),
|
||||
PRAYER_IMPROVED_REFLEXES(4109),
|
||||
PRAYER_RAPID_RESTORE(4110),
|
||||
PRAYER_RAPID_HEAL(4111),
|
||||
PRAYER_PROTECT_ITEM(4112),
|
||||
PRAYER_HAWK_EYE(4124),
|
||||
PRAYER_MYSTIC_LORE(4125),
|
||||
PRAYER_STEEL_SKIN(4113),
|
||||
PRAYER_ULTIMATE_STRENGTH(4114),
|
||||
PRAYER_INCREDIBLE_REFLEXES(4115),
|
||||
PRAYER_PROTECT_FROM_MAGIC(4116),
|
||||
PRAYER_PROTECT_FROM_MISSILES(4117),
|
||||
PRAYER_PROTECT_FROM_MELEE(4118),
|
||||
PRAYER_EAGLE_EYE(4126),
|
||||
PRAYER_MYSTIC_MIGHT(4127),
|
||||
PRAYER_RETRIBUTION(4119),
|
||||
PRAYER_REDEMPTION(4120),
|
||||
PRAYER_SMITE(4121),
|
||||
PRAYER_CHIVALRY(4128),
|
||||
PRAYER_PIETY(4129),
|
||||
PRAYER_PRESERVE(5466),
|
||||
PRAYER_RIGOUR(5464),
|
||||
PRAYER_AUGURY(5465),
|
||||
|
||||
/**
|
||||
* Diary Entries
|
||||
*/
|
||||
DIARY_ARDOUGNE_EASY(4458, 1188, 10, 10),
|
||||
DIARY_ARDOUGNE_MEDIUM(4459, 1188, 11, 11),
|
||||
DIARY_ARDOUGNE_HARD(4460, 1188, 12, 12),
|
||||
DIARY_ARDOUGNE_ELITE(4461, 1188, 13, 13),
|
||||
DIARY_ARDOUGNE_EASY(4458),
|
||||
DIARY_ARDOUGNE_MEDIUM(4459),
|
||||
DIARY_ARDOUGNE_HARD(4460),
|
||||
DIARY_ARDOUGNE_ELITE(4461),
|
||||
|
||||
DIARY_DESERT_EASY(4483, 1189, 2, 2),
|
||||
DIARY_DESERT_MEDIUM(4484, 1189, 3, 3),
|
||||
DIARY_DESERT_HARD(4485, 1189, 4, 4),
|
||||
DIARY_DESERT_ELITE(4486, 1189, 5, 5),
|
||||
DIARY_DESERT_EASY(4483),
|
||||
DIARY_DESERT_MEDIUM(4484),
|
||||
DIARY_DESERT_HARD(4485),
|
||||
DIARY_DESERT_ELITE(4486),
|
||||
|
||||
DIARY_FALADOR_EASY(4462, 1188, 14, 14),
|
||||
DIARY_FALADOR_MEDIUM(4463, 1188, 15, 15),
|
||||
DIARY_FALADOR_HARD(4464, 1188, 16, 16),
|
||||
DIARY_FALADOR_ELITE(4465, 1188, 17, 17),
|
||||
DIARY_FALADOR_EASY(4462),
|
||||
DIARY_FALADOR_MEDIUM(4463),
|
||||
DIARY_FALADOR_HARD(4464),
|
||||
DIARY_FALADOR_ELITE(4465),
|
||||
|
||||
DIARY_FREMENNIK_EASY(4491, 1189, 10, 10),
|
||||
DIARY_FREMENNIK_MEDIUM(4492, 1189, 11, 11),
|
||||
DIARY_FREMENNIK_HARD(4493, 1189, 12, 12),
|
||||
DIARY_FREMENNIK_ELITE(4494, 1189, 13, 13),
|
||||
DIARY_FREMENNIK_EASY(4491),
|
||||
DIARY_FREMENNIK_MEDIUM(4492),
|
||||
DIARY_FREMENNIK_HARD(4493),
|
||||
DIARY_FREMENNIK_ELITE(4494),
|
||||
|
||||
DIARY_KANDARIN_EASY(4475, 1188, 26, 26),
|
||||
DIARY_KANDARIN_MEDIUM(4476, 1188, 27, 27),
|
||||
DIARY_KANDARIN_HARD(4477, 1188, 28, 28),
|
||||
DIARY_KANDARIN_ELITE(4478, 1188, 29, 29),
|
||||
DIARY_KANDARIN_EASY(4475),
|
||||
DIARY_KANDARIN_MEDIUM(4476),
|
||||
DIARY_KANDARIN_HARD(4477),
|
||||
DIARY_KANDARIN_ELITE(4478),
|
||||
|
||||
DIARY_KARAMJA_EASY(3578, 1000, 30, 31),
|
||||
DIARY_KARAMJA_MEDIUM(3599, 1001, 30, 31),
|
||||
DIARY_KARAMJA_HARD(3611, 1002, 29, 30),
|
||||
DIARY_KARAMJA_ELITE(4566, 1200, 7, 7),
|
||||
DIARY_KARAMJA_EASY(3578),
|
||||
DIARY_KARAMJA_MEDIUM(3599),
|
||||
DIARY_KARAMJA_HARD(3611),
|
||||
DIARY_KARAMJA_ELITE(4566),
|
||||
|
||||
DIARY_LUMBRIDGE_EASY(4495, 1189, 14, 14),
|
||||
DIARY_LUMBRIDGE_MEDIUM(4496, 1189, 15, 15),
|
||||
DIARY_LUMBRIDGE_HARD(4497, 1189, 16, 16),
|
||||
DIARY_LUMBRIDGE_ELITE(4498, 1189, 17, 17),
|
||||
DIARY_LUMBRIDGE_EASY(4495),
|
||||
DIARY_LUMBRIDGE_MEDIUM(4496),
|
||||
DIARY_LUMBRIDGE_HARD(4497),
|
||||
DIARY_LUMBRIDGE_ELITE(4498),
|
||||
|
||||
DIARY_MORYTANIA_EASY(4487, 1189, 6, 6),
|
||||
DIARY_MORYTANIA_MEDIUM(4488, 1189, 7, 7),
|
||||
DIARY_MORYTANIA_HARD(4489, 1189, 8, 8),
|
||||
DIARY_MORYTANIA_ELITE(4490, 1189, 9, 9),
|
||||
DIARY_MORYTANIA_EASY(4487),
|
||||
DIARY_MORYTANIA_MEDIUM(4488),
|
||||
DIARY_MORYTANIA_HARD(4489),
|
||||
DIARY_MORYTANIA_ELITE(4490),
|
||||
|
||||
DIARY_VARROCK_EASY(4479, 1188, 30, 30),
|
||||
DIARY_VARROCK_MEDIUM(4480, 1188, 31, 31),
|
||||
DIARY_VARROCK_HARD(4481, 1189, 0, 0),
|
||||
DIARY_VARROCK_ELITE(4482, 1189, 1, 1),
|
||||
DIARY_VARROCK_EASY(4479),
|
||||
DIARY_VARROCK_MEDIUM(4480),
|
||||
DIARY_VARROCK_HARD(4481),
|
||||
DIARY_VARROCK_ELITE(4482),
|
||||
|
||||
DIARY_WESTERN_EASY(4471, 1188, 22, 22),
|
||||
DIARY_WESTERN_MEDIUM(4472, 1188, 23, 23),
|
||||
DIARY_WESTERN_HARD(4473, 1188, 24, 24),
|
||||
DIARY_WESTERN_ELITE(4474, 1188, 25, 25),
|
||||
DIARY_WESTERN_EASY(4471),
|
||||
DIARY_WESTERN_MEDIUM(4472),
|
||||
DIARY_WESTERN_HARD(4473),
|
||||
DIARY_WESTERN_ELITE(4474),
|
||||
|
||||
DIARY_WILDERNESS_EASY(4466, 1188, 18, 18),
|
||||
DIARY_WILDERNESS_MEDIUM(4467, 1188, 19, 19),
|
||||
DIARY_WILDERNESS_HARD(4468, 1188, 20, 20),
|
||||
DIARY_WILDERNESS_ELITE(4469, 1188, 21, 21),
|
||||
|
||||
/**
|
||||
* Special Attack
|
||||
*/
|
||||
SPECIAL_ATTACK_PERCENT(300, 0, 16),
|
||||
SPECIAL_ATTACK_ENABLED(301, 0, 0),
|
||||
|
||||
/**
|
||||
* Poison
|
||||
* Venom - 1,000,000 (6dmg/hit) - 1,000,008 (20 dmg/hit)
|
||||
*/
|
||||
POISON(102, 0, 5),
|
||||
VENOM(102, 6, 9),
|
||||
|
||||
/**
|
||||
* Attack Style
|
||||
*/
|
||||
ATTACK_STYLE(43, 0, 7),
|
||||
DIARY_WILDERNESS_EASY(4466),
|
||||
DIARY_WILDERNESS_MEDIUM(4467),
|
||||
DIARY_WILDERNESS_HARD(4468),
|
||||
DIARY_WILDERNESS_ELITE(4469),
|
||||
|
||||
/**
|
||||
* Equipped weapon type
|
||||
*/
|
||||
EQUIPPED_WEAPON_TYPE(357, 843, 0, 5),
|
||||
EQUIPPED_WEAPON_TYPE(357),
|
||||
|
||||
/**
|
||||
* Defensive casting mode
|
||||
*/
|
||||
DEFENSIVE_CASTING_MODE(2668, 439, 8, 8),
|
||||
DEFENSIVE_CASTING_MODE(2668),
|
||||
|
||||
/**
|
||||
* Options
|
||||
*/
|
||||
SIDE_PANELS(4607, 1055, 8, 8),
|
||||
SIDE_PANELS(4607),
|
||||
|
||||
/**
|
||||
* Barbarian Assault
|
||||
*/
|
||||
IN_GAME_BA(3923, 638, 12, 12),
|
||||
IN_GAME_BA(3923),
|
||||
|
||||
/**
|
||||
* Motherlode mine sack
|
||||
*/
|
||||
SACK_NUMBER(5558, 375, 8, 15),
|
||||
SACK_NUMBER(5558),
|
||||
|
||||
/**
|
||||
* Experience drop color
|
||||
*/
|
||||
EXPERIENCE_DROP_COLOR(4695, 1227, 6, 8),
|
||||
EXPERIENCE_DROP_COLOR(4695),
|
||||
|
||||
/**
|
||||
* Raids
|
||||
*/
|
||||
IN_RAID(5432, 1431, 31, 31),
|
||||
IN_RAID(5432),
|
||||
|
||||
/**
|
||||
* Nightmare Zone
|
||||
*/
|
||||
NMZ_ABSORPTION(3956, 1067, 5, 14),
|
||||
NMZ_POINTS(3949, 1059, 0, 19),
|
||||
NMZ_ABSORPTION(3956),
|
||||
NMZ_POINTS(3949),
|
||||
|
||||
/**
|
||||
* Blast Furnace
|
||||
*/
|
||||
BLAST_FURNACE_COPPER_ORE(959, 549, 16, 23),
|
||||
BLAST_FURNACE_TIN_ORE(950, 547, 8, 15),
|
||||
BLAST_FURNACE_IRON_ORE(951, 547, 16, 23),
|
||||
BLAST_FURNACE_COAL(949, 547, 0, 7),
|
||||
BLAST_FURNACE_MITHRIL_ORE(952, 547, 24, 31),
|
||||
BLAST_FURNACE_ADAMANTITE_ORE(953, 548, 0, 7),
|
||||
BLAST_FURNACE_RUNITE_ORE(954, 548, 8, 15),
|
||||
BLAST_FURNACE_SILVER_ORE(955, 548, 24, 31),
|
||||
BLAST_FURNACE_GOLD_ORE(955, 548, 16, 23),
|
||||
BLAST_FURNACE_COPPER_ORE(959),
|
||||
BLAST_FURNACE_TIN_ORE(950),
|
||||
BLAST_FURNACE_IRON_ORE(951),
|
||||
BLAST_FURNACE_COAL(949),
|
||||
BLAST_FURNACE_MITHRIL_ORE(952),
|
||||
BLAST_FURNACE_ADAMANTITE_ORE(953),
|
||||
BLAST_FURNACE_RUNITE_ORE(954),
|
||||
BLAST_FURNACE_SILVER_ORE(956),
|
||||
BLAST_FURNACE_GOLD_ORE(955),
|
||||
|
||||
BLAST_FURNACE_BRONZE_BAR(941, 545, 0, 7),
|
||||
BLAST_FURNACE_IRON_BAR(942, 545, 8, 15),
|
||||
BLAST_FURNACE_STEEL_BAR(943, 545, 16, 23),
|
||||
BLAST_FURNACE_MITHRIL_BAR(944, 545, 24, 31),
|
||||
BLAST_FURNACE_ADAMANTITE_BAR(945, 546, 0, 7),
|
||||
BLAST_FURNACE_RUNITE_BAR(946, 546, 8, 15),
|
||||
BLAST_FURNACE_SILVER_BAR(948, 546, 24, 31),
|
||||
BLAST_FURNACE_GOLD_BAR(947, 546, 16, 23),
|
||||
BLAST_FURNACE_BRONZE_BAR(941),
|
||||
BLAST_FURNACE_IRON_BAR(942),
|
||||
BLAST_FURNACE_STEEL_BAR(943),
|
||||
BLAST_FURNACE_MITHRIL_BAR(944),
|
||||
BLAST_FURNACE_ADAMANTITE_BAR(945),
|
||||
BLAST_FURNACE_RUNITE_BAR(946),
|
||||
BLAST_FURNACE_SILVER_BAR(948),
|
||||
BLAST_FURNACE_GOLD_BAR(947),
|
||||
|
||||
BLAST_FURNACE_COFFER(5357, 795, 1, 31);
|
||||
BLAST_FURNACE_COFFER(5357);
|
||||
|
||||
/**
|
||||
* varbit id
|
||||
*/
|
||||
private final int id;
|
||||
|
||||
/**
|
||||
* index into settings
|
||||
*/
|
||||
private final int index;
|
||||
private final int leastSignificantBit;
|
||||
private final int mostSignificantBit;
|
||||
|
||||
private Varbits(int index, int leastSignificantBit, int mostSignificantBit)
|
||||
{
|
||||
this(-1, index, leastSignificantBit, mostSignificantBit);
|
||||
}
|
||||
|
||||
private Varbits(int id, int index, int leastSignificantBit, int mostSignificantBit)
|
||||
{
|
||||
if (mostSignificantBit < leastSignificantBit)
|
||||
{
|
||||
throw new IllegalStateException("MSB < LSB");
|
||||
}
|
||||
|
||||
this.id = id;
|
||||
this.index = index;
|
||||
this.leastSignificantBit = leastSignificantBit;
|
||||
this.mostSignificantBit = mostSignificantBit;
|
||||
}
|
||||
|
||||
public int getId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
public int getIndex()
|
||||
{
|
||||
return index;
|
||||
}
|
||||
|
||||
public int getLeastSignificantBit()
|
||||
{
|
||||
return leastSignificantBit;
|
||||
}
|
||||
|
||||
public int getMostSignificantBit()
|
||||
{
|
||||
return mostSignificantBit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of this varbit from the given int
|
||||
*
|
||||
* @param value
|
||||
* @return
|
||||
*/
|
||||
public int get(int value)
|
||||
{
|
||||
int mask = getMax() - 1;
|
||||
|
||||
return (value >> leastSignificantBit) & mask;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of this varbit to a given int
|
||||
*
|
||||
* @param varbit The int to set the value on
|
||||
* @param value The value to set
|
||||
* @return
|
||||
*/
|
||||
public int set(int varbit, int value)
|
||||
{
|
||||
int mask = getMax() - 1;
|
||||
|
||||
value &= mask; // Ensure new value is in range
|
||||
|
||||
mask <<= leastSignificantBit; // Align mask to the correct place
|
||||
|
||||
varbit &= ~mask; // And off existing value
|
||||
|
||||
value <<= leastSignificantBit; // Align new value
|
||||
varbit |= value;
|
||||
return varbit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the maximum possible value for this varbit
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getMax()
|
||||
{
|
||||
return 1 << getNumberOfBits();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of bits of storage in this varbit
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getNumberOfBits()
|
||||
{
|
||||
// leastSignificantBit and mostSignificantBit are inclusive
|
||||
return (mostSignificantBit - leastSignificantBit) + 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ import javax.inject.Inject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.GameState;
|
||||
import net.runelite.api.Setting;
|
||||
import net.runelite.api.Skill;
|
||||
import net.runelite.api.Varbits;
|
||||
import net.runelite.api.events.ConfigChanged;
|
||||
@@ -104,7 +105,7 @@ public class AttackIndicatorPlugin extends Plugin
|
||||
updateWarnedSkills(config.warnForMagic(), Skill.MAGIC);
|
||||
updateAttackStyle(
|
||||
client.getSetting(Varbits.EQUIPPED_WEAPON_TYPE),
|
||||
client.getSetting(Varbits.ATTACK_STYLE),
|
||||
client.getSetting(Setting.ATTACK_STYLE),
|
||||
client.getSetting(Varbits.DEFENSIVE_CASTING_MODE));
|
||||
updateWarning(false);
|
||||
}
|
||||
@@ -160,9 +161,9 @@ public class AttackIndicatorPlugin extends Plugin
|
||||
@Subscribe
|
||||
public void onAttackStyleChange(VarbitChanged event)
|
||||
{
|
||||
if (attackStyleVarbit == -1 || attackStyleVarbit != client.getSetting(Varbits.ATTACK_STYLE))
|
||||
if (attackStyleVarbit == -1 || attackStyleVarbit != client.getSetting(Setting.ATTACK_STYLE))
|
||||
{
|
||||
attackStyleVarbit = client.getSetting(Varbits.ATTACK_STYLE);
|
||||
attackStyleVarbit = client.getSetting(Setting.ATTACK_STYLE);
|
||||
updateAttackStyle(client.getSetting(Varbits.EQUIPPED_WEAPON_TYPE), attackStyleVarbit,
|
||||
client.getSetting(Varbits.DEFENSIVE_CASTING_MODE));
|
||||
updateWarning(false);
|
||||
@@ -175,7 +176,7 @@ public class AttackIndicatorPlugin extends Plugin
|
||||
if (equippedWeaponTypeVarbit == -1 || equippedWeaponTypeVarbit != client.getSetting(Varbits.EQUIPPED_WEAPON_TYPE))
|
||||
{
|
||||
equippedWeaponTypeVarbit = client.getSetting(Varbits.EQUIPPED_WEAPON_TYPE);
|
||||
updateAttackStyle(equippedWeaponTypeVarbit, client.getSetting(Varbits.ATTACK_STYLE),
|
||||
updateAttackStyle(equippedWeaponTypeVarbit, client.getSetting(Setting.ATTACK_STYLE),
|
||||
client.getSetting(Varbits.DEFENSIVE_CASTING_MODE));
|
||||
updateWarning(true);
|
||||
}
|
||||
@@ -187,7 +188,7 @@ public class AttackIndicatorPlugin extends Plugin
|
||||
if (castingModeVarbit == -1 || castingModeVarbit != client.getSetting(Varbits.DEFENSIVE_CASTING_MODE))
|
||||
{
|
||||
castingModeVarbit = client.getSetting(Varbits.DEFENSIVE_CASTING_MODE);
|
||||
updateAttackStyle(client.getSetting(Varbits.EQUIPPED_WEAPON_TYPE), client.getSetting(Varbits.ATTACK_STYLE),
|
||||
updateAttackStyle(client.getSetting(Varbits.EQUIPPED_WEAPON_TYPE), client.getSetting(Setting.ATTACK_STYLE),
|
||||
castingModeVarbit);
|
||||
updateWarning(false);
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.Point;
|
||||
import net.runelite.api.Varbits;
|
||||
import net.runelite.api.Setting;
|
||||
import net.runelite.api.events.GameTick;
|
||||
import net.runelite.api.events.VarbitChanged;
|
||||
import net.runelite.api.widgets.Widget;
|
||||
@@ -133,14 +133,14 @@ public class SpecOrbOverlay extends Overlay
|
||||
|
||||
graphics.setColor(SPECIAL_ORB_BACKGROUND_COLOR);
|
||||
|
||||
boolean specialAttackEnabled = client.getSetting(Varbits.SPECIAL_ATTACK_ENABLED) == 1;
|
||||
boolean specialAttackEnabled = client.getSetting(Setting.SPECIAL_ATTACK_ENABLED) == 1;
|
||||
|
||||
// draw relative to run orb
|
||||
Point runOrbPoint = runOrb.getCanvasLocation();
|
||||
Point specOrbPoint = new Point(runOrbPoint.getX() + (client.isResized() ? SPEC_ORB_X_RESIZABLE : SPEC_ORB_X_FIXED),
|
||||
runOrbPoint.getY() + (client.isResized() ? SPEC_ORB_Y_RESIZABLE : SPEC_ORB_Y_FIXED));
|
||||
|
||||
double specialPercent = client.getSetting(Varbits.SPECIAL_ATTACK_PERCENT) / 1000.0;
|
||||
double specialPercent = client.getSetting(Setting.SPECIAL_ATTACK_PERCENT) / 1000.0;
|
||||
double specialRechargePercent = tickCounter / (double) RECHARGE_TIME_TICKS;
|
||||
|
||||
OverlayUtil.drawMinimapOrb(graphics, specOrbPoint, specialPercent,
|
||||
@@ -153,7 +153,7 @@ public class SpecOrbOverlay extends Overlay
|
||||
|
||||
public void onVarbitChanged(VarbitChanged event)
|
||||
{
|
||||
int specialPercent = client.getSetting(Varbits.SPECIAL_ATTACK_PERCENT);
|
||||
int specialPercent = client.getSetting(Setting.SPECIAL_ATTACK_PERCENT);
|
||||
if (lastSpecialPercent != specialPercent)
|
||||
{
|
||||
int diff = specialPercent - lastSpecialPercent;
|
||||
@@ -175,7 +175,7 @@ public class SpecOrbOverlay extends Overlay
|
||||
public void onTick(GameTick event)
|
||||
{
|
||||
// 1000 = 100%, 500 = 50%, 0 = 0%
|
||||
int specialPercent = client.getSetting(Varbits.SPECIAL_ATTACK_PERCENT);
|
||||
int specialPercent = client.getSetting(Setting.SPECIAL_ATTACK_PERCENT);
|
||||
// The recharge doesn't tick when at 100%
|
||||
if (specialPercent == 1000)
|
||||
{
|
||||
|
||||
@@ -39,6 +39,7 @@ import net.runelite.api.Player;
|
||||
import net.runelite.api.Point;
|
||||
import net.runelite.api.Prayer;
|
||||
import net.runelite.api.Projectile;
|
||||
import net.runelite.api.Setting;
|
||||
import net.runelite.api.Skill;
|
||||
import net.runelite.api.Varbits;
|
||||
import net.runelite.api.events.ExperienceChanged;
|
||||
@@ -210,11 +211,10 @@ public abstract class RSClientMixin implements RSClient
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public int getSetting(Varbits varbit)
|
||||
public int getSetting(Setting setting)
|
||||
{
|
||||
int[] settings = getSettings();
|
||||
int value = settings[varbit.getIndex()];
|
||||
return varbit.get(value);
|
||||
return settings[setting.getId()];
|
||||
}
|
||||
|
||||
@Inject
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package net.runelite.mixins;
|
||||
|
||||
import com.google.common.cache.Cache;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import net.runelite.api.Varbits;
|
||||
import net.runelite.api.mixins.Inject;
|
||||
import net.runelite.api.mixins.Mixin;
|
||||
import net.runelite.api.mixins.Shadow;
|
||||
import net.runelite.rs.api.RSClient;
|
||||
import net.runelite.rs.api.RSNodeCache;
|
||||
import net.runelite.rs.api.RSVarbit;
|
||||
|
||||
@Mixin(RSClient.class)
|
||||
public abstract class VarbitMixin implements RSClient
|
||||
{
|
||||
@Shadow("clientInstance")
|
||||
private static RSClient client;
|
||||
|
||||
@Inject
|
||||
private Cache<Integer, RSVarbit> varbitCache = CacheBuilder.newBuilder()
|
||||
.maximumSize(128)
|
||||
.build();
|
||||
|
||||
@Inject
|
||||
VarbitMixin()
|
||||
{
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public int getSetting(Varbits varbit)
|
||||
{
|
||||
int varbitId = varbit.getId();
|
||||
RSVarbit v = varbitCache.getIfPresent(varbitId);
|
||||
if (v == null)
|
||||
{
|
||||
client.getVarbit(varbitId); // load varbit into cache
|
||||
RSNodeCache varbits = client.getVarbitCache();
|
||||
v = (RSVarbit) varbits.get(varbitId); // get from cache
|
||||
varbitCache.put(varbitId, v);
|
||||
}
|
||||
|
||||
int[] settings = getWidgetSettings();
|
||||
int value = settings[v.getIndex()];
|
||||
int lsb = v.getLeastSignificantBit();
|
||||
int msb = v.getMostSignificantBit();
|
||||
int mask = (1 << ((msb - lsb) + 1)) - 1;
|
||||
return (value >> lsb) & mask;
|
||||
}
|
||||
}
|
||||
@@ -451,4 +451,10 @@ public interface RSClient extends RSGameEngine, Client
|
||||
|
||||
@Construct
|
||||
RSName createName(String name, RSJagexLoginType type);
|
||||
|
||||
@Import("getVarbit")
|
||||
int getVarbit(int varbitId);
|
||||
|
||||
@Import("varbits")
|
||||
RSNodeCache getVarbitCache();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package net.runelite.rs.api;
|
||||
|
||||
import net.runelite.mapping.Import;
|
||||
|
||||
public interface RSNodeCache
|
||||
{
|
||||
@Import("get")
|
||||
RSCacheableNode get(long id);
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package net.runelite.rs.api;
|
||||
|
||||
import net.runelite.mapping.Import;
|
||||
|
||||
public interface RSVarbit extends RSCacheableNode
|
||||
{
|
||||
@Import("configId")
|
||||
int getIndex();
|
||||
|
||||
@Import("leastSignificantBit")
|
||||
int getLeastSignificantBit();
|
||||
|
||||
@Import("mostSignificantBit")
|
||||
int getMostSignificantBit();
|
||||
}
|
||||
Reference in New Issue
Block a user