diff --git a/patchwork-events-lifecycle/src/main/java/net/minecraftforge/fml/server/ServerLifecycleHooks.java b/patchwork-events-lifecycle/src/main/java/net/minecraftforge/fml/server/ServerLifecycleHooks.java index 9f194790..c3c1b8fc 100644 --- a/patchwork-events-lifecycle/src/main/java/net/minecraftforge/fml/server/ServerLifecycleHooks.java +++ b/patchwork-events-lifecycle/src/main/java/net/minecraftforge/fml/server/ServerLifecycleHooks.java @@ -21,6 +21,8 @@ import net.minecraft.server.MinecraftServer; +import net.patchworkmc.impl.event.lifecycle.LifecycleEvents; + /** * This is a stub of the ServerLifecycleHooks class in Forge for mods that use getCurrentServer. */ @@ -30,4 +32,20 @@ public class ServerLifecycleHooks { public static MinecraftServer getCurrentServer() { return currentServer; } + + // Forge returns `!MinecraftForge.EVENT_BUS.post(...)`, so true == continue, false == cancel. + public static boolean handleServerAboutToStart(final MinecraftServer server) { + LifecycleEvents.handleServerAboutToStart(server); + return true; // patchwork does not allow you to cancel server startup. + } + + // Forge returns `!MinecraftForge.EVENT_BUS.post(...)`, so true == continue, false == cancel. + public static boolean handleServerStarting(final MinecraftServer server) { + LifecycleEvents.handleServerStarting(server); + return true; // patchwork does not allow you to cancel server startup. + } + + public static void handleServerStarted(final MinecraftServer server) { + LifecycleEvents.handleServerStarted(server); + } } diff --git a/patchwork-events-lifecycle/src/main/java/net/patchworkmc/impl/event/lifecycle/LifecycleEvents.java b/patchwork-events-lifecycle/src/main/java/net/patchworkmc/impl/event/lifecycle/LifecycleEvents.java index b4866c1e..8c950a0c 100644 --- a/patchwork-events-lifecycle/src/main/java/net/patchworkmc/impl/event/lifecycle/LifecycleEvents.java +++ b/patchwork-events-lifecycle/src/main/java/net/patchworkmc/impl/event/lifecycle/LifecycleEvents.java @@ -51,12 +51,12 @@ public static void fireWorldTickEvent(TickEvent.Phase phase, World world) { MinecraftForge.EVENT_BUS.post(event); } - public static void onPlayerPreTick(PlayerEntity player) { - MinecraftForge.EVENT_BUS.post(new TickEvent.PlayerTickEvent(TickEvent.Phase.START, player)); + public static void fireClientTickEvent(TickEvent.Phase phase) { + MinecraftForge.EVENT_BUS.post(new TickEvent.ClientTickEvent(phase)); } - public static void onPlayerPostTick(PlayerEntity player) { - MinecraftForge.EVENT_BUS.post(new TickEvent.PlayerTickEvent(TickEvent.Phase.END, player)); + public static void firePlayerTickEvent(TickEvent.Phase phase, PlayerEntity player) { + MinecraftForge.EVENT_BUS.post(new TickEvent.PlayerTickEvent(phase, player)); } public static void handleServerStarting(final MinecraftServer server) { diff --git a/patchwork-events-lifecycle/src/main/java/net/patchworkmc/mixin/event/lifecycle/MixinMinecraftClient.java b/patchwork-events-lifecycle/src/main/java/net/patchworkmc/mixin/event/lifecycle/MixinMinecraftClient.java index cb919427..d1e5d76d 100644 --- a/patchwork-events-lifecycle/src/main/java/net/patchworkmc/mixin/event/lifecycle/MixinMinecraftClient.java +++ b/patchwork-events-lifecycle/src/main/java/net/patchworkmc/mixin/event/lifecycle/MixinMinecraftClient.java @@ -24,7 +24,6 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.objectweb.asm.Opcodes; -import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.TickEvent; import net.minecraft.client.MinecraftClient; @@ -40,14 +39,12 @@ public class MixinMinecraftClient { @Inject(method = "tick()V", at = @At(value = "FIELD", opcode = Opcodes.H_GETFIELD, ordinal = 0, target = "Lnet/minecraft/client/MinecraftClient;profiler:Lnet/minecraft/util/profiler/DisableableProfiler;")) private void hookClientTickStart(CallbackInfo info) { - TickEvent.ClientTickEvent event = new TickEvent.ClientTickEvent(TickEvent.Phase.START); - MinecraftForge.EVENT_BUS.post(event); + LifecycleEvents.fireClientTickEvent(TickEvent.Phase.START); } @Inject(method = "tick()V", at = @At("RETURN")) private void hookClientTickEnd(CallbackInfo info) { - TickEvent.ClientTickEvent event = new TickEvent.ClientTickEvent(TickEvent.Phase.END); - MinecraftForge.EVENT_BUS.post(event); + LifecycleEvents.fireClientTickEvent(TickEvent.Phase.END); } @Inject(method = "init", at = @At("RETURN")) diff --git a/patchwork-events-lifecycle/src/main/java/net/patchworkmc/mixin/event/lifecycle/MixinPlayerEntity.java b/patchwork-events-lifecycle/src/main/java/net/patchworkmc/mixin/event/lifecycle/MixinPlayerEntity.java index 4626ebc1..b9f6ef7b 100644 --- a/patchwork-events-lifecycle/src/main/java/net/patchworkmc/mixin/event/lifecycle/MixinPlayerEntity.java +++ b/patchwork-events-lifecycle/src/main/java/net/patchworkmc/mixin/event/lifecycle/MixinPlayerEntity.java @@ -19,6 +19,7 @@ package net.patchworkmc.mixin.event.lifecycle; +import net.minecraftforge.event.TickEvent; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -32,11 +33,11 @@ public class MixinPlayerEntity { @Inject(method = "tick", at = @At("HEAD")) public void onPlayerPreTick(CallbackInfo callback) { - LifecycleEvents.onPlayerPreTick((PlayerEntity) (Object) this); + LifecycleEvents.firePlayerTickEvent(TickEvent.Phase.START, (PlayerEntity) (Object) this); } @Inject(method = "tick", at = @At("TAIL")) public void onPlayerPostTick(CallbackInfo callback) { - LifecycleEvents.onPlayerPostTick((PlayerEntity) (Object) this); + LifecycleEvents.firePlayerTickEvent(TickEvent.Phase.END, (PlayerEntity) (Object) this); } } diff --git a/patchwork-god-classes/build.gradle b/patchwork-god-classes/build.gradle index 843fce7b..6768d533 100644 --- a/patchwork-god-classes/build.gradle +++ b/patchwork-god-classes/build.gradle @@ -3,4 +3,5 @@ version = getSubprojectVersion(project, "0.1.0") dependencies { compile project(path: ':patchwork-fml', configuration: 'dev') + compile project(path: ':patchwork-events-lifecycle', configuration: 'dev') } diff --git a/patchwork-god-classes/src/main/java/net/minecraftforge/fml/hooks/BasicEventHooks.java b/patchwork-god-classes/src/main/java/net/minecraftforge/fml/hooks/BasicEventHooks.java index cf63ab9d..aaebffd3 100644 --- a/patchwork-god-classes/src/main/java/net/minecraftforge/fml/hooks/BasicEventHooks.java +++ b/patchwork-god-classes/src/main/java/net/minecraftforge/fml/hooks/BasicEventHooks.java @@ -19,9 +19,39 @@ package net.minecraftforge.fml.hooks; +import net.minecraftforge.event.TickEvent; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.world.World; + +import net.patchworkmc.impl.event.lifecycle.LifecycleEvents; + /* * Note: this class is intended for mod use only, to dispatch to the implementations kept in their own modules. * Do not keep implementation details here, methods should be thin wrappers around methods in other modules. */ public class BasicEventHooks { + public static void onPlayerPreTick(PlayerEntity player) { + LifecycleEvents.firePlayerTickEvent(TickEvent.Phase.START, player); + } + + public static void onPlayerPostTick(PlayerEntity player) { + LifecycleEvents.firePlayerTickEvent(TickEvent.Phase.END, player); + } + + public static void onPreWorldTick(World world) { + LifecycleEvents.fireWorldTickEvent(TickEvent.Phase.START, world); + } + + public static void onPostWorldTick(World world) { + LifecycleEvents.fireWorldTickEvent(TickEvent.Phase.END, world); + } + + public static void onPreClientTick() { + LifecycleEvents.fireClientTickEvent(TickEvent.Phase.START); + } + + public static void onPostClientTick() { + LifecycleEvents.fireClientTickEvent(TickEvent.Phase.END); + } } diff --git a/patchwork-god-classes/src/main/resources/fabric.mod.json b/patchwork-god-classes/src/main/resources/fabric.mod.json index b4741cde..7c0f2121 100644 --- a/patchwork-god-classes/src/main/resources/fabric.mod.json +++ b/patchwork-god-classes/src/main/resources/fabric.mod.json @@ -16,7 +16,8 @@ ], "depends": { "fabricloader": ">=0.8.4", - "patchwork-fml": "*" + "patchwork-fml": "*", + "patchwork-events-lifecycle": "*" }, "custom": { "modmenu:api": true,