diff options
4 files changed, 152 insertions, 5 deletions
diff --git a/Update Notes/2.1.1.md b/Update Notes/2.1.1.md index 308d484e..06a64ca0 100644 --- a/Update Notes/2.1.1.md +++ b/Update Notes/2.1.1.md @@ -51,3 +51,4 @@ - Added Ender Node Highlighter, Endermite Nest Alert - GodOfPro - Added CTRL + F support to searchbar and config menu - Lulonaut - Fixed Slayer Overlay to now take Aatrox's +25% Slayer XP buff into account - Taoshi + - Added star cult timer to dwarven mines overlay - efefury diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java index da84e32e..001f34d8 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java @@ -138,11 +138,12 @@ public class Mining { "\u00a73Mithril Powder: \u00a726,243", "\u00a73Gemstone Powder: \u00a7d6,243", "\u00a73Forge 1) \u00a79Diamonite\u00a77: \u00a7aReady!", - "\u00a73Pickaxe CD: \u00a7a78s" + "\u00a73Pickaxe CD: \u00a7a78s", + "\u00a73Star Cult In: \u00a7a78s" } ) @ConfigAccordionId(id = 2) - public List<Integer> dwarvenText2 = new ArrayList<>(Arrays.asList(0, 1, 2, 3, 4)); + public List<Integer> dwarvenText2 = new ArrayList<>(Arrays.asList(0, 1, 2, 3, 4, 5)); @Expose public Position overlayPosition = new Position(10, 100); @@ -199,6 +200,27 @@ public class Mining { @ConfigAccordionId(id = 2) public boolean forgeDisplayOnlyShowTab = false; + @Expose + @ConfigOption( + name = "Star Cult Location", + desc = "Change when the Star Cult timer gets shown" + ) + @ConfigEditorDropdown( + values = {"Dwarven Mines+Crystal Hollows", "Everywhere except dungeons", "Everywhere"} + ) + @ConfigAccordionId(id = 2) + public int starCultDisplayEnabledLocations = 0; + + @Expose + @ConfigOption( + name = "Star Cult Tab", + desc = "Only show the star cult timer when tab list is open\n" + + "\u00A7cThis only works outside of Dwarven Caves!" + ) + @ConfigEditorBoolean + @ConfigAccordionId(id = 2) + public boolean starCultDisplayOnlyShowTab = false; + @ConfigOption( name = "Metal Detector Solver", desc = "" diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java index 7d0b9a0a..b63456f2 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java @@ -27,6 +27,7 @@ import io.github.moulberry.notenoughupdates.core.util.lerp.LerpUtils; import io.github.moulberry.notenoughupdates.miscfeatures.ItemCooldowns; import io.github.moulberry.notenoughupdates.options.NEUConfig; import io.github.moulberry.notenoughupdates.util.SBInfo; +import io.github.moulberry.notenoughupdates.util.StarCultCalculator; import io.github.moulberry.notenoughupdates.util.TabListUtils; import io.github.moulberry.notenoughupdates.util.Utils; import net.minecraft.client.Minecraft; @@ -422,10 +423,13 @@ public class MiningOverlay extends TextTabOverlay { } break; case 4: - //overlayStrings.addAll(forgeStringsEmpty); break; - case 5: overlayStrings.add(pickaxeCooldown); break; + case 5: + overlayStrings.add( + DARK_AQUA + "Star Cult In: " + GREEN + + Utils.prettyTime(StarCultCalculator.getNextStarCult() - System.currentTimeMillis())); + break; } } } else { @@ -433,13 +437,36 @@ public class MiningOverlay extends TextTabOverlay { return; } boolean forgeDisplay = false; + boolean starCultDisplay = false; for (int i = 0; i < NotEnoughUpdates.INSTANCE.config.mining.dwarvenText2.size(); i++) { if (NotEnoughUpdates.INSTANCE.config.mining.dwarvenText2.get(i) == 3) { forgeDisplay = true; } + if (NotEnoughUpdates.INSTANCE.config.mining.dwarvenText2.get(i) == 5) { + starCultDisplay = true; + } } + + if (starCultDisplay) { + if(overlayStrings == null) overlayStrings = new ArrayList<>(); + + if (!NotEnoughUpdates.INSTANCE.config.mining.forgeDisplayOnlyShowTab || + Keyboard.isKeyDown(Minecraft.getMinecraft().gameSettings.keyBindPlayerList.getKeyCode())) { + if (NotEnoughUpdates.INSTANCE.config.mining.starCultDisplayEnabledLocations == 1 && + !SBInfo.getInstance().isInDungeon) { + overlayStrings.add( + DARK_AQUA + "Star Cult In: " + GREEN + + Utils.prettyTime(StarCultCalculator.getNextStarCult() - System.currentTimeMillis())); + } else if (NotEnoughUpdates.INSTANCE.config.mining.starCultDisplayEnabledLocations == 2) { + overlayStrings.add( + DARK_AQUA + "Star Cult In: " + GREEN + + Utils.prettyTime(StarCultCalculator.getNextStarCult() - System.currentTimeMillis())); + } + } + } + if (forgeDisplay) { - overlayStrings = new ArrayList<>(); + if(overlayStrings == null) overlayStrings = new ArrayList<>(); if (!NotEnoughUpdates.INSTANCE.config.mining.forgeDisplayOnlyShowTab || Keyboard.isKeyDown(Minecraft.getMinecraft().gameSettings.keyBindPlayerList.getKeyCode())) { @@ -682,6 +709,12 @@ public class MiningOverlay extends TextTabOverlay { .get("DIAMOND_PICKAXE")) ); put( + "Star Cult In", + NotEnoughUpdates.INSTANCE.manager.jsonToStack(NotEnoughUpdates.INSTANCE.manager + .getItemInformation() + .get("FALLEN_STAR_HAT")) + ); + put( "Thyst Slayer", NotEnoughUpdates.INSTANCE.manager.jsonToStack(NotEnoughUpdates.INSTANCE.manager .getItemInformation() diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/StarCultCalculator.java b/src/main/java/io/github/moulberry/notenoughupdates/util/StarCultCalculator.java new file mode 100644 index 00000000..61aae416 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/StarCultCalculator.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2022 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 <https://www.gnu.org/licenses/>. + */ + +package io.github.moulberry.notenoughupdates.util; + +import java.time.Instant; + +// cryptic helped me a "little" with the calculation +public class StarCultCalculator { + + public static final String[] SEASONS = new String[]{ + "Early Spring", + "Spring", + "Late Spring", + "Early Summer", + "Summer", + "Late Summer", + "Early Autumn", + "Autumn", + "Late Autumn", + "Early Winter", + "Winter", + "Late Winter", + }; + + public static final long HOUR_MS = 50000; + public static final long DAY_MS = 24 * HOUR_MS; + public static final long MONTH_MS = 31 * DAY_MS; + public static final long YEAR_MS = SEASONS.length * MONTH_MS; + public static final long YEAR_0 = 1560275700000L; + + public static int getSkyblockYear() { + long now = Instant.now().toEpochMilli(); + long currentYear = Math.floorDiv((now - YEAR_0), YEAR_MS); + return (int) (currentYear + 1); + } + + public static long getNextStarCult() { + Instant instantNow = Instant.now(); + long nowEpoch = instantNow.toEpochMilli(); + long currentOffset = (nowEpoch - YEAR_0) % YEAR_MS; + + int currentMonth = (int) Math.floorDiv(currentOffset, MONTH_MS); + int currentDay = (int) Math.floorDiv((currentOffset - (long) currentMonth * MONTH_MS) % MONTH_MS, DAY_MS) + 1; + int out = 7; + if (currentDay > 21) { + out = 28; + } else if (currentDay > 14) { + out = 21; + } else if (currentDay > 7) { + out = 14; + } + out--; + Instant cultStart = Instant.ofEpochMilli( + YEAR_0 + (getSkyblockYear() - 1) * YEAR_MS + currentMonth * MONTH_MS + out * DAY_MS); + if (cultStart.isBefore(instantNow)) { + int curYearCult = getSkyblockYear() - 1; + if (out == 28) { + out = 7; + if (currentMonth == 12) { + currentMonth = 1; + curYearCult++; + } else { + currentMonth++; + } + } else { + out += 7; + } + cultStart = Instant.ofEpochMilli(YEAR_0 + (curYearCult) * YEAR_MS + currentMonth * MONTH_MS + out * DAY_MS); + } + + return cultStart.toEpochMilli(); + } +} + |