diff options
| author | Kevin <92656833+kevinthegreat1@users.noreply.github.com> | 2024-11-25 22:49:15 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-25 22:49:15 -0500 |
| commit | b3916c4631af94bb81514c2c9cfb086f46c5f7ba (patch) | |
| tree | 7f5f8ae8b4f89f266a7eb165c95b9c01ab211637 /src/main/java | |
| parent | 8798d5f0643fd40715d82e0ec5bd9c9efbc83ec0 (diff) | |
| download | Skyblocker-b3916c4631af94bb81514c2c9cfb086f46c5f7ba.tar.gz Skyblocker-b3916c4631af94bb81514c2c9cfb086f46c5f7ba.tar.bz2 Skyblocker-b3916c4631af94bb81514c2c9cfb086f46c5f7ba.zip | |
Fix slot text scaling and update essence adders (#1023)
* Fix slot text scaling and update essence adders
* Refactor container solver and add ContainerAndInventorySolver
* Remove chest value shadow
Diffstat (limited to 'src/main/java')
8 files changed, 61 insertions, 48 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/ChestValue.java b/src/main/java/de/hysky/skyblocker/skyblock/ChestValue.java index 754be63d..26f64257 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/ChestValue.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/ChestValue.java @@ -246,14 +246,12 @@ public class ChestValue { Screens.getButtons(genericContainerScreen).add(chestValueWidget); ChestValueTextWidget chestTitleWidget = new ChestValueTextWidget(backgroundWidth - 8 - chestValueWidth - 2, textRenderer.fontHeight, title.copy().fillStyle(Style.EMPTY.withColor(4210752)), textRenderer); - chestTitleWidget.shadow = false; chestTitleWidget.setPosition(x + 8, y + 6); Screens.getButtons(genericContainerScreen).add(chestTitleWidget); } private static class ChestValueTextWidget extends TextWidget { - - public boolean shadow = true; + public boolean shadow = false; public ChestValueTextWidget(int width, int height, Text message, TextRenderer textRenderer) { super(width, height, message, textRenderer); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/SalvageHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/SalvageHelper.java index 0d945d5d..8f59aeea 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/SalvageHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/SalvageHelper.java @@ -2,21 +2,18 @@ package de.hysky.skyblocker.skyblock.dungeon; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.ItemUtils; -import de.hysky.skyblocker.utils.container.ContainerSolverManager; +import de.hysky.skyblocker.utils.container.ContainerAndInventorySolver; import de.hysky.skyblocker.utils.container.SimpleContainerSolver; import de.hysky.skyblocker.utils.networth.NetworthCalculator; import de.hysky.skyblocker.utils.render.gui.ColorHighlight; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.azureaaron.networth.NetworthResult; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; import net.minecraft.item.ItemStack; import java.util.List; import java.util.regex.Pattern; -public class SalvageHelper extends SimpleContainerSolver { +public class SalvageHelper extends SimpleContainerSolver implements ContainerAndInventorySolver { /** * Pattern to match dungeon items that are salvageable, using a negative lookahead to exclude dungeon items. */ @@ -28,12 +25,10 @@ public class SalvageHelper extends SimpleContainerSolver { @Override public List<ColorHighlight> getColors(Int2ObjectMap<ItemStack> slots) { - Screen currentScreen = MinecraftClient.getInstance().currentScreen; - if (!(currentScreen instanceof GenericContainerScreen genericContainerScreen)) return List.of(); - return ContainerSolverManager.slotMap(genericContainerScreen.getScreenHandler().slots.subList(genericContainerScreen.getScreenHandler().getRows() * 9, genericContainerScreen.getScreenHandler().slots.size())).int2ObjectEntrySet().stream() + return slots.int2ObjectEntrySet().stream() .filter(entry -> ItemUtils.getLoreLineIfContainsMatch(entry.getValue(), DUNGEON_SALVAGABLE) != null) .filter(entry -> isPriceWithinRange(entry.getValue())) - .map(entry -> ColorHighlight.green(entry.getIntKey() + genericContainerScreen.getScreenHandler().getRows() * 9)) + .map(entry -> ColorHighlight.green(entry.getIntKey())) .toList(); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java index a34b873a..c6639dee 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java @@ -121,10 +121,12 @@ public class SlotTextManager { matrices.translate(0.0f, 0.0f, 200.0f); int length = textRenderer.getWidth(slotText.text()); if (length > 16) { - matrices.scale(16f / length, 16f / length, 1.0f); + float scale = 16f / length; + matrices.scale(scale, scale, 1.0f); + // Both of these translations translate by (-x, -y, 0) and then by the correct scaling and translation. switch (slotText.position()) { - case TOP_LEFT, TOP_RIGHT -> matrices.translate(x * length / 16f - x, (y * length / 16.0f) - y, 0.0f); - case BOTTOM_LEFT, BOTTOM_RIGHT -> matrices.translate(x * length / 16f - x, ((y + 16f - textRenderer.fontHeight + 2f + 0.7f) * length / 16.0f) - y, 0.0f); + case TOP_LEFT, TOP_RIGHT -> matrices.translate(x / scale - x, y / scale - y, 0.0f); + case BOTTOM_LEFT, BOTTOM_RIGHT -> matrices.translate(x / scale - x, (y + 16f) / scale - textRenderer.fontHeight + 2f - y, 0.0f); } } else { switch (slotText.position()) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EssenceShopAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EssenceShopAdder.java index 2a838ffe..144a12b0 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EssenceShopAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EssenceShopAdder.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; -import de.hysky.skyblocker.skyblock.item.slottext.SlotText; import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; +import de.hysky.skyblocker.skyblock.item.slottext.SlotText; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.RomanNumerals; import net.minecraft.item.ItemStack; @@ -10,9 +10,7 @@ import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.text.NumberFormat; import java.util.List; -import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -41,10 +39,7 @@ public class EssenceShopAdder extends SimpleSlotTextAdder { if (essenceAmountMatcher == null) return List.of(); String essenceAmount = essenceAmountMatcher.group("essence").replace(",", ""); if (!essenceAmount.matches("-?\\d+")) return List.of(); - NumberFormat NUMBER_FORMATTER_S = NumberFormat.getCompactNumberInstance(Locale.CANADA, NumberFormat.Style.SHORT); - NUMBER_FORMATTER_S.setMinimumFractionDigits(1); - int amount = Integer.parseInt(essenceAmount); - return SlotText.bottomRightList(Text.literal(NUMBER_FORMATTER_S.format(amount)).withColor(0xFFDDC1)); + return SlotText.bottomRightList(Text.literal(YourEssenceAdder.COMPACT_NUMBER_FORMATTER.format(Integer.parseInt(essenceAmount))).withColor(0xFFDDC1)); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/YourEssenceAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/YourEssenceAdder.java index 97bd35df..5d75dcf5 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/YourEssenceAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/YourEssenceAdder.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; -import de.hysky.skyblocker.skyblock.item.slottext.SlotText; import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; +import de.hysky.skyblocker.skyblock.item.slottext.SlotText; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; @@ -12,35 +12,47 @@ import org.jetbrains.annotations.Nullable; import java.text.NumberFormat; import java.util.List; import java.util.Locale; +import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; public class YourEssenceAdder extends SimpleSlotTextAdder { - private static final Pattern ESSENCE = Pattern.compile("You currently own (?<essence>[\\d,]+)"); + private static final Pattern YOUR_ESSENCE = Pattern.compile("You currently own (?<essence>[\\d,]+)"); + private static final Pattern ESSENCE_GUIDE = Pattern.compile("Your \\w+ Essence: (?<essence>[\\d,]+)"); + public static final NumberFormat COMPACT_NUMBER_FORMATTER = NumberFormat.getCompactNumberInstance(Locale.CANADA, NumberFormat.Style.SHORT); - public YourEssenceAdder() { - super("^Your Essence"); - } + static { + COMPACT_NUMBER_FORMATTER.setMinimumFractionDigits(1); + } - @Override - public @NotNull List<SlotText> getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { - String name = stack.getName().getString(); - if (name.contains("Essence")) { - List<Text> lore = ItemUtils.getLore(stack); - if (lore.isEmpty()) return List.of(); - String essenceAmountText = lore.getFirst().getString(); + public YourEssenceAdder() { + super("^(?:Your Essence|Essence Guide)"); + } - Matcher essenceAmountMatcher = ESSENCE.matcher(essenceAmountText); - if (essenceAmountMatcher.find()) { - String essenceAmount = essenceAmountMatcher.group("essence").replace(",", ""); - if (!essenceAmount.matches("-?\\d+")) return List.of(); - NumberFormat NUMBER_FORMATTER_S = NumberFormat.getCompactNumberInstance(Locale.CANADA, NumberFormat.Style.SHORT); - NUMBER_FORMATTER_S.setMinimumFractionDigits(1); - int amount = Integer.parseInt(essenceAmount); + @Override + public @NotNull List<SlotText> getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { + if (stack.getName().getString().contains("Essence")) { + return essenceAmountMatcher(ItemUtils.getLore(stack)).<List<SlotText>>map(essenceAmountMatcher -> { + String essenceAmount = essenceAmountMatcher.group("essence").replace(",", ""); + if (!essenceAmount.matches("-?\\d+")) return List.of(); + return SlotText.bottomRightList(Text.literal(COMPACT_NUMBER_FORMATTER.format(Integer.parseInt(essenceAmount))).withColor(0xFFDDC1)); + }).orElse(List.of()); + } + return List.of(); + } - return SlotText.bottomRightList(Text.literal(NUMBER_FORMATTER_S.format(amount)).withColor(0xFFDDC1)); - } - } - return List.of(); - } -}
\ No newline at end of file + @NotNull + private Optional<Matcher> essenceAmountMatcher(List<Text> lore) { + if (lore.isEmpty()) return Optional.empty(); + Matcher essenceAmountMatcher = YOUR_ESSENCE.matcher(lore.getFirst().getString()); + if (essenceAmountMatcher.find()) { + return Optional.of(essenceAmountMatcher); + } + if (lore.size() < 3) return Optional.empty(); + essenceAmountMatcher = ESSENCE_GUIDE.matcher(lore.get(lore.size() - 3).getString()); + if ((essenceAmountMatcher).find()) { + return Optional.of(essenceAmountMatcher); + } + return Optional.empty(); + } +} diff --git a/src/main/java/de/hysky/skyblocker/utils/container/ContainerAndInventorySolver.java b/src/main/java/de/hysky/skyblocker/utils/container/ContainerAndInventorySolver.java new file mode 100644 index 00000000..8923a46a --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/container/ContainerAndInventorySolver.java @@ -0,0 +1,7 @@ +package de.hysky.skyblocker.utils.container; + +/** + * A solver for a container with the inventory slots included. + * @see ContainerSolver + */ +public interface ContainerAndInventorySolver extends ContainerSolver {} diff --git a/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolver.java b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolver.java index 01259058..9e598052 100644 --- a/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolver.java +++ b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolver.java @@ -8,6 +8,10 @@ import net.minecraft.item.ItemStack; import java.util.List; +/** + * A solver for a container without the inventory slots included. + * @see ContainerAndInventorySolver + */ public interface ContainerSolver extends ContainerMatcher, Resettable { List<ColorHighlight> getColors(Int2ObjectMap<ItemStack> slots); diff --git a/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java index 923fb6cc..668faf2c 100644 --- a/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java +++ b/src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java @@ -130,7 +130,7 @@ public class ContainerSolverManager { public static void onDraw(DrawContext context, GenericContainerScreen genericContainerScreen, List<Slot> slots) { if (currentSolver == null) return; - if (highlights == null) highlights = currentSolver.getColors(slotMap(slots.subList(0, genericContainerScreen.getScreenHandler().getRows() * 9))); + if (highlights == null) highlights = currentSolver.getColors(slotMap(currentSolver instanceof ContainerAndInventorySolver ? slots : slots.subList(0, genericContainerScreen.getScreenHandler().getRows() * 9))); RenderSystem.enableDepthTest(); RenderSystem.colorMask(true, true, true, false); for (ColorHighlight highlight : highlights) { |
