48 lines
2.7 KiB
Java
48 lines
2.7 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.codecs.RecordCodecBuilder
|
|
*/
|
|
package net.minecraft.advancements.criterion;
|
|
|
|
import com.mojang.datafixers.kinds.App;
|
|
import com.mojang.datafixers.kinds.Applicative;
|
|
import com.mojang.serialization.Codec;
|
|
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
|
import net.minecraft.advancements.criterion.MinMaxBounds;
|
|
import net.minecraft.util.Mth;
|
|
|
|
public record DistancePredicate(MinMaxBounds.Doubles x, MinMaxBounds.Doubles y, MinMaxBounds.Doubles z, MinMaxBounds.Doubles horizontal, MinMaxBounds.Doubles absolute) {
|
|
public static final Codec<DistancePredicate> CODEC = RecordCodecBuilder.create(i -> i.group((App)MinMaxBounds.Doubles.CODEC.optionalFieldOf("x", (Object)MinMaxBounds.Doubles.ANY).forGetter(DistancePredicate::x), (App)MinMaxBounds.Doubles.CODEC.optionalFieldOf("y", (Object)MinMaxBounds.Doubles.ANY).forGetter(DistancePredicate::y), (App)MinMaxBounds.Doubles.CODEC.optionalFieldOf("z", (Object)MinMaxBounds.Doubles.ANY).forGetter(DistancePredicate::z), (App)MinMaxBounds.Doubles.CODEC.optionalFieldOf("horizontal", (Object)MinMaxBounds.Doubles.ANY).forGetter(DistancePredicate::horizontal), (App)MinMaxBounds.Doubles.CODEC.optionalFieldOf("absolute", (Object)MinMaxBounds.Doubles.ANY).forGetter(DistancePredicate::absolute)).apply((Applicative)i, DistancePredicate::new));
|
|
|
|
public static DistancePredicate horizontal(MinMaxBounds.Doubles horizontal) {
|
|
return new DistancePredicate(MinMaxBounds.Doubles.ANY, MinMaxBounds.Doubles.ANY, MinMaxBounds.Doubles.ANY, horizontal, MinMaxBounds.Doubles.ANY);
|
|
}
|
|
|
|
public static DistancePredicate vertical(MinMaxBounds.Doubles y) {
|
|
return new DistancePredicate(MinMaxBounds.Doubles.ANY, y, MinMaxBounds.Doubles.ANY, MinMaxBounds.Doubles.ANY, MinMaxBounds.Doubles.ANY);
|
|
}
|
|
|
|
public static DistancePredicate absolute(MinMaxBounds.Doubles absolute) {
|
|
return new DistancePredicate(MinMaxBounds.Doubles.ANY, MinMaxBounds.Doubles.ANY, MinMaxBounds.Doubles.ANY, MinMaxBounds.Doubles.ANY, absolute);
|
|
}
|
|
|
|
public boolean matches(double x0, double y0, double z0, double x1, double y1, double z1) {
|
|
float xd = (float)(x0 - x1);
|
|
float yd = (float)(y0 - y1);
|
|
float zd = (float)(z0 - z1);
|
|
if (!(this.x.matches(Mth.abs(xd)) && this.y.matches(Mth.abs(yd)) && this.z.matches(Mth.abs(zd)))) {
|
|
return false;
|
|
}
|
|
if (!this.horizontal.matchesSqr(xd * xd + zd * zd)) {
|
|
return false;
|
|
}
|
|
return this.absolute.matchesSqr(xd * xd + yd * yd + zd * zd);
|
|
}
|
|
}
|
|
|