56 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			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);
 | |
| 	}
 | |
| }
 |