Height shader and snow blocks work.
This commit is contained in:
parent
d4c0fa259c
commit
1db4811d66
@ -11,6 +11,7 @@ import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
@ -83,25 +84,24 @@ public class IslandWorldChunkGenerator extends ChunkGenerator implements Listene
|
||||
|
||||
Biome[] currentBiomeSet = biomeSet[localX][localZ];
|
||||
int terrainHeight = heightShader.getTerrainHeight(worldX, worldZ, currentBiomeSet);
|
||||
int currentTerrainHeight = terrainHeight;
|
||||
int currentTerrainHeight = terrainHeight - 1;
|
||||
int bedrockHeight = random.nextInt(5) + 1;
|
||||
if (layerShader.hasSpecialLayers(currentBiomeSet[0])) {
|
||||
Material currentMaterial = layerShader.getMaterialForHeight(worldX, worldZ, currentTerrainHeight, terrainHeight, currentBiomeSet[0]);
|
||||
BlockData currentMaterial = layerShader.getMaterialForHeight(worldX, worldZ, currentTerrainHeight, terrainHeight - 1, currentBiomeSet[0]);
|
||||
while (currentMaterial != null) {
|
||||
chunkData.setBlock(localX, currentTerrainHeight, localZ, currentMaterial);
|
||||
currentTerrainHeight --;
|
||||
currentMaterial = layerShader.getMaterialForHeight(worldX, worldZ, currentTerrainHeight, terrainHeight, currentBiomeSet[0]);
|
||||
currentTerrainHeight--;
|
||||
currentMaterial = layerShader.getMaterialForHeight(worldX, worldZ, currentTerrainHeight, terrainHeight - 1, currentBiomeSet[0]);
|
||||
}
|
||||
} else {
|
||||
int surfaceThickness = layerShader.getSurfaceThickness(worldX, worldZ, currentBiomeSet[0]);
|
||||
currentTerrainHeight -= surfaceThickness;
|
||||
chunkData.setRegion(localX, currentTerrainHeight, localZ, localX + 1, currentTerrainHeight + surfaceThickness, localZ + 1, layerShader.getSurfaceMaterial(currentBiomeSet[0]));
|
||||
currentTerrainHeight = currentTerrainHeight - surfaceThickness;
|
||||
chunkData.setRegion(localX, currentTerrainHeight, localZ, localX + 1, currentTerrainHeight + surfaceThickness + 1, localZ + 1, layerShader.getSurfaceMaterial(currentBiomeSet[0]));
|
||||
int transitionThickness = layerShader.getTransitionMaterialThickness(worldX, worldZ, currentBiomeSet[0]);
|
||||
currentTerrainHeight -= transitionThickness;
|
||||
chunkData.setRegion(localX, currentTerrainHeight, localZ, localX + 1, currentTerrainHeight + transitionThickness, localZ + 1, layerShader.getTransitionMaterial(currentBiomeSet[0]));
|
||||
currentTerrainHeight = currentTerrainHeight - transitionThickness;
|
||||
chunkData.setRegion(localX, currentTerrainHeight, localZ, localX + 1, currentTerrainHeight + transitionThickness + 1, localZ + 1, layerShader.getTransitionMaterial(currentBiomeSet[0]));
|
||||
}
|
||||
chunkData.setRegion(localX, bedrockHeight, localZ, localX + 1, currentTerrainHeight + 1, localZ + 1, Material.STONE);
|
||||
|
||||
if (terrainHeight < seaLevel) {
|
||||
chunkData.setRegion(localX, terrainHeight, localZ, localX + 1, seaLevel, localZ + 1, Material.WATER);
|
||||
}
|
||||
|
@ -34,6 +34,8 @@ public class WorldHeightShader {
|
||||
height = getIslandBiomeHeight(worldX, worldZ, biomeSet[0]) + 1;
|
||||
}
|
||||
|
||||
if (biomeName.contains("snowy")) height++;
|
||||
|
||||
if (height > worldHeight) throw new IllegalStateException("Resulting height is greater than world height! Biome this occurred on: " + biomeName);
|
||||
height = Math.max(minimumHeight, height);
|
||||
return height;
|
||||
@ -57,7 +59,6 @@ public class WorldHeightShader {
|
||||
} else {
|
||||
res = (int) calculateTerrainFactor(worldX, worldZ, 35d);
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
@ -4,6 +4,8 @@ import java.util.Random;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.block.data.Snowable;
|
||||
|
||||
import ca.recrown.islandsurvivalcraft.world.IslandWorldMapper;
|
||||
|
||||
@ -46,7 +48,7 @@ public class WorldLayerShader {
|
||||
* @param biome the associated biome.
|
||||
* @return the material for the layer. Returning null means no more special layers.
|
||||
*/
|
||||
public Material getMaterialForHeight(int worldX, int worldZ, int y, int highestPoint, Biome biome) {
|
||||
public BlockData getMaterialForHeight(int worldX, int worldZ, int y, int highestPoint, Biome biome) {
|
||||
String biomeName = biome.toString().toLowerCase();
|
||||
if (biomeName.contains("badlands")) {
|
||||
int seedOffset = (worldX + worldZ) / 1000;
|
||||
@ -62,18 +64,24 @@ public class WorldLayerShader {
|
||||
for (int i = 0; i < selected.length; i++) {
|
||||
selected[i] = badlandTerrocota[random.nextInt(amountOfLayers)];
|
||||
}
|
||||
return selected[subLayer];
|
||||
return selected[subLayer].createBlockData();
|
||||
} else {
|
||||
return Material.TERRACOTTA;
|
||||
return Material.TERRACOTTA.createBlockData();
|
||||
}
|
||||
}
|
||||
} else if (biomeName.contains("snowy")) {
|
||||
if (highestPoint == y) {
|
||||
return Material.SNOW;
|
||||
} else if (y >= highestPoint - getSurfaceThickness(worldX, worldZ, biome)) {
|
||||
return getSurfaceMaterial(biome);
|
||||
} else if (y >= highestPoint - getTransitionMaterialThickness(worldX, worldZ, biome)) {
|
||||
return getTransitionMaterial(biome);
|
||||
return Material.SNOW.createBlockData();
|
||||
} else if (y > highestPoint - 1 - getSurfaceThickness(worldX, worldZ, biome)) {
|
||||
Material surfaceMaterial = getSurfaceMaterial(biome);
|
||||
BlockData res = surfaceMaterial.createBlockData();
|
||||
if (getSurfaceMaterial(biome) == Material.GRASS_BLOCK) {
|
||||
Snowable snowable = (Snowable) res;
|
||||
snowable.setSnowy(true);
|
||||
}
|
||||
return res;
|
||||
} else if (y > highestPoint - 1 - getSurfaceThickness(worldX, worldZ, biome) - getTransitionMaterialThickness(worldX, worldZ, biome)) {
|
||||
return getTransitionMaterial(biome).createBlockData();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
Loading…
x
Reference in New Issue
Block a user