2025-11-24 22:52:51 +03:00

66 lines
2.8 KiB
Java

/*
* Decompiled with CFR 0.152.
*
* Could not load the following classes:
* com.mojang.datafixers.kinds.App
* com.mojang.datafixers.kinds.Applicative
* com.mojang.serialization.Codec
* com.mojang.serialization.MapCodec
* com.mojang.serialization.codecs.RecordCodecBuilder
* it.unimi.dsi.fastutil.Hash$Strategy
* org.jspecify.annotations.Nullable
*/
package net.minecraft.world.ticks;
import com.mojang.datafixers.kinds.App;
import com.mojang.datafixers.kinds.Applicative;
import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import it.unimi.dsi.fastutil.Hash;
import java.util.List;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Vec3i;
import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.ticks.ScheduledTick;
import net.minecraft.world.ticks.TickPriority;
import org.jspecify.annotations.Nullable;
public record SavedTick<T>(T type, BlockPos pos, int delay, TickPriority priority) {
public static final Hash.Strategy<SavedTick<?>> UNIQUE_TICK_HASH = new Hash.Strategy<SavedTick<?>>(){
public int hashCode(SavedTick<?> o) {
return 31 * o.pos().hashCode() + o.type().hashCode();
}
public boolean equals(@Nullable SavedTick<?> a, @Nullable SavedTick<?> b) {
if (a == b) {
return true;
}
if (a == null || b == null) {
return false;
}
return a.type() == b.type() && a.pos().equals(b.pos());
}
};
public static <T> Codec<SavedTick<T>> codec(Codec<T> typeCodec) {
MapCodec posCodec = RecordCodecBuilder.mapCodec(i -> i.group((App)Codec.INT.fieldOf("x").forGetter(Vec3i::getX), (App)Codec.INT.fieldOf("y").forGetter(Vec3i::getY), (App)Codec.INT.fieldOf("z").forGetter(Vec3i::getZ)).apply((Applicative)i, BlockPos::new));
return RecordCodecBuilder.create(i -> i.group((App)typeCodec.fieldOf("i").forGetter(SavedTick::type), (App)posCodec.forGetter(SavedTick::pos), (App)Codec.INT.fieldOf("t").forGetter(SavedTick::delay), (App)TickPriority.CODEC.fieldOf("p").forGetter(SavedTick::priority)).apply((Applicative)i, SavedTick::new));
}
public static <T> List<SavedTick<T>> filterTickListForChunk(List<SavedTick<T>> savedTicks, ChunkPos chunkPos) {
long posKey = chunkPos.toLong();
return savedTicks.stream().filter(tick -> ChunkPos.asLong(tick.pos()) == posKey).toList();
}
public ScheduledTick<T> unpack(long currentTick, long currentSubTick) {
return new ScheduledTick<T>(this.type, this.pos, currentTick + (long)this.delay, this.priority, currentSubTick);
}
public static <T> SavedTick<T> probe(T type, BlockPos pos) {
return new SavedTick<T>(type, pos, 0, TickPriority.NORMAL);
}
}