Skip to content

Commit

Permalink
Merge pull request #295 from kevinthegreat1/scheduler
Browse files Browse the repository at this point in the history
Optimize Scheduler
  • Loading branch information
kevinthegreat1 committed Sep 13, 2023
2 parents cddd32a + 059385f commit eaca5ec
Show file tree
Hide file tree
Showing 16 changed files with 184 additions and 80 deletions.
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

0 comments on commit eaca5ec

Please sign in to comment.