clanchat plugin: add option to confirm kicks

This commit is contained in:
TheStonedTurtle
2019-12-13 07:50:10 -08:00
committed by Adam
parent dddd76fb8d
commit a3ef09b433
5 changed files with 106 additions and 6 deletions

View File

@@ -137,4 +137,15 @@ public interface ClanChatConfig extends Config
{
return false;
}
@ConfigItem(
keyName = "confirmKicks",
name = "Confirm Kicks",
description = "Shows a chat prompt to confirm kicks",
position = 9
)
default boolean confirmKicks()
{
return false;
}
}

View File

@@ -28,6 +28,7 @@ package net.runelite.client.plugins.clanchat;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.util.concurrent.Runnables;
import com.google.inject.Provides;
import java.awt.Color;
import java.awt.image.BufferedImage;
@@ -72,6 +73,7 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.game.ClanManager;
import net.runelite.client.game.SpriteManager;
import net.runelite.client.game.chatbox.ChatboxPanelManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import static net.runelite.client.ui.JagexColors.CHAT_CLAN_NAME_OPAQUE_BACKGROUND;
@@ -112,6 +114,9 @@ public class ClanChatPlugin extends Plugin
@Inject
private ClientThread clientThread;
@Inject
private ChatboxPanelManager chatboxPanelManager;
private List<String> chats = new ArrayList<>();
private List<Player> clanMembers = new ArrayList<>();
private ClanChatIndicator clanMemberCounter;
@@ -122,6 +127,8 @@ public class ClanChatPlugin extends Plugin
private Map<String, ClanMemberActivity> activityBuffer = new HashMap<>();
private int clanJoinedTick;
private boolean kickConfirmed = false;
@Provides
ClanChatConfig getConfig(ConfigManager configManager)
{
@@ -504,14 +511,37 @@ public class ClanChatPlugin extends Plugin
@Subscribe
public void onScriptCallbackEvent(ScriptCallbackEvent scriptCallbackEvent)
{
if (!scriptCallbackEvent.getEventName().equalsIgnoreCase("clanchatInput"))
switch (scriptCallbackEvent.getEventName())
{
return;
}
case "clanchatInput":
{
final int[] intStack = client.getIntStack();
final int size = client.getIntStackSize();
intStack[size - 1] = config.clanTabChat() ? 1 : 0;
break;
}
case "confirmClanKick":
{
if (!config.confirmKicks() || kickConfirmed)
{
break;
}
final int[] intStack = client.getIntStack();
final int size = client.getIntStackSize();
intStack[size - 1] = config.clanTabChat() ? 1 : 0;
// Set a flag so the script doesn't instantly kick them
final int[] intStack = client.getIntStack();
final int size = client.getIntStackSize();
intStack[size - 1] = 1;
// Get name of player we are trying to kick
final String[] stringStack = client.getStringStack();
final int stringSize = client.getStringStackSize();
final String kickPlayerName = stringStack[stringSize - 1];
// Show a chatbox panel confirming the kick
clientThread.invokeLater(() -> confirmKickPlayer(kickPlayerName));
break;
}
}
}
int getClanAmount()
@@ -623,4 +653,19 @@ public class ClanChatPlugin extends Plugin
clanMemberCounter = new ClanChatIndicator(image, this);
infoBoxManager.addInfoBox(clanMemberCounter);
}
private void confirmKickPlayer(final String kickPlayerName)
{
chatboxPanelManager.openTextMenuInput("Attempting to kick: " + kickPlayerName)
.option("1. Confirm kick", () ->
clientThread.invoke(() ->
{
kickConfirmed = true;
client.runScript(ScriptID.CLAN_SEND_KICK, kickPlayerName);
kickConfirmed = false;
})
)
.option("2. Cancel", Runnables::doNothing)
.build();
}
}