From fe818eb7e6096dc898a7d6ae169b5b4b95dfb3ae Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Wed, 2 Aug 2023 19:00:28 -0400 Subject: [PATCH] Replace ServerLifecycleEvents usage with mixin --- .../embeddedt/modernfix/ModernFixFabric.java | 11 ------- .../mixin/core/MinecraftServerMixin.java | 29 +++++++++++++++++++ 2 files changed, 29 insertions(+), 11 deletions(-) create mode 100644 fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/core/MinecraftServerMixin.java diff --git a/fabric/src/main/java/org/embeddedt/modernfix/ModernFixFabric.java b/fabric/src/main/java/org/embeddedt/modernfix/ModernFixFabric.java index 90af0e9e..25bfeef0 100644 --- a/fabric/src/main/java/org/embeddedt/modernfix/ModernFixFabric.java +++ b/fabric/src/main/java/org/embeddedt/modernfix/ModernFixFabric.java @@ -1,7 +1,6 @@ package org.embeddedt.modernfix; import net.fabricmc.api.ModInitializer; -import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.minecraft.server.MinecraftServer; import java.lang.ref.WeakReference; @@ -13,16 +12,6 @@ public class ModernFixFabric implements ModInitializer { public void onInitialize() { commonMod = new ModernFix(); - ServerLifecycleEvents.SERVER_STARTING.register(server -> { - theServer = new WeakReference<>(server); - }); - ServerLifecycleEvents.SERVER_STARTED.register(server -> { - commonMod.onServerStarted(); - }); - ServerLifecycleEvents.SERVER_STOPPED.register(server -> { - commonMod.onServerDead(server); - }); - // TODO: implement entity ID desync } diff --git a/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/core/MinecraftServerMixin.java b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/core/MinecraftServerMixin.java new file mode 100644 index 00000000..a68e91f0 --- /dev/null +++ b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/core/MinecraftServerMixin.java @@ -0,0 +1,29 @@ +package org.embeddedt.modernfix.fabric.mixin.core; + +import net.minecraft.server.MinecraftServer; +import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.ModernFixFabric; +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 java.lang.ref.WeakReference; + +@Mixin(MinecraftServer.class) +public class MinecraftServerMixin { + @Inject(method = "runServer", at = @At("HEAD")) + private void changeServerReference(CallbackInfo ci) { + ModernFixFabric.theServer = new WeakReference<>((MinecraftServer)(Object)this); + } + + @Inject(method = "runServer", at = @At(value = "INVOKE", target = "Lnet/minecraft/Util;getMillis()J", ordinal = 0)) + private void hookServerStarted(CallbackInfo ci) { + ModernFix.INSTANCE.onServerStarted(); + } + + @Inject(method = "stopServer", at = @At("RETURN")) + private void hookServerShutdown(CallbackInfo ci) { + ModernFix.INSTANCE.onServerDead((MinecraftServer)(Object)this); + } +}