aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormsg-programs <msgdoesstuff@gmail.com>2023-06-04 13:44:22 +0200
committermsg-programs <msgdoesstuff@gmail.com>2023-06-04 13:44:22 +0200
commit9170e46f4166573fe837e2a7bdd2747854ab2921 (patch)
tree1b81b1cd1d669e4156d37b98a2841394d936d51f /src
parent34d87f0e435963cb571568a783c9c4456e811012 (diff)
parent9d114a7be8ac358131441752db14d5356fc9fd3d (diff)
downloadSkyblocker-9170e46f4166573fe837e2a7bdd2747854ab2921.tar.gz
Skyblocker-9170e46f4166573fe837e2a7bdd2747854ab2921.tar.bz2
Skyblocker-9170e46f4166573fe837e2a7bdd2747854ab2921.zip
Merge branch 'master' of https://github.com/SkyblockerMod/Skyblocker into skyhytab
# Conflicts: # src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java # src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java # src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java # src/main/resources/skyblocker.mixins.json Pull newest changes from upstream master
Diffstat (limited to 'src')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java33
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java82
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java53
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java22
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java24
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java6
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java3
-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/InGameHudMixin.java14
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java23
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java14
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java11
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java61
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java38
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java43
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java15
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java6
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/WikiLookup.java2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java14
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java17
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java3
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java63
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java75
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java21
-rw-r--r--src/main/resources/assets/skyblocker/lang/en_us.json11
-rw-r--r--src/main/resources/assets/skyblocker/lang/es_ES.json101
-rw-r--r--src/main/resources/assets/skyblocker/lang/nb_NO.json80
-rw-r--r--src/main/resources/assets/skyblocker/lang/zh_cn.json146
-rw-r--r--src/main/resources/fabric.mod.json6
-rw-r--r--src/main/resources/skyblocker.mixins.json13
40 files changed, 820 insertions, 248 deletions
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 827e8486..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java
+++ /dev/null
@@ -1,33 +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.skyblock.tabhud.TabHud;
-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();
- TabHud.init();
- }
-}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
index dca733ca..e0f950d0 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
@@ -1,37 +1,101 @@
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.FishingHelper;
+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.dungeon.LividColor;
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.skyblock.tabhud.TabHud;
import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr;
+import me.xmrvizzy.skyblocker.utils.MessageScheduler;
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 {
+/**
+ * Main class for Skyblocker which initializes features, registers events, and
+ * manages ticks. This class will be instantiated by Fabric. Do not instantiate
+ * this class.
+ */
+public class SkyblockerMod implements ClientModInitializer {
public static final String NAMESPACE = "skyblocker";
- private static final SkyblockerMod instance = new SkyblockerMod();
+ private static SkyblockerMod INSTANCE;
+ @SuppressWarnings("deprecation")
public final Scheduler scheduler = new Scheduler();
+ public final MessageScheduler messageScheduler = new MessageScheduler();
public final ContainerSolverManager containerSolverManager = new ContainerSolverManager();
public final StatusBarTracker statusBarTracker = new StatusBarTracker();
- private SkyblockerMod() {
+ /**
+ * Do not instantiate this class. Use {@link #getInstance()} instead.
+ */
+ @Deprecated
+ public SkyblockerMod() {
+ INSTANCE = this;
+ }
+
+ public static SkyblockerMod getInstance() {
+ return INSTANCE;
+ }
+
+ /**
+ * Register {@link #tick(MinecraftClient)} to
+ * {@link ClientTickEvents#END_CLIENT_TICK}, initialize all features, and
+ * schedule tick events.
+ */
+ @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();
+ LividColor.init();
+ FishingHelper.init();
+ TabHud.init();
+ containerSolverManager.init();
scheduler.scheduleCyclic(Utils::sbChecker, 20);
scheduler.scheduleCyclic(DiscordRPCManager::update, 100);
scheduler.scheduleCyclic(DungeonBlaze::update, 4);
+ scheduler.scheduleCyclic(LividColor::update, 10);
scheduler.scheduleCyclic(BackpackPreview::tick, 50);
scheduler.scheduleCyclic(DwarvenHud::update, 40);
scheduler.scheduleCyclic(PlayerListMgr::updateList, 20);
}
- public static SkyblockerMod getInstance() {
- return instance;
- }
-
- public void onTick() {
+ /**
+ * Ticks the scheduler. Called once at the end of every client tick through
+ * {@link ClientTickEvents#END_CLIENT_TICK}.
+ *
+ * @param client the Minecraft client.
+ */
+ public void tick(MinecraftClient client) {
scheduler.tick();
+ messageScheduler.tick();
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java
index 9e6b5f64..f502a356 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java
@@ -62,7 +62,7 @@ public interface ChatMessageListener {
}
// Register EVENT to ClientReceiveMessageEvents.ALLOW_GAME from fabric api
ClientReceiveMessageEvents.ALLOW_GAME.register((message, overlay) -> {
- if (!Utils.isOnSkyblock) {
+ if (!Utils.isOnSkyblock()) {
return true;
}
ChatFilterResult result = EVENT.invoker().onMessage(message, message.getString());
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
index 5c8c4c5f..7fdd7254 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()
@@ -138,6 +146,10 @@ public class SkyblockerConfig implements ConfigData {
@ConfigEntry.Gui.CollapsibleObject()
public Bars bars = new Bars();
+ @ConfigEntry.Category("fishing")
+ @ConfigEntry.Gui.CollapsibleObject()
+ public Fishing fishing = new Fishing();
+
@ConfigEntry.Category("itemList")
@ConfigEntry.Gui.CollapsibleObject()
public ItemList itemList = new ItemList();
@@ -189,7 +201,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());
}
@@ -203,6 +215,10 @@ public class SkyblockerConfig implements ConfigData {
}
}
+ public static class Fishing {
+ public boolean enableFishingHelper = true;
+ }
+
public static class Hitbox {
public boolean oldFarmlandHitbox = true;
public boolean oldLeverHitbox = false;
@@ -227,7 +243,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());
}
}
@@ -265,10 +281,19 @@ public class SkyblockerConfig implements ConfigData {
public boolean solveThreeWeirdos = true;
public boolean blazesolver = true;
public boolean solveTrivia = true;
+ @ConfigEntry.Gui.CollapsibleObject
+ public LividColor lividColor = new LividColor();
@ConfigEntry.Gui.CollapsibleObject()
public Terminals terminals = new Terminals();
}
+ public static class LividColor {
+ @ConfigEntry.Gui.Tooltip()
+ public boolean enableLividColor = true;
+ @ConfigEntry.Gui.Tooltip()
+ public String lividColorText = "The livid color is [color]";
+ }
+
public static class Terminals {
public boolean solveColor = true;
public boolean solveOrder = true;
@@ -340,14 +365,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/discord/DiscordRPCManager.java b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java
index 10b88ce8..4fa5265f 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java
@@ -37,7 +37,7 @@ public class DiscordRPCManager {
SkyblockerConfig.get().richPresence.customMessage = "Playing Skyblock";
AutoConfig.getConfigHolder(SkyblockerConfig.class).save();
}
- if ((!Utils.isOnSkyblock || !SkyblockerConfig.get().richPresence.enableRichPresence) && DiscordIPC.isConnected()){
+ if ((!Utils.isOnSkyblock() || !SkyblockerConfig.get().richPresence.enableRichPresence) && DiscordIPC.isConnected()){
DiscordIPC.stop();
LOGGER.info("Discord RPC stopped");
return;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java
index c965154f..e4ff229d 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/ClientPlayNetworkHandlerMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java
new file mode 100644
index 00000000..80c98473
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java
@@ -0,0 +1,24 @@
+package me.xmrvizzy.skyblocker.mixin;
+
+import me.xmrvizzy.skyblocker.skyblock.FishingHelper;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.network.ClientPlayNetworkHandler;
+import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket;
+import org.spongepowered.asm.mixin.Final;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(ClientPlayNetworkHandler.class)
+public abstract class ClientPlayNetworkHandlerMixin {
+ @Shadow
+ @Final
+ private MinecraftClient client;
+
+ @Inject(method = "onPlaySound", at = @At("RETURN"))
+ private void skyblockmod_onPlaySound(PlaySoundS2CPacket packet, CallbackInfo ci) {
+ FishingHelper.onSound(client, packet);
+ }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java
index 237f6ba9..76c4e8ec 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java
@@ -6,7 +6,6 @@ import me.xmrvizzy.skyblocker.utils.Utils;
import net.minecraft.client.network.AbstractClientPlayerEntity;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.world.ClientWorld;
-// import net.minecraft.network.encryption.PlayerPublicKey;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
@@ -14,15 +13,12 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(ClientPlayerEntity.class)
public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity {
-
- // public ClientPlayerEntityMixin(ClientWorld world, GameProfile profile, PlayerPublicKey publicKey) {
public ClientPlayerEntityMixin(ClientWorld world, GameProfile profile) {
- // super(world, profile, publicKey);
super(world, profile);
}
@Inject(method = "dropSelectedItem", at = @At("HEAD"), cancellable = true)
public void skyblocker$dropSelectedItem(boolean dropEntireStack, CallbackInfoReturnable<Boolean> cir) {
- if (Utils.isOnSkyblock) HotbarSlotLock.handleDropSelectedItem(this.getInventory().selectedSlot, cir);
+ if (Utils.isOnSkyblock()) HotbarSlotLock.handleDropSelectedItem(this.getInventory().selectedSlot, cir);
}
} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java
index 29da4bd6..761f8a68 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java
@@ -22,10 +22,11 @@ public abstract class FarmlandBlockMixin extends Block {
@Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true)
public void skyblocker$onGetOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable<VoxelShape> cir) {
- if (Utils.isOnSkyblock && SkyblockerConfig.get().general.hitbox.oldFarmlandHitbox)
+ if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.hitbox.oldFarmlandHitbox)
cir.setReturnValue(Block.createCuboidShape(0.0, 0.0, 0.0, 16.0, 16.0, 16.0));
}
+ @SuppressWarnings("deprecation")
@Override
public VoxelShape getCullingShape(BlockState state, BlockView world, BlockPos pos) {
return Block.createCuboidShape(0.0, 0.0, 0.0, 16.0, 15.0, 16.0);
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/InGameHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java
index c137e6c8..e17795ab 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java
@@ -50,7 +50,7 @@ public abstract class InGameHudMixin extends DrawableHelper {
@Inject(method = "setOverlayMessage(Lnet/minecraft/text/Text;Z)V", at = @At("HEAD"), cancellable = true)
private void skyblocker$onSetOverlayMessage(Text message, boolean tinted, CallbackInfo ci) {
- if (!Utils.isOnSkyblock || !SkyblockerConfig.get().general.bars.enableBars)
+ if (!Utils.isOnSkyblock() || !SkyblockerConfig.get().general.bars.enableBars)
return;
String msg = message.getString();
String res = statusBarTracker.update(msg, SkyblockerConfig.get().messages.hideMana);
@@ -63,7 +63,7 @@ public abstract class InGameHudMixin extends DrawableHelper {
@Inject(method = "renderHotbar", at = @At("HEAD"))
public void skyblocker$renderHotbar(float f, MatrixStack matrices, CallbackInfo ci) {
- if (Utils.isOnSkyblock) {
+ if (Utils.isOnSkyblock()) {
hotbarMatrices = matrices;
hotbarSlotIndex = 0;
}
@@ -71,7 +71,7 @@ public abstract class InGameHudMixin extends DrawableHelper {
@Inject(method = "renderHotbarItem", at = @At("HEAD"))
public void skyblocker$renderHotbarItem(MatrixStack matrices, int i, int j, float f, PlayerEntity player, ItemStack stack, int seed, CallbackInfo ci) {
- if (Utils.isOnSkyblock) {
+ if (Utils.isOnSkyblock()) {
if (HotbarSlotLock.isLocked(hotbarSlotIndex)) {
RenderSystem.setShaderTexture(0, SLOT_LOCK);
DrawableHelper.drawTexture(hotbarMatrices, i, j, 0, 0, 16, 16);
@@ -82,18 +82,18 @@ public abstract class InGameHudMixin extends DrawableHelper {
@Inject(method = "renderExperienceBar", at = @At("HEAD"), cancellable = true)
private void skyblocker$renderExperienceBar(MatrixStack matrices, int x, CallbackInfo ci) {
- if (Utils.isOnSkyblock && SkyblockerConfig.get().general.bars.enableBars)
+ if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.bars.enableBars)
ci.cancel();
}
@Inject(method = "renderStatusBars", at = @At("HEAD"), cancellable = true)
private void skyblocker$renderStatusBars(MatrixStack matrices, CallbackInfo ci) {
- if (!Utils.isOnSkyblock)
+ if (!Utils.isOnSkyblock())
return;
if (statusBars.render(matrices, scaledWidth, scaledHeight))
ci.cancel();
- if (Utils.isInDungeons && SkyblockerConfig.get().locations.dungeons.enableMap)
+ if (Utils.isInDungeons() && SkyblockerConfig.get().locations.dungeons.enableMap)
DungeonMap.render(matrices);
RenderSystem.setShaderTexture(0, GUI_ICONS_TEXTURE);
@@ -101,7 +101,7 @@ public abstract class InGameHudMixin extends DrawableHelper {
@Inject(method = "renderMountHealth", at = @At("HEAD"), cancellable = true)
private void skyblocker$renderMountHealth(MatrixStack matrices, CallbackInfo ci) {
- if (Utils.isOnSkyblock && SkyblockerConfig.get().general.bars.enableBars)
+ if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.bars.enableBars)
ci.cancel();
}
} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java
index 8de390cc..64a1a4fe 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java
@@ -19,7 +19,7 @@ public abstract class InventoryScreenMixin {
)
)
RecipeBookWidget skyblocker$constructor() {
- if (Utils.isOnSkyblock && SkyblockerConfig.get().general.itemList.enableItemList)
+ if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.itemList.enableItemList)
return new ItemListWidget();
else
return new RecipeBookWidget();
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java
index b9ddc156..26bafc14 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java
@@ -27,7 +27,7 @@ public abstract class ItemRendererMixin {
@Inject(method = "renderGuiItemOverlay(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At("HEAD"))
public void skyblocker$renderItemBar(MatrixStack matrices, TextRenderer renderer, ItemStack stack, int x, int y, @Nullable String countLabel, CallbackInfo ci) {
- if (Utils.isOnSkyblock && SkyblockerConfig.get().locations.dwarvenMines.enableDrillFuel) {
+ if (Utils.isOnSkyblock() && SkyblockerConfig.get().locations.dwarvenMines.enableDrillFuel) {
if (!stack.isEmpty()) {
NbtCompound tag = stack.getNbt();
if (tag != null && tag.contains("ExtraAttributes")) {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java
index c28a7096..505de202 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java
@@ -22,7 +22,7 @@ public abstract class LeverBlockMixin extends WallMountedBlock {
@Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true)
public void skyblocker$onGetOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable<VoxelShape> cir) {
- if (Utils.isOnSkyblock) {
+ if (Utils.isOnSkyblock()) {
VoxelShape shape = OldLever.getShape(state.get(FACE), state.get(FACING));
if (shape != null)
cir.setReturnValue(shape);
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java
index 1f9009b7..0c1977fe 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;
@@ -17,27 +13,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(MinecraftClient.class)
public abstract class MinecraftClientMixin {
-
@Shadow
@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/mixin/PlayerListHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java
index eee4eaca..b5403ae2 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java
@@ -1,7 +1,5 @@
package me.xmrvizzy.skyblocker.mixin;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
@@ -33,7 +31,7 @@ public class PlayerListHudMixin {
public void skyblocker$renderTabHud(MatrixStack ms, int scaledW, Scoreboard sb, ScoreboardObjective sbo,
CallbackInfo info) {
- if (!Utils.isOnSkyblock
+ if (!Utils.isOnSkyblock()
|| !SkyblockerConfig.get().general.tabHud.tabHudEnabled
|| TabHud.defaultTgl.isPressed()) {
return;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java
index 14aa8868..9389b792 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java
@@ -1,28 +1,24 @@
package me.xmrvizzy.skyblocker.mixin;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.utils.Utils;
-
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.item.ItemStack;
import net.minecraft.text.Text;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(Screen.class)
public abstract class ScreenMixin {
-
@Inject(at = @At("HEAD"), method = "renderTooltip(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/item/ItemStack;II)V", cancellable = true)
public void skyblocker$renderTooltip(MatrixStack matrices, ItemStack itemStack, int x, int y, CallbackInfo ci) {
Text stackName = itemStack.getName();
String strName = stackName.getString();
- if (Utils.isOnSkyblock && SkyblockerConfig.get().general.hideEmptyTooltips && strName.equals(" ")) {
+ if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && strName.equals(" ")) {
ci.cancel();
}
}
-
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java
index d8cca051..4820bc0f 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,9 +41,17 @@ 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) {
+ if (Utils.isOnSkyblock()) {
// save all dirty storages
saveStorage();
// update save dir based on uuid and sb profile
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java
new file mode 100644
index 00000000..790b27bf
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java
@@ -0,0 +1,61 @@
+package me.xmrvizzy.skyblocker.skyblock;
+
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import net.fabricmc.fabric.api.event.player.UseItemCallback;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.network.ClientPlayerEntity;
+import net.minecraft.entity.player.PlayerEntity;
+import net.minecraft.item.FishingRodItem;
+import net.minecraft.item.ItemStack;
+import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket;
+import net.minecraft.text.Text;
+import net.minecraft.util.Formatting;
+import net.minecraft.util.TypedActionResult;
+import net.minecraft.util.math.MathHelper;
+import net.minecraft.util.math.Vec3d;
+
+public class FishingHelper {
+ private static long startTime;
+ private static Vec3d normalYawVector;
+
+ public static void init() {
+ UseItemCallback.EVENT.register((player, world, hand) -> {
+ ItemStack stack = player.getStackInHand(hand);
+ if (stack.getItem() instanceof FishingRodItem) {
+ if (player.fishHook == null) {
+ start(player);
+ } else {
+ reset();
+ }
+ }
+ return TypedActionResult.pass(stack);
+ });
+ }
+
+ public static void start(PlayerEntity player) {
+ startTime = System.currentTimeMillis();
+ float yawRad = player.getYaw() * 0.017453292F;
+ normalYawVector = new Vec3d(-MathHelper.sin(yawRad), 0, MathHelper.cos(yawRad));
+ }
+
+ public static void reset() {
+ startTime = 0;
+ }
+
+ public static void onSound(MinecraftClient client, PlaySoundS2CPacket packet) {
+ String path = packet.getSound().value().getId().getPath();
+ if (SkyblockerConfig.get().general.fishing.enableFishingHelper && startTime != 0 && System.currentTimeMillis() >= startTime + 2000 && ("entity.generic.splash".equals(path) || "entity.player.splash".equals(path))) {
+ ClientPlayerEntity player = client.player;
+ if (player != null && player.fishHook != null) {
+ Vec3d soundToFishHook = player.fishHook.getPos().subtract(packet.getX(), 0, packet.getZ());
+ if (Math.abs(normalYawVector.x * soundToFishHook.z - normalYawVector.z * soundToFishHook.x) < 0.2D && Math.abs(normalYawVector.dotProduct(soundToFishHook)) < 4D && player.getPos().squaredDistanceTo(packet.getX(), packet.getY(), packet.getZ()) > 1D) {
+ client.inGameHud.setTitleTicks(0, 10, 5);
+ client.inGameHud.setTitle(Text.translatable("skyblocker.fishing.reelNow").formatted(Formatting.GREEN));
+ reset();
+ }
+ } else {
+ reset();
+ }
+ }
+ }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java
index 3854dd88..e08cb1c0 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java
@@ -3,6 +3,7 @@ package me.xmrvizzy.skyblocker.skyblock.api;
import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
+import net.minecraft.client.MinecraftClient;
import net.minecraft.text.Text;
import java.io.File;
@@ -10,6 +11,7 @@ import java.nio.file.Files;
import java.util.concurrent.CompletableFuture;
public class RepositoryUpdate {
+ public static final MinecraftClient client = MinecraftClient.getInstance();
/**
* Adds command to update repository manually from ingame.
@@ -21,22 +23,7 @@ public class RepositoryUpdate {
ClientCommandManager.literal("skyblocker")
.then(ClientCommandManager.literal("updaterepository")
.executes(context -> {
- CompletableFuture.runAsync(() -> {
- try {
- ItemRegistry.filesImported = false;
- File dir = ItemRegistry.LOCAL_ITEM_REPO_DIR.toFile();
- recursiveDelete(dir);
- } catch (Exception ex) {
- ItemRegistry.client.player.sendMessage(
- Text.translatable("skyblocker.updaterepository.failed")
- , false
- );
- return;
- }
-
- ItemRegistry.init();
- });
-
+ updateRepository();
return 1;
})
)
@@ -45,6 +32,25 @@ public class RepositoryUpdate {
}
+ public static void updateRepository() {
+ CompletableFuture.runAsync(() -> {
+ try {
+ ItemRegistry.filesImported = false;
+ File dir = ItemRegistry.LOCAL_ITEM_REPO_DIR.toFile();
+ recursiveDelete(dir);
+ } catch (Exception ex) {
+ if (client.player != null)
+ client.player.sendMessage(
+ Text.translatable("skyblocker.updaterepository.failed")
+ , false
+ );
+ return;
+ }
+
+ ItemRegistry.init();
+ });
+ }
+
private static void recursiveDelete(File dir) {
if (dir.isDirectory() && !Files.isSymbolicLink(dir.toPath())) {
for (File child : dir.listFiles()) {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java
index 4554372b..219f4258 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java
@@ -21,7 +21,7 @@ public class DungeonBlaze {
public static void update() {
ClientWorld world = MinecraftClient.getInstance().world;
- if (world == null || !Utils.isInDungeons) return;
+ if (world == null || !Utils.isInDungeons()) return;
if(!renderHooked){
WorldRenderEvents.END.register(DungeonBlaze::blazeRenderer);
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java
new file mode 100644
index 00000000..276a41b6
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java
@@ -0,0 +1,43 @@
+package me.xmrvizzy.skyblocker.skyblock.dungeon;
+
+import me.xmrvizzy.skyblocker.SkyblockerMod;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.utils.Utils;
+import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.util.math.BlockPos;
+
+public class LividColor {
+ private static int tenTicks = 0;
+
+ public static void init() {
+ ClientReceiveMessageEvents.ALLOW_GAME.register((message, overlay) -> {
+ if (SkyblockerConfig.get().locations.dungeons.lividColor.enableLividColor && message.getString().equals("[BOSS] Livid: I respect you for making it to here, but I'll be your undoing.")) {
+ tenTicks = 8;
+ }
+ return true;
+ });
+ }
+
+ public static void update() {
+ MinecraftClient client = MinecraftClient.getInstance();
+ if (tenTicks != 0) {
+ if (SkyblockerConfig.get().locations.dungeons.lividColor.enableLividColor && Utils.isInDungeons() && client.world != null) {
+ if (tenTicks == 1) {
+ SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown(SkyblockerConfig.get().locations.dungeons.lividColor.lividColorText.replace("[color]", "red"));
+ tenTicks = 0;
+ return;
+ }
+ String key = client.world.getBlockState(new BlockPos(5, 110, 42)).getBlock().getTranslationKey();
+ if (key.startsWith("block.minecraft.") && key.endsWith("wool") && !key.endsWith("red_wool")) {
+ SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown(SkyblockerConfig.get().locations.dungeons.lividColor.lividColorText.replace("[color]", key.substring(16, key.length() - 5)));
+ tenTicks = 0;
+ return;
+ }
+ tenTicks--;
+ } else {
+ tenTicks = 0;
+ }
+ }
+ }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java
index 42fcc36a..29c37b94 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java
@@ -27,9 +27,9 @@ public class Reparty extends ChatPatternListener {
super("^(?:You are not currently in a party\\.|Party (?:Membe|Moderato)rs(?: \\(([0-9]+)\\)|:( .*)))$");
this.repartying = false;
ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("rp").executes(context -> {
- if (!Utils.isOnSkyblock || this.repartying || client.player == null) return 0;
+ if (!Utils.isOnSkyblock() || this.repartying || client.player == null) return 0;
this.repartying = true;
- client.player.networkHandler.sendCommand("p list");
+ SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown("/p list");
return 0;
})));
}
@@ -63,16 +63,15 @@ public class Reparty extends ChatPatternListener {
this.repartying = false;
return;
}
- sendCommand(playerEntity, "p disband", 1);
+ sendCommand("/p disband", 1);
for (int i = 0; i < this.players.length; ++i) {
- String command = "p invite " + this.players[i];
- sendCommand(playerEntity, command, i + 2);
+ String command = "/p invite " + this.players[i];
+ sendCommand(command, i + 2);
}
skyblocker.scheduler.schedule(() -> this.repartying = false, this.players.length + 2);
}
- private void sendCommand(ClientPlayerEntity player, String command, int delay) {
- // skyblocker.scheduler.schedule(() -> player.sendChatMessage(command, Text.of(command)), delay * BASE_DELAY);
- skyblocker.scheduler.schedule(() -> player.networkHandler.sendCommand(command), delay * BASE_DELAY);
+ private void sendCommand(String command, int delay) {
+ skyblocker.messageScheduler.queueMessage(command, delay * BASE_DELAY);
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java
index d9263f9a..25e849ad 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java
@@ -45,7 +45,7 @@ public class PriceInfoTooltip {
private static final Map<String, String> apiAddresses;
public static void onInjectTooltip(ItemStack stack, TooltipContext context, List<Text> lines) {
- if (!Utils.isOnSkyblock || client.player == null) return;
+ if (!Utils.isOnSkyblock() || client.player == null) return;
String name = getInternalNameFromNBT(stack);
if (name == null) return;
@@ -295,7 +295,7 @@ public class PriceInfoTooltip {
public static int minute = -1;
public static void init() {
skyblocker.scheduler.scheduleCyclic(() -> {
- if (!Utils.isOnSkyblock && 0 < minute++) {
+ if (!Utils.isOnSkyblock() && 0 < minute++) {
nullMsgSend = false;
return;
}
@@ -344,7 +344,7 @@ public class PriceInfoTooltip {
LOGGER.warn("[Skyblocker] Failed to download " + type + " prices!", e);
if (type.equals("lowest bins"))
- lowestPricesJson = downloadPrices("lowest bins backup");
+ return downloadPrices("lowest bins backup");
return null;
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/WikiLookup.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/WikiLookup.java
index 305720d0..d05e5cb8 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/WikiLookup.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/WikiLookup.java
@@ -42,7 +42,7 @@ public class WikiLookup {
}
public static void openWiki(Slot slot) {
- if (Utils.isOnSkyblock) {
+ if (Utils.isOnSkyblock()) {
id = getSkyblockId(slot);
try {
String wikiLink = ItemRegistry.getWikiLink(id);
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java
index a1507b95..d9f3b473 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java
@@ -3,6 +3,7 @@ package me.xmrvizzy.skyblocker.skyblock.itemlist;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
+import me.xmrvizzy.skyblocker.skyblock.api.RepositoryUpdate;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.MinecraftClient;
import net.minecraft.item.ItemStack;
@@ -10,6 +11,7 @@ import net.minecraft.item.Items;
import net.minecraft.text.Text;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.PullResult;
+import org.eclipse.jgit.errors.RepositoryNotFoundException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -47,20 +49,26 @@ public class ItemRegistry {
}
private static void updateItemRepo() {
+ Git git;
if (!Files.isDirectory(LOCAL_ITEM_REPO_DIR)) {
try {
- Git.cloneRepository()
+ git = Git.cloneRepository()
.setURI(REMOTE_ITEM_REPO)
.setDirectory(LOCAL_ITEM_REPO_DIR.toFile())
.setBranchesToClone(List.of("refs/heads/master"))
.setBranch("refs/heads/master")
.call();
+ git.close();
+ LOGGER.info("[Skyblocker Repository Update] Repository updated.");
} catch (Exception e) {
e.printStackTrace();
}
} else {
try {
- PullResult pull = Git.open(LOCAL_ITEM_REPO_DIR.toFile()).pull().setRebase(true).call();
+ git = Git.open(LOCAL_ITEM_REPO_DIR.toFile());
+ PullResult pull = git.pull().setRebase(true).call();
+ git.close();
+
if (pull.getRebaseResult() == null) {
LOGGER.info("[Skyblocker Repository Update] No update result");
} else if (pull.getRebaseResult().getStatus().isSuccessful()) {
@@ -68,6 +76,8 @@ public class ItemRegistry {
} else if (!pull.getRebaseResult().getStatus().isSuccessful()) {
LOGGER.warn("[Skyblocker Repository Update] Status: " + pull.getRebaseResult().getStatus().name());
}
+ } catch (RepositoryNotFoundException e) {
+ RepositoryUpdate.updateRepository();
} catch (Exception e) {
e.printStackTrace();
}
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..1d58435e 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/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java
index e31827ab..7269840a 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java
@@ -2,6 +2,7 @@ package me.xmrvizzy.skyblocker.skyblock.quicknav;
import com.mojang.blaze3d.systems.RenderSystem;
+import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.mixin.HandledScreenAccessor;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
@@ -57,7 +58,7 @@ public class QuickNavButton extends ClickableWidget {
public void onClick(double mouseX, double mouseY) {
if (!this.toggled) {
this.toggled = true;
- CLIENT.player.networkHandler.sendCommand(command.replace("/", ""));
+ SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown(command);
// TODO : add null check with log error
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java
index b7784a2b..60915bc1 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java
@@ -29,7 +29,7 @@ public class PlayerListMgr {
public static void updateList() {
- if (!Utils.isOnSkyblock) {
+ if (!Utils.isOnSkyblock()) {
return;
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java
index 134bfea8..d7abdfc2 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java
@@ -30,7 +30,7 @@ public class PlayerLocator {
public static Location getPlayerLocation() {
- if (!Utils.isOnSkyblock) {
+ if (!Utils.isOnSkyblock()) {
return Location.UNKNOWN;
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java
new file mode 100644
index 00000000..ac6aa293
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java
@@ -0,0 +1,63 @@
+package me.xmrvizzy.skyblocker.utils;
+
+import net.minecraft.client.MinecraftClient;
+
+/**
+ * A scheduler for sending chat messages or commands. Use the instance in {@link me.xmrvizzy.skyblocker.SkyblockerMod#messageScheduler SkyblockerMod.messageScheduler}. Do not instantiate this class.
+ */
+@SuppressWarnings("deprecation")
+public class MessageScheduler extends Scheduler {
+ /**
+ * The minimum delay that the server will accept between chat messages.
+ */
+ private static final int MIN_DELAY = 200;
+ /**
+ * The timestamp of the last message send,
+ */
+ private long lastMessage = 0;
+
+ /**
+ * Sends a chat message or command after the minimum cooldown. Prefer this method to send messages or commands to the server.
+ *
+ * @param message the message to send
+ */
+ public void sendMessageAfterCooldown(String message) {
+ if (lastMessage + MIN_DELAY < System.currentTimeMillis()) {
+ sendMessage(message);
+ lastMessage = System.currentTimeMillis();
+ } else {
+ queueMessage(message, 0);
+ }
+ }
+
+ private void sendMessage(String message) {
+ if (MinecraftClient.getInstance().player != null) {
+ MinecraftClient.getInstance().inGameHud.getChatHud().addToMessageHistory(message);
+ if (message.startsWith("/")) {
+ MinecraftClient.getInstance().player.networkHandler.sendCommand(message.substring(1));
+ } else {
+ MinecraftClient.getInstance().player.networkHandler.sendChatMessage(message);
+ }
+ }
+ }
+
+ /**
+ * Queues a chat message or command to send in {@code delay} ticks. Use this method to send messages or commands a set time in the future. The minimum cooldown is still respected.
+ *
+ * @param message the message to send
+ * @param delay the delay before sending the message in ticks
+ */
+ public void queueMessage(String message, int delay) {
+ schedule(() -> sendMessage(message), delay);
+ }
+
+ @Override
+ protected boolean runTask(Runnable task) {
+ if (lastMessage + MIN_DELAY < System.currentTimeMillis()) {
+ task.run();
+ lastMessage = System.currentTimeMillis();
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java
index 16e5b023..02162140 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java
@@ -1,60 +1,95 @@
package me.xmrvizzy.skyblocker.utils;
+import me.xmrvizzy.skyblocker.SkyblockerMod;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.PriorityQueue;
+/**
+ * A scheduler for running tasks at a later time. Tasks will be run synchronously on the main client thread. Use the instance stored in {@link SkyblockerMod#scheduler}. Do not instantiate this class.
+ */
public class Scheduler {
private static final Logger LOGGER = LoggerFactory.getLogger(Scheduler.class);
- private int currentTick;
- private final PriorityQueue<ScheduledTask> tasks;
+ private int currentTick = 0;
+ private final PriorityQueue<ScheduledTask> tasks = new PriorityQueue<>();
+ /**
+ * Do not instantiate this class. Use {@link SkyblockerMod#scheduler} instead.
+ */
+ @SuppressWarnings("DeprecatedIsStillUsed")
+ @Deprecated
public Scheduler() {
- currentTick = 0;
- tasks = new PriorityQueue<>();
}
+ /**
+ * Schedules a task to run after a delay.
+ *
+ * @param task the task to run
+ * @param delay the delay in ticks
+ */
public void schedule(Runnable task, int delay) {
- if (delay < 0)
+ if (delay < 0) {
LOGGER.warn("Scheduled a task with negative delay");
- ScheduledTask tmp = new ScheduledTask(currentTick + delay, task);
+ }
+ ScheduledTask tmp = new ScheduledTask(task, currentTick + delay);
tasks.add(tmp);
}
+ /**
+ * Schedules a task to run every period ticks.
+ *
+ * @param task the task to run
+ * @param period the period in ticks
+ */
public void scheduleCyclic(Runnable task, int period) {
- if (period <= 0)
+ if (period <= 0) {
LOGGER.error("Attempted to schedule a cyclic task with period lower than 1");
- else
+ } else {
new CyclicTask(task, period).run();
+ }
}
public void tick() {
currentTick += 1;
ScheduledTask task;
- while ((task = tasks.peek()) != null && task.schedule <= currentTick) {
+ while ((task = tasks.peek()) != null && task.schedule <= currentTick && runTask(task)) {
tasks.poll();
- task.run();
}
}
- private class CyclicTask implements Runnable {
- private final Runnable inner;
- private final int period;
-
- public CyclicTask(Runnable task, int period) {
- this.inner = task;
- this.period = period;
- }
+ /**
+ * Runs the task if able.
+ *
+ * @param task the task to run
+ * @return {@code true} if the task is run, and {@link false} if task is not run.
+ */
+ protected boolean runTask(Runnable task) {
+ task.run();
+ return true;
+ }
+ /**
+ * A task that runs every period ticks. More specifically, this task reschedules itself to run again after period ticks every time it runs.
+ *
+ * @param inner the task to run
+ * @param period the period in ticks
+ */
+ protected record CyclicTask(Runnable inner, int period) implements Runnable {
@Override
public void run() {
- schedule(this, period);
+ SkyblockerMod.getInstance().scheduler.schedule(this, period);
inner.run();
}
}
- private record ScheduledTask(int schedule, Runnable inner) implements Comparable<ScheduledTask>, Runnable {
+ /**
+ * A task that runs at a specific tick, relative to {@link #currentTick}.
+ *
+ * @param inner the task to run
+ * @param schedule the tick to run at
+ */
+ protected record ScheduledTask(Runnable inner, int schedule) implements Comparable<ScheduledTask>, Runnable {
@Override
public int compareTo(ScheduledTask o) {
return schedule - o.schedule;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java
index 532de0dd..028386ab 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java
@@ -14,10 +14,25 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+/**
+ * Utility variables and methods for retrieving Skyblock related information.
+ */
public class Utils {
- public static boolean isOnSkyblock = false;
- public static boolean isInDungeons = false;
- public static boolean isInjected = false;
+ private static boolean isOnSkyblock = false;
+ private static boolean isInDungeons = false;
+ private static boolean isInjected = false;
+
+ public static boolean isOnSkyblock() {
+ return isOnSkyblock;
+ }
+
+ public static boolean isInDungeons() {
+ return isInDungeons;
+ }
+
+ public static boolean isInjected() {
+ return isInjected;
+ }
public static void sbChecker() {
MinecraftClient client = MinecraftClient.getInstance();
diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json
index 1e31c638..71677a29 100644
--- a/src/main/resources/assets/skyblocker/lang/en_us.json
+++ b/src/main/resources/assets/skyblocker/lang/en_us.json
@@ -20,6 +20,8 @@
"text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana Bar Position",
"text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Defence Bar Position",
"text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Experience Bar Position",
+ "text.autoconfig.skyblocker.option.general.fishing": "Fishing Helper",
+ "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "Enable Fishing Helper",
"text.autoconfig.skyblocker.option.general.quicknav": "Quicknav",
"text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Enable Quicknav",
"text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "View backpack preview without holding Shift",
@@ -165,6 +167,11 @@
"text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Solve Three Weirdos Puzzle",
"text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Solve Blaze Puzzle",
"text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Solve Trivia Puzzle",
+ "text.autoconfig.skyblocker.option.locations.dungeons.lividColor": "Livid Color",
+ "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColor": "Enable Livid Color",
+ "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColor.@Tooltip": "Send the livid color in the chat during the Livid boss fight.",
+ "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText": "Livid Color Text",
+ "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText.@Tooltip": "Text which will be sent in the chat during the Livid boss fight. The string \"[color]\" will be replaced with the livid color.",
"text.autoconfig.skyblocker.option.locations.dungeons.terminals": "Terminal Solvers",
"text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "Solve Select Colored",
"text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "Solve Click In Order",
@@ -208,5 +215,7 @@
"skyblocker.updaterepository.failed": "§b[§6Skyblocker§b] §cUpdating local repository failed. Remove files manually and restart game.",
- "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2Automatically set your API key!"
+ "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2Automatically set your API key!",
+
+ "skyblocker.fishing.reelNow": "Reel in now!"
}
diff --git a/src/main/resources/assets/skyblocker/lang/es_ES.json b/src/main/resources/assets/skyblocker/lang/es_ES.json
index 5aa55294..7c5ea062 100644
--- a/src/main/resources/assets/skyblocker/lang/es_ES.json
+++ b/src/main/resources/assets/skyblocker/lang/es_ES.json
@@ -25,7 +25,7 @@
"text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "Ambos",
"text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "Habilitar el precio mas bajo de BIN",
"text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Habilitar los precios de compra/venta del Bazar",
- "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Habilitar Museo & datos",
+ "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Habilitar Fecha del Museo",
"text.autoconfig.skyblocker.option.general.hitbox": "Cajas de Colisión",
"text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "Habilitar la Caja de Colisión de la 1.8 para la tierra de cultivo",
"text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "Habilitar la Caja de Colisión de la 1.8 para la palanca",
@@ -47,5 +47,102 @@
"text.autoconfig.skyblocker.option.quickNav.button4": "Botón 4",
"text.autoconfig.skyblocker.option.quickNav.button5": "Botón 5",
"text.autoconfig.skyblocker.option.quickNav.button6": "Botón 6",
- "text.autoconfig.skyblocker.option.quickNav.button7": "Botón 7"
+ "text.autoconfig.skyblocker.option.quickNav.button7": "Botón 7",
+ "text.autoconfig.skyblocker.option.messages.hideImplosion": "Ocultar el mensaje de Implosion",
+ "text.autoconfig.skyblocker.option.messages.hideCombo": "Ocultar Mensajes de Combos",
+ "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "Obscurece los cofres que ya han sido abiertos.",
+ "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "Habilitar Fondo",
+ "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Habilitar Navegación Rápida",
+ "text.autoconfig.skyblocker.option.general.quicknav": "Navegación Rápida",
+ "text.autoconfig.skyblocker.option.general.itemTooltip": "Información extra de los objetos",
+ "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cEl precio en la información en los objetos se actualiza cada 60 segundos. De lo contrario revisa lastest.log",
+ "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "Este valor no importa si estas ciclando",
+ "text.autoconfig.skyblocker.option.quickNav.button1.item": "Objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "Nombre del objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "Titulo de la Interfaz",
+ "text.autoconfig.skyblocker.option.quickNav.button2": "Botón 2",
+ "text.autoconfig.skyblocker.option.quickNav.button2.item": "Objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "Nombre del objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button3.item": "Objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "Nombre del objeto",
+ "text.autoconfig.skyblocker.option.messages.hideAds": "Ocultar anuncios del Chat Publico",
+ "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "Ocultar mensajes del Pad de Teletransporte",
+ "text.autoconfig.skyblocker.option.messages.hideAutopet": "Ocultar mensajes del Autopet",
+ "text.autoconfig.skyblocker.option.general.itemList": "Lista de Objetos",
+ "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "Habilitar la Lista de Objetos",
+ "text.autoconfig.skyblocker.category.locations": "Localizaciones",
+ "text.autoconfig.skyblocker.option.locations.dungeons": "Mazmorras",
+ "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "Ayuda con Croesus",
+ "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "Habilitar Mapa",
+ "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "Escala del Mapa",
+ "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Resuelve el Acertijo de \"Los Tres Chiflados\"",
+ "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Resuelve el Acertijo del Blaze",
+ "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Resuelve el Acertijo de Trivia",
+ "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Minas Dwarven",
+ "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "Habilitar Combustible del Taladro",
+ "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Resolver Fetchur",
+ "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Interfaz de Dwarven",
+ "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "Habilitado",
+ "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X",
+ "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y",
+ "text.autoconfig.skyblocker.category.messages": "Mensajes",
+ "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "Deshabilitado",
+ "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "Filtro",
+ "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "Mover a la barra de acción",
+ "text.autoconfig.skyblocker.option.messages.hideAbility": "Ocultar Mensaje de Enfriamiento (Cooldown)",
+ "text.autoconfig.skyblocker.option.messages.hideHeal": "Ocultar Mensajes de Curación",
+ "text.autoconfig.skyblocker.option.messages.hideAOTE": "Ocultar Mensajes de la AOTE",
+ "text.autoconfig.skyblocker.option.messages.hideMana": "Ocultar los Mensajes del Consumo de Maná de la Barra de Acción",
+ "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "Da una mejor experiencia con FancyBar",
+ "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2¡Hay Una nueva versión disponible!",
+ "skyblocker.update.update_link": " §2§nHas Click Aquí§r",
+ "skyblocker.update.update_message_end": " §aPara conocer mas sobre las nuevas características.",
+ "skyblocker.update.hover_text": "Abrir Modrinth",
+ "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "Notificaciones sobre actualizaciones",
+ "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2¡Se añadió tu API key automáticamente!",
+ "skyblocker.updaterepository.failed": "§b[§6Skyblocker§b] §cLa actualización del repositorio local fallo. Elimina los archivos manualmente y reinicia el juego.",
+ "text.autoconfig.skyblocker.option.quickNav.button11": "Botón 11",
+ "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "Nombre del objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "Titulo de la Interfaz",
+ "text.autoconfig.skyblocker.option.quickNav.button4.item": "Objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "Nombre del objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "Titulo de la Interfaz",
+ "text.autoconfig.skyblocker.option.quickNav.button5.item": "Objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "Nombre del objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "Titulo de la Interfaz",
+ "text.autoconfig.skyblocker.option.quickNav.button6.item": "Objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "Nombre del objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button8": "Botón 8",
+ "text.autoconfig.skyblocker.option.quickNav.button9": "Botón 9",
+ "text.autoconfig.skyblocker.option.quickNav.button10": "Botón 10",
+ "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "Titulo de la Interfaz",
+ "text.autoconfig.skyblocker.option.quickNav.button7.item": "Objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "Nombre del objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "Titulo de la Interfaz",
+ "text.autoconfig.skyblocker.option.quickNav.button8.item": "Objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "Nombre del objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "Titulo de la Interfaz",
+ "text.autoconfig.skyblocker.option.quickNav.button9.item": "Objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "Titulo de la Interfaz",
+ "text.autoconfig.skyblocker.option.quickNav.button10.item": "Objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "Nombre del objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "Titulo de la Interfaz",
+ "text.autoconfig.skyblocker.option.quickNav.button11.item": "Objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "Nombre del objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "Titulo de la Interfaz",
+ "text.autoconfig.skyblocker.option.quickNav.button12": "Botón 12",
+ "text.autoconfig.skyblocker.option.quickNav.button12.item": "Objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "Nombre del objeto",
+ "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "Titulo de la Interfaz"
}
diff --git a/src/main/resources/assets/skyblocker/lang/nb_NO.json b/src/main/resources/assets/skyblocker/lang/nb_NO.json
index 3c7cae87..0f96ebb6 100644
--- a/src/main/resources/assets/skyblocker/lang/nb_NO.json
+++ b/src/main/resources/assets/skyblocker/lang/nb_NO.json
@@ -82,5 +82,83 @@
"text.autoconfig.skyblocker.option.quickNav.button1": "Knapp 1",
"text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "Gjenstand navn",
"text.autoconfig.skyblocker.option.quickNav.button3.render": "Rendering",
- "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "UI Tittel"
+ "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "UI Tittel",
+ "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "Klikk hendelse",
+ "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "Klikk hendelse",
+ "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "Klikk hendelse",
+ "text.autoconfig.skyblocker.option.quickNav.button12.item": "Gjenstand",
+ "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "Aktiver gjenstad liste",
+ "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Løs Blaze-puslespillet",
+ "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "UI Tittel",
+ "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "Klikk hendelse",
+ "text.autoconfig.skyblocker.option.quickNav.button6": "Knapp 6",
+ "text.autoconfig.skyblocker.option.quickNav.button6.render": "Rendering",
+ "text.autoconfig.skyblocker.option.quickNav.button6.item": "Gjenstand",
+ "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "Gjenstand navn",
+ "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "Gjenstand mengde",
+ "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "UI Tittel",
+ "text.autoconfig.skyblocker.option.quickNav.button7": "Knapp 7",
+ "text.autoconfig.skyblocker.option.quickNav.button7.render": "Rendering",
+ "text.autoconfig.skyblocker.option.quickNav.button7.item": "Gjenstand",
+ "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "Gjenstand navn",
+ "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "Gjenstand navn",
+ "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "UI Tittel",
+ "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "Klikk hendelse",
+ "text.autoconfig.skyblocker.option.quickNav.button8": "Knapp 8",
+ "text.autoconfig.skyblocker.option.quickNav.button8.render": "Rendering",
+ "text.autoconfig.skyblocker.option.quickNav.button8.item": "Gjenstand",
+ "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "Gjenstand navn",
+ "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "Gjenstand navn",
+ "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "UI Tittel",
+ "text.autoconfig.skyblocker.option.quickNav.button9": "Knapp 8",
+ "text.autoconfig.skyblocker.option.quickNav.button9.render": "Rendering",
+ "text.autoconfig.skyblocker.option.quickNav.button9.item": "Gjenstand",
+ "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "Gjenstand Navn",
+ "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "Gjenstand navn",
+ "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "UI Tittel",
+ "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "Klikk hendelse",
+ "text.autoconfig.skyblocker.option.quickNav.button10": "Knapp 1",
+ "text.autoconfig.skyblocker.option.quickNav.button10.render": "Rendering",
+ "text.autoconfig.skyblocker.option.quickNav.button10.item": "Gjenstand",
+ "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "Gjenstand Navn",
+ "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "Gjenstand Mengde",
+ "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "UI Tittel",
+ "text.autoconfig.skyblocker.option.quickNav.button11": "Knapp 1",
+ "text.autoconfig.skyblocker.option.quickNav.button11.render": "Rendering",
+ "text.autoconfig.skyblocker.option.quickNav.button11.item": "Gjenstand",
+ "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "Gjenstand Navn",
+ "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "Gjenstand Mengde",
+ "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "UI Tittel",
+ "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "Klikk hendelse",
+ "text.autoconfig.skyblocker.option.quickNav.button12": "Knapp 1",
+ "text.autoconfig.skyblocker.option.quickNav.button12.render": "Rendering",
+ "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "Gjenstand Navn",
+ "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "Gjenstand Mengde",
+ "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "UI Tittel",
+ "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "Klikk hendelse",
+ "text.autoconfig.skyblocker.option.general.itemList": "Gjenstand liste",
+ "text.autoconfig.skyblocker.option.locations.dungeons": "Dungeons",
+ "text.autoconfig.skyblocker.category.locations": "Lokasjoner",
+ "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "Croesus Hjelper",
+ "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "Grå ut kister som allerede er åpnet.",
+ "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "Aktiver kart",
+ "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "Kart skalering",
+ "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Løs Three Weirdos-puslespillet",
+ "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Solve the Blaze puzzle",
+ "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "Terminalløser",
+ "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "Løsning Velg farget",
+ "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "Løs klikk i rekkefølge",
+ "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "Løsning starter med",
+ "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Dverggruver",
+ "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "Aktiver Drill Fuel",
+ "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Løse Fetchur",
+ "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Løs Puzzler Puzzle",
+ "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Dverg-HUD"
}
diff --git a/src/main/resources/assets/skyblocker/lang/zh_cn.json b/src/main/resources/assets/skyblocker/lang/zh_cn.json
index 3f4ccdc8..ef752b6e 100644
--- a/src/main/resources/assets/skyblocker/lang/zh_cn.json
+++ b/src/main/resources/assets/skyblocker/lang/zh_cn.json
@@ -9,7 +9,7 @@
"text.autoconfig.skyblocker.option.general.bars.barpositions": "配置属性条位置",
"text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "下排",
"text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "上排",
- "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "右侧",
+ "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "快捷栏右侧",
"text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "禁用",
"text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "生命条位置",
"text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "法力条位置",
@@ -23,8 +23,8 @@
"text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "显示平均BIN(立即购买)价格",
"text.autoconfig.skyblocker.option.general.itemTooltip.avg": "平均类型",
"text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "你可以选择查看多少天的平均价格",
- "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "1天价格",
- "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "3天价格",
+ "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "一日内均价",
+ "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "三日内均价",
"text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "同时显示",
"text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "显示最低BIN(立即购买)价格",
"text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "显示集市购买/卖出价格",
@@ -37,41 +37,41 @@
"text.autoconfig.skyblocker.category.richPresence": "Discord活动状态",
"text.autoconfig.skyblocker.option.richPresence.info": "Skyblock信息",
"text.autoconfig.skyblocker.option.richPresence.info.PURSE": "钱包",
- "text.autoconfig.skyblocker.option.richPresence.info.BITS": "比特",
+ "text.autoconfig.skyblocker.option.richPresence.info.BITS": "点券",
"text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "位置",
"text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "如果您正在循环模式,这个值将不会生效",
"text.autoconfig.skyblocker.option.richPresence.cycleMode": "循环Skyblock信息",
- "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "启用",
+ "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "已启用",
"text.autoconfig.skyblocker.option.richPresence.customMessage": "自定义消息",
"text.autoconfig.skyblocker.category.quickNav": "快速导航",
"text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "启用快速导航",
- "text.autoconfig.skyblocker.option.quickNav.button1": "按钮1",
- "text.autoconfig.skyblocker.option.quickNav.button2": "按钮2",
- "text.autoconfig.skyblocker.option.quickNav.button3": "按钮3",
- "text.autoconfig.skyblocker.option.quickNav.button4": "按钮4",
- "text.autoconfig.skyblocker.option.quickNav.button5": "按钮5",
- "text.autoconfig.skyblocker.option.quickNav.button6": "按钮6",
- "text.autoconfig.skyblocker.option.quickNav.button7": "按钮7",
- "text.autoconfig.skyblocker.option.quickNav.button8": "按钮8",
- "text.autoconfig.skyblocker.option.quickNav.button9": "按钮9",
- "text.autoconfig.skyblocker.option.quickNav.button10": "按钮10",
- "text.autoconfig.skyblocker.option.quickNav.button11": "按钮11",
- "text.autoconfig.skyblocker.option.quickNav.button12": "按钮12",
+ "text.autoconfig.skyblocker.option.quickNav.button1": "热键1",
+ "text.autoconfig.skyblocker.option.quickNav.button2": "热键2",
+ "text.autoconfig.skyblocker.option.quickNav.button3": "热键3",
+ "text.autoconfig.skyblocker.option.quickNav.button4": "热键4",
+ "text.autoconfig.skyblocker.option.quickNav.button5": "热键5",
+ "text.autoconfig.skyblocker.option.quickNav.button6": "热键6",
+ "text.autoconfig.skyblocker.option.quickNav.button7": "热键7",
+ "text.autoconfig.skyblocker.option.quickNav.button8": "热键8",
+ "text.autoconfig.skyblocker.option.quickNav.button9": "热键9",
+ "text.autoconfig.skyblocker.option.quickNav.button10": "热键10",
+ "text.autoconfig.skyblocker.option.quickNav.button11": "热键11",
+ "text.autoconfig.skyblocker.option.quickNav.button12": "热键12",
"text.autoconfig.skyblocker.option.general.itemList": "物品列表",
"text.autoconfig.skyblocker.option.general.itemList.enableItemList": "启用物品列表",
"text.autoconfig.skyblocker.category.locations": "位置",
"text.autoconfig.skyblocker.option.locations.dungeons": "地牢",
"text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "Croesus助手",
- "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "用灰色显示出已经打开过的箱子",
- "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "启用地图",
+ "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "将打开过的箱子标记为灰色",
+ "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "启用地牢地图",
"text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "解决三怪人迷题",
- "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "解决烈焰人迷题",
- "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "解决常识迷题",
+ "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "烈焰人迷题助手",
+ "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "常识问答谜题助手",
"text.autoconfig.skyblocker.option.locations.dungeons.terminals": "终端助手",
- "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "解决颜色迷题",
- "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "解决排序迷题",
- "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "解决开头字母迷题",
- "text.autoconfig.skyblocker.option.locations.dwarvenMines": "矮人矿道",
+ "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "选色终端助手",
+ "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "排序终端助手",
+ "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "首字母谜题终端助手",
+ "text.autoconfig.skyblocker.option.locations.dwarvenMines": "矮人矿井",
"text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "显示钻头燃料",
"text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "解决Fetchur的迷题",
"text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "解决Puzzler的迷题",
@@ -86,14 +86,14 @@
"text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "移动到动作栏",
"text.autoconfig.skyblocker.option.messages.hideAbility": "隐藏技能冷却",
"text.autoconfig.skyblocker.option.messages.hideHeal": "隐藏治疗消息",
- "text.autoconfig.skyblocker.option.messages.hideAOTE": "隐藏AOTE消息",
- "text.autoconfig.skyblocker.option.messages.hideImplosion": "隐藏内爆技能消息",
- "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "隐藏熔融波技能消息",
+ "text.autoconfig.skyblocker.option.messages.hideAOTE": "隐藏瞬息之刃的提示消息",
+ "text.autoconfig.skyblocker.option.messages.hideImplosion": "隐藏核心爆裂技能的提示消息",
+ "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "隐藏 Molten Wave 技能的提示消息",
"text.autoconfig.skyblocker.option.messages.hideAds": "从公屏聊天中隐藏广告",
"text.autoconfig.skyblocker.option.messages.hideTeleportPad": "隐藏传送点消息",
"text.autoconfig.skyblocker.option.messages.hideCombo": "隐藏连杀消息",
"text.autoconfig.skyblocker.option.messages.hideAutopet": "隐藏自动宠物消息",
- "text.autoconfig.skyblocker.option.messages.hideMana": "在动作栏中隐藏魔力消耗信息",
+ "text.autoconfig.skyblocker.option.messages.hideMana": "在动作栏中隐藏法力消耗信息",
"text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "被已经提供了更好方案的属性条代替",
"skyblocker.update.update_message": "§b[§6Skyblocker§b] §2有新版本可用!",
"skyblocker.update.update_link": " §2§n点击这里§r",
@@ -101,5 +101,91 @@
"skyblocker.update.hover_text": "打开Modrinth",
"text.autoconfig.skyblocker.option.general.enableUpdateNotification": "更新通知",
"skyblocker.api.got_key": "§b[§6Skyblocker§b] §2自动设置你的API秘钥!",
- "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "NBT"
+ "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "物品NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "物品NBT",
+ "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "隐藏菜单中分隔符的物品信息",
+ "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "地图界面大小",
+ "skyblocker.updaterepository.failed": "§b[§6Skyblocker§b] §c更新本地数据存储库失败,请手动删库并重启游戏",
+ "text.autoconfig.skyblocker.option.quickNav.button1.item": "热键所显示物品",
+ "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "快捷界面标题",
+ "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "物品ID",
+ "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "点击时所执行的命令",
+ "text.autoconfig.skyblocker.option.quickNav.button1.render": "是否显示该热键",
+ "text.autoconfig.skyblocker.option.quickNav.button2.render": "是否显示该热键",
+ "text.autoconfig.skyblocker.option.quickNav.button2.item": "热键所显示物品",
+ "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "物品ID",
+ "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "物品数量",
+ "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "物品数量",
+ "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "物品NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "快捷界面标题",
+ "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "点击时所执行的命令",
+ "text.autoconfig.skyblocker.option.quickNav.button3.render": "是否显示该热键",
+ "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "物品ID",
+ "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "物品数量",
+ "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "物品NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "快捷界面标题",
+ "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "点击时所执行的命令",
+ "text.autoconfig.skyblocker.option.quickNav.button4.render": "是否显示该热键",
+ "text.autoconfig.skyblocker.option.quickNav.button4.item": "热键所显示物品",
+ "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "物品ID",
+ "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "快捷界面标题",
+ "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "点击时所执行的命令",
+ "text.autoconfig.skyblocker.option.quickNav.button5.render": "是否显示该热键",
+ "text.autoconfig.skyblocker.option.quickNav.button5.item": "热键所显示物品",
+ "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "物品ID",
+ "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "物品数量",
+ "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "物品NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "快捷界面标题",
+ "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "点击时所执行的命令",
+ "text.autoconfig.skyblocker.option.quickNav.button6.render": "是否显示该热键",
+ "text.autoconfig.skyblocker.option.quickNav.button6.item": "热键所显示物品",
+ "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "物品ID",
+ "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "物品数量",
+ "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "快捷界面标题",
+ "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "点击时所执行的命令",
+ "text.autoconfig.skyblocker.option.quickNav.button7.render": "是否显示该热键",
+ "text.autoconfig.skyblocker.option.quickNav.button7.item": "热键所显示物品",
+ "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "物品ID",
+ "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "热键物品显示数量",
+ "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "物品NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "快捷界面标题",
+ "text.autoconfig.skyblocker.option.quickNav.button8.render": "是否显示该热键",
+ "text.autoconfig.skyblocker.option.quickNav.button8.item": "热键所显示物品",
+ "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "物品ID",
+ "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "热键物品显示数量",
+ "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "物品NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "快捷界面标题",
+ "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "点击时所执行的命令",
+ "text.autoconfig.skyblocker.option.quickNav.button9.render": "是否显示该热键",
+ "text.autoconfig.skyblocker.option.quickNav.button9.item": "热键所显示物品",
+ "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "物品数量",
+ "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "物品NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "快捷界面标题",
+ "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "点击时所执行的命令",
+ "text.autoconfig.skyblocker.option.quickNav.button10.render": "是否显示该热键",
+ "text.autoconfig.skyblocker.option.quickNav.button10.item": "热键所显示物品",
+ "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "物品ID",
+ "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "物品数量",
+ "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "物品NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "快捷界面标题",
+ "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "点击时所执行的命令",
+ "text.autoconfig.skyblocker.option.quickNav.button11.render": "是否显示该热键",
+ "text.autoconfig.skyblocker.option.quickNav.button11.item": "热键所显示物品",
+ "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "物品ID",
+ "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "物品数量",
+ "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "物品NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "快捷界面标题",
+ "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "点击时所执行的命令",
+ "text.autoconfig.skyblocker.option.quickNav.button12.render": "是否显示该热键",
+ "text.autoconfig.skyblocker.option.quickNav.button12.item": "热键所显示物品",
+ "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "物品ID",
+ "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "物品数量",
+ "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "物品NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "快捷界面标题",
+ "text.autoconfig.skyblocker.option.quickNav.button3.item": "热键所显示物品",
+ "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "物品数量",
+ "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "物品NBT",
+ "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "点击时所执行的命令",
+ "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "物品ID",
+ "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "点击时所执行的命令"
}
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 859425c3..6fa2596a 100644
--- a/src/main/resources/skyblocker.mixins.json
+++ b/src/main/resources/skyblocker.mixins.json
@@ -3,17 +3,18 @@
"package": "me.xmrvizzy.skyblocker.mixin",
"compatibilityLevel": "JAVA_17",
"client": [
+ "AccessorWorldRenderer",
"ClientPlayerEntityMixin",
- "InGameHudMixin",
- "ItemRendererMixin",
- "LeverBlockMixin",
+ "ClientPlayNetworkHandlerMixin",
"FarmlandBlockMixin",
- "MinecraftClientMixin",
- "AccessorWorldRenderer",
- "GenericContainerScreenMixin",
"GenericContainerScreenHandlerMixin",
+ "HandledScreenAccessor",
"HandledScreenMixin",
+ "InGameHudMixin",
"InventoryScreenMixin",
+ "ItemRendererMixin",
+ "LeverBlockMixin",
+ "MinecraftClientMixin",
"RecipeBookWidgetAccessor",
"HandledScreenAccessor",
"PlayerListHudAccessor",