Change tick event to have pre/post classes (backport of #9890 to 1.20.4) (#10090)

Co-authored-by: Daniel Norris <33832062+danorris709@users.noreply.github.com>
This commit is contained in:
Paint_NinjaandDaniel Norris authored and GitHub committed 2024-09-12 14:36:27 +01:00
1 parent 7134b93427
commit d3e9cfaaba
3 files changed
+120 -36

No files matched your search

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