Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optimize Scheduler #295

Merged
merged 6 commits into from
Sep 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
22 changes: 9 additions & 13 deletions src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,6 @@ public class SkyblockerMod implements ClientModInitializer {
public static final Path CONFIG_DIR = FabricLoader.getInstance().getConfigDir().resolve(NAMESPACE);
public static final Gson GSON = new GsonBuilder().setPrettyPrinting().create();
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();

Expand Down Expand Up @@ -105,13 +101,13 @@ public void onInitializeClient() {
SpecialEffects.init();
containerSolverManager.init();
statusBarTracker.init();
scheduler.scheduleCyclic(Utils::update, 20);
scheduler.scheduleCyclic(DiscordRPCManager::updateDataAndPresence, 100);
scheduler.scheduleCyclic(TicTacToe::tick, 4);
scheduler.scheduleCyclic(LividColor::update, 10);
scheduler.scheduleCyclic(BackpackPreview::tick, 50);
scheduler.scheduleCyclic(DwarvenHud::update, 40);
scheduler.scheduleCyclic(PlayerListMgr::updateList, 20);
Scheduler.INSTANCE.scheduleCyclic(Utils::update, 20);
Scheduler.INSTANCE.scheduleCyclic(DiscordRPCManager::updateDataAndPresence, 100);
Scheduler.INSTANCE.scheduleCyclic(TicTacToe::tick, 4);
Scheduler.INSTANCE.scheduleCyclic(LividColor::update, 10);
Scheduler.INSTANCE.scheduleCyclic(BackpackPreview::tick, 50);
Scheduler.INSTANCE.scheduleCyclic(DwarvenHud::update, 40);
Scheduler.INSTANCE.scheduleCyclic(PlayerListMgr::updateList, 20);
}

/**
Expand All @@ -121,7 +117,7 @@ public void onInitializeClient() {
* @param client the Minecraft client.
*/
public void tick(MinecraftClient client) {
scheduler.tick();
messageScheduler.tick();
Scheduler.INSTANCE.tick();
MessageScheduler.INSTANCE.tick();
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package me.xmrvizzy.skyblocker.skyblock;

import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.hud.InGameHud;
Expand All @@ -16,7 +16,7 @@ public class QuiverWarning {

public static void init() {
ClientReceiveMessageEvents.ALLOW_GAME.register(QuiverWarning::onChatMessage);
SkyblockerMod.getInstance().scheduler.scheduleCyclic(QuiverWarning::update, 10);
Scheduler.INSTANCE.scheduleCyclic(QuiverWarning::update, 10);
}

public static boolean onChatMessage(Text text, boolean overlay) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon;

import it.unimi.dsi.fastutil.objects.ObjectIntPair;
import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.render.RenderHelper;
import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
import net.minecraft.client.MinecraftClient;
Expand Down Expand Up @@ -35,7 +35,7 @@ public class DungeonBlaze {
private static ArmorStandEntity nextLowestBlaze = null;

public static void init() {
SkyblockerMod.getInstance().scheduler.scheduleCyclic(DungeonBlaze::update, 4);
Scheduler.INSTANCE.scheduleCyclic(DungeonBlaze::update, 4);
WorldRenderEvents.BEFORE_DEBUG_RENDER.register(DungeonBlaze::blazeRenderer);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon;

import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.scheduler.MessageScheduler;
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
import net.minecraft.client.MinecraftClient;
import net.minecraft.util.math.BlockPos;
Expand All @@ -23,13 +23,13 @@ public static void update() {
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"));
MessageScheduler.INSTANCE.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)));
MessageScheduler.INSTANCE.sendMessageAfterCooldown(SkyblockerConfig.get().locations.dungeons.lividColor.lividColorText.replace("[color]", key.substring(16, key.length() - 5)));
tenTicks = 0;
return;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon;

import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult;
import me.xmrvizzy.skyblocker.utils.chat.ChatPatternListener;
import me.xmrvizzy.skyblocker.utils.scheduler.MessageScheduler;
import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
import net.minecraft.client.MinecraftClient;
Expand Down Expand Up @@ -35,7 +36,7 @@ public Reparty() {
ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("rp").executes(context -> {
if (!Utils.isOnSkyblock() || this.repartying || client.player == null) return 0;
this.repartying = true;
SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown("/p list");
MessageScheduler.INSTANCE.sendMessageAfterCooldown("/p list");
return 0;
})));
}
Expand All @@ -57,7 +58,7 @@ public boolean onMatch(Text message, Matcher matcher) {
}
} else if (matcher.group("disband") != null && !matcher.group("disband").equals(client.getSession().getUsername())) {
partyLeader = matcher.group("disband");
SkyblockerMod.getInstance().scheduler.schedule(() -> partyLeader = null, 61);
Scheduler.INSTANCE.schedule(() -> partyLeader = null, 61);
return false;
} else if (matcher.group("invite") != null && matcher.group("invite").equals(partyLeader)) {
String command = "/party accept " + partyLeader;
Expand All @@ -84,10 +85,10 @@ private void reparty() {
String command = "/p invite " + this.players[i];
sendCommand(command, i + 2);
}
SkyblockerMod.getInstance().scheduler.schedule(() -> this.repartying = false, this.players.length + 2);
Scheduler.INSTANCE.schedule(() -> this.repartying = false, this.players.length + 2);
}

private void sendCommand(String command, int delay) {
SkyblockerMod.getInstance().messageScheduler.queueMessage(command, delay * BASE_DELAY);
MessageScheduler.INSTANCE.queueMessage(command, delay * BASE_DELAY);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
Expand Down Expand Up @@ -140,7 +141,7 @@ public static void init() {
LOGGER.error("[Skyblocker] Failed to load dungeon secrets", e);
return null;
});
SkyblockerMod.getInstance().scheduler.scheduleCyclic(DungeonSecrets::update, 10);
Scheduler.INSTANCE.scheduleCyclic(DungeonSecrets::update, 10);
WorldRenderEvents.AFTER_TRANSLUCENT.register(DungeonSecrets::render);
ClientReceiveMessageEvents.GAME.register(DungeonSecrets::onChatMessage);
ClientReceiveMessageEvents.GAME_CANCELED.register(DungeonSecrets::onChatMessage);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import it.unimi.dsi.fastutil.ints.IntRBTreeSet;
import it.unimi.dsi.fastutil.ints.IntSortedSet;
import it.unimi.dsi.fastutil.ints.IntSortedSets;
import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
import net.fabricmc.fabric.api.util.TriState;
import net.minecraft.block.BlockState;
Expand Down Expand Up @@ -249,7 +249,7 @@ private boolean checkBlock(ClientWorld world, BlockPos pos) {
// If no rooms match, reset the fields and scan again after 50 ticks.
matched = TriState.FALSE;
DungeonSecrets.LOGGER.warn("[Skyblocker] No dungeon room matches after checking {} block(s)", checkedBlocks.size());
SkyblockerMod.getInstance().scheduler.schedule(() -> matched = TriState.DEFAULT, 50);
Scheduler.INSTANCE.schedule(() -> matched = TriState.DEFAULT, 50);
reset();
return true;
} else if (matchingRoomsSize == 1 && ++doubleCheckBlocks >= 10) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.item.TooltipContext;
import net.minecraft.item.ItemStack;
Expand Down Expand Up @@ -33,7 +33,6 @@

public class PriceInfoTooltip {
private static final Logger LOGGER = LoggerFactory.getLogger(PriceInfoTooltip.class.getName());
private static final SkyblockerMod skyblocker = SkyblockerMod.getInstance();
private static final MinecraftClient client = MinecraftClient.getInstance();
private static JsonObject npcPricesJson;
private static JsonObject bazaarPricesJson;
Expand Down Expand Up @@ -355,7 +354,7 @@ private static Text getMotesMessage(int price, int count) {
public static int minute = -1;

public static void init() {
skyblocker.scheduler.scheduleCyclic(() -> {
Scheduler.INSTANCE.scheduleCyclic(() -> {
if (!Utils.isOnSkyblock() && 0 < minute++) {
nullMsgSend = false;
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

import com.mojang.blaze3d.systems.RenderSystem;

import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.mixin.accessor.HandledScreenAccessor;
import me.xmrvizzy.skyblocker.utils.scheduler.MessageScheduler;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.MinecraftClient;
Expand Down Expand Up @@ -54,7 +54,7 @@ private void updateCoordinates() {
public void onClick(double mouseX, double mouseY) {
if (!this.toggled) {
this.toggled = true;
SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown(command);
MessageScheduler.INSTANCE.sendMessageAfterCooldown(command);
// TODO : add null check with log error
}
}
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package me.xmrvizzy.skyblocker.skyblock.rift;

import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;

public class TheRift {
Expand All @@ -13,9 +13,9 @@ public class TheRift {
public static void init() {
WorldRenderEvents.AFTER_TRANSLUCENT.register(MirrorverseWaypoints::render);
WorldRenderEvents.AFTER_TRANSLUCENT.register(EffigyWaypoints::render);
SkyblockerMod.getInstance().scheduler.scheduleCyclic(EffigyWaypoints::updateEffigies, SkyblockerConfig.get().slayer.vampireSlayer.effigyUpdateFrequency);
SkyblockerMod.getInstance().scheduler.scheduleCyclic(TwinClawsIndicator::updateIce, SkyblockerConfig.get().slayer.vampireSlayer.holyIceUpdateFrequency);
SkyblockerMod.getInstance().scheduler.scheduleCyclic(ManiaIndicator::updateMania, SkyblockerConfig.get().slayer.vampireSlayer.maniaUpdateFrequency);
SkyblockerMod.getInstance().scheduler.scheduleCyclic(StakeIndicator::updateStake, SkyblockerConfig.get().slayer.vampireSlayer.steakStakeUpdateFrequency);
Scheduler.INSTANCE.scheduleCyclic(EffigyWaypoints::updateEffigies, SkyblockerConfig.get().slayer.vampireSlayer.effigyUpdateFrequency);
Scheduler.INSTANCE.scheduleCyclic(TwinClawsIndicator::updateIce, SkyblockerConfig.get().slayer.vampireSlayer.holyIceUpdateFrequency);
Scheduler.INSTANCE.scheduleCyclic(ManiaIndicator::updateMania, SkyblockerConfig.get().slayer.vampireSlayer.maniaUpdateFrequency);
Scheduler.INSTANCE.scheduleCyclic(StakeIndicator::updateStake, SkyblockerConfig.get().slayer.vampireSlayer.steakStakeUpdateFrequency);
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package me.xmrvizzy.skyblocker.skyblock.rift;

import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.utils.SlayerUtils;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.render.RenderHelper;
import me.xmrvizzy.skyblocker.utils.render.title.Title;
import me.xmrvizzy.skyblocker.utils.render.title.TitleContainer;
import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
import net.minecraft.entity.Entity;
import net.minecraft.util.Formatting;

Expand All @@ -29,7 +29,7 @@ protected static void updateIce() {
anyClaws = true;
if (!TitleContainer.containsTitle(title) && !scheduled) {
scheduled = true;
SkyblockerMod.getInstance().scheduler.schedule(() -> {
Scheduler.INSTANCE.schedule(() -> {
RenderHelper.displayInTitleContainerAndPlaySound(title);
scheduled = false;
}, SkyblockerConfig.get().slayer.vampireSlayer.holyIceIndicatorTickDelay);
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip;
import me.xmrvizzy.skyblocker.skyblock.rift.TheRift;
import me.xmrvizzy.skyblocker.utils.scheduler.MessageScheduler;
import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback;
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
Expand Down Expand Up @@ -294,7 +294,7 @@ private static void updateLocRaw() {
if (isOnSkyblock) {
long currentTime = System.currentTimeMillis();
if (!sentLocRaw && currentTime > clientWorldJoinTime + 1000 && currentTime > lastLocRaw + 15000) {
SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown("/locraw");
MessageScheduler.INSTANCE.sendMessageAfterCooldown("/locraw");
sentLocRaw = true;
lastLocRaw = currentTime;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package me.xmrvizzy.skyblocker.utils.render.title;

import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
Expand Down Expand Up @@ -66,7 +65,7 @@ public static boolean addTitle(Title title) {
*/
public static boolean addTitle(Title title, int ticks) {
if (addTitle(title)) {
SkyblockerMod.getInstance().scheduler.schedule(() -> TitleContainer.removeTitle(title), ticks);
Scheduler.INSTANCE.schedule(() -> TitleContainer.removeTitle(title), ticks);
return true;
}
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,22 @@
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.
* A scheduler for sending chat messages or commands. Use the instance in {@link #INSTANCE}. 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;
public static final MessageScheduler INSTANCE = new MessageScheduler();
/**
* The timestamp of the last message send,
*/
private long lastMessage = 0;

protected MessageScheduler() {
}

/**
* Sends a chat message or command after the minimum cooldown. Prefer this method to send messages or commands to the server.
*
Expand Down