Feature looping

This commit is contained in:
Daniel Mills
2021-08-10 03:33:16 -04:00
parent 2f450b7ea0
commit 98ffa0a256
2 changed files with 44 additions and 6 deletions

View File

@@ -240,4 +240,42 @@ public interface EngineMantle extends IObjectPlacer {
getMantle().iterateChunk(x, z, IrisFeaturePositional.class, (a,b,c,f) -> pos.add(f), MantleFlag.FEATURE);
return pos;
}
@BlockCoordinates
default KList<IrisFeaturePositional> forEachFeature(double x, double z) {
KList<IrisFeaturePositional> pos = new KList<>();
if (!getEngine().getDimension().hasFeatures(getEngine())) {
return pos;
}
for (IrisFeaturePositional i : getEngine().getDimension().getSpecificFeatures()) {
if (i.shouldFilter(x, z, getEngine().getComplex().getRng(), getData())) {
pos.add(i);
}
}
int s = getRealRadius();
int i, j;
int cx = (int) x >> 4;
int cz = (int) z >> 4;
for (i = -s; i <= s; i++) {
for (j = -s; j <= s; j++) {
try {
for (IrisFeaturePositional k : getFeaturesInChunk(i + cx, j + cx)) {
if (k.shouldFilter(x, z, getEngine().getComplex().getRng(), getData())) {
pos.add(k);
}
}
} catch (Throwable e) {
Iris.error("FILTER ERROR" + " AT " + (cx + i) + " " + (j + cz));
e.printStackTrace();
Iris.reportError(e);
}
}
}
return pos;
}
}