Plugin organization and addition (#198)

* Update TickCounterPlugin.java

- Update plugin for PVP (Main use)

* Update MiningPlugin.java

- Added proper plugin "type"

* Add files via upload

- Add Slayermusiq1 quest guide right click option by request
This commit is contained in:
Jonathan
2019-05-07 02:08:18 -06:00
committed by Kyleeld
parent 7d2e0af6c1
commit 86416ab7f3
4 changed files with 364 additions and 2 deletions

View File

@@ -37,10 +37,10 @@ import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.plugins.mining.MiningConfig;
import net.runelite.client.task.Schedule;
import net.runelite.client.ui.overlay.OverlayManager;
import javax.inject.Inject;
import java.time.temporal.ChronoUnit;
import java.util.HashSet;
@@ -52,6 +52,7 @@ import static net.runelite.api.ObjectID.*;
name = "Mining",
description = "Show helpful information about Mining",
tags = {"mining", "skilling", "overlay"},
type = PluginType.UTILITY,
enabledByDefault = false
)
public class MiningPlugin extends Plugin

View File

@@ -0,0 +1,207 @@
package net.runelite.client.plugins.slayermusiq;
import net.runelite.client.util.LinkBrowser;
import net.runelite.api.ChatMessageType;
import net.runelite.api.events.ChatMessage;
import net.runelite.client.chat.ChatColorType;
import net.runelite.client.chat.ChatMessageBuilder;
import net.runelite.client.chat.ChatMessageManager;
import net.runelite.client.chat.QueuedMessage;
public class QuestGuideLinks {
private static final Link[] QUEST_GUIDE_LINKS = {
// Free Quests
new Link("Cook's Assistant", "https://www.youtube.com/watch?v=ehmtDRelj3c"),
new Link("Romeo & Juliet", "https://www.youtube.com/watch?v=rH_biWSNWVY"),
new Link("Demon Slayer", "https://www.youtube.com/watch?v=hgACrzJSiQk"),
new Link("Shield of Arrav", "https://www.youtube.com/watch?v=a_imLDKUdzg"),
new Link("Sheep Shearer", "https://www.youtube.com/watch?v=XFG3aNwK68s"),
new Link("The Restless Ghost", "https://www.youtube.com/watch?v=UkWNcsG_pXM"),
new Link("Ernest the Chicken", "https://www.youtube.com/watch?v=cq8NIVhSqh4"),
new Link("Vampire Slayer", "https://www.youtube.com/watch?v=FcEuxsDJWCU"),
new Link("Imp Catcher", "https://www.youtube.com/watch?v=LHgnl0FbOzk"),
new Link("Prince Ali Rescue", "https://www.youtube.com/watch?v=hrSPl1GfFaw"),
new Link("Doric's Quest", "https://www.youtube.com/watch?v=5TYyxHU27a4"),
new Link("Black Knights' Fortress", "https://www.youtube.com/watch?v=aekoZi3f9cU"),
new Link("Witch's Potion", "https://www.youtube.com/watch?v=XV4i5sPUvXo"),
new Link("The Knight's Sword", "https://www.youtube.com/watch?v=UkBWaI0rOqE"),
new Link("Goblin Diplomacy", "https://www.youtube.com/watch?v=P9BKOb_dLoY"),
new Link("Pirate's Treasure", "https://www.youtube.com/watch?v=zcD87PQW8Qk"),
new Link("Dragon Slayer", "https://www.youtube.com/watch?v=bMtCjlFOaBI"),
new Link("Rune Mysteries", "https://www.youtube.com/watch?v=l8ZhaN8uoS0"),
new Link("Misthalin Mystery", "https://www.youtube.com/watch?v=QlFqVAobAlQ"),
new Link("The Corsair Curse", "https://www.youtube.com/watch?v=wi7mUAHExz4"),
new Link("X Marks the Spot", "https://www.youtube.com/watch?v=GhRgvEG5jxQ"),
// Members Quests
new Link("Druidic Ritual", "https://www.youtube.com/watch?v=QIfU6HSmH4w"),
new Link("Lost City", "https://www.youtube.com/watch?v=T-kQNUSjFZI"),
new Link("Witch's House", "https://www.youtube.com/watch?v=TLsg7Wa-LUA"),
new Link("Merlin's Crystal", "https://www.youtube.com/watch?v=ESX-qriNtCE"),
new Link("Heroes' Quest", "https://www.youtube.com/watch?v=hK2N0WLKviE"),
new Link("Scorpion Catcher", "https://www.youtube.com/watch?v=xpqdec7_ZWg"),
new Link("Family Crest", "https://www.youtube.com/watch?v=0mk_Cgjr738"),
new Link("Monk's Friend", "https://www.youtube.com/watch?v=avi4y4G3Hcw"),
new Link("Temple of Ikov", "https://www.youtube.com/watch?v=5K7jDgr_4Z4"),
new Link("Clock Tower", "https://www.youtube.com/watch?v=GUCkkQFzyDw"),
new Link("Holy Grail", "https://www.youtube.com/watch?v=cgXoV1QlYco"),
new Link("Tree Gnome Village", "https://www.youtube.com/watch?v=T6Su__yuyRI"),
new Link("Fight Arena", "https://www.youtube.com/watch?v=4Nqjep2E5pw"),
new Link("Hazeel Cult", "https://www.youtube.com/watch?v=2_fhFJW6cNY"),
new Link("Sheep Herder", "https://www.youtube.com/watch?v=akC9FeYCG1Q"),
new Link("Plague City", "https://www.youtube.com/watch?v=Hf2wQQZL5CU"),
new Link("Waterfall Quest", "https://www.youtube.com/watch?v=xWBSnGkQTi4"),
new Link("Jungle Potion", "https://www.youtube.com/watch?v=xqLKsFz08As"),
new Link("The Grand Tree", "https://www.youtube.com/watch?v=N5e_Jus_E-Y"),
new Link("Underground Pass", "https://www.youtube.com/watch?v=5klGJg1wY8k"),
new Link("Observatory Quest", "https://www.youtube.com/watch?v=yxa9B6svv44"),
new Link("Watchtower", "https://www.youtube.com/watch?v=Vb10GoYP7FE"),
new Link("Dwarf Cannon", "https://www.youtube.com/watch?v=pROFg5jcCR0"),
new Link("Murder Mystery", "https://www.youtube.com/watch?v=P1IDGCA2f9o"),
new Link("The Dig Site", "https://www.youtube.com/watch?v=TOdcWV4MzuU"),
new Link("Gertrude's Cat", "https://www.youtube.com/watch?v=g7S09wA8EAY"),
new Link("Legends' Quest", "https://www.youtube.com/watch?v=Lid8enDEF_U"),
new Link("Death Plateau", "https://www.youtube.com/watch?v=SIQFmTvnb6w"),
new Link("Big Chompy Bird Hunting", "https://www.youtube.com/watch?v=s2fytMOHJXI"),
new Link("Elemental Workshop I", "https://www.youtube.com/watch?v=tbZD2RDqvfQ"),
new Link("Nature Spirit", "https://www.youtube.com/watch?v=Enf8vUWb5o0"),
new Link("Priest in Peril", "https://www.youtube.com/watch?v=fyYri6wUQIU"),
new Link("Regicide", "https://www.youtube.com/watch?v=KkWM-ok3C4Y"),
new Link("Tai Bwo Wannai Trio", "https://www.youtube.com/watch?v=Mdair5mvZL0"),
new Link("Troll Stronghold", "https://www.youtube.com/watch?v=zqmUs-f3AKA"),
new Link("Horror from the Deep", "https://www.youtube.com/watch?v=9htK8kb6DR8"),
new Link("Throne of Miscellania", "https://www.youtube.com/watch?v=fzGMnv2skBE"),
new Link("Monkey Madness I", "https://www.youtube.com/watch?v=VnoRfeBnPFA"),
new Link("Haunted Mine", "https://www.youtube.com/watch?v=cIc6loJHm9Q"),
new Link("Troll Romance", "https://www.youtube.com/watch?v=j2zifZVu7Gc"),
new Link("In Search of the Myreque", "https://www.youtube.com/watch?v=5nmYFHdAXAQ"),
new Link("Creature of Fenkenstrain", "https://www.youtube.com/watch?v=swqUVIs7B7M"),
new Link("Roving Elves", "https://www.youtube.com/watch?v=J3qf9DnT9cA"),
new Link("One Small Favour", "https://www.youtube.com/watch?v=ix_0-W3e9ps"),
new Link("Mountain Daughter", "https://www.youtube.com/watch?v=HETx_LX7aiY"),
new Link("Between a Rock...", "https://www.youtube.com/watch?v=cB11I45EGgA"),
new Link("The Golem", "https://www.youtube.com/watch?v=qpEHpiO6lLw"),
new Link("Desert Treasure", "https://www.youtube.com/watch?v=BuIqulIsICo"),
new Link("Icthlarin's Little Helper", "https://www.youtube.com/watch?v=wpNKm8_vUOM"),
new Link("Tears of Guthix", "https://www.youtube.com/watch?v=EMonDNI0uPk"),
new Link("The Lost Tribe", "https://www.youtube.com/watch?v=spZErjRnCdc"),
new Link("The Giant Dwarf", "https://www.youtube.com/watch?v=Z7PsGpOYgxY"),
new Link("Recruitment Drive", "https://www.youtube.com/watch?v=sOuzMpA_xtw"),
new Link("Mourning's Ends Part I", "https://www.youtube.com/watch?v=vuzAdk-h3c0"),
new Link("Garden of Tranquillity", "https://www.youtube.com/watch?v=7hbCzYnLCsQ"),
new Link("A Tail of Two Cats", "https://www.youtube.com/watch?v=SgN9Yw_YqHk"),
new Link("Wanted!", "https://www.youtube.com/watch?v=ZHZAKDCfXGs"),
new Link("Mourning's Ends Part II", "https://www.youtube.com/watch?v=FK5sLogGbU8"),
new Link("Rum Deal", "https://www.youtube.com/watch?v=I14CIu5x2S8"),
new Link("Shadow of the Storm", "https://www.youtube.com/watch?v=5ZvWd3XCQjI"),
new Link("Ratcatchers", "https://www.youtube.com/watch?v=s7G22fEuhTc"),
new Link("Spirits of the Elid", "https://www.youtube.com/watch?v=A1zAX55hZC0"),
new Link("Devious Minds", "https://www.youtube.com/watch?v=_UtlFmrWt1w"),
new Link("Enakhra's Lament", "https://www.youtube.com/watch?v=Y3kEIPYVaVE"),
new Link("Cabin Fever", "https://www.youtube.com/watch?v=k5DtxNXhOaw"),
new Link("Fairytale I - Growing Pains", "https://www.youtube.com/watch?v=cfGI9qFOmsg"),
new Link("Recipe for Disaster", "https://www.youtube.com/watch?v=hrAyyInJaTA"),
new Link("In Aid of the Myreque", "https://www.youtube.com/watch?v=O2Ru2NmuTaA"),
new Link("A Soul's Bane", "https://www.youtube.com/watch?v=dp8dp79qp6I"),
new Link("Rag and Bone Man", "https://www.youtube.com/watch?v=3owXSeN56W8"),
new Link("Swan Song", "https://www.youtube.com/watch?v=IpmERThXv2g"),
new Link("Royal Trouble", "https://www.youtube.com/watch?v=bVWUlKzNXEg"),
new Link("Death to the Dorgeshuun", "https://www.youtube.com/watch?v=2XJHuLhig98"),
new Link("Fairytale II - Cure a Queen", "https://www.youtube.com/watch?v=P6KkRk4_e3U"),
new Link("Lunar Diplomacy", "https://www.youtube.com/watch?v=vmeSKb7IBgQ"),
new Link("The Eyes of Glouphrie", "https://www.youtube.com/watch?v=0YCPwmZcxKA"),
new Link("Darkness of Hallowvale", "https://www.youtube.com/watch?v=QziKl99qdtU"),
new Link("Elemental Workshop II", "https://www.youtube.com/watch?v=Bb4E7ecIgv0"),
new Link("My Arm's Big Adventure", "https://www.youtube.com/watch?v=xa1KWOewgYA"),
new Link("Enlightened Journey", "https://www.youtube.com/watch?v=XAPthC8d7k0"),
new Link("Eagles' Peak", "https://www.youtube.com/watch?v=KDxIrrwXp7U"),
new Link("Animal Magnetism", "https://www.youtube.com/watch?v=kUyjXA7TaFU"),
new Link("Contact!", "https://www.youtube.com/watch?v=czn-yWABBWs"),
new Link("Cold War", "https://www.youtube.com/watch?v=0m1KpP-qKWI"),
new Link("The Fremennik Isles", "https://www.youtube.com/watch?v=EvxhiOWmraY"),
new Link("The Great Brain Robbery", "https://www.youtube.com/watch?v=ImHFASuNUN8"),
new Link("What Lies Below", "https://www.youtube.com/watch?v=f_9nVMGTtuo"),
new Link("Olaf's Quest", "https://www.youtube.com/watch?v=mXV5bM1NFMM"),
new Link("Dream Mentor", "https://www.youtube.com/watch?v=XDLUu0Kf0sE"),
new Link("Grim Tales", "https://www.youtube.com/watch?v=dFB0Q6v8Apw"),
new Link("King's Ransom", "https://www.youtube.com/watch?v=UJz9ZfF3uCY"),
new Link("Shilo Village", "https://www.youtube.com/watch?v=bDvBi8FT-QI"),
new Link("Biohazard", "https://www.youtube.com/watch?v=n9k87LwOGMk"),
new Link("Tower of Life", "https://www.youtube.com/watch?v=KReMcWpeY3k"),
new Link("Rag and Bone Man II", "https://www.youtube.com/watch?v=KGdHiDDUX_U"),
new Link("Zogre Flesh Eaters", "https://www.youtube.com/watch?v=vzm4949kXP4"),
new Link("Monkey Madness II", "https://www.youtube.com/watch?v=ykE5LbjABaI"),
new Link("Client of Kourend", "https://www.youtube.com/watch?v=Y-KIHF-cL9w"),
new Link("The Queen of Thieves", "https://www.youtube.com/watch?v=W94zFZVrHkQ"),
new Link("Bone Voyage", "https://www.youtube.com/watch?v=-VTR4p8kPmI"),
new Link("Dragon Slayer II", "https://www.youtube.com/watch?v=4BMb3Zwzk_U"),
new Link("The Depths of Despair", "https://www.youtube.com/watch?v=CaVUk2eAsKs"),
new Link("A Taste of Hope", "https://www.youtube.com/watch?v=VjdgEIizdSc"),
new Link("Tale of the Righteous", "https://www.youtube.com/watch?v=99yiv0tPl58"),
new Link("Making Friends with My Arm", "https://www.youtube.com/watch?v=DltzzhIsM_Q"),
new Link("The Ascent of Arceuus", "https://www.youtube.com/watch?v=4VQnfrv6S18"),
new Link("The Forsaken Tower", "https://www.youtube.com/watch?v=con0sXl5NBY"),
new Link("Fishing Contest", "https://www.youtube.com/watch?v=XYSv37A_l5w"),
new Link("Tribal Totem", "https://www.youtube.com/watch?v=XkUEIjr886M"),
new Link("Sea Slug", "https://www.youtube.com/watch?v=oOZVfa5SkVQ"),
new Link("The Tourist Trap", "https://www.youtube.com/watch?v=0bmSCCepMvo"),
new Link("Eadgar's Ruse", "https://www.youtube.com/watch?v=aVQ3DjTElXg"),
new Link("Shades of Mort'ton", "https://www.youtube.com/watch?v=eF05R8OMxgg"),
new Link("The Fremennik Trials", "https://www.youtube.com/watch?v=YUIvEgcvl5c"),
new Link("Ghosts Ahoy", "https://www.youtube.com/watch?v=aNBkLOywDfM"),
new Link("The Feud", "https://www.youtube.com/watch?v=nlBSc9IUklA"),
new Link("Forgettable Tale...", "https://www.youtube.com/watch?v=3HvFd6AxNU0"),
new Link("Making History", "https://www.youtube.com/watch?v=bOTGi2zAuhs"),
new Link("The Hand in the Sand", "https://www.youtube.com/watch?v=gdNLcZ-l1Lw"),
new Link("The Slug Menace", "https://www.youtube.com/watch?v=BRQbdr3JEZ8"),
new Link("Another Slice of H.A.M.", "https://www.youtube.com/watch?v=Yq3db7827Lk")
};
private static class Link {
private String questName;
private String url;
public Link(String questName, String url) {
this.questName = questName;
this.url = url;
}
public String getQuestName() {
return questName;
}
public void openURL() {
LinkBrowser.browse(this.url);
}
}
private static boolean openGuide(String questName) {
for (Link link : QUEST_GUIDE_LINKS) {
if (link.getQuestName().equals(questName)) {
link.openURL();
return true;
}
}
return false;
}
private static void logQuestNotFoundError(String questName, ChatMessageManager chatMessageManager) {
String chatMessage = new ChatMessageBuilder()
.append(ChatColorType.HIGHLIGHT)
.append("Could not find Slayermusiq1 guide for " + questName)
.build();
chatMessageManager.queue(QueuedMessage.builder()
.type(ChatMessageType.GAMEMESSAGE)
.runeLiteFormattedMessage(chatMessage)
.build());
}
public static void tryOpenGuide(String questName, ChatMessageManager chatMessageManager) {
boolean success = openGuide(questName);
if (!success) {
logQuestNotFoundError(questName, chatMessageManager);
}
}
}

View File

@@ -0,0 +1,154 @@
/*
* Copyright (c) 2018, Jeremy Berchtold <https://github.com/i-yam-jeremy>
* 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.
*/
// Based off RuneLite's Wiki Plugin
/*
* Copyright (c) 2018 Abex
* 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.slayermusiq;
import com.google.inject.Provides;
import com.google.common.primitives.Ints;
import java.awt.Dimension;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import javax.swing.SwingUtilities;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client;
import net.runelite.api.MenuAction;
import net.runelite.api.MenuEntry;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.api.events.MenuEntryAdded;
import net.runelite.api.events.MenuOptionClicked;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.util.Text;
import net.runelite.client.chat.ChatMessageManager;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
@PluginDescriptor(
name = "Slayermusiq1 Guides",
description = "Adds a right-click option to go to Slayermusiq1's guides from the quest tab",
tags = {"quest", "guide", "slayermusiq"},
type = PluginType.UTILITY
)
@Slf4j
public class SlayermusiqPlugin extends Plugin
{
private static final int[] QUESTLIST_WIDGET_IDS = new int[]
{
WidgetInfo.QUESTLIST_FREE_CONTAINER.getId(),
WidgetInfo.QUESTLIST_MEMBERS_CONTAINER.getId(),
WidgetInfo.QUESTLIST_MINIQUEST_CONTAINER.getId(),
};
private static final String MENUOP_SLAYERMUSIQ = "Slayermusiq";
@Inject
private Client client;
@Inject
private ChatMessageManager chatMessageManager;
@Override
protected void startUp() throws Exception
{
//
}
@Override
protected void shutDown() throws Exception
{
//
}
@Subscribe
public void onMenuEntryAdded(MenuEntryAdded event)
{
int widgetID = event.getActionParam1();
if (Ints.contains(QUESTLIST_WIDGET_IDS, widgetID) && "Read Journal:".equals(event.getOption())) {
MenuEntry[] menuEntries = client.getMenuEntries();
MenuEntry newMenuEntry = createSlayermusiqOptionMenuEntry(event);
menuEntries = Arrays.copyOf(menuEntries, menuEntries.length + 1);
menuEntries[menuEntries.length - 1] = newMenuEntry;
client.setMenuEntries(menuEntries);
}
}
@Subscribe
private void onMenuOptionClicked(MenuOptionClicked ev) {
if (ev.getMenuAction() == MenuAction.RUNELITE && ev.getMenuOption().equals(MENUOP_SLAYERMUSIQ)) {
ev.consume();
String quest = Text.removeTags(ev.getMenuTarget());
QuestGuideLinks.tryOpenGuide(quest, chatMessageManager);
}
}
private MenuEntry createSlayermusiqOptionMenuEntry(MenuEntryAdded event) {
int widgetIndex = event.getActionParam0();
int widgetID = event.getActionParam1();
MenuEntry menuEntry = new MenuEntry();
menuEntry.setTarget(event.getTarget());
menuEntry.setOption(MENUOP_SLAYERMUSIQ);
menuEntry.setParam0(widgetIndex);
menuEntry.setParam1(widgetID);
menuEntry.setType(MenuAction.RUNELITE.getId());
return menuEntry;
}
}

View File

@@ -25,7 +25,7 @@ import net.runelite.client.ui.overlay.OverlayManager;
@PluginDescriptor(name = "Tick Counter",
description = "Counts combat activity for nearby players",
enabledByDefault = false,
type = PluginType.UTILITY
type = PluginType.PVP
)
public class TickCounterPlugin extends Plugin {