From 583f363b6b5d5a768e00c2549c5d0167eacbd4b6 Mon Sep 17 00:00:00 2001 From: LexManos Date: Thu, 13 Jun 2024 15:15:04 -0700 Subject: [PATCH] Change tick event to have pre/post classes (#9890) --- .../client/event/ForgeEventFactoryClient.java | 4 +- .../common/ForgeInternalHandler.java | 9 +- .../event/ForgeEventFactory.java | 16 +-- .../net/minecraftforge/event/TickEvent.java | 108 +++++++++++++----- 4 files changed, 98 insertions(+), 39 deletions(-) diff --git a/src/main/java/net/minecraftforge/client/event/ForgeEventFactoryClient.java b/src/main/java/net/minecraftforge/client/event/ForgeEventFactoryClient.java index 6974bf1286..a1e77d8468 100644 --- a/src/main/java/net/minecraftforge/client/event/ForgeEventFactoryClient.java +++ b/src/main/java/net/minecraftforge/client/event/ForgeEventFactoryClient.java @@ -258,10 +258,10 @@ public final class ForgeEventFactoryClient { } public static void onRenderTickStart(DeltaTracker timer) { - post(new TickEvent.RenderTickEvent.Start(timer)); + post(new TickEvent.RenderTickEvent.Pre(timer)); } public static void onRenderTickEnd(DeltaTracker timer) { - post(new TickEvent.RenderTickEvent.End(timer)); + post(new TickEvent.RenderTickEvent.Post(timer)); } } diff --git a/src/main/java/net/minecraftforge/common/ForgeInternalHandler.java b/src/main/java/net/minecraftforge/common/ForgeInternalHandler.java index 2890d9e3f6..89c22a0895 100644 --- a/src/main/java/net/minecraftforge/common/ForgeInternalHandler.java +++ b/src/main/java/net/minecraftforge/common/ForgeInternalHandler.java @@ -51,8 +51,13 @@ public class ForgeInternalHandler { } @SubscribeEvent - public void onServerTick(ServerTickEvent event) { - WorldWorkerManager.tick(event.phase == TickEvent.Phase.START); + public void onServerTick(ServerTickEvent.Pre event) { + WorldWorkerManager.tick(true); + } + + @SubscribeEvent + public void onServerTick(ServerTickEvent.Post event) { + WorldWorkerManager.tick(false); } @SubscribeEvent diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index 20847ef5ff..f17f2c9753 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -800,35 +800,35 @@ public final class ForgeEventFactory { } public static void onPlayerPreTick(Player player) { - post(new TickEvent.PlayerTickEvent(TickEvent.Phase.START, player)); + post(new TickEvent.PlayerTickEvent.Pre(player)); } public static void onPlayerPostTick(Player player) { - post(new TickEvent.PlayerTickEvent(TickEvent.Phase.END, player)); + post(new TickEvent.PlayerTickEvent.Post(player)); } public static void onPreLevelTick(Level level, BooleanSupplier haveTime) { - post(new TickEvent.LevelTickEvent(level.isClientSide ? LogicalSide.CLIENT : LogicalSide.SERVER, TickEvent.Phase.START, level, haveTime)); + post(new TickEvent.LevelTickEvent.Pre(level.isClientSide ? LogicalSide.CLIENT : LogicalSide.SERVER, level, haveTime)); } public static void onPostLevelTick(Level level, BooleanSupplier haveTime) { - post(new TickEvent.LevelTickEvent(level.isClientSide ? LogicalSide.CLIENT : LogicalSide.SERVER, TickEvent.Phase.END, level, haveTime)); + post(new TickEvent.LevelTickEvent.Post(level.isClientSide ? LogicalSide.CLIENT : LogicalSide.SERVER, level, haveTime)); } public static void onPreClientTick() { - post(new TickEvent.ClientTickEvent(TickEvent.Phase.START)); + post(TickEvent.ClientTickEvent.Pre.get()); } public static void onPostClientTick() { - post(new TickEvent.ClientTickEvent(TickEvent.Phase.END)); + post(TickEvent.ClientTickEvent.Post.get()); } public static void onPreServerTick(BooleanSupplier haveTime, MinecraftServer server) { - post(new TickEvent.ServerTickEvent(TickEvent.Phase.START, haveTime, server)); + post(new TickEvent.ServerTickEvent.Pre(haveTime, server)); } public static void onPostServerTick(BooleanSupplier haveTime, MinecraftServer server) { - post(new TickEvent.ServerTickEvent(TickEvent.Phase.END, haveTime, server)); + post(new TickEvent.ServerTickEvent.Post(haveTime, server)); } public static WeightedRandomList getPotentialSpawns(LevelAccessor level, MobCategory category, BlockPos pos, WeightedRandomList oldList) { diff --git a/src/main/java/net/minecraftforge/event/TickEvent.java b/src/main/java/net/minecraftforge/event/TickEvent.java index c179bc5c1f..d0c17f3e01 100644 --- a/src/main/java/net/minecraftforge/event/TickEvent.java +++ b/src/main/java/net/minecraftforge/event/TickEvent.java @@ -16,8 +16,7 @@ import net.minecraft.world.level.Level; import net.minecraftforge.eventbus.api.Event; import net.minecraftforge.fml.LogicalSide; -public class TickEvent extends Event -{ +public class TickEvent extends Event { public enum Type { LEVEL, PLAYER, CLIENT, SERVER, RENDER; } @@ -25,11 +24,12 @@ public class TickEvent extends Event public enum Phase { START, END; } + public final Type type; public final LogicalSide side; public final Phase phase; - public TickEvent(Type type, LogicalSide side, Phase phase) - { + + public TickEvent(Type type, LogicalSide side, Phase phase) { this.type = type; this.side = side; this.phase = phase; @@ -39,8 +39,7 @@ public class TickEvent extends Event private final BooleanSupplier haveTime; private final MinecraftServer server; - public ServerTickEvent(Phase phase, BooleanSupplier haveTime, MinecraftServer server) - { + protected ServerTickEvent(BooleanSupplier haveTime, MinecraftServer server, Phase phase) { super(Type.SERVER, LogicalSide.SERVER, phase); this.haveTime = haveTime; this.server = server; @@ -48,36 +47,68 @@ public class TickEvent extends Event /** * @return {@code true} whether the server has enough time to perform any - * additional tasks (usually IO related) during the current tick, - * otherwise {@code false} + * additional tasks (usually IO related) during the current tick, + * otherwise {@code false} */ - public boolean haveTime() - { + public boolean haveTime() { return this.haveTime.getAsBoolean(); } /** * {@return the server instance} */ - public MinecraftServer getServer() - { + public MinecraftServer getServer() { return server; } + + public static class Pre extends ServerTickEvent { + public Pre(BooleanSupplier haveTime, MinecraftServer server) { + super(haveTime, server, Phase.START); + } + } + + public static class Post extends ServerTickEvent { + public Post(BooleanSupplier haveTime, MinecraftServer server) { + super(haveTime, server, Phase.END); + } + } } public static class ClientTickEvent extends TickEvent { - public ClientTickEvent(Phase phase) - { + protected ClientTickEvent(Phase phase) { super(Type.CLIENT, LogicalSide.CLIENT, phase); } + + public static class Pre extends ClientTickEvent { + private static final Pre INSTANCE = new Pre(); + + private Pre() { + super(Phase.START); + } + + public static Pre get() { + return INSTANCE; + } + } + + public static class Post extends ClientTickEvent { + private static final Post INSTANCE = new Post(); + + private Post() { + super(Phase.END); + } + + public static Post get() { + return INSTANCE; + } + } } public static class LevelTickEvent extends TickEvent { public final Level level; private final BooleanSupplier haveTime; - public LevelTickEvent(LogicalSide side, Phase phase, Level level, BooleanSupplier haveTime) - { + protected LevelTickEvent(LogicalSide side, Level level, BooleanSupplier haveTime, Phase phase) { super(Type.LEVEL, side, phase); this.level = level; this.haveTime = haveTime; @@ -85,24 +116,46 @@ public class TickEvent extends Event /** * @return {@code true} whether the server has enough time to perform any - * additional tasks (usually IO related) during the current tick, - * otherwise {@code false} - * + * additional tasks (usually IO related) during the current tick, + * otherwise {@code false} * @see ServerTickEvent#haveTime() */ - public boolean haveTime() - { + public boolean haveTime() { return this.haveTime.getAsBoolean(); } + + public static class Pre extends LevelTickEvent { + public Pre(LogicalSide side, Level level, BooleanSupplier haveTime) { + super(side, level, haveTime, Phase.START); + } + } + + public static class Post extends LevelTickEvent { + public Post(LogicalSide side, Level level, BooleanSupplier haveTime) { + super(side, level, haveTime, Phase.END); + } + } } + public static class PlayerTickEvent extends TickEvent { public final Player player; - public PlayerTickEvent(Phase phase, Player player) - { + protected PlayerTickEvent(Player player, Phase phase) { super(Type.PLAYER, player instanceof ServerPlayer ? LogicalSide.SERVER : LogicalSide.CLIENT, phase); this.player = player; } + + public static class Pre extends PlayerTickEvent { + public Pre(Player player) { + super(player, Phase.START); + } + } + + public static class Post extends PlayerTickEvent { + public Post(Player player) { + super(player, Phase.END); + } + } } public static class RenderTickEvent extends TickEvent { @@ -117,16 +170,17 @@ public class TickEvent extends Event return this.timer; } - public static class Start extends RenderTickEvent { - public Start(DeltaTracker timer) { + public static class Pre extends RenderTickEvent { + public Pre(DeltaTracker timer) { super(Phase.START, timer); } } - public static class End extends RenderTickEvent { - public End(DeltaTracker timer) { + public static class Post extends RenderTickEvent { + public Post(DeltaTracker timer) { super(Phase.END, timer); } } + } }