File size: 2,485 Bytes
d46f4a3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package net.minecraft.world.ticks;

import it.unimi.dsi.fastutil.Hash.Strategy;
import java.util.Comparator;
import javax.annotation.Nullable;
import net.minecraft.core.BlockPos;

public record ScheduledTick<T>(T type, BlockPos pos, long triggerTick, TickPriority priority, long subTickOrder) {
    public static final Comparator<ScheduledTick<?>> DRAIN_ORDER = (p_193406_, p_193407_) -> {
        int i = Long.compare(p_193406_.triggerTick, p_193407_.triggerTick);
        if (i != 0) {
            return i;
        } else {
            i = p_193406_.priority.compareTo(p_193407_.priority);
            return i != 0 ? i : Long.compare(p_193406_.subTickOrder, p_193407_.subTickOrder);
        }
    };
    public static final Comparator<ScheduledTick<?>> INTRA_TICK_DRAIN_ORDER = (p_193395_, p_193396_) -> {
        int i = p_193395_.priority.compareTo(p_193396_.priority);
        return i != 0 ? i : Long.compare(p_193395_.subTickOrder, p_193396_.subTickOrder);
    };
    public static final Strategy<ScheduledTick<?>> UNIQUE_TICK_HASH = new Strategy<ScheduledTick<?>>() {
        public int hashCode(ScheduledTick<?> p_193417_) {
            return 31 * p_193417_.pos().hashCode() + p_193417_.type().hashCode();
        }

        public boolean equals(@Nullable ScheduledTick<?> p_193419_, @Nullable ScheduledTick<?> p_193420_) {
            if (p_193419_ == p_193420_) {
                return true;
            } else {
                return p_193419_ != null && p_193420_ != null
                    ? p_193419_.type() == p_193420_.type() && p_193419_.pos().equals(p_193420_.pos())
                    : false;
            }
        }
    };

    public ScheduledTick(T p_193383_, BlockPos p_193384_, long p_193385_, long p_193386_) {
        this(p_193383_, p_193384_, p_193385_, TickPriority.NORMAL, p_193386_);
    }

    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 p_193398_, BlockPos p_193399_) {
        return new ScheduledTick<>(p_193398_, p_193399_, 0L, TickPriority.NORMAL, 0L);
    }

    public SavedTick<T> toSavedTick(long p_360893_) {
        return new SavedTick<>(this.type, this.pos, (int)(this.triggerTick - p_360893_), this.priority);
    }
}