From ac59ecef954ff438c8fa3f0bf51c46b20af3138c Mon Sep 17 00:00:00 2001
From: Alexey Krainev <xmrvizzy@ya.ru>
Date: Wed, 3 Feb 2021 13:15:16 +0500
Subject: v1.0.5

---
 .../skyblocker/config/SkyblockerConfig.java        |  1 +
 .../skyblocker/mixin/ChatHudListenerMixin.java     | 29 +++++++++++--
 .../skyblocker/mixin/ItemRendererMixin.java        |  3 +-
 .../skyblocker/skyblock/api/AuctionAPI.java        |  5 +++
 .../skyblocker/skyblock/dwarven/Fetchur.java       | 47 ++++++++++++++++++++++
 .../skyblocker/skyblock/dwarven/Puzzler.java       |  3 +-
 .../me/xmrvizzy/skyblocker/utils/ItemUtils.java    | 39 ++++++++----------
 .../java/me/xmrvizzy/skyblocker/utils/Utils.java   |  1 -
 8 files changed, 99 insertions(+), 29 deletions(-)
 create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/api/AuctionAPI.java
 create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Fetchur.java

(limited to 'src/main/java/me')

diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
index 1e451ea2..cdf60eed 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
@@ -56,6 +56,7 @@ public class SkyblockerConfig implements ConfigData {
 
     public static class DwarvenMines {
         public boolean enableDrillFuel = true;
+        public boolean solveFetchur = true;
         public boolean solvePuzzler = true;
     }
 
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java
index 159fbcee..0e8e807f 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java
@@ -2,21 +2,28 @@ package me.xmrvizzy.skyblocker.mixin;
 
 import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
 import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonPuzzles;
+import me.xmrvizzy.skyblocker.skyblock.dwarven.Fetchur;
 import me.xmrvizzy.skyblocker.skyblock.dwarven.Puzzler;
 import me.xmrvizzy.skyblocker.utils.Utils;
+import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.hud.ChatHudListener;
 import net.minecraft.network.MessageType;
 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;
 
+import java.util.List;
 import java.util.UUID;
 
 @Mixin(ChatHudListener.class)
 public class ChatHudListenerMixin {
 
+    @Shadow @Final private MinecraftClient client;
+
     @Inject(method = "onChatMessage", at = @At("HEAD"), cancellable = true)
     public void onMessage(MessageType messageType, Text message, UUID senderUuid, CallbackInfo ci) {
         String msg = message.getString();
@@ -27,9 +34,25 @@ public class ChatHudListenerMixin {
         }
 
         if (Utils.isSkyblock) {
-            if (SkyblockerConfig.get().locations.dwarvenMines.solvePuzzler &&
-                    msg.contains("[NPC]") && msg.contains("Puzzler"))
-                Puzzler.puzzler(msg);
+            if (msg.contains("[OPEN MENU]")) {
+                List<Text> siblings = message.getSiblings();
+                for (Text sibling : siblings) {
+                    if (sibling.getString().contains("[OPEN MENU]")) {
+                        this.client.player.sendChatMessage(sibling.getStyle().getClickEvent().getValue());
+                    }
+                }
+            }
+
+            if (msg.contains("[NPC]")) {
+                if (SkyblockerConfig.get().locations.dwarvenMines.solveFetchur &&
+                        msg.contains("Fetchur")) {
+                    Fetchur.solve(msg, ci);
+                }
+
+                if (SkyblockerConfig.get().locations.dwarvenMines.solvePuzzler &&
+                        msg.contains("Puzzler"))
+                    Puzzler.solve(msg);
+            }
 
             if (SkyblockerConfig.get().messages.hideAbility &&
                     msg.contains("This ability is currently on cooldown for ") ||
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java
index 41a8fd8a..1992db89 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java
@@ -35,12 +35,13 @@ public abstract class ItemRendererMixin {
                         float current = 3000.0F;
                         float max = 3000.0F;
 
-                        for (String line : ItemUtils.getLore(stack)) {
+                        for (String line : ItemUtils.getTooltipStrings(stack)) {
                             if (line.contains("Fuel: ")) {
                                 String clear = Pattern.compile("[^0-9 /]").matcher(line).replaceAll("").trim();
                                 String[] split = clear.split("/");
                                 current = Integer.parseInt(split[0]);
                                 max = Integer.parseInt(split[1]) * 1000;
+                                break;
                             }
                         }
 
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/AuctionAPI.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/AuctionAPI.java
new file mode 100644
index 00000000..1ca45b74
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/AuctionAPI.java
@@ -0,0 +1,5 @@
+package me.xmrvizzy.skyblocker.skyblock.api;
+
+public class AuctionAPI {
+
+}
\ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Fetchur.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Fetchur.java
new file mode 100644
index 00000000..232ad99a
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Fetchur.java
@@ -0,0 +1,47 @@
+package me.xmrvizzy.skyblocker.skyblock.dwarven;
+
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.text.Text;
+import net.minecraft.text.TranslatableText;
+import net.minecraft.util.Formatting;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class Fetchur {
+
+    public static Map<String, List<String>> getAnswers() {
+        Map<String, List<String>> answers = new HashMap<>();
+        answers.put("yellow, see-through", Arrays.asList(new TranslatableText("block.minecraft.yellow_stained_glass").getString()));
+        answers.put("circular and sometimes moves", Arrays.asList(new TranslatableText("item.minecraft.compass").getString()));
+        answers.put("circlular and sometimes moves", Arrays.asList(new TranslatableText("item.minecraft.compass").getString()));
+        answers.put("expensive minerals", Arrays.asList("Mithril"));
+        answers.put("useful during celebrations", Arrays.asList(new TranslatableText("item.minecraft.firework_rocket").getString()));
+        answers.put("hot, gives energy", Arrays.asList("Cheap Coffee", "Decent Coffee"));
+        answers.put("tall, can be opened", Arrays.asList(new TranslatableText("block.minecraft.oak_door").getString()));
+        answers.put("explosive, more than usual", Arrays.asList("Superboom TNT"));
+        answers.put("wearable, grows", Arrays.asList(new TranslatableText("block.minecraft.pumpkin").getString()));
+        answers.put("shiny, makes sparks", Arrays.asList(new TranslatableText("item.minecraft.flint_and_steel").getString()));
+        answers.put("red and white and you can mine it", Arrays.asList(new TranslatableText("block.minecraft.nether_quartz_ore").getString()));
+        answers.put("round and green, or purple", Arrays.asList(new TranslatableText("item.minecraft.ender_pearl").getString()));
+        answers.put("red and Soft", Arrays.asList(new TranslatableText("block.minecraft.red_wool").getString()));
+        return answers;
+    }
+
+    public static void solve(String message, CallbackInfo ci) {
+        MinecraftClient client = MinecraftClient.getInstance();
+        if (client.player == null) return;
+
+        for (String key : getAnswers().keySet()) {
+            if (message.contains(key)) {
+                Text text = Text.of(message + " " + Formatting.GREEN + getAnswers().get(key).toString());
+                client.player.sendMessage(text, false);
+                ci.cancel();
+                break;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java
index ffc5c4bb..6c1def82 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java
@@ -6,7 +6,8 @@ import net.minecraft.util.Formatting;
 import net.minecraft.util.math.BlockPos;
 
 public class Puzzler {
-    public static void puzzler(String message) {
+
+    public static void solve(String message) {
         MinecraftClient client = MinecraftClient.getInstance();
         if (client.player == null && client.world == null) return;
 
diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java
index ea1db236..198e91bc 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java
@@ -1,8 +1,8 @@
 package me.xmrvizzy.skyblocker.utils;
 
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.item.TooltipContext;
 import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.CompoundTag;
-import net.minecraft.nbt.ListTag;
 import net.minecraft.text.Text;
 
 import java.util.ArrayList;
@@ -11,30 +11,23 @@ import java.util.List;
 
 public class ItemUtils {
 
-    public static List<String> getLore(ItemStack item) {
-        if (item.hasTag() && item.getTag().contains("display", 10)) {
-            CompoundTag tag = item.getTag().getCompound("display");
-
-            if (tag.contains("Lore", 9)) {
-                ListTag lore = tag.getList("Lore", 8);
+    public static List<Text> getTooltip(ItemStack item) {
+        MinecraftClient client = MinecraftClient.getInstance();
+        if (client.player != null && item != null)
+            return item.getTooltip(client.player, TooltipContext.Default.NORMAL);
+        return Collections.emptyList();
+    }
 
-                List<String> list = new ArrayList<>();
-                for (int line = 0; line < lore.size(); line++) {
-                    String string = lore.getString(line);
-                    try {
-                        Text text = Text.Serializer.fromJson(string);
-                        if (text != null) {
-                            string = text.getString();
-                            if (!string.replaceAll("\\s+","").isEmpty())
-                                list.add(string);
-                        }
-                    } catch (Exception e) {}
-                }
+    public static List<String> getTooltipStrings(ItemStack item) {
+        List<Text> lines = getTooltip(item);
+        List<String> list = new ArrayList<>();
 
-                return list;
-            }
+        for (Text line : lines) {
+            String string = line.getString();
+            if (!string.replaceAll("\\s+","").isEmpty())
+                list.add(string);
         }
 
-        return Collections.emptyList();
+        return list;
     }
 }
\ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java
index d9c20fde..719e4e4f 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java
@@ -9,7 +9,6 @@ import net.minecraft.scoreboard.Scoreboard;
 import net.minecraft.scoreboard.ScoreboardObjective;
 import net.minecraft.scoreboard.ScoreboardPlayerScore;
 import net.minecraft.scoreboard.Team;
-import org.w3c.dom.Attr;
 
 import java.util.ArrayList;
 import java.util.Collection;
-- 
cgit