runelite-client: add anti drag plugin

This commit is contained in:
Dennis
2018-05-08 22:46:41 +02:00
committed by Adam
parent 1044781d68
commit 035ea6af41
5 changed files with 229 additions and 0 deletions

View File

@@ -410,4 +410,6 @@ public interface Client extends GameEngine
int getTickCount();
void setTickCount(int tickCount);
void setInventoryDragDelay(int delay);
}

View File

@@ -0,0 +1,66 @@
/*
* Copyright (c) 2018, DennisDeV <https://github.com/DevDennis>
* 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.antidrag;
import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem;
@ConfigGroup(
keyName = AntiDragPlugin.CONFIG_GROUP,
name = "Anti Drag",
description = "Configuration for the anti drag plugin"
)
public interface AntiDragConfig extends Config
{
@ConfigItem(
keyName = "dragDelay",
name = "Drag Delay",
description = "Configures the inventory drag delay in client ticks (20ms)",
position = 1
)
default int dragDelay()
{
return 600 / 20; // one game tick
}
@ConfigItem(
keyName = "dragDelay",
name = "",
description = ""
)
void dragDelay(int delay);
@ConfigItem(
keyName = "onShiftOnly",
name = "On Shift Only",
description = "Configures whether to only adjust the delay while holding shift",
position = 2
)
default boolean onShiftOnly()
{
return true;
}
}

View File

@@ -0,0 +1,120 @@
/*
* Copyright (c) 2018, DennisDeV <https://github.com/DevDennis>
* 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.antidrag;
import com.google.common.eventbus.Subscribe;
import com.google.inject.Provides;
import net.runelite.api.Client;
import net.runelite.api.events.ConfigChanged;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.input.KeyListener;
import net.runelite.client.input.KeyManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.event.KeyEvent;
@PluginDescriptor(
name = "Anti Drag",
enabledByDefault = false
)
public class AntiDragPlugin extends Plugin implements KeyListener
{
static final String CONFIG_GROUP = "antiDrag";
static final int DEFAULT_DELAY = 5;
@Inject
private Client client;
@Inject
private AntiDragConfig config;
@Inject
private KeyManager keyManager;
@Provides
AntiDragConfig getConfig(ConfigManager configManager)
{
return configManager.getConfig(AntiDragConfig.class);
}
@Override
protected void startUp() throws Exception
{
if (!config.onShiftOnly())
{
client.setInventoryDragDelay(config.dragDelay());
}
keyManager.registerKeyListener(this);
}
@Override
protected void shutDown() throws Exception
{
client.setInventoryDragDelay(DEFAULT_DELAY);
keyManager.unregisterKeyListener(this);
}
@Override
public void keyTyped(KeyEvent e)
{
}
@Override
public void keyPressed(KeyEvent e)
{
if (config.onShiftOnly() && e.getKeyCode() == KeyEvent.VK_SHIFT)
{
client.setInventoryDragDelay(config.dragDelay());
}
}
@Override
public void keyReleased(KeyEvent e)
{
if (config.onShiftOnly() && e.getKeyCode() == KeyEvent.VK_SHIFT)
{
client.setInventoryDragDelay(DEFAULT_DELAY);
}
}
@Subscribe
public void onConfigChanged(ConfigChanged event)
{
if (event.getGroup().equals(CONFIG_GROUP))
{
if (config.onShiftOnly())
{
client.setInventoryDragDelay(DEFAULT_DELAY);
}
else
{
client.setInventoryDragDelay(config.dragDelay());
}
}
}
}

View File

@@ -123,6 +123,12 @@ public abstract class RSClientMixin implements RSClient
@Inject
private static RSNPC[] oldNpcs = new RSNPC[32768];
@Inject
private static int itemPressedDurationBuffer;
@Inject
private static int inventoryDragDelay;
@Inject
@Override
public boolean isInterpolatePlayerAnimations()
@@ -165,6 +171,13 @@ public abstract class RSClientMixin implements RSClient
interpolateObjectAnimations = interpolate;
}
@Inject
@Override
public void setInventoryDragDelay(int delay)
{
inventoryDragDelay = delay;
}
@Inject
@Override
public AccountType getAccountType()
@@ -633,6 +646,28 @@ public abstract class RSClientMixin implements RSClient
}
}
@FieldHook("itemPressedDuration")
@Inject
public static void itemPressedDurationChanged(int idx)
{
if (client.getItemPressedDuration() > 0)
{
itemPressedDurationBuffer++;
if (itemPressedDurationBuffer >= inventoryDragDelay)
{
client.setItemPressedDuration(itemPressedDurationBuffer);
}
else
{
client.setItemPressedDuration(0);
}
}
else
{
itemPressedDurationBuffer = 0;
}
}
@FieldHook("skillExperiences")
@Inject
public static void experiencedChanged(int idx)

View File

@@ -612,4 +612,10 @@ public interface RSClient extends RSGameEngine, Client
@Import("isDynamicRegion")
@Override
boolean isInInstancedRegion();
@Import("itemPressedDuration")
int getItemPressedDuration();
@Import("itemPressedDuration")
void setItemPressedDuration(int duration);
}