diff options
| author | Rime <81419447+Emirlol@users.noreply.github.com> | 2024-05-29 10:01:19 +0300 | 
|---|---|---|
| committer | Rime <81419447+Emirlol@users.noreply.github.com> | 2024-06-08 04:13:47 +0300 | 
| commit | 72988890442db5566287ec5adc8c6dc01676cdda (patch) | |
| tree | b88cc326f2e923e550a5e0b28210a338d593b23c /src/main/java | |
| parent | b42644da30168189a21260eb67dde29f45ade510 (diff) | |
| download | Skyblocker-72988890442db5566287ec5adc8c6dc01676cdda.tar.gz Skyblocker-72988890442db5566287ec5adc8c6dc01676cdda.tar.bz2 Skyblocker-72988890442db5566287ec5adc8c6dc01676cdda.zip | |
Refactor bz, lbin, avgbin tooltips
Diffstat (limited to 'src/main/java')
6 files changed, 161 insertions, 96 deletions
| diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java index bc79bf76..00ca80e6 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java @@ -9,8 +9,6 @@ import de.hysky.skyblocker.utils.ItemUtils;  import de.hysky.skyblocker.utils.Utils;  import de.hysky.skyblocker.utils.scheduler.Scheduler;  import net.minecraft.client.MinecraftClient; -import net.minecraft.client.item.TooltipType; -import net.minecraft.item.Item;  import net.minecraft.item.ItemStack;  import net.minecraft.nbt.NbtCompound;  import net.minecraft.nbt.NbtElement; @@ -29,93 +27,9 @@ import java.util.concurrent.CompletableFuture;  public class ItemTooltip {      protected static final Logger LOGGER = LoggerFactory.getLogger(ItemTooltip.class.getName());      private static final MinecraftClient client = MinecraftClient.getInstance(); -    protected static final GeneralConfig.ItemTooltip config = SkyblockerConfigManager.get().general.itemTooltip; +    public static final GeneralConfig.ItemTooltip config = SkyblockerConfigManager.get().general.itemTooltip;      private static volatile boolean sentNullWarning = false; -    public static void getTooltip(ItemStack stack, Item.TooltipContext tooltipContext, TooltipType tooltipType, List<Text> lines) { -        if (!Utils.isOnSkyblock() || client.player == null) return; - -        String name = getInternalNameFromNBT(stack, false); -        String internalID = getInternalNameFromNBT(stack, true); -        String neuName = name; -        if (name == null || internalID == null) return; - -        if (name.startsWith("ISSHINY_")) { -            name = "SHINY_" + internalID; -            neuName = internalID; -        } - -        if (lines.isEmpty()) { -            return; -        } - -        int count = stack.getCount(); - -        boolean bazaarExist = false; - -        if (TooltipInfoType.BAZAAR.isTooltipEnabledAndHasOrNullWarning(name)) { -            JsonObject getItem = TooltipInfoType.BAZAAR.getData().getAsJsonObject(name); -            lines.add(Text.literal(String.format("%-18s", "Bazaar buy Price:")) -                    .formatted(Formatting.GOLD) -                    .append(getItem.get("buyPrice").isJsonNull() -                            ? Text.literal("No data").formatted(Formatting.RED) -                            : getCoinsMessage(getItem.get("buyPrice").getAsDouble(), count))); -            lines.add(Text.literal(String.format("%-19s", "Bazaar sell Price:")) -                    .formatted(Formatting.GOLD) -                    .append(getItem.get("sellPrice").isJsonNull() -                            ? Text.literal("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 -        boolean lbinExist = false; -        if (TooltipInfoType.LOWEST_BINS.isTooltipEnabledAndHasOrNullWarning(name) && !bazaarExist) { -            lines.add(Text.literal(String.format("%-19s", "Lowest BIN Price:")) -                    .formatted(Formatting.GOLD) -                    .append(getCoinsMessage(TooltipInfoType.LOWEST_BINS.getData().get(name).getAsDouble(), count))); -            lbinExist = true; -        } - -        if (SkyblockerConfigManager.get().general.itemTooltip.enableAvgBIN) { -            if (TooltipInfoType.ONE_DAY_AVERAGE.getData() == null || TooltipInfoType.THREE_DAY_AVERAGE.getData() == null) { -                nullWarning(); -            } else { -                /* -                  We are skipping check average prices for potions, runes -                  and enchanted books because there is no data for their in API. -                 */ -                neuName = getNeuName(internalID, neuName); - -                if (!neuName.isEmpty() && lbinExist) { -                    GeneralConfig.Average type = config.avg; - -                    // "No data" line because of API not keeping old data, it causes NullPointerException -                    if (type == GeneralConfig.Average.ONE_DAY || type == GeneralConfig.Average.BOTH) { -                        lines.add( -                                Text.literal(String.format("%-19s", "1 Day Avg. Price:")) -                                        .formatted(Formatting.GOLD) -                                        .append(TooltipInfoType.ONE_DAY_AVERAGE.getData().get(neuName) == null -                                                ? Text.literal("No data").formatted(Formatting.RED) -                                                : getCoinsMessage(TooltipInfoType.ONE_DAY_AVERAGE.getData().get(neuName).getAsDouble(), count) -                                        ) -                        ); -                    } -                    if (type == GeneralConfig.Average.THREE_DAY || type == GeneralConfig.Average.BOTH) { -                        lines.add( -                                Text.literal(String.format("%-19s", "3 Day Avg. Price:")) -                                        .formatted(Formatting.GOLD) -                                        .append(TooltipInfoType.THREE_DAY_AVERAGE.getData().get(neuName) == null -                                                ? Text.literal("No data").formatted(Formatting.RED) -                                                : getCoinsMessage(TooltipInfoType.THREE_DAY_AVERAGE.getData().get(neuName).getAsDouble(), count) -                                        ) -                        ); -                    } -                } -            } -        } -    } -      @NotNull      public static String getNeuName(String internalID, String neuName) {          switch (internalID) { diff --git a/src/main/java/de/hysky/skyblocker/utils/Utils.java b/src/main/java/de/hysky/skyblocker/utils/Utils.java index 7c28294f..925879b8 100644 --- a/src/main/java/de/hysky/skyblocker/utils/Utils.java +++ b/src/main/java/de/hysky/skyblocker/utils/Utils.java @@ -5,11 +5,9 @@ import com.google.gson.JsonParser;  import de.hysky.skyblocker.events.SkyblockEvents;  import de.hysky.skyblocker.mixins.accessors.MessageHandlerAccessor;  import de.hysky.skyblocker.skyblock.item.MuseumItemCache; -import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip;  import de.hysky.skyblocker.utils.scheduler.MessageScheduler;  import de.hysky.skyblocker.utils.scheduler.Scheduler;  import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback;  import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;  import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;  import net.fabricmc.fabric.api.networking.v1.PacketSender; @@ -235,7 +233,6 @@ public class Utils {                  if (!isOnSkyblock) {                      if (!isInjected) {                          isInjected = true; -                        ItemTooltipCallback.EVENT.register(ItemTooltip::getTooltip);                      }                      isOnSkyblock = true;                      SkyblockEvents.JOIN.invoker().onSkyblockJoin(); diff --git a/src/main/java/de/hysky/skyblocker/utils/tooltip/AvgBinTooltip.java b/src/main/java/de/hysky/skyblocker/utils/tooltip/AvgBinTooltip.java new file mode 100644 index 00000000..ca36bcf4 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/tooltip/AvgBinTooltip.java @@ -0,0 +1,66 @@ +package de.hysky.skyblocker.utils.tooltip; + +import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.GeneralConfig; +import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; +import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +import java.util.List; + +public class AvgBinTooltip extends TooltipAdder { +	protected AvgBinTooltip(int priority) { +		super(priority); +	} + +	@Override +	public void addToTooltip(List<Text> lore, Slot focusedSlot) { +		final ItemStack itemStack = focusedSlot.getStack(); +		String neuName = ItemTooltip.getInternalNameFromNBT(itemStack, false); +		String internalID = ItemTooltip.getInternalNameFromNBT(itemStack, true); +		if (neuName == null || internalID == null) return; + +		if (neuName.startsWith("ISSHINY_")) neuName = internalID; + +		if (SkyblockerConfigManager.get().general.itemTooltip.enableAvgBIN) { +			if (TooltipInfoType.ONE_DAY_AVERAGE.getData() == null || TooltipInfoType.THREE_DAY_AVERAGE.getData() == null) { +				ItemTooltip.nullWarning(); +			} else { +                /* +                  We are skipping check average prices for potions, runes +                  and enchanted books because there is no data for their in API. +                 */ +				neuName = ItemTooltip.getNeuName(internalID, neuName); + +				if (!neuName.isEmpty() && LBinTooltip.lbinExist) { +					GeneralConfig.Average type = ItemTooltip.config.avg; + +					// "No data" line because of API not keeping old data, it causes NullPointerException +					if (type == GeneralConfig.Average.ONE_DAY || type == GeneralConfig.Average.BOTH) { +						lore.add( +								Text.literal(String.format("%-19s", "1 Day Avg. Price:")) +								    .formatted(Formatting.GOLD) +								    .append(TooltipInfoType.ONE_DAY_AVERAGE.getData().get(neuName) == null +										    ? Text.literal("No data").formatted(Formatting.RED) +										    : ItemTooltip.getCoinsMessage(TooltipInfoType.ONE_DAY_AVERAGE.getData().get(neuName).getAsDouble(), itemStack.getCount()) +								    ) +						); +					} +					if (type == GeneralConfig.Average.THREE_DAY || type == GeneralConfig.Average.BOTH) { +						lore.add( +								Text.literal(String.format("%-19s", "3 Day Avg. Price:")) +								    .formatted(Formatting.GOLD) +								    .append(TooltipInfoType.THREE_DAY_AVERAGE.getData().get(neuName) == null +										    ? Text.literal("No data").formatted(Formatting.RED) +										    : ItemTooltip.getCoinsMessage(TooltipInfoType.THREE_DAY_AVERAGE.getData().get(neuName).getAsDouble(), itemStack.getCount()) +								    ) +						); +					} +				} +			} +		} +	} +} diff --git a/src/main/java/de/hysky/skyblocker/utils/tooltip/BazaarPriceTooltip.java b/src/main/java/de/hysky/skyblocker/utils/tooltip/BazaarPriceTooltip.java new file mode 100644 index 00000000..c43a3fa2 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/tooltip/BazaarPriceTooltip.java @@ -0,0 +1,46 @@ +package de.hysky.skyblocker.utils.tooltip; + +import com.google.gson.JsonObject; +import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; +import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +import java.util.List; + +public class BazaarPriceTooltip extends TooltipAdder { +	public static boolean bazaarExist = false; + +	protected BazaarPriceTooltip(int priority) { +		super(priority); +	} + +	@Override +	public void addToTooltip(List<Text> lore, Slot focusedSlot) { +		bazaarExist = false; +		final ItemStack itemStack = focusedSlot.getStack(); +		final String internalID = ItemTooltip.getInternalNameFromNBT(itemStack, true); +		if (internalID == null) return; +		String name = ItemTooltip.getInternalNameFromNBT(itemStack, false); +		if (name == null) return; + +		if (name.startsWith("ISSHINY_")) name = "SHINY_" + internalID; + +		if (TooltipInfoType.BAZAAR.isTooltipEnabledAndHasOrNullWarning(name)) { +			JsonObject getItem = TooltipInfoType.BAZAAR.getData().getAsJsonObject(name); +			lore.add(Text.literal(String.format("%-18s", "Bazaar buy Price:")) +			             .formatted(Formatting.GOLD) +			             .append(getItem.get("buyPrice").isJsonNull() +					             ? Text.literal("No data").formatted(Formatting.RED) +					             : ItemTooltip.getCoinsMessage(getItem.get("buyPrice").getAsDouble(), itemStack.getCount()))); +			lore.add(Text.literal(String.format("%-19s", "Bazaar sell Price:")) +			             .formatted(Formatting.GOLD) +			             .append(getItem.get("sellPrice").isJsonNull() +					             ? Text.literal("No data").formatted(Formatting.RED) +					             : ItemTooltip.getCoinsMessage(getItem.get("sellPrice").getAsDouble(), itemStack.getCount()))); +			bazaarExist = true; +		} +	} +} diff --git a/src/main/java/de/hysky/skyblocker/utils/tooltip/LBinTooltip.java b/src/main/java/de/hysky/skyblocker/utils/tooltip/LBinTooltip.java new file mode 100644 index 00000000..e35df8fe --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/tooltip/LBinTooltip.java @@ -0,0 +1,39 @@ +package de.hysky.skyblocker.utils.tooltip; + +import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; +import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +import java.util.List; + +public class LBinTooltip extends TooltipAdder { +	public static boolean lbinExist = false; + +	protected LBinTooltip(int priority) { +		super(priority); +	} + +	@Override +	public void addToTooltip(List<Text> lore, Slot focusedSlot) { +		lbinExist = false; +		final ItemStack itemStack = focusedSlot.getStack(); +		final String internalID = ItemTooltip.getInternalNameFromNBT(itemStack, true); +		if (internalID == null) return; +		String name = ItemTooltip.getInternalNameFromNBT(itemStack, false); +		if (name == null) return; + +		if (name.startsWith("ISSHINY_")) name = "SHINY_" + internalID; + +		// bazaarOpened & bazaarExist check for lbin, because Skytils keeps some bazaar item data in lbin api + +		if (TooltipInfoType.LOWEST_BINS.isTooltipEnabledAndHasOrNullWarning(name) && !BazaarPriceTooltip.bazaarExist) { +			lore.add(Text.literal(String.format("%-19s", "Lowest BIN Price:")) +			             .formatted(Formatting.GOLD) +			             .append(ItemTooltip.getCoinsMessage(TooltipInfoType.LOWEST_BINS.getData().get(name).getAsDouble(), itemStack.getCount()))); +			lbinExist = true; +		} +	} +} diff --git a/src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipManager.java b/src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipManager.java index dca81389..b1e902e7 100644 --- a/src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipManager.java +++ b/src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipManager.java @@ -13,13 +13,16 @@ import java.util.List;  public class TooltipManager {  	private static final TooltipAdder[] adders = new TooltipAdder[]{  			new LineSmoothener(), -			new DungeonQualityTooltip(0),  			new NpcPriceTooltip(1), -			new ObtainedTooltip(3), -			new MuseumTooltip(4), -			new ColorTooltip(5), -			new AccessoryTooltip(6), -			new MotesTooltip(0), +			new BazaarPriceTooltip(2), +			new LBinTooltip(3), //Has to come after bz price +			new AvgBinTooltip(4), //Has to come after lbin price +			new DungeonQualityTooltip(5), +			new MotesTooltip(6), +			new ObtainedTooltip(7), +			new MuseumTooltip(8), +			new ColorTooltip(9), +			new AccessoryTooltip(10),  	};  	private static final ArrayList<TooltipAdder> currentScreenAdders = new ArrayList<>(); | 
