hytale-server/com/hypixel/hytale/builtin/hytalegenerator/positionproviders/BaseHeightPositionProvider....

39 lines
1.5 KiB
Java

package com.hypixel.hytale.builtin.hytalegenerator.positionproviders;
import com.hypixel.hytale.builtin.hytalegenerator.VectorUtil;
import com.hypixel.hytale.builtin.hytalegenerator.framework.interfaces.functions.BiDouble2DoubleFunction;
import com.hypixel.hytale.math.vector.Vector3d;
import javax.annotation.Nonnull;
public class BaseHeightPositionProvider extends PositionProvider {
@Nonnull
private final BiDouble2DoubleFunction baseHeightFunction;
private final double maxYInput;
private final double minYInput;
@Nonnull
private final PositionProvider positionProvider;
public BaseHeightPositionProvider(
@Nonnull BiDouble2DoubleFunction baseHeightFunction, @Nonnull PositionProvider positionProvider, double minYInput, double maxYInput
) {
maxYInput = Math.max(minYInput, maxYInput);
this.baseHeightFunction = baseHeightFunction;
this.positionProvider = positionProvider;
this.maxYInput = maxYInput;
this.minYInput = minYInput;
}
@Override
public void positionsIn(@Nonnull PositionProvider.Context context) {
PositionProvider.Context childContext = new PositionProvider.Context(context);
childContext.consumer = position -> {
Vector3d offsetP = position.clone();
offsetP.y = offsetP.y + this.baseHeightFunction.apply(position.x, position.z);
if (VectorUtil.isInside(offsetP, context.minInclusive, context.maxExclusive)) {
context.consumer.accept(offsetP);
}
};
this.positionProvider.positionsIn(childContext);
}
}