diff options
author | Richard Hendricks <richardhendricks@pobox.com> | 2017-11-14 11:03:13 -0600 |
---|---|---|
committer | Richard Hendricks <richardhendricks@pobox.com> | 2017-11-24 00:48:02 -0600 |
commit | d2d59276cf5eb4486e275509c9d1aff8b835418a (patch) | |
tree | 1e5d122a459c2586c822c84d3fd0835252efa3d7 /src/main/java/gregtech/common | |
parent | 5cc6156d221f92b0226152a705b1da17e5177866 (diff) | |
download | GT5-Unofficial-d2d59276cf5eb4486e275509c9d1aff8b835418a.tar.gz GT5-Unofficial-d2d59276cf5eb4486e275509c9d1aff8b835418a.tar.bz2 GT5-Unofficial-d2d59276cf5eb4486e275509c9d1aff8b835418a.zip |
Happy with orevein generation now. Working on small ores next.
Diffstat (limited to 'src/main/java/gregtech/common')
-rw-r--r-- | src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java | 40 | ||||
-rw-r--r-- | src/main/java/gregtech/common/GT_Worldgenerator.java | 50 |
2 files changed, 40 insertions, 50 deletions
diff --git a/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java b/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java index a2b9c7e98e..edb1fa020d 100644 --- a/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java +++ b/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java @@ -97,9 +97,11 @@ public class GT_Worldgen_GT_Ore_Layer public int executeWorldgenChunkified(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, int aChunkZ, int aSeedX, int aSeedZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) {
if( mWorldGenName.equals("NoOresInVein") ) {
+ /*
if (debugOrevein) GT_Log.out.println(
" NoOresInVein, skipping"
);
+ */
// This is a special empty orevein
return ORE_PLACED;
}
@@ -121,8 +123,8 @@ public class GT_Worldgen_GT_Ore_Layer int wXVein = aSeedX - aRandom.nextInt(mSize); // West side
int eXVein = aSeedX + 16 + aRandom.nextInt(mSize);
// Limit Orevein to only blocks present in current chunk
- int wX = Math.max( wXVein, aChunkX + 1);
- int eX = Math.min( eXVein, aChunkX + 15);
+ int wX = Math.max( wXVein, aChunkX);
+ int eX = Math.min( eXVein, aChunkX + 16);
if (wX >= eX) { //No overlap between orevein and this chunk exists in X
/*
if (debugOrevein) {
@@ -137,8 +139,8 @@ public class GT_Worldgen_GT_Ore_Layer int nZVein = aSeedZ - aRandom.nextInt(mSize);
int sZVein = aSeedZ + 16 + aRandom.nextInt(mSize);
- int nZ = Math.max(nZVein, aChunkZ + 1);
- int sZ = Math.min(sZVein, aChunkZ + 15);
+ int nZ = Math.max(nZVein, aChunkZ);
+ int sZ = Math.min(sZVein, aChunkZ + 16);
if (nZ >= sZ) { //No overlap between orevein and this chunk exists in Z
/*
if (debugOrevein) {
@@ -149,19 +151,16 @@ public class GT_Worldgen_GT_Ore_Layer */
return NO_OVERLAP;
}
- if (debugOrevein) GT_Log.out.println(
- "wX=" + wX +
- " eX=" + eX +
- " nZ=" + nZ +
- " sZ=" + sZ
- );
+ // Adjust the density down the more chunks we are away from the oreseed. The 5 chunks surrounding the seed should always be max density due to truncation of Math.sqrt().
+ int localDensity = Math.max(1, this.mDensity / ((int)Math.sqrt(2 + Math.pow(aChunkX/16 - aSeedX/16, 2) + Math.pow(aChunkZ/16 - aSeedZ/16, 2))) );
+
// To allow for early exit due to no ore placed in the bottom layer (probably because we are in the sky), unroll 1 pass through the loop
// Now we do bottom-level-first oregen, and work our way upwards.
int level = tMinY - 1; //Dunno why, but the first layer is actually played one below tMinY. Go figure.
for (int tX = wX; tX < eX; tX++) {
- int placeX = Math.max(1, Math.max(MathHelper.abs_int(wX - tX), MathHelper.abs_int(eX - tX))/mDensity);
+ int placeX = Math.max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX))/localDensity);
for (int tZ = nZ; tZ < sZ; tZ++) {
- int placeZ = Math.max(1, Math.max(MathHelper.abs_int(sZ - tZ), MathHelper.abs_int(nZ - tZ))/mDensity);
+ int placeZ = Math.max(1, Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ))/localDensity);
if ( ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) && (this.mSecondaryMeta > 0) ) {
if (GT_TileEntity_Ores.setOreBlock(aWorld, tX, level, tZ, this.mSecondaryMeta, false, false)) {
placeCount[1]++;
@@ -184,9 +183,9 @@ public class GT_Worldgen_GT_Ore_Layer }
for (level = tMinY; level < (tMinY-1+3); level++) {
for (int tX = wX; tX < eX; tX++) {
- int placeX = Math.max(1, Math.max(MathHelper.abs_int(wX - tX), MathHelper.abs_int(eX - tX))/mDensity);
+ int placeX = Math.max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX))/localDensity);
for (int tZ = nZ; tZ < sZ; tZ++) {
- int placeZ = Math.max(1, Math.max(MathHelper.abs_int(sZ - tZ), MathHelper.abs_int(nZ - tZ))/mDensity);
+ int placeZ = Math.max(1, Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ))/localDensity);
if ( ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) && (this.mSecondaryMeta > 0) ) {
if (GT_TileEntity_Ores.setOreBlock(aWorld, tX, level, tZ, this.mSecondaryMeta, false, false)) {
placeCount[1]++;
@@ -202,9 +201,9 @@ public class GT_Worldgen_GT_Ore_Layer // Low Middle layer is between + sporadic
// level should be = tMinY-1+3 from end of for loop
for (int tX = wX; tX < eX; tX++) {
- int placeX = Math.max(1, Math.max(MathHelper.abs_int(wX - tX), MathHelper.abs_int(eX - tX))/mDensity);
+ int placeX = Math.max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX))/localDensity);
for (int tZ = nZ; tZ < sZ; tZ++) {
- int placeZ = Math.max(1, Math.max(MathHelper.abs_int(sZ - tZ), MathHelper.abs_int(nZ - tZ))/mDensity);
+ int placeZ = Math.max(1, Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ))/localDensity);
if ((aRandom.nextInt(2) == 0) && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) && (this.mBetweenMeta > 0) ) { // Between are only 1 per vertical column, reduce by 1/2 to compensate
if (GT_TileEntity_Ores.setOreBlock(aWorld, tX, level, tZ, this.mBetweenMeta, false, false)) {
placeCount[2]++;
@@ -219,9 +218,9 @@ public class GT_Worldgen_GT_Ore_Layer // High Middle layer is between + primary + sporadic
level++; // Increment level to next layer
for (int tX = wX; tX < eX; tX++) {
- int placeX = Math.max(1, Math.max(MathHelper.abs_int(wX - tX), MathHelper.abs_int(eX - tX))/mDensity);
+ int placeX = Math.max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX))/localDensity);
for (int tZ = nZ; tZ < sZ; tZ++) {
- int placeZ = Math.max(1, Math.max(MathHelper.abs_int(sZ - tZ), MathHelper.abs_int(nZ - tZ))/mDensity);
+ int placeZ = Math.max(1, Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ))/localDensity);
if ((aRandom.nextInt(2) == 0) && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) && (this.mBetweenMeta > 0) ) { // Between are only 1 per vertical column, reduce by 1/2 to compensate
if (GT_TileEntity_Ores.setOreBlock(aWorld, tX, level, tZ, this.mBetweenMeta, false, false)) {
placeCount[2]++;
@@ -242,9 +241,9 @@ public class GT_Worldgen_GT_Ore_Layer level++; // Increment level to next layer
for( ; level < (tMinY + 6); level++){ // should do two layers
for (int tX = wX; tX < eX; tX++) {
- int placeX = Math.max(1, Math.max(MathHelper.abs_int(wX - tX), MathHelper.abs_int(eX - tX))/mDensity);
+ int placeX = Math.max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX))/localDensity);
for (int tZ = nZ; tZ < sZ; tZ++) {
- int placeZ = Math.max(1, Math.max(MathHelper.abs_int(sZ - tZ), MathHelper.abs_int(nZ - tZ))/mDensity);
+ int placeZ = Math.max(1, Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ))/localDensity);
if ( ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) && (this.mPrimaryMeta > 0) ) {
if (GT_TileEntity_Ores.setOreBlock(aWorld, tX, level, tZ, this.mPrimaryMeta, false, false)) {
placeCount[0]++;
@@ -267,6 +266,7 @@ public class GT_Worldgen_GT_Ore_Layer " oreseedX="+ aSeedX/16 +
" oreseedZ="+ aSeedZ/16 +
" cY="+tMinY+
+ " locDen=" + localDensity +
" Den=" + this.mDensity +
" Sec="+placeCount[1]+
" Spo="+placeCount[3]+
diff --git a/src/main/java/gregtech/common/GT_Worldgenerator.java b/src/main/java/gregtech/common/GT_Worldgenerator.java index 6383ab44db..019917a148 100644 --- a/src/main/java/gregtech/common/GT_Worldgenerator.java +++ b/src/main/java/gregtech/common/GT_Worldgenerator.java @@ -147,13 +147,15 @@ implements IWorldGenerator { int noOrePlacedCount=0;
String tDimensionName = "";
if (debugOrevein) { tDimensionName = this.mWorld.provider.getDimensionName(); }
+ /*
if (debugOrevein) GT_Log.out.println(
" Finding oreveins for oreveinSeed="+ oreveinSeed +
" mX="+ this.mX +
" mZ="+ this.mZ +
" oreseedX="+ oreseedX +
" oreseedZ="+ oreseedZ
- );
+ );
+ */
// Search for a valid orevein for this dimension
if( !validOreveins.containsKey(oreveinSeed) ) {
@@ -171,22 +173,21 @@ implements IWorldGenerator { int placementResult = tWorldGen.executeWorldgenChunkified(this.mWorld, new XSTR( oreveinSeed ), this.mBiome, this.mDimensionType, this.mX*16, this.mZ*16, oreseedX*16, oreseedZ*16, this.mChunkGenerator, this.mChunkProvider);
switch(placementResult) {
case GT_Worldgen_GT_Ore_Layer.ORE_PLACED:
- if (debugOrevein) GT_Log.out.println(
- " Adding orevein to hash table. oreveinSeed=" + oreveinSeed +
+ if (debugWorldGen) GT_Log.out.println(
+ " Added oreveinSeed=" + oreveinSeed +
" mX="+ this.mX +
" mZ="+ this.mZ +
" oreseedX="+ oreseedX +
" oreseedZ="+ oreseedZ +
- " Orevein took " + (i-1) +
- " attempts to find" +
- " and " + placementAttempts +
- " tries to place " +
- " in dimensionName=" + tDimensionName
+ " tries at oremix=" + i +
+ " placementAttempts=" + placementAttempts +
+ " dimensionName=" + tDimensionName
);
validOreveins.put(oreveinSeed, tWorldGen);
oreveinFound = true;
break;
case GT_Worldgen_GT_Ore_Layer.NO_ORE_IN_BOTTOM_LAYER:
+ placementAttempts++;
// SHould do retry in this case until out of chances
break;
case GT_Worldgen_GT_Ore_Layer.NO_OVERLAP:
@@ -195,7 +196,7 @@ implements IWorldGenerator { }
break; // Try the next orevein
} catch (Throwable e) {
- if (debugOrevein) GT_Log.out.println(
+ if (debugWorldGen) GT_Log.out.println(
"Exception occurred on oreVein" + tWorldGen +
" oreveinSeed="+ oreveinSeed +
" mX="+ this.mX +
@@ -210,23 +211,21 @@ implements IWorldGenerator { }
// Only add an empty orevein if are unable to place a vein at the oreseed chunk.
if ((!oreveinFound) && (this.mX == oreseedX) && (this.mZ == oreseedZ)){
- if (debugOrevein) GT_Log.out.println(
- " Adding empty orevein to hash table. Could not find/place valid orevein" +
- " oreveinSeed="+ oreveinSeed +
+ if (debugWorldGen) GT_Log.out.println(
+ " Empty oreveinSeed="+ oreveinSeed +
" mX="+ this.mX +
" mZ="+ this.mZ +
" oreseedX="+ oreseedX +
" oreseedZ="+ oreseedZ +
" tries at oremix=" + i +
" placementAttempts=" + placementAttempts +
- " in dimensionName=" + tDimensionName
+ " dimensionName=" + tDimensionName
);
validOreveins.put(oreveinSeed, noOresInVein );
}
} else if(oreveinPercentageRoll >= oreveinPercentage) {
- if (debugOrevein) GT_Log.out.println(
- " Skipped orevein in this 3x3 chunk!" +
- " oreveinSeed="+ oreveinSeed +
+ if (debugWorldGen) GT_Log.out.println(
+ " Skipped oreveinSeed="+ oreveinSeed +
" mX="+ this.mX +
" mZ="+ this.mZ +
" oreseedX=" + oreseedX +
@@ -239,15 +238,9 @@ implements IWorldGenerator { }
}else {
// oreseed is located in the previously processed table
- if (debugOrevein) GT_Log.out.println(
- " Valid orevein found in hash table" +
- " oreveinSeed="+ oreveinSeed +
- " validOreveins.size()=" + validOreveins.size() +
- " mX="+ this.mX +
- " mZ="+ this.mZ +
- " oreseedX="+ oreseedX +
- " oreseedZ="+ oreseedZ +
- " in dimensionName=" + tDimensionName
+ if (debugWorldGen) GT_Log.out.print(
+ " Valid oreveinSeed="+ oreveinSeed +
+ " validOreveins.size()=" + validOreveins.size() + " "
);
GT_Worldgen tWorldGen = validOreveins.get(oreveinSeed);
oreveinRNG.setSeed(oreveinSeed); // reset seed for RNG to only be based on oreseed X/Z
@@ -276,15 +269,12 @@ implements IWorldGenerator { // Now process each oreseed vs this requested chunk
for( ; seedList.size() != 0; ) {
-
worldGenFindVein( seedList.get(0).mX, seedList.get(0).mZ );
seedList.remove(0);
}
// Do leftover worldgen for this chunk (GT_Stones and GT_small_ores)
-/////RAH Disable these for now
-/*
try {
for (GT_Worldgen tWorldGen : GregTech_API.sWorldgenList) {
tWorldGen.executeWorldgen(this.mWorld, this.mRandom, this.mBiome, this.mDimensionType, this.mX*16, this.mZ*16, this.mChunkGenerator, this.mChunkProvider);
@@ -292,8 +282,8 @@ implements IWorldGenerator { } catch (Throwable e) {
e.printStackTrace(GT_Log.err);
}
-*/
- /*
+/*
+ // Old non-chunkified oregen
if ((Math.abs(this.mX / 16) % 3 == 1) && (Math.abs(this.mZ / 16) % 3 == 1)) {
int oreveinRNG = this.mRandom.nextInt(100);
if (( oreveinRNG < oreveinPercentage) && (GT_Worldgen_GT_Ore_Layer.sWeight > 0) && (GT_Worldgen_GT_Ore_Layer.sList.size() > 0)) {
|