aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorKevin <92656833+kevinthegreat1@users.noreply.github.com>2024-11-25 22:49:15 -0500
committerGitHub <noreply@github.com>2024-11-25 22:49:15 -0500
commitb3916c4631af94bb81514c2c9cfb086f46c5f7ba (patch)
tree7f5f8ae8b4f89f266a7eb165c95b9c01ab211637 /src/main/java
parent8798d5f0643fd40715d82e0ec5bd9c9efbc83ec0 (diff)
downloadSkyblocker-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')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/ChestValue.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/SalvageHelper.java13
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EssenceShopAdder.java9
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/YourEssenceAdder.java62
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/container/ContainerAndInventorySolver.java7
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/container/ContainerSolver.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/container/ContainerSolverManager.java2
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) {