minecraft-src/net/minecraft/world/ticks/ScheduledTick.java
2025-07-04 02:49:36 +03:00

56 lines
2.2 KiB
Java

package net.minecraft.world.ticks;
import it.unimi.dsi.fastutil.Hash.Strategy;
import java.util.Comparator;
import net.minecraft.core.BlockPos;
import org.jetbrains.annotations.Nullable;
public record ScheduledTick<T>(T type, BlockPos pos, long triggerTick, TickPriority priority, long subTickOrder) {
public static final Comparator<ScheduledTick<?>> DRAIN_ORDER = (scheduledTick, scheduledTick2) -> {
int i = Long.compare(scheduledTick.triggerTick, scheduledTick2.triggerTick);
if (i != 0) {
return i;
} else {
i = scheduledTick.priority.compareTo(scheduledTick2.priority);
return i != 0 ? i : Long.compare(scheduledTick.subTickOrder, scheduledTick2.subTickOrder);
}
};
public static final Comparator<ScheduledTick<?>> INTRA_TICK_DRAIN_ORDER = (scheduledTick, scheduledTick2) -> {
int i = scheduledTick.priority.compareTo(scheduledTick2.priority);
return i != 0 ? i : Long.compare(scheduledTick.subTickOrder, scheduledTick2.subTickOrder);
};
public static final Strategy<ScheduledTick<?>> UNIQUE_TICK_HASH = new Strategy<ScheduledTick<?>>() {
public int hashCode(ScheduledTick<?> scheduledTick) {
return 31 * scheduledTick.pos().hashCode() + scheduledTick.type().hashCode();
}
public boolean equals(@Nullable ScheduledTick<?> first, @Nullable ScheduledTick<?> second) {
if (first == second) {
return true;
} else {
return first != null && second != null ? first.type() == second.type() && first.pos().equals(second.pos()) : false;
}
}
};
public ScheduledTick(T type, BlockPos pos, long triggerTick, long subTickOrder) {
this(type, pos, triggerTick, TickPriority.NORMAL, subTickOrder);
}
public ScheduledTick(T type, BlockPos pos, long triggerTick, TickPriority priority, long subTickOrder) {
pos = pos.immutable();
this.type = type;
this.pos = pos;
this.triggerTick = triggerTick;
this.priority = priority;
this.subTickOrder = subTickOrder;
}
public static <T> ScheduledTick<T> probe(T type, BlockPos pos) {
return new ScheduledTick<>(type, pos, 0L, TickPriority.NORMAL, 0L);
}
public SavedTick<T> toSavedTick(long gametime) {
return new SavedTick<>(this.type, this.pos, (int)(this.triggerTick - gametime), this.priority);
}
}