forked from powercrystals/NetherOres
-
Notifications
You must be signed in to change notification settings - Fork 14
/
WorldGenNetherOres.java
76 lines (70 loc) · 2.7 KB
/
WorldGenNetherOres.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package powercrystals.netherores.world;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import net.minecraft.world.gen.feature.WorldGenerator;
public class WorldGenNetherOres extends WorldGenerator
{
private int _minableBlockId;
private int _minableBlockMeta;
private int _numberOfBlocks;
public WorldGenNetherOres(int blockId, int blockMeta, int numBlocks)
{
_minableBlockId = blockId;
_minableBlockMeta = blockMeta;
_numberOfBlocks = numBlocks;
}
@Override
public boolean generate(World world, Random random, int chunkX, int y, int chunkZ)
{
float f = random.nextFloat() * (float)Math.PI;
double d = chunkX + 8 + (MathHelper.sin(f) * _numberOfBlocks) / 8F;
double d1 = chunkX + 8 - (MathHelper.sin(f) * _numberOfBlocks) / 8F;
double d2 = chunkZ + 8 + (MathHelper.cos(f) * _numberOfBlocks) / 8F;
double d3 = chunkZ + 8 - (MathHelper.cos(f) * _numberOfBlocks) / 8F;
double d4 = (y + random.nextInt(3)) - 2;
double d5 = (y + random.nextInt(3)) - 2;
for(int blockNum = 0; blockNum <= _numberOfBlocks; blockNum++)
{
double d6 = d + ((d1 - d) * blockNum) / _numberOfBlocks;
double d7 = d4 + ((d5 - d4) * blockNum) / _numberOfBlocks;
double d8 = d2 + ((d3 - d2) * blockNum) / _numberOfBlocks;
double d9 = (random.nextDouble() * _numberOfBlocks) / 16D;
double d10 = (MathHelper.sin((blockNum * 3.141593F) / _numberOfBlocks) + 1.0F) * d9 + 1.0D;
double d11 = (MathHelper.sin((blockNum * 3.141593F) / _numberOfBlocks) + 1.0F) * d9 + 1.0D;
int xStart = MathHelper.floor_double(d6 - d10 / 2D);
int yStart = MathHelper.floor_double(d7 - d11 / 2D);
int zStart = MathHelper.floor_double(d8 - d10 / 2D);
int xStop = MathHelper.floor_double(d6 + d10 / 2D);
int yStop = MathHelper.floor_double(d7 + d11 / 2D);
int zStop = MathHelper.floor_double(d8 + d10 / 2D);
for(int blockX = xStart; blockX <= xStop; blockX++)
{
double d12 = ((blockX + 0.5D) - d6) / (d10 / 2D);
if(d12 * d12 >= 1.0D)
{
continue;
}
for(int blockY = yStart; blockY <= yStop; blockY++)
{
double d13 = ((blockY + 0.5D) - d7) / (d11 / 2D);
if(d12 * d12 + d13 * d13 >= 1.0D)
{
continue;
}
for(int blockZ = zStart; blockZ <= zStop; blockZ++)
{
double d14 = ((blockZ + 0.5D) - d8) / (d10 / 2D);
Block block = Block.blocksList[world.getBlockId(blockX, blockY, blockZ)];
if (block != null && d12 * d12 + d13 * d13 + d14 * d14 < 1.0D && block.isGenMineableReplaceable(world, blockX, blockY, blockZ, Block.netherrack.blockID))
{
world.setBlock(blockX, blockY, blockZ, _minableBlockId, _minableBlockMeta, 2);
}
}
}
}
}
return true;
}
}