Merge remote-tracking branch 'runelite/master'

This commit is contained in:
Owain van Brakel
2019-08-08 05:10:53 +02:00
19 changed files with 276 additions and 43 deletions

View File

@@ -57,6 +57,10 @@ public enum InventoryID
* Looting Bag inventory
*/
LOOTING_BAG(516),
/**
* Kingdom Of Miscellania reward inventory.
*/
KINGDOM_OF_MISCELLANIA(390),
/**
* Chambers of Xeric chest inventory.
*/

View File

@@ -215,6 +215,8 @@ public class GpuPlugin extends Plugin implements DrawCallbacks
private int centerX;
private int centerY;
private int yaw;
private int pitch;
// Uniforms
private int uniUseFog;
@@ -746,6 +748,8 @@ public class GpuPlugin extends Plugin implements DrawCallbacks
{
centerX = client.getCenterX();
centerY = client.getCenterY();
yaw = client.getCameraYaw();
pitch = client.getCameraPitch();
final Scene scene = client.getScene();
final int drawDistance = Math.max(0, Math.min(MAX_DISTANCE, this.drawDistance));
@@ -945,8 +949,8 @@ public class GpuPlugin extends Plugin implements DrawCallbacks
gl.glBindBuffer(gl.GL_UNIFORM_BUFFER, uniformBufferId);
uniformBuffer.clear();
uniformBuffer
.put(client.getCameraYaw())
.put(client.getCameraPitch())
.put(yaw)
.put(pitch)
.put(centerX)
.put(centerY)
.put(client.getScale())

View File

@@ -209,6 +209,7 @@ public class HunterPlugin extends Plugin
case ObjectID.SHAKING_BOX: // Black chinchompa caught
case ObjectID.SHAKING_BOX_9382: // Grey chinchompa caught
case ObjectID.SHAKING_BOX_9383: // Red chinchompa caught
case ObjectID.SHAKING_BOX_9384: // Ferret caught
case ObjectID.BOULDER_20648: // Prickly kebbit caught
case ObjectID.BOULDER_20649: // Sabre-tooth kebbit caught
case ObjectID.BOULDER_20650: // Barb-tailed kebbit caught
@@ -261,25 +262,30 @@ public class HunterPlugin extends Plugin
// Imp entering box
case ObjectID.MAGIC_BOX_19225:
// Black chin shaking box
// Black chin shaking box
case ObjectID.BOX_TRAP:
case ObjectID.BOX_TRAP_2026:
case ObjectID.BOX_TRAP_2028:
case ObjectID.BOX_TRAP_2029:
// Red chin shaking box
// Red chin shaking box
case ObjectID.BOX_TRAP_9381:
case ObjectID.BOX_TRAP_9390:
case ObjectID.BOX_TRAP_9391:
case ObjectID.BOX_TRAP_9392:
case ObjectID.BOX_TRAP_9393:
// Grey chin shaking box
// Grey chin shaking box
case ObjectID.BOX_TRAP_9386:
case ObjectID.BOX_TRAP_9387:
case ObjectID.BOX_TRAP_9388:
// Bird traps
// Ferret shaking box
case ObjectID.BOX_TRAP_9394:
case ObjectID.BOX_TRAP_9396:
case ObjectID.BOX_TRAP_9397:
// Bird traps
case ObjectID.BIRD_SNARE_9346:
case ObjectID.BIRD_SNARE_9347:
case ObjectID.BIRD_SNARE_9349:
@@ -287,7 +293,7 @@ public class HunterPlugin extends Plugin
case ObjectID.BIRD_SNARE_9376:
case ObjectID.BIRD_SNARE_9378:
// Deadfall trap
// Deadfall trap
case ObjectID.DEADFALL_19218:
case ObjectID.DEADFALL_19851:
case ObjectID.DEADFALL_20128:
@@ -295,7 +301,7 @@ public class HunterPlugin extends Plugin
case ObjectID.DEADFALL_20130:
case ObjectID.DEADFALL_20131:
// Net trap
// Net trap
case ObjectID.NET_TRAP_9003:
case ObjectID.NET_TRAP_9005:
case ObjectID.NET_TRAP_8972:
@@ -305,7 +311,7 @@ public class HunterPlugin extends Plugin
case ObjectID.NET_TRAP_8993:
case ObjectID.NET_TRAP_8997:
// Maniacal monkey boulder trap
// Maniacal monkey boulder trap
case ObjectID.MONKEY_TRAP_28828:
case ObjectID.MONKEY_TRAP_28829:
if (myTrap != null)

View File

@@ -77,6 +77,14 @@ class InventoryGridOverlay extends Overlay
final net.runelite.api.Point mouse = client.getMouseCanvasPosition();
final Point mousePoint = new Point(mouse.getX(), mouse.getY());
final int if1DraggedItemIndex = client.getIf1DraggedItemIndex();
final WidgetItem draggedItem = inventoryWidget.getWidgetItem(if1DraggedItemIndex);
final int itemId = draggedItem.getId();
if (itemId == -1)
{
return null;
}
for (int i = 0; i < INVENTORY_SIZE; ++i)
{
@@ -87,8 +95,7 @@ class InventoryGridOverlay extends Overlay
if (plugin.isShowItem() && inBounds)
{
final WidgetItem draggedItem = inventoryWidget.getWidgetItem(client.getIf1DraggedItemIndex());
final BufferedImage draggedItemImage = itemManager.getImage(draggedItem.getId());
final BufferedImage draggedItemImage = itemManager.getImage(itemId);
final int x = (int) bounds.getX();
final int y = (int) bounds.getY();

View File

@@ -136,6 +136,12 @@ public class ItemStatChanges
add(boost(MAGIC, perc(.15, 5)), SUPER_MAGIC_POTION_1, SUPER_MAGIC_POTION_2, SUPER_MAGIC_POTION_3, SUPER_MAGIC_POTION_4);
add(combo(2, boost(RANGED, perc(0.1, 4)), boost(DEFENCE, perc(0.15, 5))), BASTION_POTION1, BASTION_POTION2, BASTION_POTION3, BASTION_POTION4);
add(combo(2, boost(MAGIC, 4), boost(DEFENCE, perc(0.15, 5))), BATTLEMAGE_POTION1, BATTLEMAGE_POTION2, BATTLEMAGE_POTION3, BATTLEMAGE_POTION4);
add(combo(boost(MAGIC, 4), heal(HITPOINTS, -10)), DIVINE_MAGIC_POTION1, DIVINE_MAGIC_POTION2, DIVINE_MAGIC_POTION3, DIVINE_MAGIC_POTION4);
add(combo(boost(RANGED, perc(.10, 4)), heal(HITPOINTS, -10)), DIVINE_RANGING_POTION1, DIVINE_RANGING_POTION2, DIVINE_RANGING_POTION3, DIVINE_RANGING_POTION4);
add(combo(boost(ATTACK, perc(.15, 5)), heal(HITPOINTS, -10)), DIVINE_SUPER_ATTACK_POTION1, DIVINE_SUPER_ATTACK_POTION2, DIVINE_SUPER_ATTACK_POTION3, DIVINE_SUPER_ATTACK_POTION4);
add(combo(boost(STRENGTH, perc(.15, 5)), heal(HITPOINTS, -10)), DIVINE_SUPER_STRENGTH_POTION1, DIVINE_SUPER_STRENGTH_POTION2, DIVINE_SUPER_STRENGTH_POTION3, DIVINE_SUPER_STRENGTH_POTION4);
add(combo(boost(DEFENCE, perc(.15, 5)), heal(HITPOINTS, -10)), DIVINE_SUPER_DEFENCE_POTION1, DIVINE_SUPER_DEFENCE_POTION2, DIVINE_SUPER_DEFENCE_POTION3, DIVINE_SUPER_DEFENCE_POTION4);
add(combo(3, boost(ATTACK, perc(.15, 5)), boost(STRENGTH, perc(.15, 5)), boost(DEFENCE, perc(.15, 5)), heal(HITPOINTS, -10)), DIVINE_SUPER_COMBAT_POTION1, DIVINE_SUPER_COMBAT_POTION2, DIVINE_SUPER_COMBAT_POTION3, DIVINE_SUPER_COMBAT_POTION4);
// Regular overload (NMZ)
add(combo(5, boost(ATTACK, perc(.15, 5)), boost(STRENGTH, perc(.15, 5)), boost(DEFENCE, perc(.15, 5)), boost(RANGED, perc(.15, 5)), boost(MAGIC, perc(.15, 5)), heal(HITPOINTS, -50)), OVERLOAD_1, OVERLOAD_2, OVERLOAD_3, OVERLOAD_4);

View File

@@ -181,10 +181,16 @@ class KeyRemappingListener extends MouseAdapter implements KeyListener
switch (e.getKeyCode())
{
case KeyEvent.VK_ESCAPE:
// When existing typing mode, block the escape key
// When exiting typing mode, block the escape key
// so that it doesn't trigger the in-game hotkeys
e.consume();
// FALLTHROUGH
plugin.setTyping(false);
clientThread.invoke(() ->
{
client.setVar(VarClientStr.CHATBOX_TYPED_TEXT, "");
plugin.lockChat();
});
break;
case KeyEvent.VK_ENTER:
plugin.setTyping(false);
clientThread.invoke(plugin::lockChat);

View File

@@ -141,6 +141,8 @@ public class KeyRemappingPlugin extends Plugin
if (client.getGameState() == GameState.LOGGED_IN)
{
lockChat();
// Clear any typed text
client.setVar(VarClientStr.CHATBOX_TYPED_TEXT, "");
}
});
}
@@ -255,8 +257,6 @@ public class KeyRemappingPlugin extends Plugin
if (chatboxInput != null)
{
chatboxInput.setText(getWaitingText());
// Typed text can be non-empty on plugin start, so clear it now
client.setVar(VarClientStr.CHATBOX_TYPED_TEXT, "");
}
}

View File

@@ -28,6 +28,7 @@ package net.runelite.client.plugins.loottracker;
import com.google.common.base.Strings;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.image.BufferedImage;
import java.text.DateFormat;
@@ -62,6 +63,8 @@ class LootTrackerBox extends JPanel
private final JLabel priceLabel = new JLabel();
private final JLabel subTitleLabel = new JLabel();
private final JLabel dateLabel = new JLabel();
private final JPanel logTitle = new JPanel(new BorderLayout(5, 0));
private final JLabel titleLabel = new JLabel();
private final ItemManager itemManager;
@Getter(AccessLevel.PACKAGE)
private final String id;
@@ -92,11 +95,10 @@ class LootTrackerBox extends JPanel
setLayout(new BorderLayout(0, 1));
setBorder(new EmptyBorder(5, 0, 0, 0));
final JPanel logTitle = new JPanel(new BorderLayout(5, 0));
logTitle.setBorder(new EmptyBorder(7, 7, 7, 7));
logTitle.setBackground(ColorScheme.DARKER_GRAY_COLOR.darker());
final JLabel titleLabel = new JLabel(Text.removeTags(id));
titleLabel.setText(Text.removeTags(id));
titleLabel.setFont(FontManager.getRunescapeSmallFont());
titleLabel.setForeground(Color.WHITE);
@@ -201,6 +203,39 @@ class LootTrackerBox extends JPanel
repaint();
}
void collapse()
{
if (!isCollapsed())
{
itemContainer.setVisible(false);
applyDimmer(false, logTitle);
}
}
void expand()
{
if (isCollapsed())
{
itemContainer.setVisible(true);
applyDimmer(true, logTitle);
}
}
boolean isCollapsed()
{
return !itemContainer.isVisible();
}
private void applyDimmer(boolean brighten, JPanel panel)
{
for (Component component : panel.getComponents())
{
Color color = component.getForeground();
component.setForeground(brighten ? color.brighter() : color.darker());
}
}
/**
* This method creates stacked items from the item list, calculates total price and then
* displays all the items in the UI.

View File

@@ -84,6 +84,8 @@ class LootTrackerPanel extends PluginPanel
private static final ImageIcon RESET_ICON;
private static final ImageIcon RESET_ICON_FADED;
private static final ImageIcon RESET_ICON_HOVER;
private static final ImageIcon COLLAPSE_ICON;
private static final ImageIcon EXPAND_ICON;
private static final String HTML_LABEL_TEMPLATE =
@@ -109,7 +111,8 @@ class LootTrackerPanel extends PluginPanel
private final JLabel singleLootBtn = new JLabel();
private final JLabel groupedLootBtn = new JLabel();
private final JLabel resetIcon = new JLabel();
private JComboBox dateFilterComboBox = new JComboBox<>(new Vector<LootRecordDateFilter>(Arrays.asList(LootRecordDateFilter.values())));
private final JLabel collapseBtn = new JLabel();
private JComboBox dateFilterComboBox = new JComboBox<>(new Vector<>(Arrays.asList(LootRecordDateFilter.values())));
// Log collection
private final List<LootTrackerRecord> records = new ArrayList<>();
@@ -133,6 +136,8 @@ class LootTrackerPanel extends PluginPanel
final BufferedImage visibleImg = ImageUtil.getResourceStreamFromClass(LootTrackerPlugin.class, "visible_icon.png");
final BufferedImage invisibleImg = ImageUtil.getResourceStreamFromClass(LootTrackerPlugin.class, "invisible_icon.png");
final BufferedImage resetImg = ImageUtil.getResourceStreamFromClass(LootTrackerPlugin.class, "delete-white.png");
final BufferedImage collapseImg = ImageUtil.getResourceStreamFromClass(LootTrackerPlugin.class, "collapsed.png");
final BufferedImage expandedImg = ImageUtil.getResourceStreamFromClass(LootTrackerPlugin.class, "expanded.png");
SINGLE_LOOT_VIEW = new ImageIcon(singleLootImg);
SINGLE_LOOT_VIEW_FADED = new ImageIcon(ImageUtil.alphaOffset(singleLootImg, -180));
@@ -155,9 +160,13 @@ class LootTrackerPanel extends PluginPanel
INVISIBLE_ICON = new ImageIcon(invisibleImg);
INVISIBLE_ICON_HOVER = new ImageIcon(ImageUtil.alphaOffset(invisibleImg, -220));
COLLAPSE_ICON = new ImageIcon(collapseImg);
EXPAND_ICON = new ImageIcon(expandedImg);
}
@Getter @Setter
@Getter
@Setter
private LootRecordSortType lootRecordSortType = LootRecordSortType.TIMESTAMP;
LootTrackerPanel(final LootTrackerPlugin plugin, final ItemManager itemManager, final LootTrackerConfig config)
@@ -185,6 +194,16 @@ class LootTrackerPanel extends PluginPanel
final JPanel viewControls = new JPanel(new GridLayout(1, 5, 5, 0));
viewControls.setBackground(ColorScheme.DARKER_GRAY_COLOR);
collapseBtn.setIcon(EXPAND_ICON);
collapseBtn.addMouseListener(new MouseAdapter()
{
@Override
public void mousePressed(MouseEvent e)
{
changeCollapse();
}
});
singleLootBtn.setIcon(SINGLE_LOOT_VIEW);
singleLootBtn.setToolTipText("Show each kill separately");
singleLootBtn.addMouseListener(new MouseAdapter()
@@ -282,13 +301,14 @@ class LootTrackerPanel extends PluginPanel
dateFilterComboBox.setMaximumSize(new Dimension(15, 0));
dateFilterComboBox.setMaximumRowCount(3);
dateFilterComboBox.addItemListener(e ->
{
final LootRecordDateFilter dateFilterSelected = (LootRecordDateFilter) e.getItem();
dateFilter = dateFilterSelected;
rebuild();
}
{
final LootRecordDateFilter dateFilterSelected = (LootRecordDateFilter) e.getItem();
dateFilter = dateFilterSelected;
rebuild();
}
);
viewControls.add(collapseBtn);
//viewControls.add(dateFilterComboBox);
viewControls.add(resetIcon);
viewControls.add(groupedLootBtn);
@@ -332,8 +352,8 @@ class LootTrackerPanel extends PluginPanel
leftTitleContainer.add(detailsTitle, BorderLayout.CENTER);
actionsContainer.add(dateFilterComboBox);
actionsContainer.add(leftTitleContainer, BorderLayout.WEST);
actionsContainer.add(viewControls, BorderLayout.EAST);
actionsContainer.add(leftTitleContainer, BorderLayout.WEST);
// Create panel that will contain overall data
overallPanel.setBorder(BorderFactory.createCompoundBorder(
@@ -399,6 +419,27 @@ class LootTrackerPanel extends PluginPanel
actionsContainer.setVisible(true);
}
void updateCollapseText()
{
if (isAllCollapsed())
{
collapseBtn.setToolTipText("Un-Collapse All");
collapseBtn.setIcon(COLLAPSE_ICON);
}
else
{
collapseBtn.setToolTipText("Collapse All");
collapseBtn.setIcon(EXPAND_ICON);
}
}
private boolean isAllCollapsed()
{
return boxes.stream()
.filter(i -> i.isCollapsed())
.count() == boxes.size();
}
void loadHeaderIcon(BufferedImage img)
{
overallIcon.setIcon(new ImageIcon(img));
@@ -412,7 +453,7 @@ class LootTrackerPanel extends PluginPanel
void add(final String eventName, final String localUsername, final int actorLevel, LootTrackerItem[] items)
{
final String subTitle = actorLevel > -1 ? "(lvl-" + actorLevel + ")" : "";
final LootTrackerRecord record = new LootTrackerRecord( eventName, localUsername, subTitle, items, Instant.now());
final LootTrackerRecord record = new LootTrackerRecord(eventName, localUsername, subTitle, items, Instant.now());
records.add(record);
LootTrackerBox box = buildBox(record);
if (box != null)
@@ -468,6 +509,28 @@ class LootTrackerPanel extends PluginPanel
plugin.deleteLocalRecords();
}
/**
* Changes the collapse status of loot entries
*/
private void changeCollapse()
{
boolean isAllCollapsed = isAllCollapsed();
for (LootTrackerBox box : boxes)
{
if (isAllCollapsed)
{
box.expand();
}
else if (!box.isCollapsed())
{
box.collapse();
}
}
updateCollapseText();
}
/**
* After an item changed it's ignored state, iterate all the records and make
* sure all items of the same name also get updated
@@ -477,11 +540,13 @@ class LootTrackerPanel extends PluginPanel
for (LootTrackerRecord r : records)
{
if (plugin.isIgnoredNPC(r.getTitle()))
for (LootTrackerItem item : r.getItems())
{
if (plugin.isIgnored(item.getName()) != item.isIgnored())
for (LootTrackerItem item : r.getItems())
{
item.setIgnored(plugin.isIgnored(item.getName()));
if (plugin.isIgnored(item.getName()) != item.isIgnored())
{
item.setIgnored(plugin.isIgnored(item.getName()));
}
}
}
}
@@ -544,15 +609,11 @@ class LootTrackerPanel extends PluginPanel
}
}
boxes.forEach(LootTrackerBox::rebuild);
updateOverall();
logsContainer.revalidate();
logsContainer.repaint();
}
/**
@@ -606,7 +667,7 @@ class LootTrackerPanel extends PluginPanel
overallPanel.setVisible(true);
// Create box
final LootTrackerBox box = new LootTrackerBox(record.getTimestamp().toEpochMilli(), itemManager, record.getTitle(), record.getSubTitle(),
final LootTrackerBox box = new LootTrackerBox(record.getTimestamp().toEpochMilli(), itemManager, record.getTitle(), record.getSubTitle(),
hideIgnoredItems, config.displayDate(), plugin::toggleItem);
box.combine(record);
@@ -615,6 +676,27 @@ class LootTrackerPanel extends PluginPanel
popupMenu.setBorder(new EmptyBorder(5, 5, 5, 5));
box.setComponentPopupMenu(popupMenu);
// Create collapse event
box.addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent e)
{
if (e.getButton() == MouseEvent.BUTTON1)
{
if (box.isCollapsed())
{
box.expand();
}
else
{
box.collapse();
}
updateCollapseText();
}
}
});
// Create Hide Menu item
final JMenuItem hide;
@@ -737,7 +819,10 @@ class LootTrackerPanel extends PluginPanel
overallKillsLabel.setText(htmlLabel("Total count: ", overallKills));
overallGpLabel.setText(htmlLabel("Total value: ", overallGp));
updateCollapseText();
}
private static String htmlLabel(String key, long value)
{
final String valueStr = StackFormatter.quantityToStackSize(value);

View File

@@ -629,6 +629,10 @@ public class LootTrackerPlugin extends Plugin
// Clue Scrolls use same InventoryID as Barrows
container = client.getItemContainer(InventoryID.BARROWS_REWARD);
break;
case (WidgetID.KINGDOM_GROUP_ID):
eventType = "Kingdom of Miscellania";
container = client.getItemContainer(InventoryID.KINGDOM_OF_MISCELLANIA);
break;
default:
return;
}

View File

@@ -1150,7 +1150,8 @@ public class SlayerPlugin extends Plugin
}
if (TASK_STRING_VALIDATION.matcher(task.getTask()).find() || task.getTask().length() > TASK_STRING_MAX_LENGTH ||
TASK_STRING_VALIDATION.matcher(task.getLocation()).find() || task.getLocation().length() > TASK_STRING_MAX_LENGTH)
TASK_STRING_VALIDATION.matcher(task.getLocation()).find() || task.getLocation().length() > TASK_STRING_MAX_LENGTH ||
Task.getTask(task.getTask()) == null || !Task.LOCATIONS.contains(task.getLocation()))
{
log.debug("Validation failed for task name or location: {}", task);
return;

View File

@@ -26,6 +26,7 @@
package net.runelite.client.plugins.slayer;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.util.ArrayList;
import static java.util.Arrays.asList;
@@ -242,6 +243,48 @@ enum Task
//</editor-fold>
private static final Map<String, Task> tasks;
static final List<String> LOCATIONS = ImmutableList.of(
"", // no location is a valid location
"Abyss",
"Ancient Cavern",
"Asgarnian Ice Dungeon",
"Brimhaven Dungeon",
"Brine Rat Cavern",
"Catacombs of Kourend",
"Chasm of Fire",
"Clan Wars",
"Death Plateau",
"Evil Chicken's Lair",
"Fossil Island",
"Fremennik Slayer Dungeon",
"God Wars Dungeon",
"Iorwerth Dungeon",
"Kalphite Lair",
"Karuulm Slayer Dungeon",
"Keldagrim",
"Kraken Cove",
"Lighthouse",
"Lithkren Vault",
"Lizardman Canyon",
"Lizardman Settlement",
"Molch",
"Mount Quidamortem",
"Mourner Tunnels",
"Ogre Enclave",
"Slayer Tower",
"Smoke Devil Dungeon",
"Smoke Dungeon",
"Stronghold of Security",
"Stronghold Slayer Dungeon",
"task-only Kalphite Cave",
"Taverley Dungeon",
"Troll Stronghold",
"Waterbirth Island",
"Waterfall Dungeon",
"Wilderness",
"Witchaven Dungeon",
"Zanaris"
);
private final String name;
private final int itemSpriteId;

View File

@@ -26,12 +26,16 @@ package net.runelite.client.ui.overlay;
import com.google.common.base.MoreObjects;
import java.awt.Color;
import java.awt.Composite;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.RenderingHints;
import java.awt.Stroke;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.geom.AffineTransform;
@@ -145,7 +149,7 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener
}
}
protected void onClientTick(ClientTick t)
private void onClientTick(ClientTick t)
{
if (menuEntries == null)
{
@@ -499,11 +503,15 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener
graphics.setFont(this.interfaceFont);
}
// Reset the default color
graphics.setColor(Color.WHITE);
// Save graphics2d properties so we can restore them later
final AffineTransform transform = graphics.getTransform();
final Stroke stroke = graphics.getStroke();
final Composite composite = graphics.getComposite();
final Paint paint = graphics.getPaint();
final Color color = graphics.getColor();
final RenderingHints renderingHints = graphics.getRenderingHints();
final Color background = graphics.getBackground();
// Get transform so we can reset it after drawing
AffineTransform transform = graphics.getTransform();
graphics.translate(point.x, point.y);
final Dimension overlayDimension;
@@ -518,7 +526,14 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener
}
finally
{
// Restore graphics2d properties
graphics.setTransform(transform);
graphics.setStroke(stroke);
graphics.setComposite(composite);
graphics.setPaint(paint);
graphics.setColor(color);
graphics.setRenderingHints(renderingHints);
graphics.setBackground(background);
}
final Dimension dimension = MoreObjects.firstNonNull(overlayDimension, new Dimension());

View File

@@ -4087,5 +4087,10 @@
"22622": 10,
"22634": 100,
"22636": 100,
"22647": 10
"22647": 10,
"23499": 11000,
"23517": 100,
"23522": 70,
"23525": 4,
"23528": 70
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 B

View File

@@ -510,6 +510,12 @@
"name": "Amethyst Arrow",
"xp": 13.5
},
{
"level": 84,
"icon": 21930,
"name": "Dragon Bolts",
"xp": 12
},
{
"level": 84,
"icon": 21318,

View File

@@ -276,6 +276,12 @@
"name": "Stamina Potion (3)",
"xp": 76.5
},
{
"level": 77,
"icon": 12625,
"name": "Stamina Potion (4)",
"xp": 102
},
{
"level": 78,
"icon": 189,

View File

@@ -407,8 +407,8 @@ public class SlayerPluginTest
public void testTaskLookup() throws IOException
{
net.runelite.http.api.chat.Task task = new net.runelite.http.api.chat.Task();
task.setTask("task");
task.setLocation("loc");
task.setTask("Abyssal demons");
task.setLocation("Abyss");
task.setAmount(42);
task.setInitialAmount(42);