aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/australia/gen/world/WorldGenAustralianOre.java
blob: 9adb84eef2f36f8a2693334ae4408439b81fca99 (plain)
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
77
78
79
80
81
82
83
84
85
86
87
package gtPlusPlus.australia.gen.world;

import java.util.Random;

import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.math.MathUtils;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import net.minecraft.world.gen.feature.WorldGenerator;

public class WorldGenAustralianOre extends WorldGenerator {
	
	private Block mOreToSpawn;
	private int numberOfBlocks;
	private Block mBlockToReplace;
	private int mineableBlockMeta;

	public WorldGenAustralianOre(Block aBlock, int aNumber) {
		this(aBlock, aNumber, Blocks.stone);
		this.mineableBlockMeta = 0;
	}

	public WorldGenAustralianOre(Block aBlock, int aNumber, Block aReplace) {
		this.mOreToSpawn = aBlock;
		this.numberOfBlocks = aNumber;
		this.mBlockToReplace = aReplace;
	}

	public WorldGenAustralianOre(Block block, int meta, int number, Block target) {
		this(block, number, target);
		this.mineableBlockMeta = meta;
	}
	
	

	public boolean generate(World aWorld, Random aRand, int aX, int aY, int aZ) {
		float f = MathUtils.randFloat(0f, 1.5f) * CORE.PI;
		double d0 = (double) ((float) (aX + 8) + MathHelper.sin(f) * (float) this.numberOfBlocks / 8.0F);
		double d1 = (double) ((float) (aX + 8) - MathHelper.sin(f) * (float) this.numberOfBlocks / 8.0F);
		double d2 = (double) ((float) (aZ + 8) + MathHelper.cos(f) * (float) this.numberOfBlocks / 8.0F);
		double d3 = (double) ((float) (aZ + 8) - MathHelper.cos(f) * (float) this.numberOfBlocks / 8.0F);
		double d4 = (double) (aY + aRand.nextInt(MathUtils.randInt(3, 6)) - 2);
		double d5 = (double) (aY + aRand.nextInt(MathUtils.randInt(3, 6)) - 2);

		for (int aOreGenerated = 0; aOreGenerated <= this.numberOfBlocks; ++aOreGenerated) {
			double d6 = d0 + (d1 - d0) * (double) aOreGenerated / (double) this.numberOfBlocks;
			double d7 = d4 + (d5 - d4) * (double) aOreGenerated / (double) this.numberOfBlocks;
			double d8 = d2 + (d3 - d2) * (double) aOreGenerated / (double) this.numberOfBlocks;
			double d9 = aRand.nextDouble() * (double) this.numberOfBlocks / 16.0D;
			double d10 = (double) (MathHelper.sin((float) aOreGenerated * CORE.PI / (float) this.numberOfBlocks) + 1.0F)
					* d9 + 1.0D;
			double d11 = (double) (MathHelper.sin((float) aOreGenerated * CORE.PI / (float) this.numberOfBlocks) + 1.0F)
					* d9 + 1.0D;
			int i1 = MathHelper.floor_double(d6 - d10 / 2.0D);
			int j1 = MathHelper.floor_double(d7 - d11 / 2.0D);
			int k1 = MathHelper.floor_double(d8 - d10 / 2.0D);
			int l1 = MathHelper.floor_double(d6 + d10 / 2.0D);
			int i2 = MathHelper.floor_double(d7 + d11 / 2.0D);
			int j2 = MathHelper.floor_double(d8 + d10 / 2.0D);

			for (int k2 = i1; k2 <= l1; ++k2) {
				double d12 = ((double) k2 + 0.5D - d6) / (d10 / 2.0D);

				if (d12 * d12 < 1.0D) {
					for (int l2 = j1; l2 <= i2; ++l2) {
						double d13 = ((double) l2 + 0.5D - d7) / (d11 / 2.0D);

						if (d12 * d12 + d13 * d13 < 1.0D) {
							for (int i3 = k1; i3 <= j2; ++i3) {
								double d14 = ((double) i3 + 0.5D - d8) / (d10 / 2.0D);

								if (d12 * d12 + d13 * d13 + d14 * d14 < 1.0D && aWorld.getBlock(k2, l2, i3)
										.isReplaceableOreGen(aWorld, k2, l2, i3, mBlockToReplace)) {
									aWorld.setBlock(k2, l2, i3, this.mOreToSpawn, mineableBlockMeta, 2);
								}
							}
						}
					}
				}
			}
		}

		return true;
	}
}