Replace ServerLifecycleEvents usage with mixin

This commit is contained in:
embeddedt 2023-08-02 19:00:28 -04:00
parent 82218ce18f
commit fe818eb7e6
No known key found for this signature in database
GPG Key ID: A69433EC199B5613
2 changed files with 29 additions and 11 deletions

View File

@ -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
}

View File

@ -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);
}
}