Change tick event to have pre/post classes (#9890)

This commit is contained in:
LexManos committed 2024-06-13 15:15:04 -07:00
1 parent 1c633b4624
commit 583f363b6b
4 files changed
+98 -39

No files matched your search

@@ -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));
}
}
@@ -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
@@ -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<MobSpawnSettings.SpawnerData> getPotentialSpawns(LevelAccessor level, MobCategory category, BlockPos pos, WeightedRandomList<MobSpawnSettings.SpawnerData> oldList) {
@@ -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);
}
}
}
}