aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/utils')
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/ColorUtils.java16
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/ItemUtils.java7
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/RegexUtils.java55
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/SkyblockTime.java61
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java4
5 files changed, 142 insertions, 1 deletions
diff --git a/src/main/java/de/hysky/skyblocker/utils/ColorUtils.java b/src/main/java/de/hysky/skyblocker/utils/ColorUtils.java
new file mode 100644
index 00000000..0196edf2
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/utils/ColorUtils.java
@@ -0,0 +1,16 @@
+package de.hysky.skyblocker.utils;
+
+public class ColorUtils {
+ /**
+ * Takes an RGB color as an integer and returns an array of the color's components as floats, in RGB format.
+ * @param color The color to get the components of.
+ * @return An array of the color's components as floats.
+ */
+ public static float[] getFloatComponents(int color) {
+ return new float[] {
+ ((color >> 16) & 0xFF) / 255f,
+ ((color >> 8) & 0xFF) / 255f,
+ (color & 0xFF) / 255f
+ };
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java
index 1aa77080..13b28808 100644
--- a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java
+++ b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java
@@ -33,6 +33,7 @@ import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
+import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Optional;
@@ -214,6 +215,12 @@ public class ItemUtils {
return texture;
}
+ public static Optional<String> getHeadTextureOptional(ItemStack stack) {
+ String texture = getHeadTexture(stack);
+ if (texture.isBlank()) return Optional.empty();
+ return Optional.of(texture);
+ }
+
public static ItemStack getSkyblockerStack() {
try {
ItemStack stack = new ItemStack(Items.PLAYER_HEAD);
diff --git a/src/main/java/de/hysky/skyblocker/utils/RegexUtils.java b/src/main/java/de/hysky/skyblocker/utils/RegexUtils.java
new file mode 100644
index 00000000..5b91a80b
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/utils/RegexUtils.java
@@ -0,0 +1,55 @@
+package de.hysky.skyblocker.utils;
+
+import java.util.OptionalDouble;
+import java.util.OptionalInt;
+import java.util.OptionalLong;
+import java.util.regex.Matcher;
+
+public class RegexUtils {
+ /**
+ * @return An OptionalLong of the first group in the matcher, or an empty OptionalLong if the matcher doesn't find anything.
+ */
+ public static OptionalLong getLongFromMatcher(Matcher matcher) {
+ return getLongFromMatcher(matcher, matcher.hasMatch() ? matcher.end() : 0);
+ }
+
+ /**
+ * @return An OptionalLong of the first group in the matcher, or an empty OptionalLong if the matcher doesn't find anything.
+ */
+ public static OptionalLong getLongFromMatcher(Matcher matcher, int startingIndex) {
+ if (!matcher.find(startingIndex)) return OptionalLong.empty();
+ return OptionalLong.of(Long.parseLong(matcher.group(1).replace(",", "")));
+ }
+
+ /**
+ * @return An OptionalInt of the first group in the matcher, or an empty OptionalInt if the matcher doesn't find anything.
+ */
+ public static OptionalInt getIntFromMatcher(Matcher matcher) {
+ return getIntFromMatcher(matcher, matcher.hasMatch() ? matcher.end() : 0);
+ }
+
+ /**
+ * @return An OptionalInt of the first group in the matcher, or an empty OptionalInt if the matcher doesn't find anything.
+ */
+ public static OptionalInt getIntFromMatcher(Matcher matcher, int startingIndex) {
+ if (!matcher.find(startingIndex)) return OptionalInt.empty();
+ return OptionalInt.of(Integer.parseInt(matcher.group(1).replace(",", "")));
+ }
+
+ /**
+ * @return An OptionalDouble of the first group in the matcher, or an empty OptionalDouble if the matcher doesn't find anything.
+ * @implNote Assumes the decimal separator is `.`
+ */
+ public static OptionalDouble getDoubleFromMatcher(Matcher matcher) {
+ return getDoubleFromMatcher(matcher, matcher.hasMatch() ? matcher.end() : 0);
+ }
+
+ /**
+ * @return An OptionalDouble of the first group in the matcher, or an empty OptionalDouble if the matcher doesn't find anything.
+ * @implNote Assumes the decimal separator is `.`
+ */
+ public static OptionalDouble getDoubleFromMatcher(Matcher matcher, int startingIndex) {
+ if (!matcher.find(startingIndex)) return OptionalDouble.empty();
+ return OptionalDouble.of(Double.parseDouble(matcher.group(1).replace(",", "")));
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/utils/SkyblockTime.java b/src/main/java/de/hysky/skyblocker/utils/SkyblockTime.java
new file mode 100644
index 00000000..045ecc4e
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/utils/SkyblockTime.java
@@ -0,0 +1,61 @@
+package de.hysky.skyblocker.utils;
+
+import de.hysky.skyblocker.utils.scheduler.Scheduler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
+
+public class SkyblockTime {
+ private static final long SKYBLOCK_EPOCH = 1560275700000L;
+ public static final AtomicInteger skyblockYear = new AtomicInteger(0);
+ public static final AtomicReference<Season> skyblockSeason = new AtomicReference<>(Season.SPRING);
+ public static final AtomicReference<Month> skyblockMonth = new AtomicReference<>(Month.EARLY_SPRING);
+ public static final AtomicInteger skyblockDay = new AtomicInteger(0);
+ private static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Time");
+
+ private SkyblockTime() {
+ }
+
+ public static void init() {
+ updateTime();
+ //ScheduleCyclic already runs the task upon scheduling, so there's no need to call updateTime() here
+ Scheduler.INSTANCE.schedule(() -> Scheduler.INSTANCE.scheduleCyclic(SkyblockTime::updateTime, 1200 * 24), (int) (1200000 - (getSkyblockMillis() % 1200000)) / 50);
+ }
+
+ private static long getSkyblockMillis() {
+ return System.currentTimeMillis() - SKYBLOCK_EPOCH;
+ }
+
+ private static int getSkyblockYear() {
+ return (int) (Math.floor(getSkyblockMillis() / 446400000.0) + 1);
+ }
+
+ private static int getSkyblockMonth() {
+ return (int) (Math.floor(getSkyblockMillis() / 37200000.0) % 12);
+ }
+
+ private static int getSkyblockDay() {
+ return (int) (Math.floor(getSkyblockMillis() / 1200000.0) % 31 + 1);
+ }
+
+ private static void updateTime() {
+ skyblockYear.set(getSkyblockYear());
+ skyblockSeason.set(Season.values()[getSkyblockMonth() / 3]);
+ skyblockMonth.set(Month.values()[getSkyblockMonth()]);
+ skyblockDay.set(getSkyblockDay());
+ LOGGER.info("[Skyblocker Time] Skyblock time updated to Year {}, Season {}, Month {}, Day {}", skyblockYear.get(), skyblockSeason.get(), skyblockMonth.get(), skyblockDay.get());
+ }
+
+ public enum Season {
+ SPRING, SUMMER, FALL, WINTER
+ }
+
+ public enum Month {
+ EARLY_SPRING, SPRING, LATE_SPRING,
+ EARLY_SUMMER, SUMMER, LATE_SUMMER,
+ EARLY_FALL, FALL, LATE_FALL,
+ EARLY_WINTER, WINTER, LATE_WINTER
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java b/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java
index 08fb6a86..8a5d32be 100644
--- a/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java
+++ b/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java
@@ -5,6 +5,7 @@ import com.mojang.blaze3d.systems.RenderSystem;
import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor;
import de.hysky.skyblocker.skyblock.accessories.newyearcakes.NewYearCakeBagHelper;
import de.hysky.skyblocker.skyblock.accessories.newyearcakes.NewYearCakesHelper;
+import de.hysky.skyblocker.skyblock.chocolatefactory.ChocolateFactorySolver;
import de.hysky.skyblocker.skyblock.dungeon.CroesusHelper;
import de.hysky.skyblocker.skyblock.dungeon.CroesusProfit;
import de.hysky.skyblocker.skyblock.dungeon.terminal.ColorTerminal;
@@ -55,7 +56,8 @@ public class ContainerSolverManager {
new SuperpairsSolver(),
UltrasequencerSolver.INSTANCE,
new NewYearCakeBagHelper(),
- NewYearCakesHelper.INSTANCE
+ NewYearCakesHelper.INSTANCE,
+ new ChocolateFactorySolver()
};
}