diff options
Diffstat (limited to 'src/main/java')
23 files changed, 263 insertions, 162 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java index 9fa72398..2e23bf31 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java @@ -39,6 +39,7 @@ public interface ChatMessageListener { new ImplosionFilter(), new MoltenWaveFilter(), new TeleportPadFilter(), + new AutopetFilter(), }; for (ChatMessageListener listener : listeners) EVENT.register(listener); diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AutopetFilter.java b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AutopetFilter.java new file mode 100644 index 00000000..cdaadeda --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AutopetFilter.java @@ -0,0 +1,36 @@ +package me.xmrvizzy.skyblocker.chat.filters; + +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; +import me.xmrvizzy.skyblocker.chat.ChatPatternListener; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import net.minecraft.client.MinecraftClient; +import net.minecraft.text.LiteralText; +import net.minecraft.text.Text; + +import java.util.Objects; +import java.util.regex.Matcher; + +public class AutopetFilter extends ChatPatternListener { + public AutopetFilter() { + super("^§cAutopet §eequipped your §7.*§e! §a§lVIEW RULE$"); + } + + @Override + public boolean onMatch(Text _message, Matcher matcher) { + if (SkyblockerConfig.get().messages.hideAutopet == ChatFilterResult.ACTION_BAR) { + Objects.requireNonNull(MinecraftClient.getInstance().player).sendMessage( + new LiteralText( + _message.getString().replace("§a§lVIEW RULE", "") + ), true); + } + return true; + } + + @Override + public ChatFilterResult state() { + if (SkyblockerConfig.get().messages.hideAutopet == ChatFilterResult.ACTION_BAR) + return ChatFilterResult.FILTER; + else + return SkyblockerConfig.get().messages.hideAutopet; + } +}
\ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ComboFilter.java b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ComboFilter.java index c05afdbf..714ee9c9 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ComboFilter.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ComboFilter.java @@ -5,7 +5,7 @@ import me.xmrvizzy.skyblocker.config.SkyblockerConfig; public class ComboFilter extends SimpleChatFilter { public ComboFilter() { - super("^(\\+\\d+ Kill Combo \\+\\d+(% ✯ Magic Find| coins per kill)" + + super("^(\\+\\d+ Kill Combo \\+\\d+(% ✯ Magic Find| coins per kill|% Combat Exp)" + "|Your Kill Combo has expired! You reached a \\d+ Kill Combo!)$"); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 85dccd5c..93e1d8e9 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -30,6 +30,8 @@ public class SkyblockerConfig implements ConfigData { public RichPresence richPresence = new RichPresence(); public static class General { + public boolean enableUpdateNotification = true; + public boolean backpackPreviewWithoutShift = false; @ConfigEntry.Gui.Excluded public String apiKey; @@ -46,8 +48,6 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.Gui.CollapsibleObject(startExpanded = true) public Quicknav quicknav = new Quicknav(); - public boolean enableUpdateNotification = true; - @ConfigEntry.Category("itemTooltip") @ConfigEntry.Gui.CollapsibleObject(startExpanded = true) public ItemTooltip itemTooltip = new ItemTooltip(); @@ -79,7 +79,15 @@ public class SkyblockerConfig implements ConfigData { public enum Average { ONE_DAY, THREE_DAY, - BOTH + BOTH; + + public String toString() { + return switch (this) { + case ONE_DAY -> "1 day price"; + case THREE_DAY -> "3 day price"; + case BOTH -> "Both"; + }; + } } public static class ItemTooltip { @@ -153,6 +161,10 @@ public class SkyblockerConfig implements ConfigData { public ChatFilterResult hideTeleportPad = ChatFilterResult.PASS; @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) public ChatFilterResult hideCombo = ChatFilterResult.PASS; + @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) + public ChatFilterResult hideAutopet = ChatFilterResult.PASS; + @ConfigEntry.Gui.Tooltip() + public boolean hideMana = false; } public enum Info { diff --git a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java index efbc3e56..e13dfd09 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java @@ -17,7 +17,7 @@ public class DiscordRPCManager implements IPCListener{ public static long startTimestamp; public static IPCClient client; public boolean isConnected; - public static final Logger logger = LoggerFactory.getLogger("Skyblocker DiscordRPC"); + private static final Logger LOGGER = LoggerFactory.getLogger(DiscordRPCManager.class.getName()); public static DecimalFormat dFormat = new DecimalFormat("###,###.##"); public int cycleCount = 0; @@ -34,17 +34,17 @@ public class DiscordRPCManager implements IPCListener{ public void start(){ try { - logger.info("Starting..."); + LOGGER.info("[Skyblocker DiscordRPC] Starting..."); startTimestamp = OffsetDateTime.now().toEpochSecond(); client = new IPCClient(934607927837356052L); client.setListener(this); try { client.connect(); } catch (Exception e) { - logger.warn("Failed to connect: " + e.getMessage()); + LOGGER.warn("Failed to connect: " + e.getMessage()); } } catch (Throwable ex) { - logger.error("unexpected error occurred while trying to start..."); + LOGGER.error("[Skyblocker DiscordRPC] unexpected error occurred while trying to start..."); ex.printStackTrace(); } } @@ -79,7 +79,7 @@ public class DiscordRPCManager implements IPCListener{ public void stop(){ if (client != null && client.getStatus() == PipeStatus.CONNECTED) { - logger.info("Closing..."); + LOGGER.info("[Skyblocker DiscordRPC] Closing..."); isConnected = false; client.close(); client = null; @@ -88,13 +88,13 @@ public class DiscordRPCManager implements IPCListener{ @Override public void onReady(IPCClient client) { - logger.info("Started!"); + LOGGER.info("[Skyblocker DiscordRPC] Started!"); isConnected = true; } @Override public void onClose(IPCClient client, JsonObject json) { - logger.info("Closed"); + LOGGER.info("[Skyblocker DiscordRPC] Closed"); isConnected = false; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java index 2a9984b3..7e5411aa 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java @@ -33,9 +33,8 @@ public class ChatHudListenerMixin { switch (result) { case ACTION_BAR: ClientPlayerEntity player = client.player; - // Couldn't have received original message if client was null - assert player != null; - player.sendMessage(message, true); + if (player != null) + player.sendMessage(message, true); case FILTER: ci.cancel(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index cba87f48..bd99f2d4 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -47,15 +47,18 @@ public abstract class HandledScreenMixin extends Screen { @Inject(at = @At("HEAD"), method = "keyPressed", cancellable = true) public void keyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable<Boolean> cir) { - if (keyCode != 256 && !MinecraftClient.getInstance().options.keyInventory.matchesKey(keyCode, scanCode)){ - if (WikiLookup.wikiLookup.matchesKey(keyCode, scanCode)) WikiLookup.openWiki(focusedSlot); + if (focusedSlot != null){ + if (keyCode != 256 && !MinecraftClient.getInstance().options.inventoryKey.matchesKey(keyCode, scanCode)){ + if (WikiLookup.wikiLookup.matchesKey(keyCode, scanCode)) WikiLookup.openWiki(focusedSlot); + } } } @Inject(at = @At("HEAD"), method = "drawMouseoverTooltip", cancellable = true) public void drawMouseOverTooltip(MatrixStack matrices, int x, int y, CallbackInfo ci) { String title = ((HandledScreen)(Object)this).getTitle().getString(); - if (Screen.hasShiftDown() && title.equals("Storage") && focusedSlot != null) { + boolean shiftDown = SkyblockerConfig.get().general.backpackPreviewWithoutShift || Screen.hasShiftDown(); + if (shiftDown && title.equals("Storage") && focusedSlot != null) { if (BackpackPreview.renderPreview(matrices, focusedSlot.getIndex(), x, y)) ci.cancel(); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java index 19e0d79e..b9e80bd6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java @@ -24,6 +24,9 @@ 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.regex.Matcher; +import java.util.regex.Pattern; + @Environment(EnvType.CLIENT) @Mixin(InGameHud.class) public abstract class InGameHudMixin extends DrawableHelper { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java index 53a48a04..2638b0a6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java @@ -47,7 +47,7 @@ public class BackpackPreview extends DrawableHelper { } private static File getSaveDir() { - String uuid = MinecraftClient.getInstance().player.getUuidAsString(); + String uuid = MinecraftClient.getInstance().getSession().getUuid(); File dir = FabricLoader.getInstance().getConfigDir().resolve("skyblocker/backpack-preview/" + uuid).toFile(); dir.mkdirs(); return dir; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java index 84eebed3..5d3cf9c4 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java @@ -16,7 +16,8 @@ import java.util.regex.Pattern; public class FancyStatusBars extends DrawableHelper { private static final MinecraftClient client = MinecraftClient.getInstance(); private static final Identifier BARS = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/bars.png"); - private static final Pattern ACTION_BAR_STATUS = Pattern.compile("^§[6c]([0-9]+)/([0-9]+)❤(?:\\+§c[0-9]+\\S)? {3,}(?:§a([0-9]+)§a❈ Defense|(\\S+(?: \\S+)*)) {3,}(?:§b([0-9]+)/([0-9]+)✎ (?:Mana|§3([0-9]+)ʬ)?|(\\S+(?: \\S+)*))(.*)$"); + private static final Pattern ACTION_BAR_MANA = Pattern.compile("§b-\\d+ Mana \\(.*\\) +"); + private static final Pattern ACTION_BAR_STATUS = Pattern.compile("^§[6c](\\d+)/(\\d+)❤(\\+§c\\d+.)? +(?:§a(\\d+)§a❈ Defense|([^✎]*?))?(?: +§b(\\d+)/(\\d+)✎ +(?:Mana|§3(\\d+)ʬ))?(?: +(§[27].*))?$"); private final Resource[] resources = new Resource[]{ // Health @@ -30,29 +31,47 @@ public class FancyStatusBars extends DrawableHelper { }; public boolean update(String actionBar) { - if (!SkyblockerConfig.get().general.bars.enableBars) + if (!SkyblockerConfig.get().general.bars.enableBars) { + if (SkyblockerConfig.get().messages.hideMana) { + Matcher mana = ACTION_BAR_MANA.matcher(actionBar); + if (mana.find()) { + assert client.player != null; + client.player.sendMessage(Text.of(actionBar.replace(mana.group(), "")), true); + return true; + } + } return false; + } + Matcher matcher = ACTION_BAR_STATUS.matcher(actionBar); if (!matcher.matches()) return false; resources[0].setMax(Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2))); - if (matcher.group(3) != null) { - int def = Integer.parseInt(matcher.group(3)); + if (matcher.group(4) != null) { + int def = Integer.parseInt(matcher.group(4)); resources[2].setFillLevel(def, (double) def / ((double) def + 100D)); } - if (matcher.group(5) != null) { - int m = Integer.parseInt(matcher.group(5)); - if (matcher.group(7) != null) - m += Integer.parseInt(matcher.group(7)); - resources[1].setMax(m, Integer.parseInt(matcher.group(6))); + if (matcher.group(6) != null) { + int m = Integer.parseInt(matcher.group(6)); + if (matcher.group(8) != null) + m += Integer.parseInt(matcher.group(8)); + resources[1].setMax(m, Integer.parseInt(matcher.group(7))); } assert client.player != null; resources[3].setFillLevel(client.player.experienceLevel, client.player.experienceProgress); StringBuilder sb = new StringBuilder(); - appendIfNotNull(sb, matcher.group(4)); - appendIfNotNull(sb, matcher.group(8)); + if (matcher.group(3) != null) { + sb.append("§c").append(matcher.group(3)); + } + if (SkyblockerConfig.get().messages.hideMana) { + Matcher mana = ACTION_BAR_MANA.matcher(actionBar); + if (!mana.find()) + appendIfNotNull(sb, matcher.group(5)); + } else { + appendIfNotNull(sb, matcher.group(5)); + } appendIfNotNull(sb, matcher.group(9)); if (!sb.isEmpty()) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java index d4f7fec5..4554372b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java @@ -7,24 +7,27 @@ import me.xmrvizzy.skyblocker.utils.RenderUtils; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; import net.minecraft.util.math.Box; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class DungeonBlaze { + private static final Logger LOGGER = LoggerFactory.getLogger(DungeonBlaze.class.getName()); static Entity highestBlaze = null; static Entity lowestBlaze = null; static boolean renderHooked = false; public static void update() { - if (!Utils.isInDungeons) return; - MinecraftClient client = MinecraftClient.getInstance(); + ClientWorld world = MinecraftClient.getInstance().world; + if (world == null || !Utils.isInDungeons) return; if(!renderHooked){ WorldRenderEvents.END.register(DungeonBlaze::blazeRenderer); renderHooked = true; } - assert client.world != null; - Iterable<Entity> entities = client.world.getEntities(); + Iterable<Entity> entities = world.getEntities(); int highestHealth = 0; int lowestHealth = 99999999; @@ -70,7 +73,7 @@ public class DungeonBlaze { } } }catch(Exception e) { - System.out.println("BlazeRenderer: " + e); + LOGGER.warn("[Skyblocker BlazeRenderer] " + e); } } }
\ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java index f5fd1151..c3da7c18 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java @@ -27,9 +27,8 @@ public class Reparty extends ChatPatternListener { repartying = false; ClientCommandManager.DISPATCHER.register( ClientCommandManager.literal("rp").executes(context -> { - if (!Utils.isOnSkyblock || repartying) + if (!Utils.isOnSkyblock || repartying || client.player == null) return 0; - assert client.player != null; repartying = true; client.player.sendChatMessage("/p list"); return 0; @@ -63,7 +62,10 @@ public class Reparty extends ChatPatternListener { private void reparty() { ClientPlayerEntity playerEntity = client.player; - assert playerEntity != null; + if (playerEntity == null) { + repartying = false; + return; + } sendCommand(playerEntity, "/p disband", 1); StringBuilder sb = new StringBuilder(); int invites = (players.length - 1) / 5 + 1; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/ThreeWeirdos.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/ThreeWeirdos.java index 8f1f3711..da964f07 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/ThreeWeirdos.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/ThreeWeirdos.java @@ -23,17 +23,13 @@ public class ThreeWeirdos extends ChatPatternListener { @Override public boolean onMatch(Text message, Matcher matcher) { MinecraftClient client = MinecraftClient.getInstance(); - assert client.world != null; - assert client.player != null; + if (client.player == null || client.world == null) return false; client.world.getEntitiesByClass( ArmorStandEntity.class, client.player.getBoundingBox().expand(3), entity -> { Text customName = entity.getCustomName(); - if (customName != null && customName.getString().equals(matcher.group(1))) { - return true; - } - return false; + return customName != null && customName.getString().equals(matcher.group(1)); } ).forEach( entity -> entity.setCustomName(Text.of(Formatting.GREEN + matcher.group(1))) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Trivia.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Trivia.java index 51ff1c6a..673797d4 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Trivia.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Trivia.java @@ -31,9 +31,9 @@ public class Trivia extends ChatPatternListener { if (riddle != null) { if (!solutions.contains(riddle)) { ClientPlayerEntity player = MinecraftClient.getInstance().player; - assert player != null; - MinecraftClient.getInstance().player.sendMessage(new LiteralText(" " + Formatting.GOLD + matcher.group(2) + Formatting.RED + " " + riddle), false); - return true; + if (player != null) + MinecraftClient.getInstance().player.sendMessage(new LiteralText(" " + Formatting.GOLD + matcher.group(2) + Formatting.RED + " " + riddle), false); + return player != null; } } else updateSolutions(matcher.group(0)); 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 4d40ea83..57c40654 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 @@ -9,14 +9,14 @@ import net.minecraft.item.Items; import net.minecraft.util.DyeColor; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.*; public class ColorTerminal extends ContainerSolver { - private static final Logger LOGGER = LogManager.getLogger(ColorTerminal.class.getName()); + private static final Logger LOGGER = LoggerFactory.getLogger(ColorTerminal.class.getName()); private static final Map<String, DyeColor> colorFromName; private DyeColor targetColor; private static final Map<Item, DyeColor> itemColor; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Fetchur.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Fetchur.java index ce1dde11..ccd47c5a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Fetchur.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Fetchur.java @@ -26,7 +26,7 @@ public class Fetchur extends ChatPatternListener { @Override public boolean onMatch(Text message, Matcher matcher) { MinecraftClient client = MinecraftClient.getInstance(); - assert client.player != null; + if (client.player == null) return false; String riddle = matcher.group(1); String answer = answers.getOrDefault(riddle, riddle); client.player.sendMessage(Text.of("§e[NPC] Fetchur§f: " + answer), false); 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 f61e007e..06395898 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java @@ -32,8 +32,8 @@ public class Puzzler extends ChatPatternListener { else if (c == '▶') x--; } ClientWorld world = MinecraftClient.getInstance().world; - assert world != null; - world.setBlockStateWithoutNeighborUpdates(new BlockPos(x, 195, z), Blocks.CRIMSON_PLANKS.getDefaultState()); + if (world != null) + world.setBlockStateWithoutNeighborUpdates(new BlockPos(x, 195, z), Blocks.CRIMSON_PLANKS.getDefaultState()); return false; } }
\ No newline at end of file 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 1d70c5e0..3a5980f0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java @@ -4,6 +4,7 @@ import com.google.gson.Gson; import com.google.gson.JsonObject; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.item.TooltipContext; import net.minecraft.item.ItemStack; @@ -13,7 +14,8 @@ import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; import net.minecraft.util.Formatting; import org.apache.commons.lang3.StringUtils; -import org.apache.logging.log4j.LogManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.IOException; import java.io.InputStream; @@ -27,6 +29,7 @@ import java.util.concurrent.CompletableFuture; import java.util.zip.GZIPInputStream; public class PriceInfoTooltip { + private static final Logger LOGGER = LoggerFactory.getLogger(PriceInfoTooltip.class.getName()); private static final SkyblockerMod skyblocker = SkyblockerMod.getInstance(); private static final MinecraftClient client = MinecraftClient.getInstance(); private static JsonObject npcPricesJson; @@ -39,17 +42,16 @@ public class PriceInfoTooltip { private final static Gson gson = new Gson(); public static void onInjectTooltip(ItemStack stack, TooltipContext context, List<Text> lines) { - int count = stack.getCount(); + if (!Utils.isOnSkyblock || client.player == null) return; + String name = getInternalNameFromNBT(stack); - String timestamp = getTimestamp(stack); - List<String> listString = lines.stream() - .map(Text::getString).toList(); + if (name == null) return; - if (client.player == null) { - throw new RuntimeException("[Skyblocker] client.player cannot be null!"); - } + 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 && !listString.contains("NPC Price")) { + if (SkyblockerConfig.get().general.itemTooltip.enableNPCPrice) { if (npcPricesJson == null) { if (!nullMsgSend) { client.player.sendMessage(new TranslatableText("skyblocker.itemTooltip.nullMessage"), false); @@ -62,7 +64,31 @@ public class PriceInfoTooltip { } } - if (SkyblockerConfig.get().general.itemTooltip.enableLowestBIN && !listString.contains("Lowest BIN Price")) { + boolean bazaarExist = false; + if (SkyblockerConfig.get().general.itemTooltip.enableBazaarPrice && !bazaarOpened) { + if (bazaarPricesJson == null) { + if (!nullMsgSend) { + client.player.sendMessage(new TranslatableText("skyblocker.itemTooltip.nullMessage"), false); + nullMsgSend = true; + } + } else if (bazaarPricesJson.has(name)) { + JsonObject getItem = bazaarPricesJson.getAsJsonObject(name); + lines.add(new LiteralText(String.format("%-18s", "Bazaar buy Price:")) + .formatted(Formatting.GOLD) + .append(getItem.get("buyPrice").isJsonNull() + ? new LiteralText("No data").formatted(Formatting.RED) + : getCoinsMessage(getItem.get("buyPrice").getAsDouble(), count))); + lines.add(new LiteralText(String.format("%-19s", "Bazaar sell Price:")) + .formatted(Formatting.GOLD) + .append(getItem.get("sellPrice").isJsonNull() + ? new LiteralText("No data").formatted(Formatting.RED) + : getCoinsMessage(getItem.get("sellPrice").getAsDouble(), count))); + bazaarExist = true; + } + } + + // bazaarOpened & bazaarExist check for lbin, because Skytils keeps some bazaar item data in lbin api + if (SkyblockerConfig.get().general.itemTooltip.enableLowestBIN && !bazaarOpened && !bazaarExist) { if (lowestPricesJson == null) { if (!nullMsgSend) { client.player.sendMessage(new TranslatableText("skyblocker.itemTooltip.nullMessage"), false); @@ -75,7 +101,7 @@ public class PriceInfoTooltip { } } - if (SkyblockerConfig.get().general.itemTooltip.enableAvgBIN && !listString.contains("Avg. BIN Price")) { + if (SkyblockerConfig.get().general.itemTooltip.enableAvgBIN) { if (threeDayAvgPricesJson == null || oneDayAvgPricesJson == null) { if (!nullMsgSend) { client.player.sendMessage(new TranslatableText("skyblocker.itemTooltip.nullMessage"), false); @@ -109,49 +135,23 @@ public class PriceInfoTooltip { // "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)) { - if (oneD |
