aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/skyblock
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/skyblock')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNav.java35
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNavButton.java61
2 files changed, 36 insertions, 60 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNav.java b/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNav.java
index a6adf66b..5fa517cc 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNav.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNav.java
@@ -1,20 +1,16 @@
package de.hysky.skyblocker.skyblock.quicknav;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
-
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.config.configs.QuickNavigationConfig;
-import de.hysky.skyblocker.utils.Utils;
+import de.hysky.skyblocker.utils.Constants;
import de.hysky.skyblocker.utils.datafixer.ItemStackComponentizationFixer;
-import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
-import net.fabricmc.fabric.api.client.screen.v1.Screens;
import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.gui.screen.ingame.HandledScreen;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.item.ItemStack;
+import net.minecraft.item.Items;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -25,16 +21,6 @@ import java.util.regex.PatternSyntaxException;
public class QuickNav {
private static final Logger LOGGER = LoggerFactory.getLogger(QuickNav.class);
- public static void init() {
- ScreenEvents.AFTER_INIT.register((client, screen, scaledWidth, scaledHeight) -> {
- if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().quickNav.enableQuickNav && screen instanceof HandledScreen<?> && client.player != null && !client.player.isCreative()) {
- String screenTitle = screen.getTitle().getString().trim();
- List<QuickNavButton> buttons = QuickNav.init(screenTitle);
- for (QuickNavButton button : buttons) Screens.getButtons(screen).add(button);
- }
- });
- }
-
public static List<QuickNavButton> init(String screenTitle) {
List<QuickNavButton> buttons = new ArrayList<>();
QuickNavigationConfig data = SkyblockerConfigManager.get().quickNav;
@@ -51,6 +37,8 @@ public class QuickNav {
if (data.button10.render) buttons.add(parseButton(data.button10, screenTitle, 9));
if (data.button11.render) buttons.add(parseButton(data.button11, screenTitle, 10));
if (data.button12.render) buttons.add(parseButton(data.button12, screenTitle, 11));
+ if (data.button13.render) buttons.add(parseButton(data.button13, screenTitle, 12));
+ if (data.button14.render) buttons.add(parseButton(data.button14, screenTitle, 13));
} catch (CommandSyntaxException e) {
LOGGER.error("[Skyblocker] Failed to initialize Quick Nav Button", e);
}
@@ -58,22 +46,19 @@ public class QuickNav {
}
private static QuickNavButton parseButton(QuickNavigationConfig.QuickNavItem buttonInfo, String screenTitle, int id) throws CommandSyntaxException {
- QuickNavigationConfig.ItemData itemData = buttonInfo.item;
- ItemStack stack = ItemStackComponentizationFixer.fromComponentsString(itemData.id, Math.clamp(itemData.count, 1, 99), itemData.components);
- boolean uiTitleMatches = false;
+ QuickNavigationConfig.ItemData itemData = buttonInfo.itemData;
+ ItemStack stack = itemData != null && itemData.item != null && itemData.components != null ? ItemStackComponentizationFixer.fromComponentsString(itemData.item.toString(), Math.clamp(itemData.count, 1, 99), itemData.components) : new ItemStack(Items.BARRIER);
+ boolean uiTitleMatches = false;
try {
uiTitleMatches = screenTitle.matches(buttonInfo.uiTitle);
} catch (PatternSyntaxException e) {
- LOGGER.error("[Skyblocker] Failed to parse Quick Nav Button", e);
+ LOGGER.error("[Skyblocker] Failed to parse Quick Nav Button with regex: {}", buttonInfo.uiTitle, e);
ClientPlayerEntity player = MinecraftClient.getInstance().player;
if (player != null) {
- player.sendMessage(Text.of(Formatting.RED + "[Skyblocker] Invalid regex in quicknav button " + (id + 1) + "!"), false);
+ player.sendMessage(Constants.PREFIX.get().append(Text.literal("Invalid regex in Quick Nav Button " + (id + 1) + "!").formatted(Formatting.RED)), false);
}
}
- return new QuickNavButton(id,
- uiTitleMatches,
- buttonInfo.clickEvent,
- stack);
+ return new QuickNavButton(id, uiTitleMatches, buttonInfo.clickEvent, stack);
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNavButton.java b/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNavButton.java
index 7db78590..f9ca0940 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNavButton.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNavButton.java
@@ -1,7 +1,6 @@
package de.hysky.skyblocker.skyblock.quicknav;
import com.mojang.blaze3d.systems.RenderSystem;
-
import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor;
import de.hysky.skyblocker.utils.scheduler.MessageScheduler;
import net.fabricmc.api.EnvType;
@@ -16,7 +15,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
-@Environment(value=EnvType.CLIENT)
+@Environment(value = EnvType.CLIENT)
public class QuickNavButton extends ClickableWidget {
private final int index;
private boolean toggled;
@@ -25,18 +24,24 @@ public class QuickNavButton extends ClickableWidget {
/**
* Checks if the current tab is a top tab based on its index.
- * @return true if the index is less than 6, false otherwise.
+ *
+ * @return true if the index is less than 7, false otherwise.
*/
private boolean isTopTab() {
- return index < 6;
+ return index < 7;
+ }
+
+ public boolean toggled() {
+ return toggled;
}
/**
* Constructs a new QuickNavButton with the given parameters.
- * @param index the index of the button.
+ *
+ * @param index the index of the button.
* @param toggled the toggled state of the button.
* @param command the command to execute when the button is clicked.
- * @param icon the icon to display on the button.
+ * @param icon the icon to display on the button.
*/
public QuickNavButton(int index, boolean toggled, String command, ItemStack icon) {
super(0, 0, 26, 32, Text.empty());
@@ -49,18 +54,18 @@ public class QuickNavButton extends ClickableWidget {
private void updateCoordinates() {
Screen screen = MinecraftClient.getInstance().currentScreen;
if (screen instanceof HandledScreen<?> handledScreen) {
- int x = ((HandledScreenAccessor)handledScreen).getX();
- int y = ((HandledScreenAccessor)handledScreen).getY();
- int h = ((HandledScreenAccessor)handledScreen).getBackgroundHeight();
- if (h > 166) --h; // why is this even a thing
- this.setX(x + this.index % 6 * 26 + 4);
- this.setY(this.index < 6 ? y - 26 : y + h - 4);
+ int x = ((HandledScreenAccessor) handledScreen).getX();
+ int y = ((HandledScreenAccessor) handledScreen).getY();
+ int h = ((HandledScreenAccessor) handledScreen).getBackgroundHeight();
+ this.setX(x + this.index % 7 * 25);
+ this.setY(this.index < 7 ? y - 28 : y + h - 4);
}
}
/**
* Handles click events. If the button is not currently toggled,
* it sets the toggled state to true and sends a message with the command after cooldown.
+ *
* @param mouseX the x-coordinate of the mouse click
* @param mouseY the y-coordinate of the mouse click
*/
@@ -78,9 +83,10 @@ public class QuickNavButton extends ClickableWidget {
* The method first updates the coordinates of the button,
* then calculates appropriate values for rendering based on its current state,
* and finally draws both the background and icon of the button on screen.
+ *
* @param context the context in which to render the button
- * @param mouseX the x-coordinate of the mouse cursor
- * @param mouseY the y-coordinate of the mouse cursor
+ * @param mouseX the x-coordinate of the mouse cursor
+ * @param mouseY the y-coordinate of the mouse cursor
*/
@Override
public void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) {
@@ -88,31 +94,16 @@ public class QuickNavButton extends ClickableWidget {
RenderSystem.disableDepthTest();
// Construct the texture identifier based on the index and toggled state
- String tabType = isTopTab() ? "top" : "bottom";
- Identifier BUTTON_TEXTURES = new Identifier("container/creative_inventory/tab_" + tabType +
- (toggled ? "_selected_" : "_unselected_") + 2);
+ Identifier tabTexture = new Identifier("container/creative_inventory/tab_" + (isTopTab() ? "top" : "bottom") + "_" + (toggled ? "selected" : "unselected") + "_" + (index % 7 + 1));
// Render the button texture
- int y = this.getY();
- if (this.toggled) {
- if (this.index < 6) y -= 2;
- } else {
- y += (this.index >= 6) ? 4 : -2;
- }
- int height = this.height - ((this.toggled ) ? 0 : 4);
-
- context.drawGuiTexture(BUTTON_TEXTURES, this.getX(), y, this.width, height);
-
+ context.drawGuiTexture(tabTexture, this.getX(), this.getY(), this.width, this.height);
// Render the button icon
- int yOffset = !this.toggled && this.index < 6 ? 1 : 0;
- context.drawItem(this.icon, this.getX() + 5, this.getY() + 6 + yOffset);
-
+ int yOffset = this.index < 7 ? 1 : -1;
+ context.drawItem(this.icon, this.getX() + 5, this.getY() + 8 + yOffset);
RenderSystem.enableDepthTest();
}
- @Override
- protected void appendClickableNarrations(NarrationMessageBuilder builder) {
- // TODO Auto-generated method stub
-
- }
+ @Override
+ protected void appendClickableNarrations(NarrationMessageBuilder builder) {}
}