classpublicPriority 3
FilterQuery
com.hypixel.hytale.builtin.portals.utils.posqueries.predicates.generic.FilterQuery
implements SpatialQuery
1
Methods
1
Public Methods
3
Fields
2
Constructors
Constructors
public
FilterQuery(SpatialQuery query, PositionPredicate predicate)public
FilterQuery(SpatialQuery query, PositionPredicate predicate, boolean failFast)Methods
Public Methods (1)
public
Stream<Vector3d> createCandidates(World world, Vector3d origin, SpatialQueryDebug debug)@Override
Fields
Private/Package Fields (3)
private
boolean failFastprivate
PositionPredicate predicateprivate
SpatialQuery queryInheritance
Parent
Current
Interface
Child
Use mouse wheel to zoom, drag to pan. Click nodes to navigate.
Related Classes
Source Code
package com.hypixel.hytale.builtin.portals.utils.posqueries.predicates.generic;
import com.hypixel.hytale.builtin.portals.utils.posqueries.PositionPredicate;
import com.hypixel.hytale.builtin.portals.utils.posqueries.SpatialQuery;
import com.hypixel.hytale.builtin.portals.utils.posqueries.SpatialQueryDebug;
import com.hypixel.hytale.math.vector.Vector3d;
import com.hypixel.hytale.server.core.universe.world.World;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Stream;
import javax.annotation.Nullable;
public class FilterQuery implements SpatialQuery {
private final SpatialQuery query;
private final PositionPredicate predicate;
private final boolean failFast;
public FilterQuery(SpatialQuery query, PositionPredicate predicate) {
this(query, predicate, false);
}
public FilterQuery(SpatialQuery query, PositionPredicate predicate, boolean failFast) {
this.query = query;
this.predicate = predicate;
this.failFast = failFast;
}
@Override
public Stream<Vector3d> createCandidates(World world, Vector3d origin, @Nullable SpatialQueryDebug debug) {
Stream<Vector3d> stream = this.query.createCandidates(world, origin, debug);
AtomicBoolean failed = new AtomicBoolean();
if (this.failFast) {
stream = stream.takeWhile(candidate -> !failed.get());
}
return stream.filter(candidate -> {
boolean accepted = this.predicate.test(world, candidate);
if (debug != null) {
debug.appendLine(this.predicate.getClass().getSimpleName() + " on " + debug.fmt(candidate) + " = " + accepted);
}
if (!accepted) {
failed.set(true);
}
return accepted;
});
}
}