aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gradle.properties6
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java31
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java51
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java38
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java22
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/GenericContainerScreenMixin.java31
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java17
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java22
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java9
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java17
-rw-r--r--src/main/resources/fabric.mod.json6
-rw-r--r--src/main/resources/skyblocker.mixins.json1
12 files changed, 129 insertions, 122 deletions
diff --git a/gradle.properties b/gradle.properties
index 007c64ad..752907cf 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -3,12 +3,12 @@ org.gradle.jvmargs=-Xmx1G -Dfile.encoding=UTF-8 -Duser.language=en -Duser.countr
# Fabric Properties (https://fabricmc.net/versions.html)
## 1.19.4
minecraft_version=1.19.4
-yarn_mappings=1.19.4+build.1
-loader_version=0.14.18
+yarn_mappings=1.19.4+build.2
+loader_version=0.14.19
#Fabric api
## 1.19.4
-fabric_api_version=0.76.0+1.19.4
+fabric_api_version=0.81.1+1.19.4
# Dependencies
## Cloth Api (https://www.curseforge.com/minecraft/mc-mods/cloth-config/files)
diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java
deleted file mode 100644
index f17ab1fb..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package me.xmrvizzy.skyblocker;
-
-import me.xmrvizzy.skyblocker.chat.ChatMessageListener;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
-import me.xmrvizzy.skyblocker.discord.DiscordRPCManager;
-import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock;
-import me.xmrvizzy.skyblocker.skyblock.api.RepositoryUpdate;
-import me.xmrvizzy.skyblocker.skyblock.api.StatsCommand;
-import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud;
-import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip;
-import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup;
-import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry;
-import me.xmrvizzy.skyblocker.utils.UpdateChecker;
-import net.fabricmc.api.ClientModInitializer;
-
-public class SkyblockerInitializer implements ClientModInitializer {
- @Override
- public void onInitializeClient() {
- HotbarSlotLock.init();
- SkyblockerConfig.init();
- PriceInfoTooltip.init();
- WikiLookup.init();
- ItemRegistry.init();
- RepositoryUpdate.init();
- StatsCommand.init();
- DwarvenHud.init();
- ChatMessageListener.init();
- UpdateChecker.init();
- DiscordRPCManager.init();
- }
-}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
index c519109a..503d3a64 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
@@ -1,23 +1,60 @@
package me.xmrvizzy.skyblocker;
-import me.xmrvizzy.skyblocker.gui.ContainerSolverManager;
+import me.xmrvizzy.skyblocker.chat.ChatMessageListener;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.discord.DiscordRPCManager;
+import me.xmrvizzy.skyblocker.gui.ContainerSolverManager;
import me.xmrvizzy.skyblocker.skyblock.BackpackPreview;
+import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock;
import me.xmrvizzy.skyblocker.skyblock.StatusBarTracker;
+import me.xmrvizzy.skyblocker.skyblock.api.RepositoryUpdate;
+import me.xmrvizzy.skyblocker.skyblock.api.StatsCommand;
import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonBlaze;
import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud;
+import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip;
+import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup;
+import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry;
+import me.xmrvizzy.skyblocker.skyblock.quicknav.QuickNav;
import me.xmrvizzy.skyblocker.utils.Scheduler;
+import me.xmrvizzy.skyblocker.utils.UpdateChecker;
import me.xmrvizzy.skyblocker.utils.Utils;
+import net.fabricmc.api.ClientModInitializer;
+import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
+import net.minecraft.client.MinecraftClient;
-public class SkyblockerMod {
+public class SkyblockerMod implements ClientModInitializer {
public static final String NAMESPACE = "skyblocker";
- private static final SkyblockerMod instance = new SkyblockerMod();
+ private static SkyblockerMod INSTANCE;
public final Scheduler scheduler = new Scheduler();
public final ContainerSolverManager containerSolverManager = new ContainerSolverManager();
public final StatusBarTracker statusBarTracker = new StatusBarTracker();
- private SkyblockerMod() {
+ public SkyblockerMod() {
+ INSTANCE = this;
+ }
+
+ public static SkyblockerMod getInstance() {
+ return INSTANCE;
+ }
+
+ @Override
+ public void onInitializeClient() {
+ ClientTickEvents.END_CLIENT_TICK.register(this::tick);
+ HotbarSlotLock.init();
+ SkyblockerConfig.init();
+ PriceInfoTooltip.init();
+ WikiLookup.init();
+ ItemRegistry.init();
+ RepositoryUpdate.init();
+ BackpackPreview.init();
+ QuickNav.init();
+ StatsCommand.init();
+ DwarvenHud.init();
+ ChatMessageListener.init();
+ UpdateChecker.init();
+ DiscordRPCManager.init();
+ containerSolverManager.init();
scheduler.scheduleCyclic(Utils::sbChecker, 20);
scheduler.scheduleCyclic(DiscordRPCManager::update, 100);
scheduler.scheduleCyclic(DungeonBlaze::update, 4);
@@ -25,11 +62,7 @@ public class SkyblockerMod {
scheduler.scheduleCyclic(DwarvenHud::update, 40);
}
- public static SkyblockerMod getInstance() {
- return instance;
- }
-
- public void onTick() {
+ public void tick(MinecraftClient client) {
scheduler.tick();
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
index 9ecfe215..e2e7b4ca 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
@@ -1,16 +1,24 @@
package me.xmrvizzy.skyblocker.config;
+import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import me.shedaniel.autoconfig.AutoConfig;
import me.shedaniel.autoconfig.ConfigData;
import me.shedaniel.autoconfig.annotation.Config;
import me.shedaniel.autoconfig.annotation.ConfigEntry;
import me.shedaniel.autoconfig.serializer.GsonConfigSerializer;
+import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.chat.ChatFilterResult;
+import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
+import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.resource.language.I18n;
import java.util.ArrayList;
import java.util.List;
+import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal;
+
@Config(name = "skyblocker")
public class SkyblockerConfig implements ConfigData {
@@ -59,7 +67,7 @@ public class SkyblockerConfig implements ConfigData {
@ConfigEntry.Category("button6")
@ConfigEntry.Gui.CollapsibleObject()
- public QuickNavItem button6 = new QuickNavItem(true, new ItemData("ender_chest"), "Storage", "/storage");
+ public QuickNavItem button6 = new QuickNavItem(true, new ItemData("ender_chest"), "Storage", "/storage");
@ConfigEntry.Category("button7")
@ConfigEntry.Gui.CollapsibleObject()
@@ -133,7 +141,7 @@ public class SkyblockerConfig implements ConfigData {
@ConfigEntry.Category("bars")
@ConfigEntry.Gui.CollapsibleObject()
public Bars bars = new Bars();
-
+
@ConfigEntry.Category("itemList")
@ConfigEntry.Gui.CollapsibleObject()
public ItemList itemList = new ItemList();
@@ -177,7 +185,7 @@ public class SkyblockerConfig implements ConfigData {
NONE;
@Override
- public String toString() {
+ public String toString() {
return I18n.translate("text.autoconfig.skyblocker.option.general.bars.barpositions." + name());
}
@@ -215,7 +223,7 @@ public class SkyblockerConfig implements ConfigData {
BOTH;
@Override
- public String toString() {
+ public String toString() {
return I18n.translate("text.autoconfig.skyblocker.option.general.itemTooltip.avg." + name());
}
}
@@ -310,14 +318,36 @@ public class SkyblockerConfig implements ConfigData {
PURSE,
BITS,
LOCATION;
+
@Override
public String toString() {
return I18n.translate("text.autoconfig.skyblocker.option.richPresence.info." + name());
}
}
+ /**
+ * Registers the config to AutoConfig and register commands to open the config screen.
+ */
public static void init() {
AutoConfig.register(SkyblockerConfig.class, GsonConfigSerializer::new);
+ ClientCommandRegistrationCallback.EVENT.register(((dispatcher, registryAccess) -> dispatcher.register(literal("skyblocker").then(optionsLiteral("config")).then(optionsLiteral("options")))));
+ }
+
+ /**
+ * Registers an options command with the given name. Used for registering both options and config as valid commands.
+ *
+ * @param name the name of the command node
+ * @return the command builder
+ */
+ private static LiteralArgumentBuilder<FabricClientCommandSource> optionsLiteral(String name) {
+ return literal(name).executes(context -> {
+ // Don't immediately open the next screen as it will be closed by ChatScreen right after this command is executed
+ SkyblockerMod.getInstance().scheduler.schedule(() -> {
+ Screen a = AutoConfig.getConfigScreen(SkyblockerConfig.class, null).get();
+ MinecraftClient.getInstance().setScreen(a);
+ }, 0);
+ return 1;
+ });
}
public static SkyblockerConfig get() {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java
index c965154f..8f3f7e2a 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java
@@ -1,10 +1,13 @@
package me.xmrvizzy.skyblocker.gui;
import com.mojang.blaze3d.systems.RenderSystem;
+import me.xmrvizzy.skyblocker.mixin.HandledScreenAccessor;
import me.xmrvizzy.skyblocker.skyblock.dungeon.CroesusHelper;
import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.ColorTerminal;
import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.OrderTerminal;
import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.StartsWithTerminal;
+import me.xmrvizzy.skyblocker.utils.Utils;
+import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
import net.minecraft.client.gui.DrawableHelper;
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen;
import net.minecraft.client.util.math.MatrixStack;
@@ -37,6 +40,22 @@ public class ContainerSolverManager extends DrawableHelper {
};
}
+ public void init() {
+ ScreenEvents.BEFORE_INIT.register((client, screen, scaledWidth, scaledHeight) -> {
+ if (Utils.isOnSkyblock && screen instanceof GenericContainerScreen genericContainerScreen) {
+ ScreenEvents.afterRender(screen).register((screen1, matrices, mouseX, mouseY, delta) -> {
+ matrices.push();
+ matrices.translate(((HandledScreenAccessor) genericContainerScreen).getX(), ((HandledScreenAccessor) genericContainerScreen).getY(), 300);
+ onDraw(matrices, genericContainerScreen.getScreenHandler().slots.subList(0, genericContainerScreen.getScreenHandler().getRows() * 9));
+ matrices.pop();
+ });
+ onSetScreen(genericContainerScreen);
+ } else {
+ clearScreen();
+ }
+ });
+ }
+
public void onSetScreen(@NotNull GenericContainerScreen screen) {
String screenName = screen.getTitle().getString();
Matcher matcher = PLACEHOLDER_PATTERN.matcher(screenName);
@@ -69,7 +88,7 @@ public class ContainerSolverManager extends DrawableHelper {
return;
if (highlights == null)
highlights = currentSolver.getColors(groups, slotMap(slots));
- RenderSystem.disableDepthTest();
+ RenderSystem.enableDepthTest();
RenderSystem.colorMask(true, true, true, false);
for (ColorHighlight highlight : highlights) {
Slot slot = slots.get(highlight.slot());
@@ -77,7 +96,6 @@ public class ContainerSolverManager extends DrawableHelper {
fillGradient(matrices, slot.x, slot.y, slot.x + 16, slot.y + 16, color, color);
}
RenderSystem.colorMask(true, true, true, true);
- RenderSystem.enableDepthTest();
}
private Map<Integer, ItemStack> slotMap(List<Slot> slots) {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/GenericContainerScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/GenericContainerScreenMixin.java
deleted file mode 100644
index d63d17b8..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/GenericContainerScreenMixin.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package me.xmrvizzy.skyblocker.mixin;
-
-import me.xmrvizzy.skyblocker.SkyblockerMod;
-import me.xmrvizzy.skyblocker.utils.Utils;
-import net.minecraft.client.gui.screen.ingame.GenericContainerScreen;
-import net.minecraft.client.gui.screen.ingame.HandledScreen;
-import net.minecraft.client.util.math.MatrixStack;
-import net.minecraft.entity.player.PlayerInventory;
-import net.minecraft.screen.GenericContainerScreenHandler;
-import net.minecraft.text.Text;
-import org.spongepowered.asm.mixin.Final;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Shadow;
-
-@Mixin(GenericContainerScreen.class)
-public abstract class GenericContainerScreenMixin extends HandledScreen<GenericContainerScreenHandler> {
- @Shadow
- @Final
- private int rows;
-
- public GenericContainerScreenMixin(GenericContainerScreenHandler handler, PlayerInventory inventory, Text title) {
- super(handler, inventory, title);
- }
-
- @Override
- protected void drawForeground(MatrixStack matrices, int mouseX, int mouseY) {
- super.drawForeground(matrices, mouseX, mouseY);
- if (Utils.isOnSkyblock)
- SkyblockerMod.getInstance().containerSolverManager.onDraw(matrices, this.handler.slots.subList(0, rows * 9));
- }
-}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java
index 44b1b5c8..2d200a86 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java
@@ -3,9 +3,6 @@ package me.xmrvizzy.skyblocker.mixin;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.skyblock.BackpackPreview;
import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup;
-import me.xmrvizzy.skyblocker.skyblock.quicknav.QuickNav;
-import me.xmrvizzy.skyblocker.skyblock.quicknav.QuickNavButton;
-import me.xmrvizzy.skyblocker.utils.Utils;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.ingame.HandledScreen;
import net.minecraft.client.util.math.MatrixStack;
@@ -19,8 +16,6 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
-import java.util.List;
-
@Mixin(HandledScreen.class)
public abstract class HandledScreenMixin extends Screen {
protected HandledScreenMixin(Text title) {
@@ -31,18 +26,6 @@ public abstract class HandledScreenMixin extends Screen {
@Nullable
protected Slot focusedSlot;
- @Inject(method = "init()V", at = @At("TAIL"))
- private void skyblocker$init(CallbackInfo ci) {
- // quicknav
- if (Utils.isOnSkyblock && SkyblockerConfig.get().quickNav.enableQuickNav) {
- String screenTitle = super.getTitle().getString().trim();
- List<QuickNavButton> buttons = QuickNav.init(screenTitle);
- for (QuickNavButton button : buttons) super.addDrawableChild(button);
- }
- // backpack preview
- BackpackPreview.updateStorage((HandledScreen<?>) (Object) this);
- }
-
@Inject(at = @At("HEAD"), method = "keyPressed")
public void skyblocker$keyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable<Boolean> cir) {
if (this.focusedSlot != null) {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java
index 1f9009b7..24e27c08 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java
@@ -1,12 +1,8 @@
package me.xmrvizzy.skyblocker.mixin;
-import me.xmrvizzy.skyblocker.SkyblockerMod;
-import me.xmrvizzy.skyblocker.gui.ContainerSolverManager;
import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock;
import me.xmrvizzy.skyblocker.utils.Utils;
import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.gui.screen.Screen;
-import net.minecraft.client.gui.screen.ingame.GenericContainerScreen;
import net.minecraft.client.network.ClientPlayerEntity;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
@@ -22,22 +18,10 @@ public abstract class MinecraftClientMixin {
@Nullable
public ClientPlayerEntity player;
- @Inject(method = "tick", at = @At("HEAD"))
- public void skyblocker$tick(CallbackInfo ci) {
- SkyblockerMod.getInstance().onTick();
- }
-
@Inject(method = "handleInputEvents", at = @At("HEAD"))
public void skyblocker$handleInputEvents(CallbackInfo ci) {
- if (Utils.isOnSkyblock) HotbarSlotLock.handleInputEvents(player);
- }
-
- @Inject(method = "setScreen", at = @At("HEAD"))
- public void skyblocker$onSetScreen(Screen screen, CallbackInfo ci) {
- ContainerSolverManager manager = SkyblockerMod.getInstance().containerSolverManager;
- if (Utils.isOnSkyblock && screen instanceof GenericContainerScreen)
- manager.onSetScreen((GenericContainerScreen) screen);
- else
- manager.clearScreen();
+ if (Utils.isOnSkyblock) {
+ HotbarSlotLock.handleInputEvents(player);
+ }
}
} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java
index d8cca051..a6dfe31d 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java
@@ -3,6 +3,7 @@ package me.xmrvizzy.skyblocker.skyblock;
import com.mojang.blaze3d.systems.RenderSystem;
import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.utils.Utils;
+import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
@@ -40,6 +41,14 @@ public class BackpackPreview extends DrawableHelper {
private static String loaded = ""; // uuid + sb profile currently loaded
private static Path save_dir = null;
+ public static void init() {
+ ScreenEvents.AFTER_INIT.register((client, screen, scaledWidth, scaledHeight) -> {
+ if (screen instanceof HandledScreen<?> handledScreen) {
+ updateStorage(handledScreen);
+ }
+ });
+ }
+
public static void tick() {
Utils.sbChecker(); // force update isOnSkyblock to prevent crash on disconnect
if (Utils.isOnSkyblock) {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java
index 99e1c529..8ab49754 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java
@@ -1,9 +1,11 @@
package me.xmrvizzy.skyblocker.skyblock.quicknav;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
-
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
-
+import me.xmrvizzy.skyblocker.utils.Utils;
+import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
+import net.fabricmc.fabric.api.client.screen.v1.Screens;
+import net.minecraft.client.gui.screen.ingame.HandledScreen;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.StringNbtReader;
@@ -14,6 +16,17 @@ import java.util.Locale;
public class QuickNav {
private static final String skyblockHubIconNbt = "{id:\"minecraft:player_head\",Count:1,tag:{SkullOwner:{Id:[I;-300151517,-631415889,-1193921967,-1821784279],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDdjYzY2ODc0MjNkMDU3MGQ1NTZhYzUzZTA2NzZjYjU2M2JiZGQ5NzE3Y2Q4MjY5YmRlYmVkNmY2ZDRlN2JmOCJ9fX0=\"}]}}}}";
private static final String dungeonHubIconNbt = "{id:\"minecraft:player_head\",Count:1,tag:{SkullOwner:{Id:[I;1605800870,415127827,-1236127084,15358548],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzg5MWQ1YjI3M2ZmMGJjNTBjOTYwYjJjZDg2ZWVmMWM0MGExYjk0MDMyYWU3MWU3NTQ3NWE1NjhhODI1NzQyMSJ9fX0=\"}]}}}}";
+
+ public static void init() {
+ ScreenEvents.AFTER_INIT.register((client, screen, scaledWidth, scaledHeight) -> {
+ if (Utils.isOnSkyblock && SkyblockerConfig.get().quickNav.enableQuickNav && screen instanceof HandledScreen<?>) {
+ 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<>();
SkyblockerConfig.QuickNav data = SkyblockerConfig.get().quickNav;
diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json
index 52cedcfb..2044b170 100644
--- a/src/main/resources/fabric.mod.json
+++ b/src/main/resources/fabric.mod.json
@@ -16,7 +16,7 @@
"environment": "client",
"entrypoints": {
"client": [
- "me.xmrvizzy.skyblocker.SkyblockerInitializer"
+ "me.xmrvizzy.skyblocker.SkyblockerMod"
],
"modmenu": [
"me.xmrvizzy.skyblocker.config.modmenu.ModMenuEntry"
@@ -29,8 +29,8 @@
"skyblocker.mixins.json"
],
"depends": {
- "fabricloader": ">=0.14.17",
- "fabric-api": ">=0.76.0+1.19.4",
+ "fabricloader": ">=0.14.19",
+ "fabric-api": ">=0.81.0+1.19.4",
"cloth-config2": "*",
"minecraft": "~1.19.4"
},
diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json
index 1fc53632..91c856a0 100644
--- a/src/main/resources/skyblocker.mixins.json
+++ b/src/main/resources/skyblocker.mixins.json
@@ -10,7 +10,6 @@
"FarmlandBlockMixin",
"MinecraftClientMixin",
"AccessorWorldRenderer",
- "GenericContainerScreenMixin",
"GenericContainerScreenHandlerMixin",
"HandledScreenMixin",
"InventoryScreenMixin",