mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-14 01:04:24 +00:00
116 lines
3.3 KiB
Java
116 lines
3.3 KiB
Java
/*
|
|
* Copyright (c) Forge Development LLC and contributors
|
|
* SPDX-License-Identifier: LGPL-2.1-only
|
|
*/
|
|
|
|
package net.minecraftforge.event;
|
|
|
|
import net.minecraft.world.entity.player.Player;
|
|
import net.minecraft.server.MinecraftServer;
|
|
|
|
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.fml.LogicalSide;
|
|
|
|
public class TickEvent extends Event
|
|
{
|
|
public enum Type {
|
|
WORLD, PLAYER, CLIENT, SERVER, RENDER;
|
|
}
|
|
|
|
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)
|
|
{
|
|
this.type = type;
|
|
this.side = side;
|
|
this.phase = phase;
|
|
}
|
|
|
|
public static class ServerTickEvent extends TickEvent {
|
|
private final BooleanSupplier haveTime;
|
|
private final MinecraftServer server;
|
|
|
|
public ServerTickEvent(Phase phase, BooleanSupplier haveTime, MinecraftServer server)
|
|
{
|
|
super(Type.SERVER, LogicalSide.SERVER, phase);
|
|
this.haveTime = haveTime;
|
|
this.server = server;
|
|
}
|
|
|
|
/**
|
|
* @return {@code true} whether the server has enough time to perform any
|
|
* additional tasks (usually IO related) during the current tick,
|
|
* otherwise {@code false}
|
|
*/
|
|
public boolean haveTime()
|
|
{
|
|
return this.haveTime.getAsBoolean();
|
|
}
|
|
|
|
/**
|
|
* {@return the server instance}
|
|
*/
|
|
public MinecraftServer getServer()
|
|
{
|
|
return server;
|
|
}
|
|
}
|
|
|
|
public static class ClientTickEvent extends TickEvent {
|
|
public ClientTickEvent(Phase phase)
|
|
{
|
|
super(Type.CLIENT, LogicalSide.CLIENT, phase);
|
|
}
|
|
}
|
|
|
|
public static class WorldTickEvent extends TickEvent {
|
|
public final Level world;
|
|
private final BooleanSupplier haveTime;
|
|
|
|
public WorldTickEvent(LogicalSide side, Phase phase, Level world, BooleanSupplier haveTime)
|
|
{
|
|
super(Type.WORLD, side, phase);
|
|
this.world = world;
|
|
this.haveTime = haveTime;
|
|
}
|
|
|
|
/**
|
|
* @return {@code true} whether the server has enough time to perform any
|
|
* additional tasks (usually IO related) during the current tick,
|
|
* otherwise {@code false}
|
|
*
|
|
* @see ServerTickEvent#haveTime()
|
|
*/
|
|
public boolean haveTime()
|
|
{
|
|
return this.haveTime.getAsBoolean();
|
|
}
|
|
}
|
|
public static class PlayerTickEvent extends TickEvent {
|
|
public final Player player;
|
|
|
|
public PlayerTickEvent(Phase phase, Player player)
|
|
{
|
|
super(Type.PLAYER, player instanceof ServerPlayer ? LogicalSide.SERVER : LogicalSide.CLIENT, phase);
|
|
this.player = player;
|
|
}
|
|
}
|
|
|
|
public static class RenderTickEvent extends TickEvent {
|
|
public final float renderTickTime;
|
|
public RenderTickEvent(Phase phase, float renderTickTime)
|
|
{
|
|
super(Type.RENDER, LogicalSide.CLIENT, phase);
|
|
this.renderTickTime = renderTickTime;
|
|
}
|
|
}
|
|
}
|