From 5901dc66b7ff4acdeded9f56845518ea3d9605bf Mon Sep 17 00:00:00 2001 From: Pieter <51260315+DevPieter@users.noreply.github.com> Date: Sat, 30 Aug 2025 16:12:22 +0200 Subject: [PATCH 1/3] =?UTF-8?q?=E2=9C=A8=20Implement=20shutdown=20function?= =?UTF-8?q?ality?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/nl/devpieter/utilize/Utilize.java | 10 ++++++++++ .../nl/devpieter/utilize/setting/SettingManager.java | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/src/main/java/nl/devpieter/utilize/Utilize.java b/src/main/java/nl/devpieter/utilize/Utilize.java index 65a33d8..9595236 100644 --- a/src/main/java/nl/devpieter/utilize/Utilize.java +++ b/src/main/java/nl/devpieter/utilize/Utilize.java @@ -1,15 +1,18 @@ package nl.devpieter.utilize; import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.ModContainer; import net.minecraft.SharedConstants; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; +import nl.devpieter.utilize.http.AsyncRequest; import nl.devpieter.utilize.listeners.packet.EntityTrackerUpdatePacketListener; import nl.devpieter.utilize.listeners.packet.OpenScreenPacketListener; import nl.devpieter.utilize.listeners.packet.SetTradeOffersPacketListener; import nl.devpieter.utilize.managers.PacketManager; +import nl.devpieter.utilize.setting.SettingManager; import nl.devpieter.utilize.utils.ClientUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,6 +37,13 @@ public void onInitializeClient() { packetManager.subscribe(new OpenScreenPacketListener()); packetManager.subscribe(new SetTradeOffersPacketListener()); + ClientLifecycleEvents.CLIENT_STOPPING.register((client) -> { + LOGGER.info("Shutting down Utilize..."); + + SettingManager.shutdown(); + AsyncRequest.shutdown(); + }); + if (!ClientUtils.isDevEnv()) return; LOGGER.info("Utilize is running in a development environment."); } diff --git a/src/main/java/nl/devpieter/utilize/setting/SettingManager.java b/src/main/java/nl/devpieter/utilize/setting/SettingManager.java index 50f48b6..c472464 100644 --- a/src/main/java/nl/devpieter/utilize/setting/SettingManager.java +++ b/src/main/java/nl/devpieter/utilize/setting/SettingManager.java @@ -35,6 +35,13 @@ public static SettingManager getInstance() { return INSTANCE; } + public static void shutdown() { + if (INSTANCE == null) return; + + INSTANCE.forceSaveQueue(); + INSTANCE = null; + } + public void tick() { if (this.saveQueue.isEmpty()) return; From 132d36137b481032d15d19eb4348ddf3abd2bcfb Mon Sep 17 00:00:00 2001 From: Pieter <51260315+DevPieter@users.noreply.github.com> Date: Sat, 30 Aug 2025 16:42:04 +0200 Subject: [PATCH 2/3] =?UTF-8?q?=E2=9C=A8=20Refactor=20setting=20manager=20?= =?UTF-8?q?initialization=20and=20tick=20handling?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/nl/devpieter/utilize/Utilize.java | 17 +++++++++++++++-- .../utilize/mixins/ClientPlayerEntityMixin.java | 4 ---- .../utilize/mixins/MinecraftClientMixin.java | 17 +++++++++++++++++ 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/main/java/nl/devpieter/utilize/Utilize.java b/src/main/java/nl/devpieter/utilize/Utilize.java index 9595236..0a516dd 100644 --- a/src/main/java/nl/devpieter/utilize/Utilize.java +++ b/src/main/java/nl/devpieter/utilize/Utilize.java @@ -22,6 +22,9 @@ public class Utilize implements ClientModInitializer { + private static Utilize INSTANCE; + private static boolean INITIALIZED = false; + private static final ModContainer MOD_CONTAINER = FabricLoader.getInstance().getModContainer("utilize").orElseThrow(); @Deprecated(since = "1.0.11", forRemoval = true) @@ -32,6 +35,8 @@ public class Utilize implements ClientModInitializer { @Override public void onInitializeClient() { + INSTANCE = this; + PacketManager packetManager = PacketManager.getInstance(); packetManager.subscribe(new EntityTrackerUpdatePacketListener()); packetManager.subscribe(new OpenScreenPacketListener()); @@ -44,8 +49,16 @@ public void onInitializeClient() { AsyncRequest.shutdown(); }); - if (!ClientUtils.isDevEnv()) return; - LOGGER.info("Utilize is running in a development environment."); + INITIALIZED = true; + } + + public static Utilize getInstance() { + if (INSTANCE == null) throw new IllegalStateException("Utilize has not been initialized yet!"); + return INSTANCE; + } + + public static boolean isInitialized() { + return INITIALIZED; } @Deprecated(since = "1.0.11", forRemoval = true) diff --git a/src/main/java/nl/devpieter/utilize/mixins/ClientPlayerEntityMixin.java b/src/main/java/nl/devpieter/utilize/mixins/ClientPlayerEntityMixin.java index b01970d..d23ac13 100644 --- a/src/main/java/nl/devpieter/utilize/mixins/ClientPlayerEntityMixin.java +++ b/src/main/java/nl/devpieter/utilize/mixins/ClientPlayerEntityMixin.java @@ -21,9 +21,6 @@ @Mixin(ClientPlayerEntity.class) public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity { - @Unique - private final SettingManager settingManager = SettingManager.getInstance(); - @Unique private final Sees sees = Sees.getInstance(); @@ -45,7 +42,6 @@ public ClientPlayerEntityMixin(ClientWorld world, GameProfile profile) { @Inject(at = @At("TAIL"), method = "tick") private void onTick(CallbackInfo ci) { - this.settingManager.tick(); this.damageManager.tick(this.getHealth()); this.sleepManager.tick(this.isSleeping(), this.getSleepTimer()); this.taskManager.tick(); diff --git a/src/main/java/nl/devpieter/utilize/mixins/MinecraftClientMixin.java b/src/main/java/nl/devpieter/utilize/mixins/MinecraftClientMixin.java index bfe254c..4a89871 100644 --- a/src/main/java/nl/devpieter/utilize/mixins/MinecraftClientMixin.java +++ b/src/main/java/nl/devpieter/utilize/mixins/MinecraftClientMixin.java @@ -3,7 +3,9 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; import nl.devpieter.sees.Sees; +import nl.devpieter.utilize.Utilize; import nl.devpieter.utilize.events.screen.ScreenChangedEvent; +import nl.devpieter.utilize.setting.SettingManager; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -22,6 +24,9 @@ public class MinecraftClientMixin { @Unique private final Sees sees = Sees.getInstance(); + @Unique + private SettingManager settingManager; + @Unique private Screen previousScreen; @@ -34,4 +39,16 @@ private void onSetScreenHead(Screen screen, CallbackInfo ci) { private void onSetScreenTail(Screen screen, CallbackInfo ci) { this.sees.call(new ScreenChangedEvent(this.previousScreen, screen)); } + + @Inject(at = @At("TAIL"), method = "tick") + private void onTick(CallbackInfo ci) { + if (settingManager == null) { + if (!Utilize.isInitialized()) return; + settingManager = SettingManager.getInstance(); + } + + if (settingManager != null) { + settingManager.tick(); + } + } } From c8c39652104691828f3efd0441bce7d71e12bd82 Mon Sep 17 00:00:00 2001 From: Pieter <51260315+DevPieter@users.noreply.github.com> Date: Sat, 30 Aug 2025 16:43:19 +0200 Subject: [PATCH 3/3] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Bump=20version=20to=20?= =?UTF-8?q?1.0.12?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 70aa46c..bfc3d12 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,6 +7,6 @@ loader_version=0.16.10 # Mod Properties artifact_id=utilize -mod_version=1.0.11 +mod_version=1.0.12 maven_group=nl.devpieter archives_base_name=Utilize