mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
80 lines
2.2 KiB
Java
80 lines
2.2 KiB
Java
package com.hbm.world.feature;
|
|
|
|
import java.util.Random;
|
|
|
|
import com.hbm.blocks.ModBlocks;
|
|
|
|
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.material.Material;
|
|
import net.minecraft.init.Blocks;
|
|
import net.minecraft.world.World;
|
|
import net.minecraft.world.gen.NoiseGeneratorPerlin;
|
|
import net.minecraftforge.common.util.ForgeDirection;
|
|
import net.minecraftforge.event.terraingen.DecorateBiomeEvent;
|
|
|
|
public class DeepLayer {
|
|
|
|
NoiseGeneratorPerlin noise;
|
|
|
|
@SubscribeEvent
|
|
public void onDecorate(DecorateBiomeEvent.Pre event) {
|
|
|
|
World world = event.world;
|
|
if(world.provider == null || world.provider.dimensionId != 0) return;
|
|
|
|
if(this.noise == null) {
|
|
this.noise = new NoiseGeneratorPerlin(new Random(event.world.getSeed() + 19), 4);
|
|
}
|
|
|
|
int cX = event.chunkX;
|
|
int cZ = event.chunkZ;
|
|
|
|
double scale = 0.01D;
|
|
int threshold = 2;
|
|
|
|
for(int x = cX + 8; x < cX + 24; x++) {
|
|
for(int z = cZ + 8; z < cZ + 24; z++) {
|
|
|
|
double n = noise.func_151601_a(x * scale, z * scale);
|
|
|
|
if(n > threshold) {
|
|
int range = (int)((n - threshold) * 8);
|
|
|
|
if(range > 24)
|
|
range = 48 - range;
|
|
|
|
if(range < 0)
|
|
continue;
|
|
|
|
for(int y = 1; y <= range; y++) {
|
|
|
|
Block target = world.getBlock(x, y, z);
|
|
|
|
if(target.isNormalCube() && target.getMaterial() == Material.rock && target.isReplaceableOreGen(world, x, y, z, Blocks.stone)) {
|
|
|
|
boolean lava = false;
|
|
|
|
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
|
|
Block neighbor = world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ);
|
|
if(neighbor.getMaterial() == Material.lava) {
|
|
lava = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(lava || world.rand.nextInt(10) == 0) {
|
|
world.setBlock(x, y, z, ModBlocks.stone_deep_cobble, 1, 2);
|
|
} else if(world.rand.nextInt(10) == 0 && world.getBlock(x, y + 1, z).getMaterial() == Material.air) {
|
|
world.setBlock(x, y, z, ModBlocks.stone_deep_cobble, 2, 2);
|
|
} else {
|
|
world.setBlock(x, y, z, ModBlocks.stone_deep_cobble, 0, 2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|