aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/world
diff options
context:
space:
mode:
authorShawn Buckley <shawntbuckley@gmail.com>2015-10-18 23:04:39 -0400
committerShawn Buckley <shawntbuckley@gmail.com>2015-10-18 23:04:39 -0400
commit85c804fa112fd1f19c91e45d150a787cfbf0f7a8 (patch)
treecb302d8e0f46e06be0b1d391317578b165aec245 /src/main/java/gregtech/api/world
parentce25063b910bb3bdd2b0c234b185fc4077caebdb (diff)
downloadGT5-Unofficial-85c804fa112fd1f19c91e45d150a787cfbf0f7a8.tar.gz
GT5-Unofficial-85c804fa112fd1f19c91e45d150a787cfbf0f7a8.tar.bz2
GT5-Unofficial-85c804fa112fd1f19c91e45d150a787cfbf0f7a8.zip
Move source directory
Diffstat (limited to 'src/main/java/gregtech/api/world')
-rw-r--r--src/main/java/gregtech/api/world/GT_Worldgen.java61
-rw-r--r--src/main/java/gregtech/api/world/GT_Worldgen_Boulder.java70
-rw-r--r--src/main/java/gregtech/api/world/GT_Worldgen_Ore.java29
-rw-r--r--src/main/java/gregtech/api/world/GT_Worldgen_Ore_Normal.java69
-rw-r--r--src/main/java/gregtech/api/world/GT_Worldgen_Ore_SingleBlock.java30
-rw-r--r--src/main/java/gregtech/api/world/GT_Worldgen_Ore_SingleBlock_UnderLava.java30
6 files changed, 289 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/world/GT_Worldgen.java b/src/main/java/gregtech/api/world/GT_Worldgen.java
new file mode 100644
index 0000000000..d4f520145e
--- /dev/null
+++ b/src/main/java/gregtech/api/world/GT_Worldgen.java
@@ -0,0 +1,61 @@
+package gregtech.api.world;
+
+import gregtech.api.GregTech_API;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+import net.minecraft.world.World;
+import net.minecraft.world.chunk.IChunkProvider;
+
+public abstract class GT_Worldgen {
+
+ public final String mWorldGenName;
+ public final boolean mEnabled;
+ private final Map<String, Boolean> mDimensionMap = new HashMap<String, Boolean>();
+
+ public GT_Worldgen(String aName, List aList, boolean aDefault) {
+ mWorldGenName = aName;
+ mEnabled = GregTech_API.sWorldgenFile.get("worldgen", mWorldGenName, aDefault);
+ if (mEnabled) aList.add(this);
+ }
+
+ /**
+ * @param aWorld The World Object
+ * @param aRandom The Random Generator to use
+ * @param aBiome The Name of the Biome (always != null)
+ * @param aDimensionType The Type of Worldgeneration to add. -1 = Nether, 0 = Overworld, +1 = End
+ * @param aChunkX xCoord of the Chunk
+ * @param aChunkZ zCoord of the Chunk
+ * @return if the Worldgeneration has been successfully completed
+ */
+ public boolean executeWorldgen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) {
+ return false;
+ }
+
+ /**
+ * @param aWorld The World Object
+ * @param aRandom The Random Generator to use
+ * @param aBiome The Name of the Biome (always != null)
+ * @param aDimensionType The Type of Worldgeneration to add. -1 = Nether, 0 = Overworld, +1 = End
+ * @param aChunkX xCoord of the Chunk
+ * @param aChunkZ zCoord of the Chunk
+ * @return if the Worldgeneration has been successfully completed
+ */
+ public boolean executeCavegen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) {
+ return false;
+ }
+
+ public boolean isGenerationAllowed(World aWorld, int aDimensionType, int aAllowedDimensionType) {
+ String aDimName = aWorld.provider.getDimensionName();
+ Boolean tAllowed = mDimensionMap.get(aDimName);
+ if (tAllowed == null) {
+ boolean tValue = GregTech_API.sWorldgenFile.get("worldgen.dimensions."+mWorldGenName, aDimName, aDimensionType == aAllowedDimensionType);
+ mDimensionMap.put(aDimName, tValue);
+ return tValue;
+ }
+ return tAllowed;
+ }
+}
diff --git a/src/main/java/gregtech/api/world/GT_Worldgen_Boulder.java b/src/main/java/gregtech/api/world/GT_Worldgen_Boulder.java
new file mode 100644
index 0000000000..9c90639554
--- /dev/null
+++ b/src/main/java/gregtech/api/world/GT_Worldgen_Boulder.java
@@ -0,0 +1,70 @@
+package gregtech.api.world;
+
+import java.util.Collection;
+import java.util.Random;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockContainer;
+import net.minecraft.util.MathHelper;
+import net.minecraft.world.World;
+import net.minecraft.world.chunk.IChunkProvider;
+
+public class GT_Worldgen_Boulder extends GT_Worldgen_Ore {
+ public GT_Worldgen_Boulder(String aName, boolean aDefault, Block aBlock, int aBlockMeta, int aDimensionType, int aAmount, int aSize, int aProbability, int aMinY, int aMaxY, Collection<String> aBiomeList, boolean aAllowToGenerateinVoid) {
+ super(aName, aDefault, aBlock, aBlockMeta, aDimensionType, aAmount, aSize, aProbability, aMinY, aMaxY, aBiomeList, aAllowToGenerateinVoid);
+ }
+
+ @Override
+ public boolean executeWorldgen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) {
+ if (isGenerationAllowed(aWorld, aDimensionType, mDimensionType) && (mBiomeList.isEmpty() || mBiomeList.contains(aBiome)) && (mProbability <= 1 || aRandom.nextInt(mProbability) == 0)) {
+ for (int i = 0; i < mAmount; i++) {
+ int tX = aChunkX + aRandom.nextInt(16), tY = mMinY + aRandom.nextInt(mMaxY - mMinY), tZ = aChunkZ + aRandom.nextInt(16);
+ Block tBlock = aWorld.getBlock(tX, tY - 7, tZ);
+ if (tBlock != null && tBlock.isOpaqueCube() && aWorld.getBlock(tX, tY-6, tZ).isAir(aWorld, tX, tY-6, tZ)) {
+ float var6 = aRandom.nextFloat() * (float)Math.PI;
+ double var7 = ((tX + 8) + MathHelper.sin(var6) * mSize / 8.0F);
+ double var9 = ((tX + 8) - MathHelper.sin(var6) * mSize / 8.0F);
+ double var11 = ((tZ + 8) + MathHelper.cos(var6) * mSize / 8.0F);
+ double var13 = ((tZ + 8) - MathHelper.cos(var6) * mSize / 8.0F);
+ double var15 = (tY + aRandom.nextInt(3) - 2);
+ double var17 = (tY + aRandom.nextInt(3) - 2);
+
+ for (int var19 = 0; var19 <= mSize; ++var19) {
+ double var20 = var7 + (var9 - var7) * var19 / mSize;
+ double var22 = var15 + (var17 - var15) * var19 / mSize;
+ double var24 = var11 + (var13 - var11) * var19 / mSize;
+ double var26 = aRandom.nextDouble() * mSize / 16.0D;
+ double var28 = (MathHelper.sin(var19 * (float)Math.PI / mSize) + 1.0F) * var26 + 1.0D;
+ double var30 = (MathHelper.sin(var19 * (float)Math.PI / mSize) + 1.0F) * var26 + 1.0D;
+ int var32 = MathHelper.floor_double(var20 - var28 / 2.0D);
+ int var33 = MathHelper.floor_double(var22 - var30 / 2.0D);
+ int var34 = MathHelper.floor_double(var24 - var28 / 2.0D);
+ int var35 = MathHelper.floor_double(var20 + var28 / 2.0D);
+ int var36 = MathHelper.floor_double(var22 + var30 / 2.0D);
+ int var37 = MathHelper.floor_double(var24 + var28 / 2.0D);
+
+ for (int var38 = var32; var38 <= var35; ++var38) {
+ double var39 = (var38 + 0.5D - var20) / (var28 / 2.0D);
+ if (var39 * var39 < 1.0D) {
+ for (int var41 = var33; var41 <= var36; ++var41) {
+ double var42 = (var41 + 0.5D - var22) / (var30 / 2.0D);
+ if (var39 * var39 + var42 * var42 < 1.0D) {
+ for (int var44 = var34; var44 <= var37; ++var44) {
+ double var45 = (var44 + 0.5D - var24) / (var28 / 2.0D);
+ Block block = aWorld.getBlock(var38, var41, var44);
+ if (var39 * var39 + var42 * var42 + var45 * var45 < 1.0D && ((mAllowToGenerateinVoid&&aWorld.getBlock(var38, var41, var44).isAir(aWorld, var38, var41, var44)) || (block != null && !(block instanceof BlockContainer)))) {
+ aWorld.setBlock(var38, var41, var44, mBlock, mBlockMeta, 0);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/world/GT_Worldgen_Ore.java b/src/main/java/gregtech/api/world/GT_Worldgen_Ore.java
new file mode 100644
index 0000000000..58e1eb2814
--- /dev/null
+++ b/src/main/java/gregtech/api/world/GT_Worldgen_Ore.java
@@ -0,0 +1,29 @@
+package gregtech.api.world;
+
+import gregtech.api.GregTech_API;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import net.minecraft.block.Block;
+
+public abstract class GT_Worldgen_Ore extends GT_Worldgen {
+ public final int mBlockMeta, mAmount, mSize, mMinY, mMaxY, mProbability, mDimensionType;
+ public final Block mBlock;
+ public final Collection<String> mBiomeList;
+ public final boolean mAllowToGenerateinVoid;
+
+ public GT_Worldgen_Ore(String aName, boolean aDefault, Block aBlock, int aBlockMeta, int aDimensionType, int aAmount, int aSize, int aProbability, int aMinY, int aMaxY, Collection<String> aBiomeList, boolean aAllowToGenerateinVoid) {
+ super(aName, GregTech_API.sWorldgenList, aDefault);
+ mDimensionType = aDimensionType;
+ mBlock = aBlock;
+ mBlockMeta = Math.min(Math.max(aBlockMeta, 0), 15);
+ mProbability = GregTech_API.sWorldgenFile.get("worldgen."+mWorldGenName, "Probability" , aProbability);
+ mAmount = GregTech_API.sWorldgenFile.get("worldgen."+mWorldGenName, "Amount" , aAmount);
+ mSize = GregTech_API.sWorldgenFile.get("worldgen."+mWorldGenName, "Size" , aSize);
+ mMinY = GregTech_API.sWorldgenFile.get("worldgen."+mWorldGenName, "MinHeight" , aMinY);
+ mMaxY = GregTech_API.sWorldgenFile.get("worldgen."+mWorldGenName, "MaxHeight" , aMaxY);
+ if (aBiomeList == null) mBiomeList = new ArrayList<String>(); else mBiomeList = aBiomeList;
+ mAllowToGenerateinVoid = aAllowToGenerateinVoid;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/world/GT_Worldgen_Ore_Normal.java b/src/main/java/gregtech/api/world/GT_Worldgen_Ore_Normal.java
new file mode 100644
index 0000000000..c382a6fd98
--- /dev/null
+++ b/src/main/java/gregtech/api/world/GT_Worldgen_Ore_Normal.java
@@ -0,0 +1,69 @@
+package gregtech.api.world;
+
+import java.util.Collection;
+import java.util.Random;
+
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.util.MathHelper;
+import net.minecraft.world.World;
+import net.minecraft.world.chunk.IChunkProvider;
+
+public class GT_Worldgen_Ore_Normal extends GT_Worldgen_Ore {
+ public GT_Worldgen_Ore_Normal(String aName, boolean aDefault, Block aBlock, int aBlockMeta, int aDimensionType, int aAmount, int aSize, int aProbability, int aMinY, int aMaxY, Collection<String> aBiomeList, boolean aAllowToGenerateinVoid) {
+ super(aName, aDefault, aBlock, aBlockMeta, aDimensionType, aAmount, aSize, aProbability, aMinY, aMaxY, aBiomeList, aAllowToGenerateinVoid);
+ }
+
+ @Override
+ public boolean executeWorldgen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) {
+ if (isGenerationAllowed(aWorld, aDimensionType, mDimensionType) && (mBiomeList.isEmpty() || mBiomeList.contains(aBiome)) && (mProbability <= 1 || aRandom.nextInt(mProbability) == 0)) {
+ for (int i = 0; i < mAmount; i++) {
+ int tX = aChunkX + aRandom.nextInt(16), tY = mMinY + aRandom.nextInt(mMaxY - mMinY), tZ = aChunkZ + aRandom.nextInt(16);
+ if (mAllowToGenerateinVoid || aWorld.getBlock(tX, tY, tZ).isAir(aWorld, tX, tY, tZ)) {
+ float var6 = aRandom.nextFloat() * (float)Math.PI;
+ double var7 = ((tX + 8) + MathHelper.sin(var6) * mSize / 8.0F);
+ double var9 = ((tX + 8) - MathHelper.sin(var6) * mSize / 8.0F);
+ double var11 = ((tZ + 8) + MathHelper.cos(var6) * mSize / 8.0F);
+ double var13 = ((tZ + 8) - MathHelper.cos(var6) * mSize / 8.0F);
+ double var15 = (tY + aRandom.nextInt(3) - 2);
+ double var17 = (tY + aRandom.nextInt(3) - 2);
+
+ for (int var19 = 0; var19 <= mSize; ++var19) {
+ double var20 = var7 + (var9 - var7) * var19 / mSize;
+ double var22 = var15 + (var17 - var15) * var19 / mSize;
+ double var24 = var11 + (var13 - var11) * var19 / mSize;
+ double var26 = aRandom.nextDouble() * mSize / 16.0D;
+ double var28 = (MathHelper.sin(var19 * (float)Math.PI / mSize) + 1.0F) * var26 + 1.0D;
+ double var30 = (MathHelper.sin(var19 * (float)Math.PI / mSize) + 1.0F) * var26 + 1.0D;
+ int var32 = MathHelper.floor_double(var20 - var28 / 2.0D);
+ int var33 = MathHelper.floor_double(var22 - var30 / 2.0D);
+ int var34 = MathHelper.floor_double(var24 - var28 / 2.0D);
+ int var35 = MathHelper.floor_double(var20 + var28 / 2.0D);
+ int var36 = MathHelper.floor_double(var22 + var30 / 2.0D);
+ int var37 = MathHelper.floor_double(var24 + var28 / 2.0D);
+
+ for (int var38 = var32; var38 <= var35; ++var38) {
+ double var39 = (var38 + 0.5D - var20) / (var28 / 2.0D);
+ if (var39 * var39 < 1.0D) {
+ for (int var41 = var33; var41 <= var36; ++var41) {
+ double var42 = (var41 + 0.5D - var22) / (var30 / 2.0D);
+ if (var39 * var39 + var42 * var42 < 1.0D) {
+ for (int var44 = var34; var44 <= var37; ++var44) {
+ double var45 = (var44 + 0.5D - var24) / (var28 / 2.0D);
+ Block block = aWorld.getBlock(var38, var41, var44);
+ if (var39 * var39 + var42 * var42 + var45 * var45 < 1.0D && ((mAllowToGenerateinVoid&&aWorld.getBlock(var38, var41, var44).isAir(aWorld, var38, var41, var44)) || (block != null && (block.isReplaceableOreGen(aWorld, var38, var41, var44, Blocks.stone) || block.isReplaceableOreGen(aWorld, var38, var41, var44, Blocks.end_stone) || block.isReplaceableOreGen(aWorld, var38, var41, var44, Blocks.netherrack))))) {
+ aWorld.setBlock(var38, var41, var44, mBlock, mBlockMeta, 0);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/world/GT_Worldgen_Ore_SingleBlock.java b/src/main/java/gregtech/api/world/GT_Worldgen_Ore_SingleBlock.java
new file mode 100644
index 0000000000..62dc220b01
--- /dev/null
+++ b/src/main/java/gregtech/api/world/GT_Worldgen_Ore_SingleBlock.java
@@ -0,0 +1,30 @@
+package gregtech.api.world;
+
+import java.util.Collection;
+import java.util.Random;
+
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.world.World;
+import net.minecraft.world.chunk.IChunkProvider;
+
+public class GT_Worldgen_Ore_SingleBlock extends GT_Worldgen_Ore {
+ public GT_Worldgen_Ore_SingleBlock(String aName, boolean aDefault, Block aBlock, int aBlockMeta, int aDimensionType, int aAmount, int aSize, int aProbability, int aMinY, int aMaxY, Collection<String> aBiomeList, boolean aAllowToGenerateinVoid) {
+ super(aName, aDefault, aBlock, aBlockMeta, aDimensionType, aAmount, aSize, aProbability, aMinY, aMaxY, aBiomeList, aAllowToGenerateinVoid);
+ }
+
+ @Override
+ public boolean executeWorldgen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) {
+ if (isGenerationAllowed(aWorld, aDimensionType, mDimensionType) && (mBiomeList.isEmpty() || mBiomeList.contains(aBiome)) && (mProbability <= 1 || aRandom.nextInt(mProbability) == 0)) {
+ for (int i = 0; i < mAmount; i++) {
+ int tX = aChunkX + aRandom.nextInt(16), tY = mMinY + aRandom.nextInt(mMaxY - mMinY), tZ = aChunkZ + aRandom.nextInt(16);
+ Block tBlock = aWorld.getBlock(tX, tY, tZ);
+ if (((mAllowToGenerateinVoid&&aWorld.getBlock(tX, tY, tZ).isAir(aWorld, tX, tY, tZ)) || (tBlock != null && (tBlock.isReplaceableOreGen(aWorld, tX, tY, tZ, Blocks.stone) || tBlock.isReplaceableOreGen(aWorld, tX, tY, tZ, Blocks.end_stone) || tBlock.isReplaceableOreGen(aWorld, tX, tY, tZ, Blocks.netherrack))))) {
+ aWorld.setBlock(tX, tY, tZ, mBlock, mBlockMeta, 0);
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/world/GT_Worldgen_Ore_SingleBlock_UnderLava.java b/src/main/java/gregtech/api/world/GT_Worldgen_Ore_SingleBlock_UnderLava.java
new file mode 100644
index 0000000000..fc921087f1
--- /dev/null
+++ b/src/main/java/gregtech/api/world/GT_Worldgen_Ore_SingleBlock_UnderLava.java
@@ -0,0 +1,30 @@
+package gregtech.api.world;
+
+import java.util.Collection;
+import java.util.Random;
+
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.world.World;
+import net.minecraft.world.chunk.IChunkProvider;
+
+public class GT_Worldgen_Ore_SingleBlock_UnderLava extends GT_Worldgen_Ore {
+ public GT_Worldgen_Ore_SingleBlock_UnderLava(String aName, boolean aDefault, Block aBlock, int aBlockMeta, int aDimensionType, int aAmount, int aSize, int aProbability, int aMinY, int aMaxY, Collection<String> aBiomeList, boolean aAllowToGenerateinVoid) {
+ super(aName, aDefault, aBlock, aBlockMeta, aDimensionType, aAmount, aSize, aProbability, aMinY, aMaxY, aBiomeList, aAllowToGenerateinVoid);
+ }
+
+ @Override
+ public boolean executeCavegen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) {
+ if (isGenerationAllowed(aWorld, aDimensionType, mDimensionType) && (mBiomeList.isEmpty() || mBiomeList.contains(aBiome)) && (mProbability <= 1 || aRandom.nextInt(mProbability) == 0)) {
+ for (int i = 0; i < mAmount; i++) {
+ int tX = aChunkX + aRandom.nextInt(16), tY = mMinY + aRandom.nextInt(mMaxY - mMinY), tZ = aChunkZ + aRandom.nextInt(16);
+ Block tBlock = aWorld.getBlock(tX, tY, tZ);
+ if (((mAllowToGenerateinVoid&&aWorld.getBlock(tX, tY, tZ).isAir(aWorld, tX, tY, tZ)) || (tBlock != null && (tBlock.isReplaceableOreGen(aWorld, tX, tY, tZ, Blocks.stone) || tBlock.isReplaceableOreGen(aWorld, tX, tY, tZ, Blocks.end_stone) || tBlock.isReplaceableOreGen(aWorld, tX, tY, tZ, Blocks.netherrack))))) {
+ if (aWorld.getBlock(tX, tY+1, tZ) == Blocks.lava || aWorld.getBlock(tX, tY, tZ) == Blocks.flowing_lava) aWorld.setBlock(tX, tY, tZ, mBlock, mBlockMeta, 0);
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+} \ No newline at end of file