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 diff --git a/src/main/java/nl/devpieter/utilize/Utilize.java b/src/main/java/nl/devpieter/utilize/Utilize.java index 65a33d8..0a516dd 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; @@ -19,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) @@ -29,13 +35,30 @@ public class Utilize implements ClientModInitializer { @Override public void onInitializeClient() { + INSTANCE = this; + PacketManager packetManager = PacketManager.getInstance(); packetManager.subscribe(new EntityTrackerUpdatePacketListener()); packetManager.subscribe(new OpenScreenPacketListener()); packetManager.subscribe(new SetTradeOffersPacketListener()); - if (!ClientUtils.isDevEnv()) return; - LOGGER.info("Utilize is running in a development environment."); + ClientLifecycleEvents.CLIENT_STOPPING.register((client) -> { + LOGGER.info("Shutting down Utilize..."); + + SettingManager.shutdown(); + AsyncRequest.shutdown(); + }); + + 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(); + } + } } 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;