diff --git a/common/src/main/java/org/embeddedt/modernfix/ModernFixClient.java b/common/src/main/java/org/embeddedt/modernfix/ModernFixClient.java index 7a240524..ef2ed28e 100644 --- a/common/src/main/java/org/embeddedt/modernfix/ModernFixClient.java +++ b/common/src/main/java/org/embeddedt/modernfix/ModernFixClient.java @@ -26,7 +26,7 @@ import java.util.concurrent.CopyOnWriteArrayList; public class ModernFixClient { public static ModernFixClient INSTANCE; - public static long worldLoadStartTime; + public static long worldLoadStartTime = -1; private static int numRenderTicks; public static float gameStartTimeSeconds = -1; diff --git a/common/src/main/java/org/embeddedt/modernfix/blockstate/FerriteCorePostProcess.java b/common/src/main/java/org/embeddedt/modernfix/blockstate/FerriteCorePostProcess.java index 372fb27d..70daf00e 100644 --- a/common/src/main/java/org/embeddedt/modernfix/blockstate/FerriteCorePostProcess.java +++ b/common/src/main/java/org/embeddedt/modernfix/blockstate/FerriteCorePostProcess.java @@ -35,7 +35,13 @@ public class FerriteCorePostProcess { toKeyIndex = keyIndex; } - private static final Object2IntMap EMPTY_MAP = Object2IntMaps.unmodifiable(new Object2IntArrayMap<>()); + private static final Object2IntMap EMPTY_MAP; + + static { + Object2IntArrayMap map = new Object2IntArrayMap<>(); + map.defaultReturnValue(-1); + EMPTY_MAP = Object2IntMaps.unmodifiable(map); + } public static > void postProcess(StateDefinition state) { if(!willPostProcess) diff --git a/fabric/build.gradle b/fabric/build.gradle index c3c8f20b..e207e0e4 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -32,10 +32,10 @@ dependencies { modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" testImplementation "net.fabricmc:fabric-loader-junit:${rootProject.fabric_loader_version}" - modIncludeImplementation(fabricApi.module("fabric-api-base", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' } - modIncludeImplementation(fabricApi.module("fabric-lifecycle-events-v1", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' } + modImplementation(fabricApi.module("fabric-api-base", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' } + modImplementation(fabricApi.module("fabric-lifecycle-events-v1", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' } modImplementation(fabricApi.module("fabric-screen-api-v1", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' } - modIncludeImplementation(fabricApi.module("fabric-command-api-v2", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' } + modImplementation(fabricApi.module("fabric-command-api-v2", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' } modImplementation(fabricApi.module("fabric-models-v0", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' } modImplementation(fabricApi.module("fabric-resource-loader-v0", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' } modImplementation(fabricApi.module("fabric-data-generation-api-v1", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' } diff --git a/fabric/src/main/java/org/embeddedt/modernfix/ModernFixClientFabric.java b/fabric/src/main/java/org/embeddedt/modernfix/ModernFixClientFabric.java index 2d4addf3..c227389f 100644 --- a/fabric/src/main/java/org/embeddedt/modernfix/ModernFixClientFabric.java +++ b/fabric/src/main/java/org/embeddedt/modernfix/ModernFixClientFabric.java @@ -1,8 +1,6 @@ package org.embeddedt.modernfix; import net.fabricmc.api.ClientModInitializer; -import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.loader.api.FabricLoader; import org.embeddedt.modernfix.fabric.datagen.RuntimeDatagen; @@ -13,10 +11,6 @@ public class ModernFixClientFabric implements ClientModInitializer { public void onInitializeClient() { commonMod = new ModernFixClient(); - ClientTickEvents.END_CLIENT_TICK.register((mc) -> commonMod.onRenderTickEnd()); - ServerLifecycleEvents.SERVER_STARTED.register(server -> { - commonMod.onServerStarted(server); - }); if(FabricLoader.getInstance().isModLoaded("fabric-data-generation-api-v1")) { RuntimeDatagen.init(); } 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/ClientMinecraftServerMixin.java b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/core/ClientMinecraftServerMixin.java new file mode 100644 index 00000000..30e8a494 --- /dev/null +++ b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/core/ClientMinecraftServerMixin.java @@ -0,0 +1,18 @@ +package org.embeddedt.modernfix.fabric.mixin.core; + +import net.minecraft.server.MinecraftServer; +import org.embeddedt.modernfix.ModernFixClient; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; +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; + +@Mixin(MinecraftServer.class) +@ClientOnlyMixin +public class ClientMinecraftServerMixin { + @Inject(method = "runServer", at = @At(value = "INVOKE", target = "Lnet/minecraft/Util;getMillis()J", ordinal = 0)) + private void markServerStarted(CallbackInfo ci) { + ModernFixClient.INSTANCE.onServerStarted((MinecraftServer)(Object)this); + } +} diff --git a/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/core/MCMixin_Fabric.java b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/core/MCMixin_Fabric.java new file mode 100644 index 00000000..2fb3ba16 --- /dev/null +++ b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/core/MCMixin_Fabric.java @@ -0,0 +1,16 @@ +package org.embeddedt.modernfix.fabric.mixin.core; + +import net.minecraft.client.Minecraft; +import org.embeddedt.modernfix.ModernFixClient; +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; + +@Mixin(Minecraft.class) +public class MCMixin_Fabric { + @Inject(method = "tick", at = @At("RETURN")) + private void onRenderTickEnd(CallbackInfo ci) { + ModernFixClient.INSTANCE.onRenderTickEnd(); + } +} 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); + } +} diff --git a/fabric/src/main/java/org/embeddedt/modernfix/platform/fabric/ModernFixPlatformHooksImpl.java b/fabric/src/main/java/org/embeddedt/modernfix/platform/fabric/ModernFixPlatformHooksImpl.java index 0810e6d4..c87b50cd 100644 --- a/fabric/src/main/java/org/embeddedt/modernfix/platform/fabric/ModernFixPlatformHooksImpl.java +++ b/fabric/src/main/java/org/embeddedt/modernfix/platform/fabric/ModernFixPlatformHooksImpl.java @@ -84,7 +84,8 @@ public class ModernFixPlatformHooksImpl implements ModernFixPlatformHooks { } public void onServerCommandRegister(Consumer> handler) { - CommandRegistrationCallback.EVENT.register((dispatcher, arg, env) -> handler.accept(dispatcher)); + if(FabricLoader.getInstance().isModLoaded("fabric-command-api-v2")) + CommandRegistrationCallback.EVENT.register((dispatcher, arg, env) -> handler.accept(dispatcher)); } private static Multimap modOptions; diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index c2ef7256..58fc2335 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -33,8 +33,6 @@ "modernfix-common.mixins.json" ], "depends": { - "fabric-lifecycle-events-v1": "*", - "fabric-command-api-v2": "*", "minecraft": ">=1.16.2" }, "breaks": {