BlockCylinderUtil.java
package com.hypixel.hytale.math.block;
import com.hypixel.hytale.function.predicate.TriIntObjPredicate;
import com.hypixel.hytale.math.util.MathUtil;
import javax.annotation.Nonnull;
public class BlockCylinderUtil {
public BlockCylinderUtil() {
}
public static <T> boolean forEachBlock(int originX, int originY, int originZ, int radiusX, int height, int radiusZ, T t, @Nonnull TriIntObjPredicate<T> consumer) {
if (radiusX <= 0) {
throw new IllegalArgumentException(String.valueOf(radiusX));
} else if (height <= 0) {
throw new IllegalArgumentException(String.valueOf(height));
} else if (radiusZ <= 0) {
throw new IllegalArgumentException(String.valueOf(radiusZ));
} else {
()radiusX + ;
()radiusZ + ;
/ ()(radiusXAdjusted * radiusXAdjusted);
( -radiusX; x <= radiusX; ++x) {
- ()(x * x) * invRadiusXSqr;
Math.sqrt(qx) * ()radiusZAdjusted;
maxZ;
-(maxZ = ()dz);
( minZ; z <= maxZ; ++z) {
( height - ; y >= ; --y) {
(!consumer.test(originX + x, originY + y, originZ + z, t)) {
;
}
}
}
}
;
}
}
<T> {
forEachBlock(originX, originY, originZ, radiusX, height, radiusZ, thickness, , t, consumer);
}
<T> {
(thickness < ) {
forEachBlock(originX, originY, originZ, radiusX, height, radiusZ, t, consumer);
} (radiusX <= ) {
(String.valueOf(radiusX));
} (height <= ) {
(String.valueOf(height));
} (radiusZ <= ) {
(String.valueOf(radiusZ));
} {
()radiusX + ;
()radiusZ + ;
radiusXAdjusted - ()thickness;
radiusZAdjusted - ()thickness;
(!(innerRadiusXAdjusted <= ) && !(innerRadiusZAdjusted <= )) {
/ ()(radiusXAdjusted * radiusXAdjusted);
/ ()(innerRadiusXAdjusted * innerRadiusXAdjusted);
thickness;
height - thickness;
( height - ; y >= ; --y) {
capped && (y < innerMinY || y > innerMaxY);
( -radiusX; x <= radiusX; ++x) {
- ()(x * x) * invRadiusXSqr;
Math.sqrt(qx) * ()radiusZAdjusted;
()dz;
()x < innerRadiusXAdjusted ? - ()(x * x) * invInnerRadiusXSqr : ;
innerQx > ? Math.sqrt(innerQx) * ()innerRadiusZAdjusted : ;
cap ? : MathUtil.ceil(innerDZ);
minZ;
(minZ == ) {
(!consumer.test(originX + x, originY + y, originZ, t)) {
;
}
z = minZ + ;
}
(z <= maxZ) {
(!consumer.test(originX + x, originY + y, originZ + z, t)) {
;
}
(!consumer.test(originX + x, originY + y, originZ - z, t)) {
;
}
++z;
}
}
}
;
} {
forEachBlock(originX, originY, originZ, radiusX, height, radiusZ, t, consumer);
}
}
}
}