diff --git a/src/main/java/net/minecraftforge/common/ForgeInternalHandler.java b/src/main/java/net/minecraftforge/common/ForgeInternalHandler.java index 1a466cb704..9184b41b13 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 5f98e5e971..4a84a1281b 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -716,43 +716,43 @@ public class ForgeEventFactory { } public static void onRenderTickStart(float timer) { - post(new TickEvent.RenderTickEvent(TickEvent.Phase.START, timer)); + post(new TickEvent.RenderTickEvent.Pre(timer)); } public static void onRenderTickEnd(float timer) { - post(new TickEvent.RenderTickEvent(TickEvent.Phase.END, timer)); + post(new TickEvent.RenderTickEvent.Post(timer)); } 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(new TickEvent.ClientTickEvent.Pre()); } public static void onPostClientTick() { - post(new TickEvent.ClientTickEvent(TickEvent.Phase.END)); + post(new TickEvent.ClientTickEvent.Post()); } 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 927ae23253..2c726ffbac 100644 --- a/src/main/java/net/minecraftforge/event/TickEvent.java +++ b/src/main/java/net/minecraftforge/event/TickEvent.java @@ -13,10 +13,10 @@ import java.util.function.BooleanSupplier; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.Level; import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.fml.LogicalSide; -public class TickEvent extends Event -{ +public class TickEvent extends Event { public enum Type { LEVEL, PLAYER, CLIENT, SERVER, RENDER; } @@ -24,11 +24,14 @@ public class TickEvent extends Event public enum Phase { START, END; } + public final Type type; public final LogicalSide side; + + @Deprecated(forRemoval = true, since = "1.20.6") 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; @@ -38,8 +41,12 @@ public class TickEvent extends Event private final BooleanSupplier haveTime; private final MinecraftServer server; - public ServerTickEvent(Phase phase, BooleanSupplier haveTime, MinecraftServer server) - { + @Deprecated(forRemoval = true, since = "1.20.6") + public ServerTickEvent(Phase phase, BooleanSupplier haveTime, MinecraftServer server) { + this(haveTime, server, phase); + } + + protected ServerTickEvent(BooleanSupplier haveTime, MinecraftServer server, Phase phase) { super(Type.SERVER, LogicalSide.SERVER, phase); this.haveTime = haveTime; this.server = server; @@ -47,36 +54,64 @@ 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) - { + @Deprecated(forRemoval = true, since = "1.20.6") + public ClientTickEvent(Phase phase) { super(Type.CLIENT, LogicalSide.CLIENT, phase); } + + public static class Pre extends ClientTickEvent { + public Pre() { + super(Phase.START); + } + } + + public static class Post extends ClientTickEvent { + public Post() { + super(Phase.END); + } + } } public static class LevelTickEvent extends TickEvent { public final Level level; private final BooleanSupplier haveTime; - public LevelTickEvent(LogicalSide side, Phase phase, Level level, BooleanSupplier haveTime) - { + @Deprecated(forRemoval = true, since = "1.20.6") + public LevelTickEvent(LogicalSide side, Phase phase, Level level, BooleanSupplier haveTime) { + this(side, level, haveTime, phase); + } + + protected LevelTickEvent(LogicalSide side, Level level, BooleanSupplier haveTime, Phase phase) { super(Type.LEVEL, side, phase); this.level = level; this.haveTime = haveTime; @@ -84,32 +119,76 @@ 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) - { + @Deprecated(forRemoval = true, since = "1.20.6") + public PlayerTickEvent(Phase phase, Player player) { + this(player, phase); + } + + 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 { public final float renderTickTime; - public RenderTickEvent(Phase phase, float renderTickTime) - { + + @Deprecated(forRemoval = true, since = "1.20.6") + public RenderTickEvent(Phase phase, float renderTickTime) { + this(renderTickTime, phase); + } + + protected RenderTickEvent(float renderTickTime, Phase phase) { super(Type.RENDER, LogicalSide.CLIENT, phase); this.renderTickTime = renderTickTime; } + + public static class Pre extends RenderTickEvent { + public Pre(float renderTickTime) { + super(renderTickTime, Phase.START); + } + } + + public static class Post extends RenderTickEvent { + public Post(float renderTickTime) { + super(renderTickTime, Phase.END); + } + } } }