aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/xmrvizzy
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/me/xmrvizzy')
-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
34 files changed, 506 insertions, 205 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();