@@ -150,6 +150,8 @@ public class Notifier
|
|||||||
{
|
{
|
||||||
flashStart = Instant.now();
|
flashStart = Instant.now();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.debug(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void processFlash(final Graphics2D graphics)
|
public void processFlash(final Graphics2D graphics)
|
||||||
|
|||||||
@@ -140,6 +140,6 @@ public class WesternDiaryRequirement extends GenericDiaryRequirement
|
|||||||
new QuestRequirement(Quest.BIG_CHOMPY_BIRD_HUNTING));
|
new QuestRequirement(Quest.BIG_CHOMPY_BIRD_HUNTING));
|
||||||
add("Pickpocket an Elf.",
|
add("Pickpocket an Elf.",
|
||||||
new SkillRequirement(Skill.THIEVING, 85),
|
new SkillRequirement(Skill.THIEVING, 85),
|
||||||
new QuestRequirement(Quest.MOURNINGS_ENDS_PART_II));
|
new QuestRequirement(Quest.MOURNINGS_ENDS_PART_I, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ package net.runelite.client.plugins.barrows;
|
|||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import com.google.inject.Provides;
|
import com.google.inject.Provides;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -41,6 +42,7 @@ import net.runelite.api.Item;
|
|||||||
import net.runelite.api.ItemContainer;
|
import net.runelite.api.ItemContainer;
|
||||||
import net.runelite.api.NullObjectID;
|
import net.runelite.api.NullObjectID;
|
||||||
import net.runelite.api.ObjectID;
|
import net.runelite.api.ObjectID;
|
||||||
|
import net.runelite.api.SpriteID;
|
||||||
import net.runelite.api.WallObject;
|
import net.runelite.api.WallObject;
|
||||||
import net.runelite.api.events.ConfigChanged;
|
import net.runelite.api.events.ConfigChanged;
|
||||||
import net.runelite.api.events.GameObjectChanged;
|
import net.runelite.api.events.GameObjectChanged;
|
||||||
@@ -66,6 +68,8 @@ import net.runelite.client.plugins.Plugin;
|
|||||||
import net.runelite.client.plugins.PluginDescriptor;
|
import net.runelite.client.plugins.PluginDescriptor;
|
||||||
import net.runelite.client.ui.overlay.OverlayManager;
|
import net.runelite.client.ui.overlay.OverlayManager;
|
||||||
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
|
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
|
||||||
|
import net.runelite.client.ui.overlay.infobox.InfoBoxPriority;
|
||||||
|
import net.runelite.client.ui.overlay.infobox.LoopTimer;
|
||||||
import net.runelite.client.util.StackFormatter;
|
import net.runelite.client.util.StackFormatter;
|
||||||
|
|
||||||
@PluginDescriptor(
|
@PluginDescriptor(
|
||||||
@@ -92,6 +96,7 @@ public class BarrowsPlugin extends Plugin
|
|||||||
WidgetInfo.BARROWS_PUZZLE_ANSWER3
|
WidgetInfo.BARROWS_PUZZLE_ANSWER3
|
||||||
);
|
);
|
||||||
|
|
||||||
|
private static final long PRAYER_DRAIN_INTERVAL_MS = 18200;
|
||||||
private static final int CRYPT_REGION_ID = 14231;
|
private static final int CRYPT_REGION_ID = 14231;
|
||||||
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
@Getter(AccessLevel.PACKAGE)
|
||||||
@@ -100,6 +105,7 @@ public class BarrowsPlugin extends Plugin
|
|||||||
@Getter(AccessLevel.PACKAGE)
|
@Getter(AccessLevel.PACKAGE)
|
||||||
private final Set<GameObject> ladders = new HashSet<>();
|
private final Set<GameObject> ladders = new HashSet<>();
|
||||||
|
|
||||||
|
private LoopTimer barrowsPrayerDrainTimer;
|
||||||
private boolean wasInCrypt = false;
|
private boolean wasInCrypt = false;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@@ -313,13 +319,25 @@ public class BarrowsPlugin extends Plugin
|
|||||||
{
|
{
|
||||||
if (config.showPrayerDrainTimer())
|
if (config.showPrayerDrainTimer())
|
||||||
{
|
{
|
||||||
infoBoxManager.addInfoBox(new BarrowsPrayerDrainTimer(this, spriteManager));
|
final LoopTimer loopTimer = new LoopTimer(
|
||||||
|
PRAYER_DRAIN_INTERVAL_MS,
|
||||||
|
ChronoUnit.MILLIS,
|
||||||
|
spriteManager.getSprite(SpriteID.TAB_PRAYER, 0),
|
||||||
|
this,
|
||||||
|
true);
|
||||||
|
|
||||||
|
loopTimer.setPriority(InfoBoxPriority.MED);
|
||||||
|
loopTimer.setTooltip("Prayer Drain");
|
||||||
|
|
||||||
|
infoBoxManager.addInfoBox(loopTimer);
|
||||||
|
barrowsPrayerDrainTimer = loopTimer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void stopPrayerDrainTimer()
|
private void stopPrayerDrainTimer()
|
||||||
{
|
{
|
||||||
infoBoxManager.removeIf(BarrowsPrayerDrainTimer.class::isInstance);
|
infoBoxManager.removeInfoBox(barrowsPrayerDrainTimer);
|
||||||
|
barrowsPrayerDrainTimer = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isInCrypt()
|
private boolean isInCrypt()
|
||||||
|
|||||||
@@ -24,20 +24,9 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client.plugins.chatfilter;
|
package net.runelite.client.plugins.chatfilter;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public enum ChatFilterType
|
public enum ChatFilterType
|
||||||
{
|
{
|
||||||
CENSOR_WORDS("Censor words"),
|
CENSOR_WORDS,
|
||||||
CENSOR_MESSAGE("Censor message"),
|
CENSOR_MESSAGE,
|
||||||
REMOVE_MESSAGE("Remove message");
|
REMOVE_MESSAGE
|
||||||
|
|
||||||
private final String name;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString()
|
|
||||||
{
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ public class CipherClue extends ClueScroll implements TextClueScroll, NpcClueScr
|
|||||||
new CipherClue("GBJSZ RVFFO", "Fairy Queen", new WorldPoint(2347, 4435, 0), "Fairy Resistance Hideout", "Puzzle"),
|
new CipherClue("GBJSZ RVFFO", "Fairy Queen", new WorldPoint(2347, 4435, 0), "Fairy Resistance Hideout", "Puzzle"),
|
||||||
new CipherClue("QSPGFTTPS HSBDLMFCPOF", "Professor Gracklebone", new WorldPoint(1625, 3802, 0), "Ground floor of Arceuus Library", "9"),
|
new CipherClue("QSPGFTTPS HSBDLMFCPOF", "Professor Gracklebone", new WorldPoint(1625, 3802, 0), "Ground floor of Arceuus Library", "9"),
|
||||||
new CipherClue("IWPPLQTP", "Gunnjorn", new WorldPoint(2541, 3548, 0), "Barbarian Outpost Agility course", "Puzzle"),
|
new CipherClue("IWPPLQTP", "Gunnjorn", new WorldPoint(2541, 3548, 0), "Barbarian Outpost Agility course", "Puzzle"),
|
||||||
new CipherClue("BSOPME MZETQPS", "Arnold Lydspor", new WorldPoint(2329, 3689, 0), "Piscatorus Fishing Colony general store/bank", "Puzzle")
|
new CipherClue("BSOPME MZETQPS", "Arnold Lydspor", new WorldPoint(2329, 3689, 0), "Piscatoris Fishing Colony general store/bank", "Puzzle")
|
||||||
);
|
);
|
||||||
|
|
||||||
private String text;
|
private String text;
|
||||||
|
|||||||
@@ -168,12 +168,18 @@ class CombatLevelOverlay extends Overlay
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static int calcLevelsPray(double start, int end, int prayerLevel)
|
static int calcLevelsPray(double start, int end, int prayerLevel)
|
||||||
{
|
{
|
||||||
final int neededLevels = (int) Math.floor(calcMultipliedLevels(start, end, PRAY_MULT));
|
int neededLevels = (int) Math.ceil(calcMultipliedLevels(start, end, PRAY_MULT));
|
||||||
|
|
||||||
|
if (prayerLevel % 2 != 0)
|
||||||
|
{
|
||||||
|
neededLevels--;
|
||||||
|
}
|
||||||
|
|
||||||
if ((prayerLevel + neededLevels) % 2 != 0)
|
if ((prayerLevel + neededLevels) % 2 != 0)
|
||||||
{
|
{
|
||||||
return neededLevels + 1;
|
return neededLevels + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return neededLevels;
|
return neededLevels;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -591,7 +591,7 @@ public class ConfigPanel extends PluginPanel
|
|||||||
{
|
{
|
||||||
Enum selectedItem = Enum.valueOf(type, configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName()));
|
Enum selectedItem = Enum.valueOf(type, configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName()));
|
||||||
box.setSelectedItem(selectedItem);
|
box.setSelectedItem(selectedItem);
|
||||||
box.setToolTipText(selectedItem.toString());
|
box.setToolTipText(Text.titleCase(selectedItem));
|
||||||
}
|
}
|
||||||
catch (IllegalArgumentException ex)
|
catch (IllegalArgumentException ex)
|
||||||
{
|
{
|
||||||
@@ -602,7 +602,7 @@ public class ConfigPanel extends PluginPanel
|
|||||||
if (e.getStateChange() == ItemEvent.SELECTED)
|
if (e.getStateChange() == ItemEvent.SELECTED)
|
||||||
{
|
{
|
||||||
changeConfiguration(listItem, config, box, cd, cid);
|
changeConfiguration(listItem, config, box, cd, cid);
|
||||||
box.setToolTipText(box.getSelectedItem().toString());
|
box.setToolTipText(Text.titleCase((Enum) box.getSelectedItem()));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
item.add(box, BorderLayout.EAST);
|
item.add(box, BorderLayout.EAST);
|
||||||
|
|||||||
@@ -0,0 +1,114 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019, Lotto <https://github.com/devLotto>
|
||||||
|
* 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.emojis;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.util.Map;
|
||||||
|
import net.runelite.client.util.ImageUtil;
|
||||||
|
|
||||||
|
enum Emoji
|
||||||
|
{
|
||||||
|
SLIGHT_SMILE(":)"),
|
||||||
|
JOY("=')"),
|
||||||
|
COWBOY("3:)"),
|
||||||
|
BLUSH("^_^"),
|
||||||
|
SMILE(":D"),
|
||||||
|
GRINNING("=D"),
|
||||||
|
WINK(";)"),
|
||||||
|
STUCK_OUT_TONGUE_CLOSED_EYES("X-P"),
|
||||||
|
STUCK_OUT_TONGUE(":P"),
|
||||||
|
YUM("=P~"),
|
||||||
|
HUGGING("<gt>:D<lt>"), // >:D<
|
||||||
|
TRIUMPH(":<gt>"), // :>
|
||||||
|
THINKING(":-?"),
|
||||||
|
CONFUSED(":/"),
|
||||||
|
NEUTRAL_FACE("=|"),
|
||||||
|
EXPRESSIONLESS(":|"),
|
||||||
|
UNAMUSED(":-|"),
|
||||||
|
SLIGHT_FROWN(":("),
|
||||||
|
FROWNING2("=("),
|
||||||
|
CRY(":'("),
|
||||||
|
SOB(":_("),
|
||||||
|
FLUSHED(":$"),
|
||||||
|
ZIPPER_MOUTH(":-#"),
|
||||||
|
PERSEVERE("<gt>_<lt>"), // >_<
|
||||||
|
SUNGLASSES("8-)"),
|
||||||
|
INNOCENT("O:)"),
|
||||||
|
SMILING_IMP("<gt>:)"), // >:)
|
||||||
|
RAGE("<gt>:("), // >:(
|
||||||
|
HUSHED(":-O"),
|
||||||
|
OPEN_MOUTH(":O"),
|
||||||
|
SCREAM(":-@"),
|
||||||
|
SEE_NO_EVIL("X_X"),
|
||||||
|
DANCER("\\:D/"),
|
||||||
|
OK_HAND("(Ok)"),
|
||||||
|
THUMBSUP("(Y)"),
|
||||||
|
THUMBSDOWN("(N)"),
|
||||||
|
HEARTS("<lt>3"), // <3
|
||||||
|
BROKEN_HEART("<lt>/3"), // </3
|
||||||
|
ZZZ("Zzz"),
|
||||||
|
FISH("<lt><gt><lt>"), // <><
|
||||||
|
CAT(":3"),
|
||||||
|
DOG("=3"),
|
||||||
|
CRAB("V(;,;)V"),
|
||||||
|
FORK_AND_KNIFE("--E"),
|
||||||
|
COOKING("--(o)"),
|
||||||
|
PARTY_POPPER("@@@"),
|
||||||
|
EYES("O.O"),
|
||||||
|
SWEAT(";;"),
|
||||||
|
PILE_OF_POO("~@~");
|
||||||
|
|
||||||
|
private static final Map<String, Emoji> emojiMap;
|
||||||
|
|
||||||
|
private final String trigger;
|
||||||
|
|
||||||
|
static
|
||||||
|
{
|
||||||
|
ImmutableMap.Builder<String, Emoji> builder = new ImmutableMap.Builder<>();
|
||||||
|
|
||||||
|
for (final Emoji emoji : values())
|
||||||
|
{
|
||||||
|
builder.put(emoji.trigger, emoji);
|
||||||
|
}
|
||||||
|
|
||||||
|
emojiMap = builder.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
Emoji(String trigger)
|
||||||
|
{
|
||||||
|
this.trigger = trigger;
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferedImage loadImage()
|
||||||
|
{
|
||||||
|
return ImageUtil.getResourceStreamFromClass(getClass(), this.name().toLowerCase() + ".png");
|
||||||
|
}
|
||||||
|
|
||||||
|
static Emoji getEmoji(String trigger)
|
||||||
|
{
|
||||||
|
return emojiMap.get(trigger);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,192 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019, Lotto <https://github.com/devLotto>
|
||||||
|
* 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.emojis;
|
||||||
|
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import joptsimple.internal.Strings;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.GameState;
|
||||||
|
import net.runelite.api.IndexedSprite;
|
||||||
|
import net.runelite.api.MessageNode;
|
||||||
|
import net.runelite.api.Player;
|
||||||
|
import net.runelite.api.events.ChatMessage;
|
||||||
|
import net.runelite.api.events.GameStateChanged;
|
||||||
|
import net.runelite.api.events.OverheadTextChanged;
|
||||||
|
import net.runelite.client.chat.ChatMessageManager;
|
||||||
|
import net.runelite.client.eventbus.Subscribe;
|
||||||
|
import net.runelite.client.plugins.Plugin;
|
||||||
|
import net.runelite.client.plugins.PluginDescriptor;
|
||||||
|
import net.runelite.client.util.ImageUtil;
|
||||||
|
|
||||||
|
@PluginDescriptor(
|
||||||
|
name = "Emojis",
|
||||||
|
description = "Replaces common emoticons such as :) with their corresponding emoji in the chat",
|
||||||
|
enabledByDefault = false
|
||||||
|
)
|
||||||
|
@Slf4j
|
||||||
|
public class EmojiPlugin extends Plugin
|
||||||
|
{
|
||||||
|
@Inject
|
||||||
|
private Client client;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private ChatMessageManager chatMessageManager;
|
||||||
|
|
||||||
|
private int modIconsStart = -1;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void startUp()
|
||||||
|
{
|
||||||
|
loadEmojiIcons();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onGameStateChanged(GameStateChanged gameStateChanged)
|
||||||
|
{
|
||||||
|
if (gameStateChanged.getGameState() == GameState.LOGGED_IN)
|
||||||
|
{
|
||||||
|
loadEmojiIcons();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadEmojiIcons()
|
||||||
|
{
|
||||||
|
final IndexedSprite[] modIcons = client.getModIcons();
|
||||||
|
if (modIconsStart != -1 || modIcons == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Emoji[] emojis = Emoji.values();
|
||||||
|
final IndexedSprite[] newModIcons = Arrays.copyOf(modIcons, modIcons.length + emojis.length);
|
||||||
|
modIconsStart = modIcons.length;
|
||||||
|
|
||||||
|
for (int i = 0; i < emojis.length; i++)
|
||||||
|
{
|
||||||
|
final Emoji emoji = emojis[i];
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
final BufferedImage image = emoji.loadImage();
|
||||||
|
final IndexedSprite sprite = ImageUtil.getImageIndexedSprite(image, client);
|
||||||
|
newModIcons[modIconsStart + i] = sprite;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
log.warn("Failed to load the sprite for emoji " + emoji, ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.debug("Adding emoji icons");
|
||||||
|
client.setModIcons(newModIcons);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onChatMessage(ChatMessage chatMessage)
|
||||||
|
{
|
||||||
|
if (client.getGameState() != GameState.LOGGED_IN || modIconsStart == -1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (chatMessage.getType())
|
||||||
|
{
|
||||||
|
case PUBLICCHAT:
|
||||||
|
case MODCHAT:
|
||||||
|
case FRIENDSCHAT:
|
||||||
|
case PRIVATECHAT:
|
||||||
|
case PRIVATECHATOUT:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final String message = chatMessage.getMessage();
|
||||||
|
final String updatedMessage = updateMessage(message);
|
||||||
|
|
||||||
|
if (updatedMessage == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final MessageNode messageNode = chatMessage.getMessageNode();
|
||||||
|
messageNode.setRuneLiteFormatMessage(updatedMessage);
|
||||||
|
chatMessageManager.update(messageNode);
|
||||||
|
client.refreshChat();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onOverheadTextChanged(final OverheadTextChanged event)
|
||||||
|
{
|
||||||
|
if (!(event.getActor() instanceof Player))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final String message = event.getOverheadText();
|
||||||
|
final String updatedMessage = updateMessage(message);
|
||||||
|
|
||||||
|
if (updatedMessage == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
event.getActor().setOverheadText(updatedMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private String updateMessage(final String message)
|
||||||
|
{
|
||||||
|
final String[] messageWords = message.split(" ");
|
||||||
|
|
||||||
|
boolean editedMessage = false;
|
||||||
|
for (int i = 0; i < messageWords.length; i++)
|
||||||
|
{
|
||||||
|
final Emoji emoji = Emoji.getEmoji(messageWords[i]);
|
||||||
|
|
||||||
|
if (emoji == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
final int emojiId = modIconsStart + emoji.ordinal();
|
||||||
|
|
||||||
|
messageWords[i] = "<img=" + emojiId + ">";
|
||||||
|
editedMessage = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we haven't edited the message any, don't update it.
|
||||||
|
if (!editedMessage)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Strings.join(messageWords, " ");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,11 +24,6 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client.plugins.fps;
|
package net.runelite.client.plugins.fps;
|
||||||
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public enum FpsLimitMode
|
public enum FpsLimitMode
|
||||||
{
|
{
|
||||||
NEVER,
|
NEVER,
|
||||||
|
|||||||
@@ -24,21 +24,8 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client.plugins.itemidentification;
|
package net.runelite.client.plugins.itemidentification;
|
||||||
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public enum ItemIdentificationMode
|
public enum ItemIdentificationMode
|
||||||
{
|
{
|
||||||
SHORT("Short"),
|
SHORT,
|
||||||
MEDIUM("Medium");
|
MEDIUM
|
||||||
|
|
||||||
private final String type;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString()
|
|
||||||
{
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,22 +59,22 @@ public class ItemStatChanges
|
|||||||
add(food(3), SHRIMPS, COOKED_MEAT, COOKED_CHICKEN, ROE, CHOCOLATE_BAR);
|
add(food(3), SHRIMPS, COOKED_MEAT, COOKED_CHICKEN, ROE, CHOCOLATE_BAR);
|
||||||
add(food(4), SARDINE, CAKE, _23_CAKE, SLICE_OF_CAKE, CHOCOLATEY_MILK, BAKED_POTATO, EDIBLE_SEAWEED, MOONLIGHT_MEAD);
|
add(food(4), SARDINE, CAKE, _23_CAKE, SLICE_OF_CAKE, CHOCOLATEY_MILK, BAKED_POTATO, EDIBLE_SEAWEED, MOONLIGHT_MEAD);
|
||||||
add(food(5), BREAD, HERRING, CHOCOLATE_CAKE, _23_CHOCOLATE_CAKE, CHOCOLATE_SLICE, COOKED_RABBIT, CHILLI_CON_CARNE,
|
add(food(5), BREAD, HERRING, CHOCOLATE_CAKE, _23_CHOCOLATE_CAKE, CHOCOLATE_SLICE, COOKED_RABBIT, CHILLI_CON_CARNE,
|
||||||
FRIED_MUSHROOMS, FRIED_ONIONS, REDBERRY_PIE, HALF_A_REDBERRY_PIE, CAVIAR);
|
FRIED_MUSHROOMS, FRIED_ONIONS, REDBERRY_PIE, HALF_A_REDBERRY_PIE, CAVIAR, PYSK_FISH_0);
|
||||||
add(food(6), CHOCICE, MACKEREL, MEAT_PIE, HALF_A_MEAT_PIE, GUANIC_BAT_0, ROAST_BIRD_MEAT,
|
add(food(6), CHOCICE, MACKEREL, MEAT_PIE, HALF_A_MEAT_PIE, GUANIC_BAT_0, ROAST_BIRD_MEAT,
|
||||||
SQUARE_SANDWICH, ROLL, BAGUETTE, TRIANGLE_SANDWICH, GIANT_CARP);
|
SQUARE_SANDWICH, ROLL, BAGUETTE, TRIANGLE_SANDWICH, GIANT_CARP);
|
||||||
add(food(7), TROUT, COD, PLAIN_PIZZA, _12_PLAIN_PIZZA, APPLE_PIE, HALF_AN_APPLE_PIE, ROAST_RABBIT,
|
add(food(7), TROUT, COD, PLAIN_PIZZA, _12_PLAIN_PIZZA, APPLE_PIE, HALF_AN_APPLE_PIE, ROAST_RABBIT,
|
||||||
PREMADE_CH_CRUNCH, CHOCCHIP_CRUNCHIES, PREMADE_SY_CRUNCH, SPICY_CRUNCHIES);
|
PREMADE_CH_CRUNCH, CHOCCHIP_CRUNCHIES, PREMADE_SY_CRUNCH, SPICY_CRUNCHIES);
|
||||||
add(food(8), PIKE, ROAST_BEAST_MEAT, MEAT_PIZZA, _12_MEAT_PIZZA, PREMADE_WM_CRUN, WORM_CRUNCHIES, PREMADE_TD_CRUNCH,
|
add(food(8), PIKE, ROAST_BEAST_MEAT, MEAT_PIZZA, _12_MEAT_PIZZA, PREMADE_WM_CRUN, WORM_CRUNCHIES, PREMADE_TD_CRUNCH,
|
||||||
TOAD_CRUNCHIES, EGG_AND_TOMATO, LECKISH_FISH_2, PRAEL_BAT_1, PEACH);
|
TOAD_CRUNCHIES, EGG_AND_TOMATO, PRAEL_BAT_1, PEACH, SUPHI_FISH_1);
|
||||||
add(food(9), PREMADE_P_PUNCH, PINEAPPLE_PUNCH, PREMADE_FR_BLAST, FRUIT_BLAST, SALMON, ANCHOVY_PIZZA,
|
add(food(9), PREMADE_P_PUNCH, PINEAPPLE_PUNCH, PREMADE_FR_BLAST, FRUIT_BLAST, SALMON, ANCHOVY_PIZZA,
|
||||||
_12_ANCHOVY_PIZZA);
|
_12_ANCHOVY_PIZZA);
|
||||||
add(food(10), TUNA, COOKED_CRAB_MEAT, CHOPPED_TUNA, COOKED_CHOMPY, FIELD_RATION);
|
add(food(10), TUNA, COOKED_CRAB_MEAT, CHOPPED_TUNA, COOKED_CHOMPY, FIELD_RATION);
|
||||||
add(food(11), RAINBOW_FISH, STEW, PINEAPPLE_PIZZA, _12_PINEAPPLE_PIZZA, COOKED_FISHCAKE,
|
add(food(11), RAINBOW_FISH, STEW, PINEAPPLE_PIZZA, _12_PINEAPPLE_PIZZA, COOKED_FISHCAKE,
|
||||||
PREMADE_VEG_BATTA, VEGETABLE_BATTA, PREMADE_WM_BATTA, WORM_BATTA, PREMADE_TD_BATTA, TOAD_BATTA, PREMADE_CT_BATTA,
|
PREMADE_VEG_BATTA, VEGETABLE_BATTA, PREMADE_WM_BATTA, WORM_BATTA, PREMADE_TD_BATTA, TOAD_BATTA, PREMADE_CT_BATTA,
|
||||||
CHEESETOM_BATTA, PREMADE_FRT_BATTA, FRUIT_BATTA, MUSHROOM__ONION, GIRAL_BAT_2, LAVA_EEL);
|
CHEESETOM_BATTA, PREMADE_FRT_BATTA, FRUIT_BATTA, MUSHROOM__ONION, GIRAL_BAT_2, LAVA_EEL, LECKISH_FISH_2);
|
||||||
add(food(12), LOBSTER, PREMADE_WORM_HOLE, WORM_HOLE, PREMADE_VEG_BALL, VEG_BALL);
|
add(food(12), LOBSTER, PREMADE_WORM_HOLE, WORM_HOLE, PREMADE_VEG_BALL, VEG_BALL);
|
||||||
add(food(13), BASS, TUNA_AND_CORN);
|
add(food(13), BASS, TUNA_AND_CORN);
|
||||||
add(food(14), POTATO_WITH_BUTTER, CHILLI_POTATO, SWORDFISH, PHLUXIA_BAT_3, PUMPKIN, EASTER_EGG);
|
add(food(14), POTATO_WITH_BUTTER, CHILLI_POTATO, SWORDFISH, PHLUXIA_BAT_3, PUMPKIN, EASTER_EGG, BRAWK_FISH_3);
|
||||||
add(food(15), PREMADE_TTL, TANGLED_TOADS_LEGS, PREMADE_CHOC_BOMB, CHOCOLATE_BOMB, COOKED_JUBBLY);
|
add(food(15), PREMADE_TTL, TANGLED_TOADS_LEGS, PREMADE_CHOC_BOMB, CHOCOLATE_BOMB, COOKED_JUBBLY);
|
||||||
add(food(16), MONKFISH, POTATO_WITH_CHEESE, EGG_POTATO);
|
add(food(16), MONKFISH, POTATO_WITH_CHEESE, EGG_POTATO);
|
||||||
add(food(17), MYCIL_FISH_4, KRYKET_BAT_4);
|
add(food(17), MYCIL_FISH_4, KRYKET_BAT_4);
|
||||||
|
|||||||
@@ -26,23 +26,10 @@
|
|||||||
|
|
||||||
package net.runelite.client.plugins.prayer;
|
package net.runelite.client.plugins.prayer;
|
||||||
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public enum PrayerFlickLocation
|
public enum PrayerFlickLocation
|
||||||
{
|
{
|
||||||
NONE("Off"),
|
NONE,
|
||||||
PRAYER_ORB("Prayer Orb"),
|
PRAYER_ORB,
|
||||||
PRAYER_BAR("Prayer Bar"),
|
PRAYER_BAR,
|
||||||
BOTH("Both");
|
BOTH
|
||||||
|
|
||||||
private final String name;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString()
|
|
||||||
{
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -24,22 +24,9 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client.plugins.runepouch.config;
|
package net.runelite.client.plugins.runepouch.config;
|
||||||
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public enum RunePouchOverlayMode
|
public enum RunePouchOverlayMode
|
||||||
{
|
{
|
||||||
INVENTORY("Inventory"),
|
INVENTORY,
|
||||||
MOUSE_HOVER("Mouse hover"),
|
MOUSE_HOVER,
|
||||||
BOTH("Both");
|
BOTH
|
||||||
|
|
||||||
private final String name;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString()
|
|
||||||
{
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,22 +24,9 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client.plugins.worldhopper;
|
package net.runelite.client.plugins.worldhopper;
|
||||||
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public enum SubscriptionFilterMode
|
public enum SubscriptionFilterMode
|
||||||
{
|
{
|
||||||
BOTH("Both"),
|
BOTH,
|
||||||
FREE("Free"),
|
FREE,
|
||||||
MEMBERS("Member");
|
MEMBERS
|
||||||
|
|
||||||
private final String name;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString()
|
|
||||||
{
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -110,12 +110,12 @@ class XpInfoBoxOverlay extends Overlay
|
|||||||
rightNum = snapshot.getActionsRemainingToGoal();
|
rightNum = snapshot.getActionsRemainingToGoal();
|
||||||
break;
|
break;
|
||||||
case XP_LEFT:
|
case XP_LEFT:
|
||||||
leftStr = config.onScreenDisplayMode().toString();
|
leftStr = "XP Left";
|
||||||
rightNum = snapshot.getXpRemainingToGoal();
|
rightNum = snapshot.getXpRemainingToGoal();
|
||||||
break;
|
break;
|
||||||
case XP_GAINED:
|
case XP_GAINED:
|
||||||
default:
|
default:
|
||||||
leftStr = config.onScreenDisplayMode().toString();
|
leftStr = "XP Gained";
|
||||||
rightNum = snapshot.getXpGainedInSession();
|
rightNum = snapshot.getXpGainedInSession();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,18 +35,10 @@ public interface XpTrackerConfig extends Config
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
enum OnScreenDisplayMode
|
enum OnScreenDisplayMode
|
||||||
{
|
{
|
||||||
XP_GAINED("XP Gained"),
|
XP_GAINED,
|
||||||
XP_LEFT("XP Left"),
|
XP_LEFT,
|
||||||
ACTIONS_DONE("Actions Done"),
|
ACTIONS_DONE,
|
||||||
ACTIONS_LEFT("Actions Left");
|
ACTIONS_LEFT
|
||||||
|
|
||||||
private final String name;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString()
|
|
||||||
{
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import javax.swing.JList;
|
|||||||
import javax.swing.ListCellRenderer;
|
import javax.swing.ListCellRenderer;
|
||||||
import javax.swing.border.EmptyBorder;
|
import javax.swing.border.EmptyBorder;
|
||||||
import net.runelite.client.ui.ColorScheme;
|
import net.runelite.client.ui.ColorScheme;
|
||||||
|
import net.runelite.client.util.Text;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A custom list renderer to avoid substance's weird coloring.
|
* A custom list renderer to avoid substance's weird coloring.
|
||||||
@@ -57,7 +58,16 @@ public final class ComboBoxListRenderer extends JLabel implements ListCellRender
|
|||||||
|
|
||||||
setBorder(new EmptyBorder(5, 5, 5, 0));
|
setBorder(new EmptyBorder(5, 5, 5, 0));
|
||||||
|
|
||||||
String text = o.toString();
|
String text;
|
||||||
|
if (o instanceof Enum)
|
||||||
|
{
|
||||||
|
text = Text.titleCase((Enum) o);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
text = o.toString();
|
||||||
|
}
|
||||||
|
|
||||||
setText(text);
|
setText(text);
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2019, Ryan <progrs.site@gmail.com>
|
* Copyright (c) 2019, Tomas Slusny <slusnucky@gmail.com>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@@ -22,45 +22,59 @@
|
|||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
package net.runelite.client.plugins.barrows;
|
package net.runelite.client.ui.overlay.infobox;
|
||||||
|
|
||||||
|
import com.google.common.base.Preconditions;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import net.runelite.api.SpriteID;
|
import java.time.temporal.ChronoUnit;
|
||||||
import net.runelite.client.game.SpriteManager;
|
import lombok.Getter;
|
||||||
import net.runelite.client.ui.overlay.infobox.InfoBox;
|
import lombok.ToString;
|
||||||
import net.runelite.client.ui.overlay.infobox.InfoBoxPriority;
|
import net.runelite.client.plugins.Plugin;
|
||||||
|
|
||||||
class BarrowsPrayerDrainTimer extends InfoBox
|
@Getter
|
||||||
|
@ToString
|
||||||
|
public class LoopTimer extends InfoBox
|
||||||
{
|
{
|
||||||
private static final long PRAYER_DRAIN_INTERVAL_MS = 18200;
|
|
||||||
|
|
||||||
private final Instant startTime;
|
private final Instant startTime;
|
||||||
|
private final Duration duration;
|
||||||
|
private final boolean reverse;
|
||||||
|
|
||||||
BarrowsPrayerDrainTimer(BarrowsPlugin plugin, SpriteManager spriteManager)
|
public LoopTimer(long period, ChronoUnit unit, BufferedImage image, Plugin plugin, boolean reverse)
|
||||||
{
|
{
|
||||||
super(spriteManager.getSprite(SpriteID.TAB_PRAYER, 0), plugin);
|
super(image, plugin);
|
||||||
setPriority(InfoBoxPriority.MED);
|
|
||||||
setTooltip("Prayer Drain");
|
Preconditions.checkArgument(period > 0, "negative period!");
|
||||||
|
|
||||||
startTime = Instant.now();
|
startTime = Instant.now();
|
||||||
|
duration = Duration.of(period, unit);
|
||||||
|
this.reverse = reverse;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LoopTimer(long period, ChronoUnit unit, BufferedImage image, Plugin plugin)
|
||||||
|
{
|
||||||
|
this(period, unit, image, plugin, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getText()
|
public String getText()
|
||||||
{
|
{
|
||||||
Duration timeLeft = Duration.between(Instant.now(), getNextPrayerDrainTime());
|
final Duration progress = getProgress();
|
||||||
int seconds = (int) (timeLeft.toMillis() / 1000L);
|
final int seconds = (int) (progress.toMillis() / 1000L);
|
||||||
return String.format("0:%02d", seconds);
|
final int minutes = (seconds % 3600) / 60;
|
||||||
|
final int secs = seconds % 60;
|
||||||
|
return String.format("%d:%02d", minutes, secs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Color getTextColor()
|
public Color getTextColor()
|
||||||
{
|
{
|
||||||
Duration timeLeft = Duration.between(Instant.now(), getNextPrayerDrainTime());
|
final Duration progress = getProgress();
|
||||||
|
|
||||||
//check if timer has 10% of time left
|
// check if timer has 10% of time left
|
||||||
if (timeLeft.getSeconds() < (PRAYER_DRAIN_INTERVAL_MS / 1000 * .10))
|
if (progress.getSeconds() < (duration.getSeconds() * .10))
|
||||||
{
|
{
|
||||||
return Color.RED.brighter();
|
return Color.RED.brighter();
|
||||||
}
|
}
|
||||||
@@ -68,10 +82,15 @@ class BarrowsPrayerDrainTimer extends InfoBox
|
|||||||
return Color.WHITE;
|
return Color.WHITE;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Instant getNextPrayerDrainTime()
|
private Duration getProgress()
|
||||||
{
|
{
|
||||||
Duration timePassed = Duration.between(startTime, Instant.now());
|
final Duration passed = Duration.between(startTime, Instant.now());
|
||||||
// Get how many intervals have passed so far and add one more to find the next prayer drain time
|
final long passedMillis = passed.toMillis();
|
||||||
return startTime.plusMillis((timePassed.toMillis() / PRAYER_DRAIN_INTERVAL_MS + 1) * PRAYER_DRAIN_INTERVAL_MS);
|
final long durationMillis = duration.toMillis();
|
||||||
|
final long progress = passedMillis % durationMillis;
|
||||||
|
|
||||||
|
return Duration.ofMillis(reverse
|
||||||
|
? durationMillis - progress
|
||||||
|
: progress);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -31,6 +31,7 @@ import com.google.common.base.Splitter;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
import org.apache.commons.text.WordUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A set of utilities to use when dealing with text.
|
* A set of utilities to use when dealing with text.
|
||||||
@@ -159,4 +160,28 @@ public class Text
|
|||||||
String cleaned = name.contains("<img") ? name.substring(name.lastIndexOf('>') + 1) : name;
|
String cleaned = name.contains("<img") ? name.substring(name.lastIndexOf('>') + 1) : name;
|
||||||
return cleaned.replace('\u00A0', ' ');
|
return cleaned.replace('\u00A0', ' ');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If passed in enum doesn't implement its own toString,
|
||||||
|
* converts enum name format from THIS_FORMAT to This Format.
|
||||||
|
*
|
||||||
|
* @param o an enum
|
||||||
|
* @return the enum's name in title case,
|
||||||
|
* or if it overrides toString,
|
||||||
|
* the value returned by toString
|
||||||
|
*/
|
||||||
|
public static String titleCase(Enum o)
|
||||||
|
{
|
||||||
|
String toString = o.toString();
|
||||||
|
|
||||||
|
// .toString() returns the value of .name() if not overridden
|
||||||
|
if (o.name().equals(toString))
|
||||||
|
{
|
||||||
|
return WordUtils
|
||||||
|
.capitalize(toString.toLowerCase(), '_')
|
||||||
|
.replace("_", " ");
|
||||||
|
}
|
||||||
|
|
||||||
|
return toString;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
@@ -270,10 +270,47 @@ public class CombatLevelPluginTest
|
|||||||
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(99);
|
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(99);
|
||||||
when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(99);
|
when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(99);
|
||||||
|
|
||||||
|
assertEquals(1, neededPrayerLevels());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testEvenPrayerLevelsNeededWhenNearNextCombatLevel()
|
||||||
|
{
|
||||||
|
when(player.getCombatLevel()).thenReturn(90);
|
||||||
|
when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(74);
|
||||||
|
when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(75);
|
||||||
|
when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(72);
|
||||||
|
when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(52);
|
||||||
|
when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(44);
|
||||||
|
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(60);
|
||||||
|
when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(72);
|
||||||
|
|
||||||
|
assertEquals(2, neededPrayerLevels());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOddPrayerLevelsNeededWhenNearNextCombatLevel()
|
||||||
|
{
|
||||||
|
when(player.getCombatLevel()).thenReturn(90);
|
||||||
|
when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(74);
|
||||||
|
when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(75);
|
||||||
|
when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(72);
|
||||||
|
when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(53);
|
||||||
|
when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(44);
|
||||||
|
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(60);
|
||||||
|
when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(72);
|
||||||
|
|
||||||
|
assertEquals(1, neededPrayerLevels());
|
||||||
|
}
|
||||||
|
|
||||||
|
private int neededPrayerLevels()
|
||||||
|
{
|
||||||
HashMap<String, Double> baseValues = getBaseValues();
|
HashMap<String, Double> baseValues = getBaseValues();
|
||||||
|
|
||||||
// test prayer
|
return calcLevelsPray(
|
||||||
assertEquals(1, calcLevelsPray(baseValues.get("base") + baseValues.get("max"),
|
baseValues.get("base") + baseValues.get("max"),
|
||||||
player.getCombatLevel() + 1, client.getRealSkillLevel(Skill.PRAYER)));
|
player.getCombatLevel() + 1,
|
||||||
|
client.getRealSkillLevel(Skill.PRAYER)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user