Skip to content
This repository was archived by the owner on Jun 3, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*/
Expand All @@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
}
}
1 change: 1 addition & 0 deletions patchwork-god-classes/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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')
}
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
3 changes: 2 additions & 1 deletion patchwork-god-classes/src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
],
"depends": {
"fabricloader": ">=0.8.4",
"patchwork-fml": "*"
"patchwork-fml": "*",
"patchwork-events-lifecycle": "*"
},
"custom": {
"modmenu:api": true,
Expand Down