aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormsg-programs <msgdoesstuff@gmail.com>2023-05-19 17:05:13 +0200
committermsg-programs <msgdoesstuff@gmail.com>2023-05-19 17:05:13 +0200
commit615f462a1fc8fb5cc6fbe0c1e070f70241be9137 (patch)
treef72054aeb218f5ef7d24f29e1ce170f0624ff496
parent73968e490b4a6886b05f45a95bfcd2328affdac4 (diff)
parentf0f41378eef1c7bf59827ed707db048db5ff7050 (diff)
downloadSkyblocker-615f462a1fc8fb5cc6fbe0c1e070f70241be9137.tar.gz
Skyblocker-615f462a1fc8fb5cc6fbe0c1e070f70241be9137.tar.bz2
Skyblocker-615f462a1fc8fb5cc6fbe0c1e070f70241be9137.zip
Merge branch 'master' of https://github.com/SkyblockerMod/Skyblocker into skyhytab
Merge new commits.
-rw-r--r--build.gradle7
-rw-r--r--gradle.properties2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java40
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java (renamed from src/main/java/me/xmrvizzy/skyblocker/container/ColorHighlight.java)2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java (renamed from src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolver.java)5
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java (renamed from src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java)5
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java41
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java56
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java363
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/WikiLookup.java29
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java46
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java124
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java8
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SkyblockCraftingRecipe.java60
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java97
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplay.java39
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplayGenerator.java67
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java40
-rw-r--r--src/main/resources/assets/skyblocker/lang/en_us.json2
-rw-r--r--src/main/resources/assets/skyblocker/lang/es_ES.json51
-rw-r--r--src/main/resources/assets/skyblocker/lang/nb_NO.json86
-rw-r--r--src/main/resources/assets/skyblocker/lang/nn_NO.json16
-rw-r--r--src/main/resources/assets/skyblocker/lang/ru_ru.json116
-rw-r--r--src/main/resources/assets/skyblocker/lang/tr_TR.json1
-rw-r--r--src/main/resources/fabric.mod.json3
-rw-r--r--src/main/resources/skyblocker.mixins.json1
34 files changed, 918 insertions, 415 deletions
diff --git a/build.gradle b/build.gradle
index dc1b09be..5ee08867 100644
--- a/build.gradle
+++ b/build.gradle
@@ -50,6 +50,10 @@ dependencies {
// Mod Menu
modImplementation "com.terraformersmc:modmenu:${project.mod_menu_version}"
+ // REI
+ modCompileOnly "me.shedaniel:RoughlyEnoughItems-api-fabric:${project.rei_version}"
+ modRuntimeOnly "me.shedaniel:RoughlyEnoughItems-fabric:${project.rei_version}"
+
// Fabric API. This is technically optional, but you probably want it anyway.
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}"
@@ -113,7 +117,8 @@ modrinth {
versionType = "release"
dependencies = [ // Yet another array. Create a new `ModDependency` or `VersionDependency` with two strings - the ID and the scope
new ModDependency("P7dR8mSH", "required"), // Creates a new required dependency on Fabric API
- new ModDependency("mOgUt4GM", "optional") // modmenu
+ new ModDependency("mOgUt4GM", "optional"), // modmenu
+ new ModDependency("nfn13YXA", "optional") // REI
]
changelog = System.getenv('CHANGELOG')
}
diff --git a/gradle.properties b/gradle.properties
index fa78677c..4b9ccc69 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -15,6 +15,8 @@ fabric_api_version=0.76.0+1.19.4
clothconfig_version=10.0.96
## Mod Menu (https://www.curseforge.com/minecraft/mc-mods/modmenu/files)
mod_menu_version=6.1.0-rc.4
+## REI (https://www.curseforge.com/minecraft/mc-mods/roughly-enough-items/files)
+rei_version=11.0.597
# Mod Properties
mod_version = 1.9.0-beta-tabmenu
diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java
index c866ea01..827e8486 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java
@@ -4,6 +4,7 @@ import me.xmrvizzy.skyblocker.chat.ChatMessageListener;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.discord.DiscordRPCManager;
import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock;
+import me.xmrvizzy.skyblocker.skyblock.api.RepositoryUpdate;
import me.xmrvizzy.skyblocker.skyblock.api.StatsCommand;
import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud;
import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip;
@@ -21,6 +22,7 @@ public class SkyblockerInitializer implements ClientModInitializer {
PriceInfoTooltip.init();
WikiLookup.init();
ItemRegistry.init();
+ RepositoryUpdate.init();
StatsCommand.init();
DwarvenHud.init();
ChatMessageListener.init();
diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
index fa80bcc2..dca733ca 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker;
-import me.xmrvizzy.skyblocker.container.ContainerSolverManager;
+import me.xmrvizzy.skyblocker.gui.ContainerSolverManager;
import me.xmrvizzy.skyblocker.discord.DiscordRPCManager;
import me.xmrvizzy.skyblocker.skyblock.BackpackPreview;
import me.xmrvizzy.skyblocker.skyblock.StatusBarTracker;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java
index 9ee87f2b..9e6b5f64 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java
@@ -3,17 +3,25 @@ package me.xmrvizzy.skyblocker.chat;
import me.xmrvizzy.skyblocker.chat.filters.*;
import me.xmrvizzy.skyblocker.skyblock.api.ApiKeyListener;
import me.xmrvizzy.skyblocker.skyblock.barn.HungryHiker;
+import me.xmrvizzy.skyblocker.skyblock.barn.TreasureHunter;
import me.xmrvizzy.skyblocker.skyblock.dungeon.Reparty;
import me.xmrvizzy.skyblocker.skyblock.dungeon.ThreeWeirdos;
import me.xmrvizzy.skyblocker.skyblock.dungeon.Trivia;
import me.xmrvizzy.skyblocker.skyblock.dwarven.Fetchur;
import me.xmrvizzy.skyblocker.skyblock.dwarven.Puzzler;
-import me.xmrvizzy.skyblocker.skyblock.barn.TreasureHunter;
+import me.xmrvizzy.skyblocker.utils.Utils;
+import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
import net.fabricmc.fabric.api.event.Event;
import net.fabricmc.fabric.api.event.EventFactory;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.text.Text;
+@FunctionalInterface
public interface ChatMessageListener {
+ /**
+ * An event called when a game message is received. Register your listeners in {@link ChatMessageListener#init()}.
+ */
Event<ChatMessageListener> EVENT = EventFactory.createArrayBacked(ChatMessageListener.class,
(listeners) -> (message, asString) -> {
for (ChatMessageListener listener : listeners) {
@@ -23,6 +31,9 @@ public interface ChatMessageListener {
return ChatFilterResult.PASS;
});
+ /**
+ * Registers {@link ChatMessageListener}s to {@link ChatMessageListener#EVENT} and registers {@link ChatMessageListener#EVENT} to {@link ClientReceiveMessageEvents#ALLOW_GAME}
+ */
static void init() {
ChatMessageListener[] listeners = new ChatMessageListener[]{
// Features
@@ -45,8 +56,33 @@ public interface ChatMessageListener {
new TeleportPadFilter(),
new AutopetFilter(),
};
- for (ChatMessageListener listener : listeners)
+ // Register all listeners to EVENT
+ for (ChatMessageListener listener : listeners) {
EVENT.register(listener);
+ }
+ // Register EVENT to ClientReceiveMessageEvents.ALLOW_GAME from fabric api
+ ClientReceiveMessageEvents.ALLOW_GAME.register((message, overlay) -> {
+ if (!Utils.isOnSkyblock) {
+ return true;
+ }
+ ChatFilterResult result = EVENT.invoker().onMessage(message, message.getString());
+ switch (result) {
+ case ACTION_BAR -> {
+ if (overlay) {
+ return true;
+ }
+ ClientPlayerEntity player = MinecraftClient.getInstance().player;
+ if (player != null) {
+ player.sendMessage(message, true);
+ return false;
+ }
+ }
+ case FILTER -> {
+ return false;
+ }
+ }
+ return true;
+ });
}
ChatFilterResult onMessage(Text message, String asString);
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
index e89c32bd..5c8c4c5f 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
@@ -189,7 +189,7 @@ public class SkyblockerConfig implements ConfigData {
NONE;
@Override
- public String toString() {
+ public String toString() {
return I18n.translate("text.autoconfig.skyblocker.option.general.bars.barpositions." + name());
}
@@ -227,7 +227,7 @@ public class SkyblockerConfig implements ConfigData {
BOTH;
@Override
- public String toString() {
+ public String toString() {
return I18n.translate("text.autoconfig.skyblocker.option.general.itemTooltip.avg." + name());
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/container/ColorHighlight.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java
index c4380eab..5120ceac 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/container/ColorHighlight.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java
@@ -1,4 +1,4 @@
-package me.xmrvizzy.skyblocker.container;
+package me.xmrvizzy.skyblocker.gui;
public record ColorHighlight(int slot, int color) {
} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java
index ec086934..84de64eb 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolver.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java
@@ -1,4 +1,4 @@
-package me.xmrvizzy.skyblocker.container;
+package me.xmrvizzy.skyblocker.gui;
import net.minecraft.item.ItemStack;
@@ -6,6 +6,9 @@ import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
+/**
+ * Abstract class for gui solvers. Extend this class to add a new gui solver, like terminal solvers or experiment solvers.
+ */
public abstract class ContainerSolver {
private final Pattern CONTAINER_NAME;
protected final static int GREEN_HIGHLIGHT = 128 << 24 | 64 << 16 | 196 << 8 | 64;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java
index 276ac3b9..c965154f 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java
@@ -1,4 +1,4 @@
-package me.xmrvizzy.skyblocker.container;
+package me.xmrvizzy.skyblocker.gui;
import com.mojang.blaze3d.systems.RenderSystem;
import me.xmrvizzy.skyblocker.skyblock.dungeon.CroesusHelper;
@@ -18,6 +18,9 @@ import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+/**
+ * Manager class for {@link ContainerSolver}s like terminal solvers and experiment solvers. To add a new gui solver, extend {@link ContainerSolver} and register it in {@link #ContainerSolverManager()}.
+ */
public class ContainerSolverManager extends DrawableHelper {
private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile("");
private final ContainerSolver[] solvers;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java
deleted file mode 100644
index 8176a810..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package me.xmrvizzy.skyblocker.mixin;
-
-import me.xmrvizzy.skyblocker.chat.ChatFilterResult;
-import me.xmrvizzy.skyblocker.chat.ChatMessageListener;
-import me.xmrvizzy.skyblocker.utils.Utils;
-import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.gui.hud.ChatHud;
-import net.minecraft.client.gui.hud.MessageIndicator;
-import net.minecraft.client.network.ClientPlayerEntity;
-import net.minecraft.network.message.MessageSignatureData;
-import net.minecraft.text.Text;
-import org.spongepowered.asm.mixin.Final;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Shadow;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-
-@Mixin(ChatHud.class)
-public abstract class ChatHudListenerMixin {
- @Shadow
- @Final
- private MinecraftClient client;
-
- @Inject(method = "addMessage(Lnet/minecraft/text/Text;Lnet/minecraft/network/message/MessageSignatureData;ILnet/minecraft/client/gui/hud/MessageIndicator;Z)V", at = @At("HEAD"), cancellable = true)
- public void skyblocker$onMessage(Text message, MessageSignatureData signature, int ticks, MessageIndicator indicator, boolean refresh, CallbackInfo ci) {
- if (!Utils.isOnSkyblock)
- return;
- String asString = message.getString();
- ChatFilterResult result = ChatMessageListener.EVENT.invoker().onMessage(message, asString);
- switch (result) {
- case ACTION_BAR:
- ClientPlayerEntity player = client.player;
- if (player != null)
- player.sendMessage(message, true);
- case FILTER:
- ci.cancel();
- }
- }
-
-}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java
index 2bc47bba..1f9009b7 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java
@@ -1,7 +1,7 @@
package me.xmrvizzy.skyblocker.mixin;
import me.xmrvizzy.skyblocker.SkyblockerMod;
-import me.xmrvizzy.skyblocker.container.ContainerSolverManager;
+import me.xmrvizzy.skyblocker.gui.ContainerSolverManager;
import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock;
import me.xmrvizzy.skyblocker.utils.Utils;
import net.minecraft.client.MinecraftClient;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java
new file mode 100644
index 00000000..3854dd88
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java
@@ -0,0 +1,56 @@
+package me.xmrvizzy.skyblocker.skyblock.api;
+
+import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry;
+import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
+import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
+import net.minecraft.text.Text;
+
+import java.io.File;
+import java.nio.file.Files;
+import java.util.concurrent.CompletableFuture;
+
+public class RepositoryUpdate {
+
+ /**
+ * Adds command to update repository manually from ingame.
+ * <p></p>
+ * TODO A button could be added to the settings menu that will trigger this command.
+ */
+ public static void init(){
+ ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(
+ ClientCommandManager.literal("skyblocker")
+ .then(ClientCommandManager.literal("updaterepository")
+ .executes(context -> {
+ CompletableFuture.runAsync(() -> {
+ try {
+ ItemRegistry.filesImported = false;
+ File dir = ItemRegistry.LOCAL_ITEM_REPO_DIR.toFile();
+ recursiveDelete(dir);
+ } catch (Exception ex) {
+ ItemRegistry.client.player.sendMessage(
+ Text.translatable("skyblocker.updaterepository.failed")
+ , false
+ );
+ return;
+ }
+
+ ItemRegistry.init();
+ });
+
+ return 1;
+ })
+ )
+ )
+ );
+
+ }
+
+ private static void recursiveDelete(File dir) {
+ if (dir.isDirectory() && !Files.isSymbolicLink(dir.toPath())) {
+ for (File child : dir.listFiles()) {
+ recursiveDelete(child);
+ }
+ }
+ dir.delete();
+ }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java
index c536542b..ec3655f0 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java
@@ -1,8 +1,8 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
-import me.xmrvizzy.skyblocker.container.ColorHighlight;
-import me.xmrvizzy.skyblocker.container.ContainerSolver;
+import me.xmrvizzy.skyblocker.gui.ColorHighlight;
+import me.xmrvizzy.skyblocker.gui.ContainerSolver;
import net.minecraft.item.ItemStack;
import java.util.ArrayList;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java
index f5c97738..0bfc0d60 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java
@@ -1,8 +1,8 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon.terminal;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
-import me.xmrvizzy.skyblocker.container.ColorHighlight;
-import me.xmrvizzy.skyblocker.container.ContainerSolver;
+import me.xmrvizzy.skyblocker.gui.ColorHighlight;
+import me.xmrvizzy.skyblocker.gui.ContainerSolver;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java
index c61395f4..1cf0dcfc 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java
@@ -1,8 +1,8 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon.terminal;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
-import me.xmrvizzy.skyblocker.container.ColorHighlight;
-import me.xmrvizzy.skyblocker.container.ContainerSolver;
+import me.xmrvizzy.skyblocker.gui.ColorHighlight;
+import me.xmrvizzy.skyblocker.gui.ContainerSolver;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java
index 7c56746f..26d2a2c4 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java
@@ -1,8 +1,8 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon.terminal;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
-import me.xmrvizzy.skyblocker.container.ColorHighlight;
-import me.xmrvizzy.skyblocker.container.ContainerSolver;
+import me.xmrvizzy.skyblocker.gui.ColorHighlight;
+import me.xmrvizzy.skyblocker.gui.ContainerSolver;
import net.minecraft.item.ItemStack;
import java.util.ArrayList;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java
index 8d8c86b4..d9263f9a 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java
@@ -23,8 +23,10 @@ import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
import java.util.Locale;
+import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.zip.GZIPInputStream;
@@ -40,6 +42,7 @@ public class PriceInfoTooltip {
private static JsonObject isMuseumJson;
private static boolean nullMsgSend = false;
private final static Gson gson = new Gson();
+ private static final Map<String, String> apiAddresses;
public static void onInjectTooltip(ItemStack stack, TooltipContext context, List<Text> lines) {
if (!Utils.isOnSkyblock || client.player == null) return;
@@ -48,16 +51,13 @@ public class PriceInfoTooltip {
if (name == null) return;
int count = stack.getCount();
- String timestamp = getTimestamp(stack);
boolean bazaarOpened = lines.stream().anyMatch(each -> each.getString().contains("Buy price:") || each.getString().contains("Sell price:"));
if (SkyblockerConfig.get().general.itemTooltip.enableNPCPrice) {
if (npcPricesJson == null) {
- if (!nullMsgSend) {
- client.player.sendMessage(Text.translatable("skyblocker.itemTooltip.nullMessage"), false);
- nullMsgSend = true;
- }
- } else if (npcPricesJson.has(name)) {
+ nullWarning();
+ }
+ else if (npcPricesJson.has(name)) {
lines.add(Text.literal(String.format("%-21s", "NPC Price:"))
.formatted(Formatting.YELLOW)
.append(getCoinsMessage(npcPricesJson.get(name).getAsDouble(), count)));
@@ -67,11 +67,9 @@ public class PriceInfoTooltip {
boolean bazaarExist = false;
if (SkyblockerConfig.get().general.itemTooltip.enableBazaarPrice && !bazaarOpened) {
if (bazaarPricesJson == null) {
- if (!nullMsgSend) {
- client.player.sendMessage(Text.translatable("skyblocker.itemTooltip.nullMessage"), false);
- nullMsgSend = true;
- }
- } else if (bazaarPricesJson.has(name)) {
+ nullWarning();
+ }
+ else if (bazaarPricesJson.has(name)) {
JsonObject getItem = bazaarPricesJson.getAsJsonObject(name);
lines.add(Text.literal(String.format("%-18s", "Bazaar buy Price:"))
.formatted(Formatting.GOLD)
@@ -88,101 +86,115 @@ public class PriceInfoTooltip {
}
// bazaarOpened & bazaarExist check for lbin, because Skytils keeps some bazaar item data in lbin api
+ boolean lbinExist = false;
if (SkyblockerConfig.get().general.itemTooltip.enableLowestBIN && !bazaarOpened && !bazaarExist) {
if (lowestPricesJson == null) {
- if (!nullMsgSend) {
- client.player.sendMessage(Text.translatable("skyblocker.itemTooltip.nullMessage"), false);
- nullMsgSend = true;
- }
- } else if (lowestPricesJson.has(name)) {
+ nullWarning();
+ }
+ else if (lowestPricesJson.has(name)) {
lines.add(Text.literal(String.format("%-19s", "Lowest BIN Price:"))
.formatted(Formatting.GOLD)
.append(getCoinsMessage(lowestPricesJson.get(name).getAsDouble(), count)));
+ lbinExist = true;
}
}
if (SkyblockerConfig.get().general.itemTooltip.enableAvgBIN) {
if (threeDayAvgPricesJson == null || oneDayAvgPricesJson == null) {
- if (!nullMsgSend) {
- client.player.sendMessage(Text.translatable("skyblocker.itemTooltip.nullMessage"), false);
- nullMsgSend = true;
- }
- } else if (threeDayAvgPricesJson.has(name) || oneDayAvgPricesJson.has(name)) {
+ nullWarning();
+ }
+ else {
/*
- We are skipping check average prices for potions and runes
- because there is no data for their in API.
+ We are skipping check average prices for potions, runes
+ and enchanted books because there is no data for their in API.
*/
if (name.contains("PET-")) {
name = name.replace("PET-", "")
- .replace("COMMON", "0")
.replace("UNCOMMON", "1")
+ .replace("COMMON", "0")
.replace("RARE", "2")
.replace("EPIC", "3")
.replace("LEGENDARY", "4")
.replace("MYTHIC", "5")
.replace("-", ";");
- } else if (name.contains("ENCHANTED_BOOK-")) {
- name = name.replace("ENCHANTED_BOOK-", "").replace("-", ";");
- } else if (name.contains("POTION-")) {
- name = "";
} else if (name.contains("RUNE-")) {
+ name = name.replace("RUNE-", "");
+ name = name.substring(0, name.indexOf("-")) + "_RUNE;" + name.substring(name.lastIndexOf("-") + 1);
+ } else if (name.contains("POTION-") || name.contains("ENCHANTED_BOOK-")) {
name = "";
} else {
name = name.replace(":", "-");
}
- SkyblockerConfig.Average type = SkyblockerConfig.get().general.itemTooltip.avg;
+ if (!name.isEmpty() && lbinExist) {
+ SkyblockerConfig.Average type = SkyblockerConfig.get().general.itemTooltip.avg;
- // "No data" line because of API not keeping old data, it causes NullPointerException
- if (!name.isEmpty() && (type == SkyblockerConfig.Average.ONE_DAY || type == SkyblockerConfig.Average.BOTH)) {
- lines.add(Text.literal(String.format("%-19s", "1 Day Avg. Price:"))
- .formatted(Formatting.GOLD)
- .append(oneDayAvgPricesJson.get(name) == null
- ? Text.literal("No data").formatted(Formatting.RED)
- : getCoinsMessage(oneDayAvgPricesJson.get(name).getAsDouble(), count)));
- }
- if (!name.isEmpty() && (type == SkyblockerConfig.Average.THREE_DAY || type == SkyblockerConfig.Average.BOTH)) {
- lines.add(Text.literal(String.format("%-19s", "3 Day Avg. Price:"))
- .formatted(Formatting.GOLD)
- .append(threeDayAvgPricesJson.get(name) == null