Gazivodag master (#10)
* Transform objects now use an interface * Plugins can now accept colors (not my code) * mixins: renderWidgetLayer: skip hidden widgets * World Map: Identify Both Shield of Arrav Quest Start Points (#8442) Closes #8437 * widgetitem: associate Widget with WidgetItem * widgetitem overlay: allow configuring which interfaces to overlay Update overlays to behave consistent with how they behaved before removal of query api, with the exception of adding the rune pouch overlay to the bank. * Update .gitignore * Revert "Adding external plugin support (#4)" This reverts commitbfe1482* Update QuestStartLocation.java * Revert "Plugins update (#7)" This reverts commit216f7d9* Adding external plugin support (#4) * Adding archetype * Update RuneLiteConfig.java * Update Plugin.java * Update PluginManager.java * Adding pluginwatcher & classloader * Update RuneLite.java * Update pom.xml * Update settings.xml * Update pom.xml * Update pom.xml * Removing old example plugin * Fixing the fix of the fix for plugin archetype. (cherry picked from commitbfe1482705) * Plugins can now accept colors (not my code) (cherry picked from commit8e094f7386) * Update MenuEntrySwapperConfig.java
This commit is contained in:
6
.gitignore
vendored
6
.gitignore
vendored
@@ -7,4 +7,8 @@ project.properties
|
|||||||
.idea/
|
.idea/
|
||||||
.project
|
.project
|
||||||
.settings/
|
.settings/
|
||||||
.classpath
|
.classpath
|
||||||
|
runelite-client/src/main/resources/META-INF/MANIFEST.MF
|
||||||
|
git
|
||||||
|
classes/artifacts/client_jar/run.bat
|
||||||
|
classes/artifacts/client_jar/client.jar
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ package net.runelite.api.widgets;
|
|||||||
|
|
||||||
import java.awt.Rectangle;
|
import java.awt.Rectangle;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
import net.runelite.api.Point;
|
import net.runelite.api.Point;
|
||||||
|
|
||||||
@@ -34,55 +35,34 @@ import net.runelite.api.Point;
|
|||||||
*/
|
*/
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@ToString
|
@ToString
|
||||||
|
@Getter
|
||||||
public class WidgetItem
|
public class WidgetItem
|
||||||
{
|
{
|
||||||
private final int id;
|
|
||||||
private final int quantity;
|
|
||||||
private final int index;
|
|
||||||
private final Rectangle canvasBounds;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the ID of the item represented.
|
* The ID of the item represented.
|
||||||
*
|
*
|
||||||
* @return the items ID
|
|
||||||
* @see net.runelite.api.ItemID
|
* @see net.runelite.api.ItemID
|
||||||
*/
|
*/
|
||||||
public int getId()
|
private final int id;
|
||||||
{
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the quantity of the represented item.
|
* The quantity of the represented item.
|
||||||
*
|
|
||||||
* @return the items quantity
|
|
||||||
*/
|
*/
|
||||||
public int getQuantity()
|
private final int quantity;
|
||||||
{
|
|
||||||
return quantity;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the index position of this WidgetItem inside its parents
|
* The index position of this WidgetItem inside its parents
|
||||||
* WidgetItem array.
|
* WidgetItem array.
|
||||||
*
|
*
|
||||||
* @return the index in the parent widget
|
|
||||||
* @see Widget#getWidgetItems()
|
* @see Widget#getWidgetItems()
|
||||||
*/
|
*/
|
||||||
public int getIndex()
|
private final int index;
|
||||||
{
|
|
||||||
return index;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the area where the widget is drawn on the canvas.
|
* The area where the widget is drawn on the canvas.
|
||||||
*
|
|
||||||
* @return the occupied area of the widget
|
|
||||||
*/
|
*/
|
||||||
public Rectangle getCanvasBounds()
|
private final Rectangle canvasBounds;
|
||||||
{
|
/**
|
||||||
return canvasBounds;
|
* The widget which contains this item.
|
||||||
}
|
*/
|
||||||
|
private final Widget widget;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the upper-left coordinate of where the widget is being drawn
|
* Gets the upper-left coordinate of where the widget is being drawn
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ public class ConfigPanel extends PluginPanel
|
|||||||
}
|
}
|
||||||
|
|
||||||
ConfigPanel(PluginManager pluginManager, ConfigManager configManager, ScheduledExecutorService executorService,
|
ConfigPanel(PluginManager pluginManager, ConfigManager configManager, ScheduledExecutorService executorService,
|
||||||
RuneLiteConfig runeLiteConfig, ChatColorConfig chatColorConfig)
|
RuneLiteConfig runeLiteConfig, ChatColorConfig chatColorConfig)
|
||||||
{
|
{
|
||||||
super(false);
|
super(false);
|
||||||
this.pluginManager = pluginManager;
|
this.pluginManager = pluginManager;
|
||||||
@@ -195,28 +195,28 @@ public class ConfigPanel extends PluginPanel
|
|||||||
|
|
||||||
// populate pluginList with all non-hidden plugins
|
// populate pluginList with all non-hidden plugins
|
||||||
pluginManager.getPlugins().stream()
|
pluginManager.getPlugins().stream()
|
||||||
.filter(plugin -> !plugin.getClass().getAnnotation(PluginDescriptor.class).hidden())
|
.filter(plugin -> !plugin.getClass().getAnnotation(PluginDescriptor.class).hidden())
|
||||||
.forEach(plugin ->
|
.forEach(plugin ->
|
||||||
{
|
{
|
||||||
final PluginDescriptor descriptor = plugin.getClass().getAnnotation(PluginDescriptor.class);
|
final PluginDescriptor descriptor = plugin.getClass().getAnnotation(PluginDescriptor.class);
|
||||||
final Config config = pluginManager.getPluginConfigProxy(plugin);
|
final Config config = pluginManager.getPluginConfigProxy(plugin);
|
||||||
final ConfigDescriptor configDescriptor = config == null ? null : configManager.getConfigDescriptor(config);
|
final ConfigDescriptor configDescriptor = config == null ? null : configManager.getConfigDescriptor(config);
|
||||||
|
|
||||||
final PluginListItem listItem = new PluginListItem(this, plugin, descriptor, config, configDescriptor);
|
final PluginListItem listItem = new PluginListItem(this, plugin, descriptor, config, configDescriptor);
|
||||||
listItem.setPinned(pinnedPlugins.contains(listItem.getName()));
|
listItem.setPinned(pinnedPlugins.contains(listItem.getName()));
|
||||||
pluginList.add(listItem);
|
pluginList.add(listItem);
|
||||||
});
|
});
|
||||||
|
|
||||||
// add special entries for core client configurations
|
// add special entries for core client configurations
|
||||||
final PluginListItem runeLite = new PluginListItem(this, runeLiteConfig,
|
final PluginListItem runeLite = new PluginListItem(this, runeLiteConfig,
|
||||||
configManager.getConfigDescriptor(runeLiteConfig),
|
configManager.getConfigDescriptor(runeLiteConfig),
|
||||||
RUNELITE_PLUGIN, "RuneLite client settings", "client");
|
RUNELITE_PLUGIN, "RuneLite client settings", "client");
|
||||||
runeLite.setPinned(pinnedPlugins.contains(RUNELITE_PLUGIN));
|
runeLite.setPinned(pinnedPlugins.contains(RUNELITE_PLUGIN));
|
||||||
pluginList.add(runeLite);
|
pluginList.add(runeLite);
|
||||||
|
|
||||||
final PluginListItem chatColor = new PluginListItem(this, chatColorConfig,
|
final PluginListItem chatColor = new PluginListItem(this, chatColorConfig,
|
||||||
configManager.getConfigDescriptor(chatColorConfig),
|
configManager.getConfigDescriptor(chatColorConfig),
|
||||||
CHAT_COLOR_PLUGIN, "Recolor chat text", "colour", "messages");
|
CHAT_COLOR_PLUGIN, "Recolor chat text", "colour", "messages");
|
||||||
chatColor.setPinned(pinnedPlugins.contains(CHAT_COLOR_PLUGIN));
|
chatColor.setPinned(pinnedPlugins.contains(CHAT_COLOR_PLUGIN));
|
||||||
pluginList.add(chatColor);
|
pluginList.add(chatColor);
|
||||||
|
|
||||||
@@ -421,7 +421,7 @@ public class ConfigPanel extends PluginPanel
|
|||||||
public void mouseClicked(MouseEvent e)
|
public void mouseClicked(MouseEvent e)
|
||||||
{
|
{
|
||||||
RuneliteColorPicker colorPicker = new RuneliteColorPicker(SwingUtilities.windowForComponent(ConfigPanel.this),
|
RuneliteColorPicker colorPicker = new RuneliteColorPicker(SwingUtilities.windowForComponent(ConfigPanel.this),
|
||||||
colorPickerBtn.getBackground(), cid.getItem().name(), cid.getAlpha() == null);
|
colorPickerBtn.getBackground(), cid.getItem().name(), cid.getAlpha() == null);
|
||||||
colorPicker.setLocation(getLocationOnScreen());
|
colorPicker.setLocation(getLocationOnScreen());
|
||||||
colorPicker.setOnColorChange(c ->
|
colorPicker.setOnColorChange(c ->
|
||||||
{
|
{
|
||||||
@@ -467,7 +467,7 @@ public class ConfigPanel extends PluginPanel
|
|||||||
heightSpinnerTextField.setColumns(4);
|
heightSpinnerTextField.setColumns(4);
|
||||||
|
|
||||||
ChangeListener listener = e ->
|
ChangeListener listener = e ->
|
||||||
configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), widthSpinner.getValue() + "x" + heightSpinner.getValue());
|
configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), widthSpinner.getValue() + "x" + heightSpinner.getValue());
|
||||||
|
|
||||||
widthSpinner.addChangeListener(listener);
|
widthSpinner.addChangeListener(listener);
|
||||||
heightSpinner.addChangeListener(listener);
|
heightSpinner.addChangeListener(listener);
|
||||||
@@ -512,8 +512,8 @@ public class ConfigPanel extends PluginPanel
|
|||||||
if (cid.getType() == Keybind.class || cid.getType() == ModifierlessKeybind.class)
|
if (cid.getType() == Keybind.class || cid.getType() == ModifierlessKeybind.class)
|
||||||
{
|
{
|
||||||
Keybind startingValue = configManager.getConfiguration(cd.getGroup().value(),
|
Keybind startingValue = configManager.getConfiguration(cd.getGroup().value(),
|
||||||
cid.getItem().keyName(),
|
cid.getItem().keyName(),
|
||||||
(Class<? extends Keybind>) cid.getType());
|
(Class<? extends Keybind>) cid.getType());
|
||||||
|
|
||||||
HotkeyButton button = new HotkeyButton(startingValue, cid.getType() == ModifierlessKeybind.class);
|
HotkeyButton button = new HotkeyButton(startingValue, cid.getType() == ModifierlessKeybind.class);
|
||||||
|
|
||||||
@@ -536,8 +536,8 @@ public class ConfigPanel extends PluginPanel
|
|||||||
resetButton.addActionListener((e) ->
|
resetButton.addActionListener((e) ->
|
||||||
{
|
{
|
||||||
final int result = JOptionPane.showOptionDialog(resetButton, "Are you sure you want to reset this plugin's configuration?",
|
final int result = JOptionPane.showOptionDialog(resetButton, "Are you sure you want to reset this plugin's configuration?",
|
||||||
"Are you sure?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE,
|
"Are you sure?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE,
|
||||||
null, new String[]{"Yes", "No"}, "No");
|
null, new String[]{"Yes", "No"}, "No");
|
||||||
|
|
||||||
if (result == JOptionPane.YES_OPTION)
|
if (result == JOptionPane.YES_OPTION)
|
||||||
{
|
{
|
||||||
@@ -564,8 +564,8 @@ public class ConfigPanel extends PluginPanel
|
|||||||
if (!Strings.isNullOrEmpty(configItem.warning()))
|
if (!Strings.isNullOrEmpty(configItem.warning()))
|
||||||
{
|
{
|
||||||
final int result = JOptionPane.showOptionDialog(component, configItem.warning(),
|
final int result = JOptionPane.showOptionDialog(component, configItem.warning(),
|
||||||
"Are you sure?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE,
|
"Are you sure?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE,
|
||||||
null, new String[]{"Yes", "No"}, "No");
|
null, new String[]{"Yes", "No"}, "No");
|
||||||
|
|
||||||
if (result != JOptionPane.YES_OPTION)
|
if (result != JOptionPane.YES_OPTION)
|
||||||
{
|
{
|
||||||
@@ -659,9 +659,9 @@ public class ConfigPanel extends PluginPanel
|
|||||||
void savePinnedPlugins()
|
void savePinnedPlugins()
|
||||||
{
|
{
|
||||||
final String value = pluginList.stream()
|
final String value = pluginList.stream()
|
||||||
.filter(PluginListItem::isPinned)
|
.filter(PluginListItem::isPinned)
|
||||||
.map(PluginListItem::getName)
|
.map(PluginListItem::getName)
|
||||||
.collect(Collectors.joining(","));
|
.collect(Collectors.joining(","));
|
||||||
|
|
||||||
configManager.setConfiguration(RUNELITE_GROUP_NAME, PINNED_PLUGINS_CONFIG_KEY, value);
|
configManager.setConfiguration(RUNELITE_GROUP_NAME, PINNED_PLUGINS_CONFIG_KEY, value);
|
||||||
}
|
}
|
||||||
@@ -704,4 +704,4 @@ public class ConfigPanel extends PluginPanel
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,17 +99,17 @@ class PluginListItem extends JPanel
|
|||||||
ON_STAR = new ImageIcon(onStar);
|
ON_STAR = new ImageIcon(onStar);
|
||||||
CONFIG_ICON_HOVER = new ImageIcon(ImageUtil.grayscaleOffset(configIcon, -100));
|
CONFIG_ICON_HOVER = new ImageIcon(ImageUtil.grayscaleOffset(configIcon, -100));
|
||||||
BufferedImage offSwitcherImage = ImageUtil.flipImage(
|
BufferedImage offSwitcherImage = ImageUtil.flipImage(
|
||||||
ImageUtil.grayscaleOffset(
|
ImageUtil.grayscaleOffset(
|
||||||
ImageUtil.grayscaleImage(onSwitcher),
|
ImageUtil.grayscaleImage(onSwitcher),
|
||||||
0.61f
|
0.61f
|
||||||
),
|
),
|
||||||
true,
|
true,
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
OFF_SWITCHER = new ImageIcon(offSwitcherImage);
|
OFF_SWITCHER = new ImageIcon(offSwitcherImage);
|
||||||
BufferedImage offStar = ImageUtil.grayscaleOffset(
|
BufferedImage offStar = ImageUtil.grayscaleOffset(
|
||||||
ImageUtil.grayscaleImage(onStar),
|
ImageUtil.grayscaleImage(onStar),
|
||||||
0.77f
|
0.77f
|
||||||
);
|
);
|
||||||
OFF_STAR = new ImageIcon(offStar);
|
OFF_STAR = new ImageIcon(offStar);
|
||||||
}
|
}
|
||||||
@@ -121,23 +121,23 @@ class PluginListItem extends JPanel
|
|||||||
* if there is no configuration associated with the plugin.
|
* if there is no configuration associated with the plugin.
|
||||||
*/
|
*/
|
||||||
PluginListItem(ConfigPanel configPanel, Plugin plugin, PluginDescriptor descriptor,
|
PluginListItem(ConfigPanel configPanel, Plugin plugin, PluginDescriptor descriptor,
|
||||||
@Nullable Config config, @Nullable ConfigDescriptor configDescriptor)
|
@Nullable Config config, @Nullable ConfigDescriptor configDescriptor)
|
||||||
{
|
{
|
||||||
this(configPanel, plugin, config, configDescriptor,
|
this(configPanel, plugin, config, configDescriptor,
|
||||||
descriptor.name(), descriptor.description(), descriptor.tags());
|
descriptor.name(), descriptor.description(), descriptor.tags());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new {@code PluginListItem} for a core configuration.
|
* Creates a new {@code PluginListItem} for a core configuration.
|
||||||
*/
|
*/
|
||||||
PluginListItem(ConfigPanel configPanel, Config config, ConfigDescriptor configDescriptor,
|
PluginListItem(ConfigPanel configPanel, Config config, ConfigDescriptor configDescriptor,
|
||||||
String name, String description, String... tags)
|
String name, String description, String... tags)
|
||||||
{
|
{
|
||||||
this(configPanel, null, config, configDescriptor, name, description, tags);
|
this(configPanel, null, config, configDescriptor, name, description, tags);
|
||||||
}
|
}
|
||||||
|
|
||||||
private PluginListItem(ConfigPanel configPanel, @Nullable Plugin plugin, @Nullable Config config,
|
private PluginListItem(ConfigPanel configPanel, @Nullable Plugin plugin, @Nullable Config config,
|
||||||
@Nullable ConfigDescriptor configDescriptor, String name, String description, String... tags)
|
@Nullable ConfigDescriptor configDescriptor, String name, String description, String... tags)
|
||||||
{
|
{
|
||||||
this.configPanel = configPanel;
|
this.configPanel = configPanel;
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
@@ -260,7 +260,7 @@ class PluginListItem extends JPanel
|
|||||||
for (String term : searchTerms)
|
for (String term : searchTerms)
|
||||||
{
|
{
|
||||||
if (keywords.stream().noneMatch((t) -> t.contains(term) ||
|
if (keywords.stream().noneMatch((t) -> t.contains(term) ||
|
||||||
DISTANCE.apply(t, term) > 0.9))
|
DISTANCE.apply(t, term) > 0.9))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,8 @@ public class InventoryTagsOverlay extends WidgetItemOverlay
|
|||||||
{
|
{
|
||||||
this.itemManager = itemManager;
|
this.itemManager = itemManager;
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
|
showOnEquipment();
|
||||||
|
showOnInventory();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -51,6 +51,8 @@ class ItemChargeOverlay extends WidgetItemOverlay
|
|||||||
{
|
{
|
||||||
this.itemChargePlugin = itemChargePlugin;
|
this.itemChargePlugin = itemChargePlugin;
|
||||||
this.config = config;
|
this.config = config;
|
||||||
|
showOnInventory();
|
||||||
|
showOnEquipment();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,284 +1,285 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
/*
|
||||||
* All rights reserved.
|
* 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:
|
* 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.
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
* list of conditions and the following disclaimer.
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
* and/or other materials provided with the distribution.
|
* 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
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* (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.menuentryswapper;
|
*/
|
||||||
|
package net.runelite.client.plugins.menuentryswapper;
|
||||||
import net.runelite.client.config.Config;
|
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.Config;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
|
import net.runelite.client.config.ConfigItem;
|
||||||
@ConfigGroup("menuentryswapper")
|
|
||||||
public interface MenuEntrySwapperConfig extends Config
|
@ConfigGroup("menuentryswapper")
|
||||||
{
|
public interface MenuEntrySwapperConfig extends Config
|
||||||
@ConfigItem(
|
{
|
||||||
position = -2,
|
@ConfigItem(
|
||||||
keyName = "shiftClickCustomization",
|
position = -2,
|
||||||
name = "Customizable shift-click",
|
keyName = "shiftClickCustomization",
|
||||||
description = "Allows customization of shift-clicks on items"
|
name = "Customizable shift-click",
|
||||||
)
|
description = "Allows customization of shift-clicks on items"
|
||||||
default boolean shiftClickCustomization()
|
)
|
||||||
{
|
default boolean shiftClickCustomization()
|
||||||
return true;
|
{
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapAdmire",
|
@ConfigItem(
|
||||||
name = "Admire",
|
keyName = "swapAdmire",
|
||||||
description = "Swap Admire with Teleport, Spellbook and Perks (max cape) for mounted skill capes."
|
name = "Admire",
|
||||||
)
|
description = "Swap Admire with Teleport, Spellbook and Perks (max cape) for mounted skill capes."
|
||||||
default boolean swapAdmire()
|
)
|
||||||
{
|
default boolean swapAdmire()
|
||||||
return true;
|
{
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapAssignment",
|
@ConfigItem(
|
||||||
name = "Assignment",
|
keyName = "swapAssignment",
|
||||||
description = "Swap Talk-to with Assignment for Slayer Masters. This will take priority over swapping Trade."
|
name = "Assignment",
|
||||||
)
|
description = "Swap Talk-to with Assignment for Slayer Masters. This will take priority over swapping Trade."
|
||||||
default boolean swapAssignment()
|
)
|
||||||
{
|
default boolean swapAssignment()
|
||||||
return true;
|
{
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapBanker",
|
@ConfigItem(
|
||||||
name = "Bank",
|
keyName = "swapBanker",
|
||||||
description = "Swap Talk-to with Bank on Bank NPC<br>Example: Banker"
|
name = "Bank",
|
||||||
)
|
description = "Swap Talk-to with Bank on Bank NPC<br>Example: Banker"
|
||||||
default boolean swapBank()
|
)
|
||||||
{
|
default boolean swapBank()
|
||||||
return true;
|
{
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapBirdhouseEmpty",
|
@ConfigItem(
|
||||||
name = "Birdhouse",
|
keyName = "swapBirdhouseEmpty",
|
||||||
description = "Swap Interact with Empty for birdhouses on Fossil Island"
|
name = "Birdhouse",
|
||||||
)
|
description = "Swap Interact with Empty for birdhouses on Fossil Island"
|
||||||
default boolean swapBirdhouseEmpty()
|
)
|
||||||
{
|
default boolean swapBirdhouseEmpty()
|
||||||
return true;
|
{
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapBones",
|
@ConfigItem(
|
||||||
name = "Bury",
|
keyName = "swapBones",
|
||||||
description = "Swap Bury with Use on Bones"
|
name = "Bury",
|
||||||
)
|
description = "Swap Bury with Use on Bones"
|
||||||
default boolean swapBones()
|
)
|
||||||
{
|
default boolean swapBones()
|
||||||
return false;
|
{
|
||||||
}
|
return false;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapContract",
|
@ConfigItem(
|
||||||
name = "Contract",
|
keyName = "swapContract",
|
||||||
description = "Swap Talk-to with Contract on Guildmaster Jane"
|
name = "Contract",
|
||||||
)
|
description = "Swap Talk-to with Contract on Guildmaster Jane"
|
||||||
default boolean swapContract()
|
)
|
||||||
{
|
default boolean swapContract()
|
||||||
return true;
|
{
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapChase",
|
@ConfigItem(
|
||||||
name = "Chase",
|
keyName = "swapChase",
|
||||||
description = "Allows to left click your cat to chase"
|
name = "Chase",
|
||||||
)
|
description = "Allows to left click your cat to chase"
|
||||||
default boolean swapChase()
|
)
|
||||||
{
|
default boolean swapChase()
|
||||||
return true;
|
{
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "claimSlime",
|
@ConfigItem(
|
||||||
name = "Claim Slime",
|
keyName = "claimSlime",
|
||||||
description = "Swap Talk-to with Claim Slime from Morytania diaries"
|
name = "Claim Slime",
|
||||||
)
|
description = "Swap Talk-to with Claim Slime from Morytania diaries"
|
||||||
default boolean claimSlime()
|
)
|
||||||
{
|
default boolean claimSlime()
|
||||||
return true;
|
{
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapDarkMage",
|
@ConfigItem(
|
||||||
name = "Repairs",
|
keyName = "swapDarkMage",
|
||||||
description = "Swap Talk-to with Repairs for Dark Mage"
|
name = "Repairs",
|
||||||
)
|
description = "Swap Talk-to with Repairs for Dark Mage"
|
||||||
default boolean swapDarkMage()
|
)
|
||||||
{
|
default boolean swapDarkMage()
|
||||||
return true;
|
{
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapDecant",
|
@ConfigItem(
|
||||||
name = "Decant",
|
keyName = "swapDecant",
|
||||||
description = "Swap Talk-to with Decant for Bob Barter and Murky Matt at the Grand Exchange."
|
name = "Decant",
|
||||||
)
|
description = "Swap Talk-to with Decant for Bob Barter and Murky Matt at the Grand Exchange."
|
||||||
default boolean swapDecant()
|
)
|
||||||
{
|
default boolean swapDecant()
|
||||||
return false;
|
{
|
||||||
}
|
return false;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapExchange",
|
@ConfigItem(
|
||||||
name = "Exchange",
|
keyName = "swapExchange",
|
||||||
description = "Swap Talk-to with Exchange on NPC<br>Example: Grand Exchange Clerk, Tool Leprechaun, Void Knight"
|
name = "Exchange",
|
||||||
)
|
description = "Swap Talk-to with Exchange on NPC<br>Example: Grand Exchange Clerk, Tool Leprechaun, Void Knight"
|
||||||
default boolean swapExchange()
|
)
|
||||||
{
|
default boolean swapExchange()
|
||||||
return true;
|
{
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapFairyRing",
|
@ConfigItem(
|
||||||
name = "Fairy ring",
|
keyName = "swapFairyRing",
|
||||||
description = "Swap Zanaris with Last-destination or Configure on Fairy rings"
|
name = "Fairy ring",
|
||||||
)
|
description = "Swap Zanaris with Last-destination or Configure on Fairy rings"
|
||||||
default FairyRingMode swapFairyRing()
|
)
|
||||||
{
|
default FairyRingMode swapFairyRing()
|
||||||
return FairyRingMode.LAST_DESTINATION;
|
{
|
||||||
}
|
return FairyRingMode.LAST_DESTINATION;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapHarpoon",
|
@ConfigItem(
|
||||||
name = "Harpoon",
|
keyName = "swapHarpoon",
|
||||||
description = "Swap Cage, Big Net with Harpoon on Fishing spot"
|
name = "Harpoon",
|
||||||
)
|
description = "Swap Cage, Big Net with Harpoon on Fishing spot"
|
||||||
default boolean swapHarpoon()
|
)
|
||||||
{
|
default boolean swapHarpoon()
|
||||||
return false;
|
{
|
||||||
}
|
return false;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapHomePortal",
|
@ConfigItem(
|
||||||
name = "Home",
|
keyName = "swapHomePortal",
|
||||||
description = "Swap Enter with Home or Build or Friend's house on Portal"
|
name = "Home",
|
||||||
)
|
description = "Swap Enter with Home or Build or Friend's house on Portal"
|
||||||
default HouseMode swapHomePortal()
|
)
|
||||||
{
|
default HouseMode swapHomePortal()
|
||||||
return HouseMode.HOME;
|
{
|
||||||
}
|
return HouseMode.HOME;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapPickpocket",
|
@ConfigItem(
|
||||||
name = "Pickpocket on H.A.M.",
|
keyName = "swapPickpocket",
|
||||||
description = "Swap Talk-to with Pickpocket on H.A.M members"
|
name = "Pickpocket on H.A.M.",
|
||||||
)
|
description = "Swap Talk-to with Pickpocket on H.A.M members"
|
||||||
default boolean swapPickpocket()
|
)
|
||||||
{
|
default boolean swapPickpocket()
|
||||||
return true;
|
{
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapPay",
|
@ConfigItem(
|
||||||
name = "Pay",
|
keyName = "swapPay",
|
||||||
description = "Swap Talk-to with Pay on NPC<br>Example: Elstan, Heskel, Fayeth"
|
name = "Pay",
|
||||||
)
|
description = "Swap Talk-to with Pay on NPC<br>Example: Elstan, Heskel, Fayeth"
|
||||||
default boolean swapPay()
|
)
|
||||||
{
|
default boolean swapPay()
|
||||||
return true;
|
{
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapPrivate",
|
@ConfigItem(
|
||||||
name = "Private",
|
keyName = "swapPrivate",
|
||||||
description = "Swap Shared with Private on the Chambers of Xeric storage units."
|
name = "Private",
|
||||||
)
|
description = "Swap Shared with Private on the Chambers of Xeric storage units."
|
||||||
default boolean swapPrivate()
|
)
|
||||||
{
|
default boolean swapPrivate()
|
||||||
return false;
|
{
|
||||||
}
|
return false;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapPick",
|
@ConfigItem(
|
||||||
name = "Pick",
|
keyName = "swapPick",
|
||||||
description = "Swap Pick with Pick-lots of the Gourd tree in the Chambers of Xeric"
|
name = "Pick",
|
||||||
)
|
description = "Swap Pick with Pick-lots of the Gourd tree in the Chambers of Xeric"
|
||||||
default boolean swapPick()
|
)
|
||||||
{
|
default boolean swapPick()
|
||||||
return false;
|
{
|
||||||
}
|
return false;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapQuick",
|
@ConfigItem(
|
||||||
name = "Quick Pass/Open/Start/Travel",
|
keyName = "swapQuick",
|
||||||
description = "Swap Pass with Quick-Pass, Open with Quick-Open, Ring with Quick-Start and Talk-to with Quick-Travel"
|
name = "Quick Pass/Open/Start/Travel",
|
||||||
)
|
description = "Swap Pass with Quick-Pass, Open with Quick-Open, Ring with Quick-Start and Talk-to with Quick-Travel"
|
||||||
default boolean swapQuick()
|
)
|
||||||
{
|
default boolean swapQuick()
|
||||||
return true;
|
{
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapBoxTrap",
|
@ConfigItem(
|
||||||
name = "Reset",
|
keyName = "swapBoxTrap",
|
||||||
description = "Swap Check with Reset on box trap"
|
name = "Reset",
|
||||||
)
|
description = "Swap Check with Reset on box trap"
|
||||||
default boolean swapBoxTrap()
|
)
|
||||||
{
|
default boolean swapBoxTrap()
|
||||||
return true;
|
{
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapTeleportItem",
|
@ConfigItem(
|
||||||
name = "Teleport item",
|
keyName = "swapTeleportItem",
|
||||||
description = "Swap Wear, Wield with Rub, Teleport on teleport item<br>Example: Amulet of glory, Explorer's ring, Chronicle"
|
name = "Teleport item",
|
||||||
)
|
description = "Swap Wear, Wield with Rub, Teleport on teleport item<br>Example: Amulet of glory, Explorer's ring, Chronicle"
|
||||||
default boolean swapTeleportItem()
|
)
|
||||||
{
|
default boolean swapTeleportItem()
|
||||||
return false;
|
{
|
||||||
}
|
return false;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapAbyssTeleport",
|
@ConfigItem(
|
||||||
name = "Teleport to Abyss",
|
keyName = "swapAbyssTeleport",
|
||||||
description = "Swap Talk-to with Teleport for the Mage of Zamorak"
|
name = "Teleport to Abyss",
|
||||||
)
|
description = "Swap Talk-to with Teleport for the Mage of Zamorak"
|
||||||
default boolean swapAbyssTeleport()
|
)
|
||||||
{
|
default boolean swapAbyssTeleport()
|
||||||
return true;
|
{
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapTrade",
|
@ConfigItem(
|
||||||
name = "Trade",
|
keyName = "swapTrade",
|
||||||
description = "Swap Talk-to with Trade on NPC<br>Example: Shop keeper, Shop assistant"
|
name = "Trade",
|
||||||
)
|
description = "Swap Talk-to with Trade on NPC<br>Example: Shop keeper, Shop assistant"
|
||||||
default boolean swapTrade()
|
)
|
||||||
{
|
default boolean swapTrade()
|
||||||
return true;
|
{
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
@ConfigItem(
|
|
||||||
keyName = "swapTravel",
|
@ConfigItem(
|
||||||
name = "Travel",
|
keyName = "swapTravel",
|
||||||
description = "Swap Talk-to with Travel, Take-boat, Pay-fare, Charter on NPC<br>Example: Squire, Monk of Entrana, Customs officer, Trader Crewmember"
|
name = "Travel",
|
||||||
)
|
description = "Swap Talk-to with Travel, Take-boat, Pay-fare, Charter on NPC<br>Example: Squire, Monk of Entrana, Customs officer, Trader Crewmember"
|
||||||
default boolean swapTravel()
|
)
|
||||||
{
|
default boolean swapTravel()
|
||||||
return true;
|
{
|
||||||
}
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
@@ -69,6 +69,8 @@ public class RunepouchOverlay extends WidgetItemOverlay
|
|||||||
this.tooltipManager = tooltipManager;
|
this.tooltipManager = tooltipManager;
|
||||||
this.client = client;
|
this.client = client;
|
||||||
this.config = config;
|
this.config = config;
|
||||||
|
showOnInventory();
|
||||||
|
showOnBank();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -87,6 +87,8 @@ class SlayerOverlay extends WidgetItemOverlay
|
|||||||
{
|
{
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
this.config = config;
|
this.config = config;
|
||||||
|
showOnInventory();
|
||||||
|
showOnEquipment();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -46,7 +46,10 @@ enum QuestStartLocation
|
|||||||
THE_RESTLESS_GHOST("The Restless Ghost", new WorldPoint(3240, 3210, 0)),
|
THE_RESTLESS_GHOST("The Restless Ghost", new WorldPoint(3240, 3210, 0)),
|
||||||
RUNE_MYSTERIES("Rune Mysteries", new WorldPoint(3210, 3220, 0)),
|
RUNE_MYSTERIES("Rune Mysteries", new WorldPoint(3210, 3220, 0)),
|
||||||
SHEEP_SHEARER("Sheep Shearer", new WorldPoint(3190, 3272, 0)),
|
SHEEP_SHEARER("Sheep Shearer", new WorldPoint(3190, 3272, 0)),
|
||||||
SHIELD_OF_ARRAV("Shield of Arrav", new WorldPoint(3208, 3495, 0)),
|
|
||||||
|
SHIELD_OF_ARRAV_PHOENIX_GANG("Shield of Arrav (Phoenix Gang)", new WorldPoint(3208, 3495, 0)),
|
||||||
|
SHIELD_OF_ARRAV_BLACK_ARM_GANG("Shield of Arrav (Black Arm Gang)", new WorldPoint(3208, 3392, 0)),
|
||||||
|
|
||||||
VAMPIRE_SLAYER("Vampire Slayer", new WorldPoint(3096, 3266, 0)),
|
VAMPIRE_SLAYER("Vampire Slayer", new WorldPoint(3096, 3266, 0)),
|
||||||
WITCHS_POTION("Witch's Potion", new WorldPoint(2967, 3203, 0)),
|
WITCHS_POTION("Witch's Potion", new WorldPoint(2967, 3203, 0)),
|
||||||
X_MARKS_THE_SPOT("X Marks the Spot", new WorldPoint(3227, 3242, 0)),
|
X_MARKS_THE_SPOT("X Marks the Spot", new WorldPoint(3227, 3242, 0)),
|
||||||
|
|||||||
@@ -26,15 +26,33 @@ package net.runelite.client.ui.overlay;
|
|||||||
|
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
import net.runelite.api.widgets.Widget;
|
||||||
|
import static net.runelite.api.widgets.WidgetID.BANK_GROUP_ID;
|
||||||
|
import static net.runelite.api.widgets.WidgetID.BANK_INVENTORY_GROUP_ID;
|
||||||
|
import static net.runelite.api.widgets.WidgetID.DEPOSIT_BOX_GROUP_ID;
|
||||||
|
import static net.runelite.api.widgets.WidgetID.EQUIPMENT_GROUP_ID;
|
||||||
|
import static net.runelite.api.widgets.WidgetID.EQUIPMENT_INVENTORY_GROUP_ID;
|
||||||
|
import static net.runelite.api.widgets.WidgetID.GRAND_EXCHANGE_INVENTORY_GROUP_ID;
|
||||||
|
import static net.runelite.api.widgets.WidgetID.GUIDE_PRICES_INVENTORY_GROUP_ID;
|
||||||
|
import static net.runelite.api.widgets.WidgetID.INVENTORY_GROUP_ID;
|
||||||
|
import static net.runelite.api.widgets.WidgetID.SHOP_INVENTORY_GROUP_ID;
|
||||||
|
import static net.runelite.api.widgets.WidgetInfo.TO_GROUP;
|
||||||
import net.runelite.api.widgets.WidgetItem;
|
import net.runelite.api.widgets.WidgetItem;
|
||||||
|
|
||||||
public abstract class WidgetItemOverlay extends Overlay
|
public abstract class WidgetItemOverlay extends Overlay
|
||||||
{
|
{
|
||||||
@Setter(AccessLevel.PACKAGE)
|
@Setter(AccessLevel.PACKAGE)
|
||||||
private OverlayManager overlayManager;
|
private OverlayManager overlayManager;
|
||||||
|
/**
|
||||||
|
* Interfaces to draw overlay over.
|
||||||
|
*/
|
||||||
|
private final Set<Integer> interfaceGroups = new HashSet<>();
|
||||||
|
|
||||||
protected WidgetItemOverlay()
|
protected WidgetItemOverlay()
|
||||||
{
|
{
|
||||||
@@ -49,13 +67,49 @@ public abstract class WidgetItemOverlay extends Overlay
|
|||||||
public Dimension render(Graphics2D graphics)
|
public Dimension render(Graphics2D graphics)
|
||||||
{
|
{
|
||||||
final List<WidgetItem> itemWidgets = overlayManager.getItemWidgets();
|
final List<WidgetItem> itemWidgets = overlayManager.getItemWidgets();
|
||||||
for (WidgetItem widget : itemWidgets)
|
for (WidgetItem widgetItem : itemWidgets)
|
||||||
{
|
{
|
||||||
renderItemOverlay(graphics, widget.getId(), widget);
|
Widget widget = widgetItem.getWidget();
|
||||||
|
int interfaceGroup = TO_GROUP(widget.getId());
|
||||||
|
|
||||||
|
// Don't draw if this widget isn't one of the allowed
|
||||||
|
if (!interfaceGroups.contains(interfaceGroup))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
renderItemOverlay(graphics, widgetItem.getId(), widgetItem);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void showOnInventory()
|
||||||
|
{
|
||||||
|
showOnInterfaces(
|
||||||
|
DEPOSIT_BOX_GROUP_ID,
|
||||||
|
BANK_INVENTORY_GROUP_ID,
|
||||||
|
SHOP_INVENTORY_GROUP_ID,
|
||||||
|
GRAND_EXCHANGE_INVENTORY_GROUP_ID,
|
||||||
|
GUIDE_PRICES_INVENTORY_GROUP_ID,
|
||||||
|
EQUIPMENT_INVENTORY_GROUP_ID,
|
||||||
|
INVENTORY_GROUP_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void showOnBank()
|
||||||
|
{
|
||||||
|
showOnInterfaces(BANK_GROUP_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void showOnEquipment()
|
||||||
|
{
|
||||||
|
showOnInterfaces(EQUIPMENT_GROUP_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void showOnInterfaces(int... ids)
|
||||||
|
{
|
||||||
|
Arrays.stream(ids).forEach(interfaceGroups::add);
|
||||||
|
}
|
||||||
|
|
||||||
// Don't allow setting position, priority, or layer
|
// Don't allow setting position, priority, or layer
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1335,7 +1335,7 @@ public abstract class RSClientMixin implements RSClient
|
|||||||
for (Widget rlWidget : widgets)
|
for (Widget rlWidget : widgets)
|
||||||
{
|
{
|
||||||
RSWidget widget = (RSWidget) rlWidget;
|
RSWidget widget = (RSWidget) rlWidget;
|
||||||
if (widget == null || widget.getRSParentId() != parentId)
|
if (widget == null || widget.getRSParentId() != parentId || widget.isSelfHidden())
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -1355,7 +1355,7 @@ public abstract class RSClientMixin implements RSClient
|
|||||||
{
|
{
|
||||||
if (renderX >= minX && renderX <= maxX && renderY >= minY && renderY <= maxY)
|
if (renderX >= minX && renderX <= maxX && renderY >= minY && renderY <= maxY)
|
||||||
{
|
{
|
||||||
WidgetItem widgetItem = new WidgetItem(widget.getItemId(), widget.getItemQuantity(), -1, widget.getBounds());
|
WidgetItem widgetItem = new WidgetItem(widget.getItemId(), widget.getItemQuantity(), -1, widget.getBounds(), widget);
|
||||||
callbacks.drawItem(widget.getItemId(), widgetItem);
|
callbacks.drawItem(widget.getItemId(), widgetItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -300,7 +300,7 @@ public abstract class RSWidgetMixin implements RSWidget
|
|||||||
int itemY = widgetCanvasLocation.getY() + ((ITEM_SLOT_SIZE + yPitch) * row);
|
int itemY = widgetCanvasLocation.getY() + ((ITEM_SLOT_SIZE + yPitch) * row);
|
||||||
|
|
||||||
Rectangle bounds = new Rectangle(itemX - 1, itemY - 1, ITEM_SLOT_SIZE, ITEM_SLOT_SIZE);
|
Rectangle bounds = new Rectangle(itemX - 1, itemY - 1, ITEM_SLOT_SIZE, ITEM_SLOT_SIZE);
|
||||||
return new WidgetItem(itemId - 1, itemQuantity, index, bounds);
|
return new WidgetItem(itemId - 1, itemQuantity, index, bounds, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
|
|||||||
Reference in New Issue
Block a user