/*
* Copyright (C) 2022-2023 NotEnoughUpdates contributors
*
* This file is part of NotEnoughUpdates.
*
* NotEnoughUpdates is free software: you can redistribute it
* and/or modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation, either
* version 3 of the License, or (at your option) any later version.
*
* NotEnoughUpdates is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with NotEnoughUpdates. If not, see .
*/
package io.github.moulberry.notenoughupdates.overlays;
import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
import io.github.moulberry.notenoughupdates.core.config.Position;
import io.github.moulberry.notenoughupdates.events.SlotClickEvent;
import io.github.moulberry.notenoughupdates.miscfeatures.CookieWarning;
import io.github.moulberry.notenoughupdates.miscfeatures.tablisttutorial.TablistAPI;
import io.github.moulberry.notenoughupdates.miscgui.customtodos.CustomTodoHud;
import io.github.moulberry.notenoughupdates.options.NEUConfig;
import io.github.moulberry.notenoughupdates.util.ItemResolutionQuery;
import io.github.moulberry.notenoughupdates.util.ItemUtils;
import io.github.moulberry.notenoughupdates.util.SBInfo;
import io.github.moulberry.notenoughupdates.util.Utils;
import lombok.var;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.inventory.GuiChest;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.entity.item.EntityArmorStand;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.inventory.ContainerChest;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.client.event.ClientChatReceivedEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
import org.lwjgl.util.vector.Vector2f;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.function.Supplier;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static net.minecraft.util.EnumChatFormatting.DARK_AQUA;
public class TimersOverlay extends TextTabOverlay {
public TimersOverlay(
Position position,
Supplier> dummyStrings,
Supplier styleSupplier
) {
super(position, dummyStrings, styleSupplier);
}
private static final Pattern PATTERN_ACTIVE_EFFECTS = Pattern.compile(
" You have a God Potion active! ([1-5][0-9]|[0-9])[\\s|^\\S]?(Seconds|Second|Minutes|Minute|Hours|Hour|Day|Days|h|m|s) ?([1-5][0-9]|[0-9])?([ms])?");
private static final Pattern CAKE_PATTERN = Pattern.compile(
"§r§d§l(?:Big )?Yum! §r§eYou (?:refresh|gain) §r§.+ §r§efor §r§a48 §r§ehours!§r");
private static final Pattern PUZZLER_PATTERN =
Pattern.compile("\u00a7r\u00a7dPuzzler\u00a7r\u00a76 gave you .+ \u00a7r\u00a76for solving the puzzle!\u00a7r");
private static final Pattern FETCHUR_PATTERN =
Pattern.compile("\u00a7e\\[NPC] Fetchur\u00a7f: \u00a7rthanks thats probably what i needed\u00a7r");
private static final Pattern FETCHUR2_PATTERN =
Pattern.compile("\u00a7e\\[NPC] Fetchur\u00a7f: \u00a7rcome back another time, maybe tmrw\u00a7r");
private static final Pattern DAILY_MITHRIL_POWDER = Pattern.compile(
"\u00a7r\u00a79\u1805 \u00a7r\u00a7fYou've earned \u00a7r\u00a72.+ Mithril Powder \u00a7r\u00a7ffrom mining your first Mithril Ore of the day!\u00a7r");
private static final Pattern DAILY_GEMSTONE_POWDER = Pattern.compile(
"\u00a7r\u00a79\u1805 \u00a7r\u00a7fYou've earned \u00a7r\u00a7d.+ Gemstone Powder \u00a7r\u00a7ffrom mining your first Gemstone of the day!\u00a7r");
private static final Pattern DAILY_SHOP_LIMIT = Pattern.compile(
"\u00a7r\u00a7cYou may only buy up to 6,?400? of this item each day!\u00a7r");
private static final Pattern GOD_POTION_TIME = Pattern.compile(" God Potion: ([1-5][0-9]|[0-9])([dhms])(:? ([1-5][0-9]|[0-9])([dhms]))?");
@SubscribeEvent
public void onClickItem(SlotClickEvent event) {
NEUConfig.HiddenProfileSpecific hidden = NotEnoughUpdates.INSTANCE.config.getProfileSpecific();
if (hidden == null) return;
if (event.slot == null || !event.slot.getHasStack()) return;
var itemStack = event.slot.getStack();
if (itemStack.getItem() != Item.getItemFromBlock(Blocks.double_plant) || itemStack.getItemDamage() != 1) return;
if (ItemUtils.getLore(itemStack).contains("§a§lFREE! §a(Every 4 hours)")) {
hidden.lastFreeRiftInfusionApplied = System.currentTimeMillis();
}
}
@SubscribeEvent(priority = EventPriority.HIGHEST, receiveCanceled = true)
public void onChatMessageReceived(ClientChatReceivedEvent event) {
NEUConfig.HiddenProfileSpecific hidden = NotEnoughUpdates.INSTANCE.config.getProfileSpecific();
if (hidden == null) return;
if (event.type == 0) {
long currentTime = System.currentTimeMillis();
Matcher cakeMatcher = CAKE_PATTERN.matcher(event.message.getFormattedText());
if (cakeMatcher.matches()) {
hidden.firstCakeAte = currentTime;
return;
}
if ("§r§d§lINFUSED! §r§7Used your free dimensional infusion!§r".equals(event.message.getFormattedText())) {
hidden.lastFreeRiftInfusionApplied = currentTime;
return;
}
Matcher puzzlerMatcher = PUZZLER_PATTERN.matcher(event.message.getFormattedText());
if (puzzlerMatcher.matches()) {
hidden.puzzlerCompleted = currentTime;
return;
}
Matcher fetchurMatcher = FETCHUR_PATTERN.matcher(event.message.getFormattedText());
if (fetchurMatcher.matches()) {
hidden.fetchurCompleted = currentTime;
return;
}
Matcher fetchur2Matcher = FETCHUR2_PATTERN.matcher(event.message.getFormattedText());
if (fetchur2Matcher.matches()) {
hidden.fetchurCompleted = currentTime;
return;
}
Matcher dailyGemstonePowder = DAILY_GEMSTONE_POWDER.matcher(event.message.getFormattedText());
if (dailyGemstonePowder.matches()) {
hidden.dailyGemstonePowderCompleted = currentTime;
return;
}
Matcher dailyMithrilPowder = DAILY_MITHRIL_POWDER.matcher(event.message.getFormattedText());
if (dailyMithrilPowder.matches()) {
hidden.dailyMithrilPowerCompleted = currentTime;
return;
}
Matcher dailyShopLimit = DAILY_SHOP_LIMIT.matcher(event.message.getFormattedText());
if (dailyShopLimit.matches()) {
hidden.dailyShopLimitCompleted = currentTime;
}
}
}
@Override
protected Vector2f getSize(List strings) {
if (NotEnoughUpdates.INSTANCE.config.miscOverlays.todoIcons)
return super.getSize(strings).translate(12, 0);
return super.getSize(strings);
}
private static ItemStack[] FETCHUR_ICONS = null;
private static HashMap todoItems;
private static void setupTodoItems() {
todoItems = new HashMap() {
{
addItem("Mithril Powder", "INK_SACK-10");
addItem("God Potion", "GOD_POTION_2");
addItem("Crimson Isle Quest", "SIGN");
addItem("Daily Shop Limit", "HOPPER");
addItem("Rift", "DOUBLE_PLANT-1");
addItem("Cakes", "EPOCH_CAKE_PINK");
addItem("Experiments", "ENCHANTED_BOOK");
addItem("Puzzler", "BOOK");
addItem("Commission", "IRON_PICKAXE");
addItem("Heavy Pearls", "HEAVY_PEARL");
addItem("Gemstone Powder", "PERFECT_AMETHYST_GEM");
addItem("Mithril Powder", "MITHRIL_ORE");
addItem("Cookie Buff", "BOOSTER_COOKIE");
}
private void addItem(String eventName, String internalName) {
ItemStack itemStack = new ItemResolutionQuery(NotEnoughUpdates.INSTANCE.manager)
.withKnownInternalName(internalName).resolveToItemStack();
if (itemStack == null) {
Utils.showOutdatedRepoNotification(internalName);
return;
}
put(eventName, itemStack.copy());
}
};
}
@Override
protected void renderLine(String line, Vector2f position, boolean dummy) {
if (!NotEnoughUpdates.INSTANCE.config.miscOverlays.todoIcons) {
return;
}
GlStateManager.enableDepth();
ItemStack icon = null;
if (todoItems == null) {
setupTodoItems();
}
String clean = Utils.cleanColour(line);
String beforeColon = clean.split(":")[0];
if (beforeColon.startsWith("CUSTOM")) {
icon = CustomTodoHud.INSTANCE.parseItem(CustomTodoHud.INSTANCE.decodeCustomItem(beforeColon));
} else
switch (beforeColon) {
case "Cakes":
icon = todoItems.get("Cakes");
break;
case "Puzzler":
icon = todoItems.get("Puzzler");
break;
case "Godpot":
icon = todoItems.get("God Potion");
break;
case "Fetchur": {
if (FETCHUR_ICONS == null) {
FETCHUR_ICONS = new ItemStack[]{
new ItemStack(Blocks.wool, 50, 14),
new ItemStack(Blocks.stained_glass, 20, 4),
new ItemStack(Items.compass, 1, 0),
new ItemStack(Items.prismarine_crystals, 20, 0),
new ItemStack(Items.fireworks, 1, 0),
NotEnoughUpdates.INSTANCE.manager.jsonToStack(NotEnoughUpdates.INSTANCE.manager
.getItemInformation()
.get("CHEAP_COFFEE")),
new ItemStack(Items.oak_door, 1, 0),
new ItemStack(Items.rabbit_foot, 3, 0),
NotEnoughUpdates.INSTANCE.manager.jsonToStack(NotEnoughUpdates.INSTANCE.manager
.getItemInformation()
.get("SUPERBOOM_TNT")),
new ItemStack(Blocks.pumpkin, 1, 0),
new ItemStack(Items.flint_and_steel, 1, 0),
new ItemStack(Blocks.emerald_ore, 50, 0),
//new ItemStack(Items.ender_pearl, 16, 0)
};
}
ZonedDateTime currentTimeEST = ZonedDateTime.now(ZoneId.of("America/Atikokan"));
long fetchurIndex = ((currentTimeEST.getDayOfMonth() + 1) % 12) - 1;
//Added because disabled fetchur and enabled it again but it was showing the wrong item
//Lets see if this stays correct
if (fetchurIndex < 0) fetchurIndex += 12;
icon = FETCHUR_ICONS[(int) fetchurIndex];
break;
}
case "Commissions":
icon = todoItems.get("Commission");
break;
case "Experiments":
icon = todoItems.get("Experiments");
break;
case "Cookie Buff":
icon = todoItems.get("Cookie Buff");
break;
case "Mithril Powder":
icon = todoItems.get("Mithril Powder");
break;
case "Gemstone Powder":
icon = todoItems.get("Gemstone Powder");
break;
case "Heavy Pearls":
icon = todoItems.get("Heavy Pearls");
break;
case "Free Rift Infusion":
icon = todoItems.get("Rift");
break;
case "Crimson Isle Quests":
icon = todoItems.get("Crimson Isle Quest");
break;
case "NPC Buy Daily Limit":
icon = todoItems.get("Daily Shop Limit");
break;
}
if (icon != null) {
GlStateManager.pushMatrix();
GlStateManager.translate(position.x, position.y, 0);
GlStateManager.scale(0.5f, 0.5f, 1f);
Utils.drawItemStack(icon, 0, 0);
GlStateManager.popMatrix();
position.x += 12;
}
super.renderLine(line, position, dummy);
}
boolean hasErrorMessage = false;
@Override
public boolean isEnabled() {
return NotEnoughUpdates.INSTANCE.config.miscOverlays.todoOverlay2;
}
@Override
public void update() {
long currentTime = System.currentTimeMillis();
NEUConfig.HiddenProfileSpecific hidden = NotEnoughUpdates.INSTANCE.config.getProfileSpecific();
if (hidden == null) return;
long midnightReset = (currentTime - 18000000) / TimeEnums.DAY.time * TimeEnums.DAY.time + 18000000; // 12am est
long pearlsReset = midnightReset - 18000000; //8pm est
long catacombsReset = currentTime / TimeEnums.DAY.time * TimeEnums.DAY.time; // 7pm est
long timeDiffMidnightNow = midnightReset + TimeEnums.DAY.time - currentTime;
long catacombsDiffNow = catacombsReset + TimeEnums.DAY.time - currentTime;
long fetchurComplete = hidden.fetchurCompleted;
if (Minecraft.getMinecraft().currentScreen instanceof GuiChest) {
GuiChest chest = (GuiChest) Minecraft.getMinecraft().currentScreen;
ContainerChest container = (ContainerChest) chest.inventorySlots;
IInventory lower = container.getLowerChestInventory();
String containerName = lower.getDisplayName().getUnformattedText();
ItemStack stack = lower.getStackInSlot(0);
switch (containerName.intern()) {
case "Dimensional Infusion":
if (lower.getSizeInventory() != 9 * 4) break;
var freeInfusionSlot = lower.getStackInSlot(13);
if (freeInfusionSlot == null || freeInfusionSlot.stackSize != 1 ||
freeInfusionSlot.getItem() != Item.getItemFromBlock(Blocks.double_plant) ||
freeInfusionSlot.getItemDamage() != 1) {
break;
}
if (ItemUtils.getLore(freeInfusionSlot).contains("§a§lFREE! §a(Every 4 hours)")) {
hidden.lastFreeRiftInfusionApplied = 0L;
}
break;
case "Commissions":
if (lower.getSizeInventory() < 18) {
break;
}
if (hidden.commissionsCompleted == 0 || hidden.commissionsCompleted < midnightReset) {
hidden.commissionsCompleted = currentTime;
}
for (int i = 9; i < 18; i++) {
stack = lower.getStackInSlot(i);
if (stack != null && stack.hasTagCompound()) {
String[] lore = NotEnoughUpdates.INSTANCE.manager.getLoreFromNBT(stack.getTagCompound());
for (String line : lore) {
if (line.contains("(Daily")) {
hidden.commissionsCompleted = 0;
break;
}
}
}
}
break;
case "Experimentation Table":
if (lower.getSizeInventory() < 36) {
break;
}
stack = lower.getStackInSlot(31);
if (stack != null) {
if (stack.getItem() == Items.blaze_powder) {
if (hidden.experimentsCompleted == 0) {
hidden.experimentsCompleted = currentTime;
return;
}
}
}
ItemStack stackSuperPairs = lower.getStackInSlot(22);
if (stackSuperPairs != null && stackSuperPairs.getItem() == Items.skull &&
stackSuperPairs.getTagCompound() != null) {
String[] lore = NotEnoughUpdates.INSTANCE.manager.getLoreFromNBT(stackSuperPairs.getTagCompound());
String text = lore[lore.length - 1];
String cleanText = Utils.cleanColour(text);
if (cleanText.equals("Experiments on cooldown!")) {
hidden.experimentsCompleted = currentTime;
return;
}
}
hidden.experimentsCompleted = 0;
break;
case "Superpairs Rewards":
if (lower.getSizeInventory() < 27) {
break;
}
stack = lower.getStackInSlot(13);
if (stack != null && Utils.cleanColour(stack.getDisplayName()).equals("Superpairs")) {
hidden.experimentsCompleted = currentTime;
}
case "SkyBlock Menu":
if (lower.getSizeInventory() < 54) {
break;
}
stack = lower.getStackInSlot(51);
case "Booster Cookie":
if (lower.getSizeInventory() < 54) {
break;
}
if (stack != lower.getStackInSlot(51)) {//if we didn't go into this case from the skyblock menu
stack = lower.getStackInSlot(13);
}
if (stack != null && Utils.cleanColour(stack.getDisplayName()).equals("Booster Cookie") &&
stack.getTagCompound() != null) {
String[] lore = NotEnoughUpdates.INSTANCE.manager.getLoreFromNBT(stack.getTagCompound());
for (String line : lore) {
if (line.contains("Duration: ")) {
String clean = line.replaceAll("(\u00a7.)", "");
clean = clean.replaceAll("(\\d)([smhdy])", "$1 $2");
String[] cleanSplit = clean.split(" ");
String[] removeDuration = Arrays.copyOfRange(cleanSplit, 1, cleanSplit.length);
hidden.cookieBuffRemaining = currentTime;
for (int i = 0; i + 1 < removeDuration.length; i++) {
if (i % 2 == 1) continue;
String number = removeDuration[i];
String unit = removeDuration[i + 1];
try {
long val = Integer.parseInt(number);
switch (unit) {
case "Years":
case "Year":
case "y":
hidden.cookieBuffRemaining += val * 365 * 24 * 60 * 60 * 1000;
break;
case "Months":
case "Month":
hidden.cookieBuffRemaining += val * 30 * 24 * 60 * 60 * 1000;
break;
case "Days":
case "Day":
case "d":
hidden.cookieBuffRemaining += val * 24 * 60 * 60 * 1000;
break;
case "Hours":
case "Hour":
case "h":
hidden.cookieBuffRemaining += val * 60 * 60 * 1000;
break;
case "Minutes":
case "Minute":
case "m":
hidden.cookieBuffRemaining += val * 60 * 1000;
break;
case "Seconds":
case "Second":
case "s":
hidden.cookieBuffRemaining += val * 1000;
break;
}
} catch (NumberFormatException e) {
e.printStackTrace();
hidden.cookieBuffRemaining = 0;
if (!hasErrorMessage) {
Utils.addChatMessage(
EnumChatFormatting.YELLOW + "[NEU] Unable to work out your cookie buff timer");
hasErrorMessage = true;
}
break;
}
}
break;
}
}
}
break;
}
}
if (NotEnoughUpdates.INSTANCE.config.miscOverlays.todoOverlayOnlyShowTab &&
!lastTabState) {
overlayStrings = null;
return;
}
boolean foundGodPotText = false;
boolean foundEffectsText = false;
if (SBInfo.getInstance().getLocation() != null && !SBInfo.getInstance().getLocation().equals("dungeon") &&
SBInfo.getInstance().footer != null) {
List effectsLine = TablistAPI.getOptionalWidgetLines(TablistAPI.WidgetNames.ACTIVE_EFFECTS);
for (String line : effectsLine) {
line = Utils.cleanColour(line);
if (line.contains("Active Effects")) {
foundEffectsText = true;
}
Matcher activeEffectsMatcher = PATTERN_ACTIVE_EFFECTS.matcher(line);
Matcher godPotionMatcher = GOD_POTION_TIME.matcher(line);
String godpotRemainingTimeType = null;
long godpotRemainingTime = 0;
long godPotDuration = 0;
if (activeEffectsMatcher.matches()) {
foundGodPotText = true;
try {
for (int i = 1; i < activeEffectsMatcher.groupCount(); i += 2) {
if (activeEffectsMatcher.group(i) == null) {
continue;
}
if (activeEffectsMatcher.group(i).startsWith(" ")) break;
godpotRemainingTime = Integer.parseInt(activeEffectsMatcher.group(i));
godpotRemainingTimeType = activeEffectsMatcher.group(i + 1);
godPotDuration +=
CookieWarning.getEffectRemainingInMilliseconds(godpotRemainingTimeType, godpotRemainingTime);
}
} catch (Exception e) {
if (!hasErrorMessage) {
Utils.addChatMessage(EnumChatFormatting.YELLOW + "[NEU] Unable to work out your god pot timer");
e.printStackTrace();
hasErrorMessage = true;
}
break;
}
} else if (godPotionMatcher.matches()) {
foundGodPotText = true;
try {
for (int i = 1; i < godPotionMatcher.groupCount(); i += 2) {
if (godPotionMatcher.group(i) == null) {
continue;
}
if (godPotionMatcher.group(i).startsWith(" ")) break;
godpotRemainingTime = Integer.parseInt(godPotionMatcher.group(i));
godpotRemainingTimeType = godPotionMatcher.group(i + 1);
godPotDuration +=
CookieWarning.getEffectRemainingInMilliseconds(godpotRemainingTimeType, godpotRemainingTime);
}
} catch (Exception e) {
if (!hasErrorMessage) {
Utils.addChatMessage(EnumChatFormatting.YELLOW + "[NEU] Unable to work out your god pot timer");
e.printStackTrace();
hasErrorMessage = true;
}
break;
}
}
if (godpotRemainingTimeType != null) {
hidden.godPotionDuration = godPotDuration;
}
}
}
if (!foundGodPotText && foundEffectsText) {
hidden.godPotionDuration = 0;
}
if (SBInfo.getInstance().completedQuests != null && SBInfo.getInstance().completedQuests.size() == 5) {
hidden.questBoardCompleted = currentTime;
}
if (!NotEnoughUpdates.INSTANCE.config.miscOverlays.todoOverlay2) {
overlayStrings = null;
return;
}
HashMap map = new HashMap<>();
long cakeEnd = hidden.firstCakeAte + 1000 * 60 * 60 * 48 - currentTime;
//Cake Display
if (cakeEnd <= 0) {
map.put(
0,
DARK_AQUA + "Cakes: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.goneColour] +
"Inactive!"
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.cakesDisplay >= DISPLAYTYPE.VERYSOON.ordinal() &&
cakeEnd < TimeEnums.HOUR.time) {
map.put(
0,
DARK_AQUA + "Cakes: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.verySoonColour] +
Utils.prettyTime(cakeEnd)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.cakesDisplay >= DISPLAYTYPE.SOON.ordinal() &&
cakeEnd < TimeEnums.HALFDAY.time) {
map.put(
0,
DARK_AQUA + "Cakes: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.soonColour] +
Utils.prettyTime(cakeEnd)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.cakesDisplay >= DISPLAYTYPE.KINDASOON.ordinal() &&
cakeEnd < TimeEnums.DAY.time) {
map.put(
0,
DARK_AQUA + "Cakes: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.kindaSoonColour] +
Utils.prettyTime(cakeEnd)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.cakesDisplay >= DISPLAYTYPE.ALWAYS.ordinal()) {
map.put(
0,
DARK_AQUA + "Cakes: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.defaultColour] +
Utils.prettyTime(cakeEnd)
);
}
//CookieBuff Display
if (hidden.cookieBuffRemaining <= 0) {
map.put(
1,
DARK_AQUA + "Cookie Buff: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.goneColour] + "Inactive!"
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.cookieBuffDisplay >= DISPLAYTYPE.VERYSOON.ordinal() &&
hidden.cookieBuffRemaining < TimeEnums.HOUR.time) {
map.put(
1,
DARK_AQUA + "Cookie Buff: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.verySoonColour] +
Utils.prettyTime(hidden.cookieBuffRemaining - currentTime)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.cookieBuffDisplay >= DISPLAYTYPE.SOON.ordinal() &&
hidden.cookieBuffRemaining < TimeEnums.HALFDAY.time) {
map.put(
1,
DARK_AQUA + "Cookie Buff: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.soonColour] +
Utils.prettyTime(hidden.cookieBuffRemaining - currentTime)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.cookieBuffDisplay >= DISPLAYTYPE.KINDASOON.ordinal() &&
hidden.cookieBuffRemaining < TimeEnums.DAY.time) {
map.put(
1,
DARK_AQUA + "Cookie Buff: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.kindaSoonColour] +
Utils.prettyTime(hidden.cookieBuffRemaining - currentTime)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.cookieBuffDisplay >= DISPLAYTYPE.ALWAYS.ordinal()) {
map.put(
1,
DARK_AQUA + "Cookie Buff: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.defaultColour] +
Utils.prettyTime(hidden.cookieBuffRemaining - currentTime)
);
}
//Godpot Display
//do not display in dungeons due to dungeons not having
if (!(SBInfo.getInstance().getLocation() != null && SBInfo.getInstance().getLocation().equals("dungeon"))) {
if (hidden.godPotionDuration <= 0) {
map.put(
2,
DARK_AQUA + "Godpot: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.goneColour] + "Inactive!"
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.godpotDisplay >= DISPLAYTYPE.VERYSOON.ordinal() &&
hidden.godPotionDuration < TimeEnums.HOUR.time) {
map.put(
2,
DARK_AQUA + "Godpot: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.verySoonColour] +
Utils.prettyTime(hidden.godPotionDuration)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.godpotDisplay >= DISPLAYTYPE.SOON.ordinal() &&
hidden.godPotionDuration < TimeEnums.HALFDAY.time) {
map.put(
2,
DARK_AQUA + "Godpot: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.soonColour] +
Utils.prettyTime(hidden.godPotionDuration)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.godpotDisplay >= DISPLAYTYPE.KINDASOON.ordinal() &&
hidden.godPotionDuration < TimeEnums.DAY.time) {
map.put(
2,
DARK_AQUA + "Godpot: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.kindaSoonColour] +
Utils.prettyTime(hidden.godPotionDuration)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.godpotDisplay >= DISPLAYTYPE.ALWAYS.ordinal()) {
map.put(
2,
DARK_AQUA + "Godpot: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.defaultColour] +
Utils.prettyTime(hidden.godPotionDuration)
);
}
}
// Free Rift Infusion
var miscOverlay = NotEnoughUpdates.INSTANCE.config.miscOverlays;
long riftAvailableAgainIn = hidden.lastFreeRiftInfusionApplied + 1000 * 60 * 60 * 4 - currentTime;
if (riftAvailableAgainIn < 0) {
map.put(
12,
DARK_AQUA + "Free Rift Infusion: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.readyColour] + "Ready!"
);
} else if ((miscOverlay.freeRiftInfusionDisplay == 1 && riftAvailableAgainIn < TimeEnums.HALFANHOUR.time) ||
(miscOverlay.freeRiftInfusionDisplay == 2)) {
map.put(
12,
DARK_AQUA + "Free Rift Infusion: " +
EnumChatFormatting.values()[riftAvailableAgainIn < TimeEnums.HALFANHOUR.time
? miscOverlay.verySoonColour
: miscOverlay.defaultColour] + Utils.prettyTime(riftAvailableAgainIn)
);
}
long puzzlerEnd = hidden.puzzlerCompleted + 1000 * 60 * 60 * 24 - currentTime;
//Puzzler Display
if ((hidden.puzzlerCompleted + TimeEnums.DAY.time) < currentTime) {
map.put(
3,
DARK_AQUA + "Puzzler: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.readyColour] + "Ready!"
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.puzzlerDisplay >= DISPLAYTYPE.VERYSOON.ordinal() &&
(hidden.puzzlerCompleted + (TimeEnums.DAY.time - TimeEnums.HALFANHOUR.time)) < currentTime) {
map.put(
3,
DARK_AQUA + "Puzzler: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.verySoonColour] +
Utils.prettyTime(puzzlerEnd)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.puzzlerDisplay >= DISPLAYTYPE.SOON.ordinal() &&
(hidden.puzzlerCompleted + (TimeEnums.DAY.time - TimeEnums.HOUR.time)) < currentTime) {
map.put(
3,
DARK_AQUA + "Puzzler: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.soonColour] +
Utils.prettyTime(puzzlerEnd)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.puzzlerDisplay >= DISPLAYTYPE.KINDASOON.ordinal() &&
(hidden.puzzlerCompleted + (TimeEnums.DAY.time - (TimeEnums.HOUR.time) * 3)) < currentTime) {
map.put(
3,
DARK_AQUA + "Puzzler: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.kindaSoonColour] +
Utils.prettyTime(puzzlerEnd)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.puzzlerDisplay >= DISPLAYTYPE.ALWAYS.ordinal()) {
map.put(
3,
DARK_AQUA + "Puzzler: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.defaultColour] +
Utils.prettyTime(puzzlerEnd)
);
}
//Fetchur Display
if (fetchurComplete < midnightReset) {
map.put(
4,
DARK_AQUA + "Fetchur: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.readyColour] + "Ready!"
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.fetchurDisplay >= DISPLAYTYPE.VERYSOON.ordinal() &&
(fetchurComplete < (midnightReset - TimeEnums.HALFANHOUR.time))) {
map.put(
4,
DARK_AQUA + "Fetchur: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.verySoonColour] +
Utils.prettyTime(timeDiffMidnightNow)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.fetchurDisplay >= DISPLAYTYPE.SOON.ordinal() &&
(fetchurComplete < (midnightReset - TimeEnums.HOUR.time))) {
map.put(
4,
DARK_AQUA + "Fetchur: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.soonColour] +
Utils.prettyTime(timeDiffMidnightNow)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.fetchurDisplay >= DISPLAYTYPE.KINDASOON.ordinal() &&
(fetchurComplete < (midnightReset - (TimeEnums.HOUR.time * 3)))) {
map.put(
4,
DARK_AQUA + "Fetchur: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.kindaSoonColour] +
Utils.prettyTime(timeDiffMidnightNow)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.fetchurDisplay >= DISPLAYTYPE.ALWAYS.ordinal()) {
map.put(
4,
DARK_AQUA + "Fetchur: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.defaultColour] +
Utils.prettyTime(timeDiffMidnightNow)
);
}
//Commissions Display
if (hidden.commissionsCompleted < midnightReset) {
map.put(
5,
DARK_AQUA + "Commissions: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.readyColour] + "Ready! "
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.commissionDisplay >= DISPLAYTYPE.VERYSOON.ordinal() &&
(hidden.commissionsCompleted < (midnightReset - TimeEnums.HALFANHOUR.time))) {
map.put(
5,
DARK_AQUA + "Commissions: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.verySoonColour] +
Utils.prettyTime(timeDiffMidnightNow)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.commissionDisplay >= DISPLAYTYPE.SOON.ordinal() &&
(hidden.commissionsCompleted < (midnightReset - TimeEnums.HOUR.time))) {
map.put(
5,
DARK_AQUA + "Commissions: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.soonColour] +
Utils.prettyTime(timeDiffMidnightNow)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.commissionDisplay >= DISPLAYTYPE.KINDASOON.ordinal() &&
(hidden.commissionsCompleted < (midnightReset - (TimeEnums.HOUR.time * 3)))) {
map.put(
5,
DARK_AQUA + "Commissions: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.kindaSoonColour] +
Utils.prettyTime(timeDiffMidnightNow)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.commissionDisplay >= DISPLAYTYPE.ALWAYS.ordinal()) {
map.put(
5,
DARK_AQUA + "Commissions: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.defaultColour] +
Utils.prettyTime(timeDiffMidnightNow)
);
}
//Experiment Display
if (hidden.experimentsCompleted < catacombsReset) {
map.put(
6,
DARK_AQUA + "Experiments: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.readyColour] + "Ready!"
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.experimentationDisplay >= DISPLAYTYPE.VERYSOON.ordinal() &&
(hidden.experimentsCompleted < (catacombsReset - TimeEnums.HALFANHOUR.time))) {
map.put(
6,
DARK_AQUA + "Experiments: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.verySoonColour] +
Utils.prettyTime(catacombsDiffNow)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.experimentationDisplay >= DISPLAYTYPE.SOON.ordinal() &&
(hidden.experimentsCompleted < (catacombsReset - TimeEnums.HOUR.time))) {
map.put(
6,
DARK_AQUA + "Experiments: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.soonColour] +
Utils.prettyTime(catacombsDiffNow)
);
} else if (
NotEnoughUpdates.INSTANCE.config.miscOverlays.experimentationDisplay >= DISPLAYTYPE.KINDASOON.ordinal() &&
(hidden.experimentsCompleted < (catacombsReset - (TimeEnums.HOUR.time * 3)))) {
map.put(
6,
DARK_AQUA + "Experiments: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.kindaSoonColour] +
Utils.prettyTime(catacombsDiffNow)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.experimentationDisplay >= DISPLAYTYPE.ALWAYS.ordinal()) {
map.put(
6,
DARK_AQUA + "Experiments: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.defaultColour] +
Utils.prettyTime(catacombsDiffNow)
);
}
// Daily Mithril Powder display
if (hidden.dailyMithrilPowerCompleted < catacombsReset) {
map.put(
7,
DARK_AQUA + "Mithril Powder: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.readyColour] + "Ready!"
);
} else if (
NotEnoughUpdates.INSTANCE.config.miscOverlays.dailyMithrilPowderDisplay >= DISPLAYTYPE.VERYSOON.ordinal() &&
(hidden.dailyMithrilPowerCompleted < (catacombsReset - TimeEnums.HALFANHOUR.time))) {
map.put(
7,
DARK_AQUA + "Mithril Powder: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.verySoonColour] +
Utils.prettyTime(catacombsDiffNow)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.dailyMithrilPowderDisplay >= DISPLAYTYPE.SOON.ordinal() &&
(hidden.dailyMithrilPowerCompleted < (catacombsReset - TimeEnums.HOUR.time))) {
map.put(
7,
DARK_AQUA + "Mithril Powder: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.soonColour] +
Utils.prettyTime(catacombsDiffNow)
);
} else if (
NotEnoughUpdates.INSTANCE.config.miscOverlays.dailyMithrilPowderDisplay >= DISPLAYTYPE.KINDASOON.ordinal() &&
(hidden.dailyMithrilPowerCompleted < (catacombsReset - (TimeEnums.HOUR.time * 3)))) {
map.put(
7,
DARK_AQUA + "Mithril Powder: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.kindaSoonColour] +
Utils.prettyTime(catacombsDiffNow)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.dailyMithrilPowderDisplay >=
DISPLAYTYPE.ALWAYS.ordinal()) {
map.put(
7,
DARK_AQUA + "Mithril Powder: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.defaultColour] +
Utils.prettyTime(catacombsDiffNow)
);
}
// Daily Gemstone Powder Display
if (hidden.dailyGemstonePowderCompleted < catacombsReset) {
map.put(
8,
DARK_AQUA + "Gemstone Powder: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.readyColour] + "Ready!"
);
} else if (
NotEnoughUpdates.INSTANCE.config.miscOverlays.dailyGemstonePowderDisplay >= DISPLAYTYPE.VERYSOON.ordinal() &&
(hidden.dailyGemstonePowderCompleted < (catacombsReset - TimeEnums.HALFANHOUR.time))) {
map.put(
8,
DARK_AQUA + "Gemstone Powder: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.verySoonColour] +
Utils.prettyTime(catacombsDiffNow)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.dailyGemstonePowderDisplay >= DISPLAYTYPE.SOON.ordinal() &&
(hidden.dailyGemstonePowderCompleted < (catacombsReset - TimeEnums.HOUR.time))) {
map.put(
8,
DARK_AQUA + "Gemstone Powder: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.soonColour] +
Utils.prettyTime(catacombsDiffNow)
);
} else if (
NotEnoughUpdates.INSTANCE.config.miscOverlays.dailyGemstonePowderDisplay >= DISPLAYTYPE.KINDASOON.ordinal() &&
(hidden.dailyGemstonePowderCompleted < (catacombsReset - (TimeEnums.HOUR.time * 3)))) {
map.put(
8,
DARK_AQUA + "Gemstone Powder: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.kindaSoonColour] +
Utils.prettyTime(catacombsDiffNow)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.dailyGemstonePowderDisplay >=
DISPLAYTYPE.ALWAYS.ordinal()) {
map.put(
8,
DARK_AQUA + "Gemstone Powder: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.defaultColour] +
Utils.prettyTime(catacombsDiffNow)
);
}
//Daily Heavy Pearl Display
if (hidden.dailyHeavyPearlCompleted < pearlsReset) {
map.put(
9,
DARK_AQUA + "Heavy Pearls: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.readyColour] + "Ready!"
);
} else if (
NotEnoughUpdates.INSTANCE.config.miscOverlays.dailyHeavyPearlDisplay >= DISPLAYTYPE.VERYSOON.ordinal() &&
(hidden.dailyHeavyPearlCompleted < (pearlsReset - TimeEnums.HALFANHOUR.time))) {
map.put(
9,
DARK_AQUA + "Heavy Pearls: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.verySoonColour] +
Utils.prettyTime(pearlsReset + 86400000 - currentTime)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.dailyHeavyPearlDisplay >= DISPLAYTYPE.SOON.ordinal() &&
(hidden.dailyHeavyPearlCompleted < (pearlsReset - TimeEnums.HOUR.time))) {
map.put(
9,
DARK_AQUA + "Heavy Pearls: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.soonColour] +
Utils.prettyTime(pearlsReset + 86400000 - currentTime)
);
} else if (
NotEnoughUpdates.INSTANCE.config.miscOverlays.dailyHeavyPearlDisplay >= DISPLAYTYPE.KINDASOON.ordinal() &&
(hidden.dailyHeavyPearlCompleted < (pearlsReset - (TimeEnums.HOUR.time * 3)))) {
map.put(
9,
DARK_AQUA + "Heavy Pearls: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.kindaSoonColour] +
Utils.prettyTime(pearlsReset + 86400000 - currentTime)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.dailyHeavyPearlDisplay >=
DISPLAYTYPE.ALWAYS.ordinal()) {
map.put(
9,
DARK_AQUA + "Heavy Pearls: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.defaultColour] +
Utils.prettyTime(pearlsReset + 86400000 - currentTime)
);
}
//Daily Crimson Isle Quests
if (hidden.questBoardCompleted < midnightReset) {
map.put(
10,
DARK_AQUA + "Crimson Isle Quests: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.readyColour] +
(5 - SBInfo.getInstance().completedQuests.size()) + " left!"
);
} else if (
NotEnoughUpdates.INSTANCE.config.miscOverlays.questBoardDisplay >= DISPLAYTYPE.VERYSOON.ordinal() &&
(hidden.questBoardCompleted < (midnightReset - TimeEnums.HALFANHOUR.time))) {
map.put(
10,
DARK_AQUA + "Crimson Isle Quests: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.verySoonColour] +
Utils.prettyTime(timeDiffMidnightNow)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.questBoardDisplay >= DISPLAYTYPE.SOON.ordinal() &&
(hidden.questBoardCompleted < (midnightReset - TimeEnums.HOUR.time))) {
map.put(
10,
DARK_AQUA + "Crimson Isle Quests: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.soonColour] +
Utils.prettyTime(timeDiffMidnightNow)
);
} else if (
NotEnoughUpdates.INSTANCE.config.miscOverlays.questBoardDisplay >= DISPLAYTYPE.KINDASOON.ordinal() &&
(hidden.questBoardCompleted < (midnightReset - (TimeEnums.HOUR.time * 3)))) {
map.put(
10,
DARK_AQUA + "Crimson Isle Quests: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.kindaSoonColour] +
Utils.prettyTime(timeDiffMidnightNow)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.questBoardDisplay >= DISPLAYTYPE.ALWAYS.ordinal()) {
map.put(
10,
DARK_AQUA + "Crimson Isle Quests: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.defaultColour] +
Utils.prettyTime(timeDiffMidnightNow)
);
}
//Daily Shop Limit
if (hidden.dailyShopLimitCompleted < catacombsReset) {
map.put(
11,
DARK_AQUA + "NPC Buy Daily Limit: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.readyColour] + "Ready!"
);
} else if (
NotEnoughUpdates.INSTANCE.config.miscOverlays.shopLimitDisplay >= DISPLAYTYPE.VERYSOON.ordinal() &&
(hidden.dailyShopLimitCompleted < (catacombsReset - TimeEnums.HALFANHOUR.time))) {
map.put(
11,
DARK_AQUA + "NPC Buy Daily Limit: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.verySoonColour] +
Utils.prettyTime(catacombsDiffNow)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.shopLimitDisplay >= DISPLAYTYPE.SOON.ordinal() &&
(hidden.dailyShopLimitCompleted < (catacombsReset - TimeEnums.HOUR.time))) {
map.put(
11,
DARK_AQUA + "NPC Buy Daily Limit: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.soonColour] +
Utils.prettyTime(catacombsDiffNow)
);
} else if (
NotEnoughUpdates.INSTANCE.config.miscOverlays.shopLimitDisplay >= DISPLAYTYPE.KINDASOON.ordinal() &&
(hidden.dailyShopLimitCompleted < (catacombsReset - (TimeEnums.HOUR.time * 3)))) {
map.put(
11,
DARK_AQUA + "NPC Buy Daily Limit: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.kindaSoonColour] +
Utils.prettyTime(catacombsDiffNow)
);
} else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.shopLimitDisplay >= DISPLAYTYPE.ALWAYS.ordinal()) {
map.put(
11,
DARK_AQUA + "NPC Buy Daily Limit: " +
EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.defaultColour] +
Utils.prettyTime(catacombsDiffNow)
);
}
overlayStrings = new ArrayList<>();
for (int index : NotEnoughUpdates.INSTANCE.config.miscOverlays.todoText2) {
if (map.containsKey(index)) {
String text = map.get(index);
if (hideBecauseOfBingo(text)) continue;
overlayStrings.add(text);
}
}
CustomTodoHud.processInto(overlayStrings);
if (overlayStrings.isEmpty()) overlayStrings = null;
}
private boolean hideBecauseOfBingo(String text) {
if (!SBInfo.getInstance().bingo) return false;
if (!NotEnoughUpdates.INSTANCE.config.miscOverlays.todoOverlayHideAtBingo) return false;
if (text.contains("Cookie Buff")) return true;
if (text.contains("Godpot")) return true;
if (text.contains("Heavy Pearls")) return true;
if (text.contains("Crimson Isle Quests")) return true;
return false;
}
AxisAlignedBB matriarchArea = new AxisAlignedBB(-555, 36, -904, -532, 52, -870);
@SubscribeEvent
public void onMatriarchTick(TickEvent.ClientTickEvent event) {
if (event.phase != TickEvent.Phase.END) return;
if (!"crimson_isle".equals(SBInfo.getInstance().getLocation())) return;
var player = Minecraft.getMinecraft().thePlayer;
if (player == null) return;
if (!matriarchArea.isVecInside(player.getPositionVector())) return;
var matriarchRelevantArmorStands = Minecraft.getMinecraft().theWorld.getEntitiesWithinAABB(
EntityArmorStand.class,
matriarchArea
);
boolean noMorePearlsAvailable = false;
for (var entityArmorStand : matriarchRelevantArmorStands) {
if (entityArmorStand.hasCustomName() &&
entityArmorStand.getCustomNameTag().contains("Heavy Pearls Available: 0")) {
noMorePearlsAvailable = true;
break;
}
}
if (noMorePearlsAvailable) {
var profileSpecific = NotEnoughUpdates.INSTANCE.config.getProfileSpecific();
if (profileSpecific != null)
profileSpecific.dailyHeavyPearlCompleted
= System.currentTimeMillis();
}
}
private enum TimeEnums {
DAY(86400000),
HALFDAY(43200000),
HOUR(3600000),
HALFANHOUR(1800000);
TimeEnums(long time) {
this.time = time;
}
public final long time;
}
private enum DISPLAYTYPE {
NOW,
VERYSOON,
SOON,
KINDASOON,
ALWAYS,
}
}