classpublicPriority 3
ZonePatternGenerator
com.hypixel.hytale.server.worldgen.zone.ZonePatternGenerator
5
Methods
5
Public Methods
5
Fields
1
Constructors
Constructors
public
ZonePatternGenerator(IPointGenerator pointGenerator, Zone[] zones, Zone.Unique[] uniqueZones, MaskProvider maskProvider, ZoneColorMapping zoneColorMapping)Methods
Public Methods (5)
public
ZoneGeneratorResult generate(int seed, double x, double z)@Nonnull
public
ZoneGeneratorResult generate(int seed, double x, double z, ZoneGeneratorResult result)@Nonnull
public
Zone.Unique[] getUniqueZones()public
Zone[] getZones()public
String toString()@Nonnull@Override
Fields
Protected Fields (5)
protected
MaskProvider maskProviderprotected
IPointGenerator pointGeneratorprotected
Zone.Unique[] uniqueZonesprotected
ZoneColorMapping zoneColorMappingprotected
Zone[] zonesRelated Classes
Source Code
package com.hypixel.hytale.server.worldgen.zone;
import com.hypixel.hytale.math.util.HashUtil;
import com.hypixel.hytale.procedurallib.logic.ResultBuffer;
import com.hypixel.hytale.procedurallib.logic.point.IPointGenerator;
import com.hypixel.hytale.server.worldgen.chunk.MaskProvider;
import java.util.Arrays;
import javax.annotation.Nonnull;
public class ZonePatternGenerator {
protected final IPointGenerator pointGenerator;
protected final Zone[] zones;
protected final Zone.Unique[] uniqueZones;
protected final MaskProvider maskProvider;
protected final ZoneColorMapping zoneColorMapping;
public ZonePatternGenerator(
IPointGenerator pointGenerator, Zone[] zones, Zone.Unique[] uniqueZones, MaskProvider maskProvider, ZoneColorMapping zoneColorMapping
) {
this.pointGenerator = pointGenerator;
this.zones = zones;
this.uniqueZones = uniqueZones;
this.maskProvider = maskProvider;
this.zoneColorMapping = zoneColorMapping;
}
public Zone[] getZones() {
return this.zones;
}
public Zone.Unique[] getUniqueZones() {
return this.uniqueZones;
}
@Nonnull
public ZoneGeneratorResult generate(int seed, double x, double z) {
return this.generate(seed, x, z, new ZoneGeneratorResult());
}
@Nonnull
public ZoneGeneratorResult generate(int seed, double x, double z, @Nonnull ZoneGeneratorResult result) {
double rx = this.maskProvider.getX(seed, x, z);
double rz = this.maskProvider.getY(seed, x, z);
int mask = this.maskProvider.get(seed, rx, rz) & 16777215;
Zone[] zoneArr = this.zoneColorMapping.get(mask);
if (zoneArr == null) {
throw new Error("Unknown zone colour mapping for mask: " + mask);
} else {
if (zoneArr.length == 1) {
double distance = 1.0 / 0.0;
if (this.maskProvider.inBounds(rx, rz)) {
distance = this.maskProvider.distance(rx, rz);
}
result.setZone(zoneArr[0]);
result.setBorderDistance(distance);
} else {
this.getZone(seed, x, z, result, zoneArr);
}
return result;
}
}
protected void getZone(int seed, double x, double z, @Nonnull ZoneGeneratorResult result, @Nonnull Zone[] zoneArr) {
ResultBuffer.ResultBuffer2d buf = this.pointGenerator.nearest2D(seed, x, z);
int index = ((int)HashUtil.hash((long)seed, (long)buf.ix, (long)buf.iy) & 2147483647) % zoneArr.length;
result.setZone(zoneArr[index]);
result.setBorderDistance(buf.distance);
}
@Nonnull
@Override
public String toString() {
return "ZonePatternGenerator{pointGenerator="
+ this.pointGenerator
+ ", zones="
+ Arrays.toString((Object[])this.zones)
+ ", maskProvider="
+ this.maskProvider
+ ", zoneColorMapping="
+ this.zoneColorMapping
+ "}";
}
}