aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/skyblock
diff options
context:
space:
mode:
authorFluboxer <36457056+Fluboxer@users.noreply.github.com>2024-02-22 14:58:43 +0300
committerGitHub <noreply@github.com>2024-02-22 14:58:43 +0300
commitb15c407a0afb72185b02ba8a1a40a42b5a4f0c0e (patch)
treea63be63ec9c3ae54154e04530a16ff444a7510cf /src/main/java/de/hysky/skyblocker/skyblock
parent66d352114f5c318d8415e607856bf17d8163f1f3 (diff)
parentc0f134392958edf0b507a479dac7e85efa0cab80 (diff)
downloadSkyblocker-b15c407a0afb72185b02ba8a1a40a42b5a4f0c0e.tar.gz
Skyblocker-b15c407a0afb72185b02ba8a1a40a42b5a4f0c0e.tar.bz2
Skyblocker-b15c407a0afb72185b02ba8a1a40a42b5a4f0c0e.zip
Merge branch 'SkyblockerMod:master' into Croesus-chest-highlight
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/skyblock')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java32
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java54
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java18
5 files changed, 95 insertions, 14 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java b/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java
index 746235b7..4e87b237 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java
@@ -12,9 +12,10 @@ import java.util.List;
import java.util.Map;
public class UltrasequencerSolver extends ExperimentSolver {
+ public static final UltrasequencerSolver INSTANCE = new UltrasequencerSolver();
private int ultrasequencerNextSlot;
- public UltrasequencerSolver() {
+ private UltrasequencerSolver() {
super("^Ultrasequencer \\(\\w+\\)$");
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java
index 3c049f69..4fd9eeb3 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java
@@ -1,13 +1,17 @@
package de.hysky.skyblocker.skyblock.garden;
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.itemlist.ItemRepository;
import de.hysky.skyblocker.utils.NEURepoManager;
+import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.scheduler.MessageScheduler;
import io.github.moulberry.repo.data.NEUItem;
import it.unimi.dsi.fastutil.objects.Object2IntMap;
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
+import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
+import net.minecraft.client.gui.screen.ingame.HandledScreen;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.NbtElement;
@@ -32,11 +36,20 @@ public class VisitorHelper {
private static final Map<String, ItemStack> itemCache = new HashMap<>();
private static final int TEXT_START_X = 4;
private static final int TEXT_START_Y = 4;
+ private static final int TEXT_INDENT = 8;
private static final int LINE_SPACING = 3;
+ public static void init() {
+ ScreenEvents.BEFORE_INIT.register((client, screen, scaledWidth, scaledHeight) -> {
+ String title = screen.getTitle().getString();
+ if (SkyblockerConfigManager.get().locations.garden.visitorHelper && screen instanceof HandledScreen<?> handledScreen && (Utils.getLocationRaw().equals("garden") && !title.contains("Logbook") || title.startsWith("Bazaar"))) {
+ ScreenEvents.afterRender(screen).register((screen_, context, mouseX, mouseY, delta) -> renderScreen(title, context, client.textRenderer, handledScreen.getScreenHandler(), mouseX, mouseY));
+ }
+ });
+ }
+
public static void renderScreen(String title, DrawContext context, TextRenderer textRenderer, ScreenHandler handler, int mouseX, int mouseY) {
- if (handler.getCursorStack() == ItemStack.EMPTY)
- processVisitorItem(title, handler);
+ if (handler.getCursorStack() == ItemStack.EMPTY) processVisitorItem(title, handler);
drawScreenItems(context, textRenderer, mouseX, mouseY);
}
@@ -51,9 +64,9 @@ public class VisitorHelper {
for (Object2IntMap.Entry<String> itemEntry : visitorEntry.getValue().object2IntEntrySet()) {
String itemText = itemEntry.getKey();
- textWidth = textRenderer.getWidth(itemText);
+ textWidth = textRenderer.getWidth(itemText + " x" + itemEntry.getIntValue());
- if (isMouseOverText(mouseX, mouseY, TEXT_START_X, yPosition, textWidth, textHeight)) {
+ if (isMouseOverText(mouseX, mouseY, TEXT_START_X + TEXT_INDENT, yPosition, textWidth, textHeight)) {
MessageScheduler.INSTANCE.sendMessageAfterCooldown("/bz " + itemText);
return;
}
@@ -107,6 +120,8 @@ public class VisitorHelper {
}
private static void drawScreenItems(DrawContext context, TextRenderer textRenderer, int mouseX, int mouseY) {
+ context.getMatrices().push();
+ context.getMatrices().translate(0, 0, 200);
int index = 0;
for (Map.Entry<String, Object2IntMap<String>> visitorEntry : itemMap.entrySet()) {
String visitorName = visitorEntry.getKey();
@@ -117,6 +132,7 @@ public class VisitorHelper {
index = drawItemEntryWithHover(context, textRenderer, itemEntry, index, mouseX, mouseY);
}
}
+ context.getMatrices().pop();
}
private static int drawItemEntryWithHover(DrawContext context, TextRenderer textRenderer, Map.Entry<String, Integer> itemEntry, int index, int mouseX, int mouseY) {
@@ -145,15 +161,19 @@ public class VisitorHelper {
private static void drawItemEntryWithHover(DrawContext context, TextRenderer textRenderer, ItemStack stack, int amount, int index, int mouseX, int mousseY) {
Text text = Serialization.fromJson(stack.getSubNbt("display").getString("Name")).append(" x" + amount);
- drawTextWithOptionalUnderline(context, textRenderer, text, TEXT_START_X + 8, TEXT_START_Y + (index * (LINE_SPACING + textRenderer.fontHeight)), mouseX, mousseY);
- context.drawItem(stack, TEXT_START_X + 10 + textRenderer.getWidth(text), TEXT_START_Y + (index * (LINE_SPACING + textRenderer.fontHeight)) - textRenderer.fontHeight + 5);
+ drawTextWithOptionalUnderline(context, textRenderer, text, TEXT_START_X + TEXT_INDENT, TEXT_START_Y + (index * (LINE_SPACING + textRenderer.fontHeight)), mouseX, mousseY);
+ // drawItem adds 150 to the z, which puts our z at 350, above the item in the slot (250) and their text (300) and below the cursor stack (382) and their text (432)
+ context.drawItem(stack, TEXT_START_X + TEXT_INDENT + 2 + textRenderer.getWidth(text), TEXT_START_Y + (index * (LINE_SPACING + textRenderer.fontHeight)) - textRenderer.fontHeight + 5);
}
private static void drawTextWithOptionalUnderline(DrawContext context, TextRenderer textRenderer, Text text, int x, int y, int mouseX, int mouseY) {
+ context.getMatrices().push();
+ context.getMatrices().translate(0, 0, 150); // This also puts our z at 350
context.drawText(textRenderer, text, x, y, -1, true);
if (isMouseOverText(mouseX, mouseY, x, y, textRenderer.getWidth(text), textRenderer.fontHeight)) {
context.drawHorizontalLine(x, x + textRenderer.getWidth(text), y + textRenderer.fontHeight, -1);
}
+ context.getMatrices().pop();
}
private static boolean isMouseOverText(double mouseX, double mouseY, int x, int y, int width, int height) {
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java b/src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java
index 2d929c28..7e04652c 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java
@@ -10,13 +10,25 @@ import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
+import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.network.ClientPlayerEntity;
+import net.minecraft.client.option.KeyBinding;
import net.minecraft.command.CommandRegistryAccess;
+import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.text.Text;
+import org.lwjgl.glfw.GLFW;
public class ItemProtection {
+ public static KeyBinding itemProtection;
public static void init() {
+ itemProtection = KeyBindingHelper.registerKeyBinding(new KeyBinding(
+ "key.itemProtection",
+ GLFW.GLFW_KEY_V,
+ "key.categories.skyblocker"
+ ));
ClientCommandRegistrationCallback.EVENT.register(ItemProtection::registerCommand);
}
@@ -61,4 +73,46 @@ public class ItemProtection {
return Command.SINGLE_SUCCESS;
}
+
+ public static void handleKeyPressed(ItemStack heldItem) {
+ PlayerEntity playerEntity = MinecraftClient.getInstance().player;
+ if (playerEntity == null){
+ return;
+ }
+ if (!Utils.isOnSkyblock()) {
+ playerEntity.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.itemProtection.unableToProtect")));
+ return;
+ }
+
+ if (heldItem.isEmpty()) {
+ playerEntity.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.itemProtection.noItemUuid")));
+ return;
+ }
+
+ String itemUuid = ItemUtils.getItemUuid(heldItem);
+ if (!itemUuid.isEmpty()) {
+ ObjectOpenHashSet<String> protectedItems = SkyblockerConfigManager.get().general.protectedItems;
+
+ if (!protectedItems.contains(itemUuid)) {
+ protectedItems.add(itemUuid);
+ SkyblockerConfigManager.save();
+
+ playerEntity.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.itemProtection.added", heldItem.getName())));
+ } else {
+ protectedItems.remove(itemUuid);
+ SkyblockerConfigManager.save();
+
+ playerEntity.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.itemProtection.removed", heldItem.getName())));
+ }
+ } else {
+ playerEntity.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.itemProtection.noItemUuid")));
+ }
+ }
+
+ public static void handleHotbarKeyPressed(ClientPlayerEntity player) {
+ while (itemProtection.wasPressed()) {
+ ItemStack heldItem = player.getMainHandStack();
+ handleKeyPressed(heldItem);
+ }
+ }
}
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 d5be7eee..fbef1bcb 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
@@ -51,7 +51,7 @@ public class ItemTooltip {
boolean bazaarOpened = lines.stream().anyMatch(each -> each.getString().contains("Buy price:") || each.getString().contains("Sell price:"));
if (TooltipInfoType.NPC.isTooltipEnabledAndHasOrNullWarning(internalID)) {
- lines.add(Text.literal(String.format("%-21s", "NPC Price:"))
+ lines.add(Text.literal(String.format("%-21s", "NPC Sell Price:"))
.formatted(Formatting.YELLOW)
.append(getCoinsMessage(TooltipInfoType.NPC.getData().get(internalID).getAsDouble(), count)));
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java
index 6f40f5a8..309ba9ca 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java
@@ -1,16 +1,19 @@
package de.hysky.skyblocker.skyblock.tabhud.widget;
import de.hysky.skyblocker.skyblock.tabhud.util.Ico;
+import de.hysky.skyblocker.skyblock.tabhud.util.PlayerListMgr;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
+import java.util.regex.Pattern;
+
// this widget shows info about the secrets of the dungeon
public class DungeonSecretWidget extends Widget {
- private static final MutableText TITLE = Text.literal("Discoveries").formatted(Formatting.DARK_PURPLE,
- Formatting.BOLD);
+ private static final MutableText TITLE = Text.literal("Discoveries").formatted(Formatting.DARK_PURPLE, Formatting.BOLD);
+ private static final Pattern DISCOVERIES = Pattern.compile("Discoveries: (\\d+)");
public DungeonSecretWidget() {
super(TITLE, Formatting.DARK_PURPLE.getColorValue());
@@ -18,9 +21,12 @@ public class DungeonSecretWidget extends Widget {
@Override
public void updateContent() {
- this.addSimpleIcoText(Ico.CHEST, "Secrets:", Formatting.YELLOW, 31);
- this.addSimpleIcoText(Ico.SKULL, "Crypts:", Formatting.YELLOW, 32);
-
+ if (PlayerListMgr.regexAt(31, DISCOVERIES) != null) {
+ this.addSimpleIcoText(Ico.CHEST, "Secrets:", Formatting.YELLOW, 32);
+ this.addSimpleIcoText(Ico.SKULL, "Crypts:", Formatting.YELLOW, 33);
+ } else {
+ this.addSimpleIcoText(Ico.CHEST, "Secrets:", Formatting.YELLOW, 31);
+ this.addSimpleIcoText(Ico.SKULL, "Crypts:", Formatting.YELLOW, 32);
+ }
}
-
}