aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_WordGenerator.java16
-rw-r--r--src/main/java/gregtech/api/world/GT_Worldgen.java38
-rw-r--r--src/main/java/gregtech/api/world/GT_Worldgen_Ore_SingleBlock.java3
-rw-r--r--src/main/java/gregtech/api/world/GT_Worldgen_Ore_SingleBlock_UnderLava.java3
-rw-r--r--src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java27
-rw-r--r--src/main/java/gregtech/common/GT_Worldgen_GT_Ore_SmallPieces.java40
-rw-r--r--src/main/java/gregtech/common/GT_Worldgen_Stone.java2
7 files changed, 106 insertions, 23 deletions
diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_WordGenerator.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_WordGenerator.java
index 40c2302fb0..56e67ab9e5 100644
--- a/src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_WordGenerator.java
+++ b/src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_WordGenerator.java
@@ -18,6 +18,7 @@ import java.util.Random;
import net.minecraft.world.ChunkCoordIntPair;
import net.minecraft.world.World;
+import net.minecraft.world.WorldProvider;
import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.chunk.IChunkProvider;
@@ -40,7 +41,7 @@ public class BW_WordGenerator implements IWorldGenerator {
new BW_WordGenerator.WorldGenContainer(
aX * 16,
aZ * 16,
- aWorld.provider.dimensionId,
+ aWorld.provider,
aWorld,
aChunkGenerator,
aChunkProvider).run();
@@ -49,18 +50,18 @@ public class BW_WordGenerator implements IWorldGenerator {
public static class WorldGenContainer implements Runnable {
public static HashSet<ChunkCoordIntPair> mGenerated = new HashSet<>(2000);
- public final int mDimensionType;
+ public final WorldProvider mWorldProvider;
public final World mWorld;
public final IChunkProvider mChunkGenerator;
public final IChunkProvider mChunkProvider;
public int mX;
public int mZ;
- public WorldGenContainer(int aX, int aZ, int aDimensionType, World aWorld, IChunkProvider aChunkGenerator,
- IChunkProvider aChunkProvider) {
+ public WorldGenContainer(int aX, int aZ, WorldProvider aWorldProvider, World aWorld,
+ IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) {
this.mX = aX;
this.mZ = aZ;
- this.mDimensionType = aDimensionType;
+ this.mWorldProvider = aWorldProvider;
this.mWorld = aWorld;
this.mChunkGenerator = aChunkGenerator;
this.mChunkProvider = aChunkProvider;
@@ -102,8 +103,7 @@ public class BW_WordGenerator implements IWorldGenerator {
for (int i = 0; i < 256 && temp; i++) {
tRandomWeight = random.nextInt(BW_OreLayer.sWeight);
for (BW_OreLayer tWorldGen : BW_OreLayer.sList) {
- if (!tWorldGen.isGenerationAllowed(this.mWorld, this.mDimensionType, this.mDimensionType))
- continue;
+ if (!tWorldGen.isGenerationAllowed(this.mWorld, mWorldProvider.getClass())) continue;
tRandomWeight -= tWorldGen.mWeight;
if (tRandomWeight <= 0) {
try {
@@ -114,7 +114,7 @@ public class BW_WordGenerator implements IWorldGenerator {
this.mWorld,
random,
"",
- this.mDimensionType,
+ this.mWorldProvider.dimensionId,
xCenter,
zCenter,
this.mChunkGenerator,
diff --git a/src/main/java/gregtech/api/world/GT_Worldgen.java b/src/main/java/gregtech/api/world/GT_Worldgen.java
index 4e9ed6229b..bd85813e2b 100644
--- a/src/main/java/gregtech/api/world/GT_Worldgen.java
+++ b/src/main/java/gregtech/api/world/GT_Worldgen.java
@@ -1,5 +1,6 @@
package gregtech.api.world;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Random;
@@ -7,6 +8,7 @@ import java.util.concurrent.ConcurrentHashMap;
import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;
+import net.minecraftforge.common.DimensionManager;
import gregtech.api.GregTech_API;
@@ -91,4 +93,40 @@ public abstract class GT_Worldgen {
}
return tAllowed;
}
+
+ public boolean isGenerationAllowed(World aWorld, int aAllowedDimensionType) {
+ World allowedWorld = DimensionManager.getWorld(aAllowedDimensionType);
+ if (allowedWorld != null && allowedWorld.provider != null) {
+ return isGenerationAllowed(aWorld, allowedWorld.provider.getClass());
+ } else {
+ return aWorld.provider.dimensionId == aAllowedDimensionType;
+ }
+ }
+
+ /**
+ *
+ * @param aWorld The World Object
+ * @param aAllowedDimensionTypes The Types of allowed Worldgeneration
+ * @return if generation for this world is allowed for MoronTech (tm) OreGen (ATM (2.0.3.1Dev) only End, Nether,
+ * Overworld, Twilight Forest and Deep Dark)
+ */
+ public boolean isGenerationAllowed(World aWorld, Class... aAllowedDimensionTypes) {
+ String aDimName = aWorld.provider.getDimensionName();
+ if (!(aDimName.equalsIgnoreCase("Overworld") || aDimName.equalsIgnoreCase("Nether")
+ || aDimName.equalsIgnoreCase("The End")
+ || aDimName.equalsIgnoreCase("Twilight Forest")
+ || aDimName.equalsIgnoreCase("Underdark"))) return false;
+
+ Boolean tAllowed = mDimensionMap.get(aDimName);
+ if (tAllowed == null) {
+ boolean tValue = GregTech_API.sWorldgenFile.get(
+ "worldgen." + mWorldGenName,
+ aDimName,
+ Arrays.stream(aAllowedDimensionTypes)
+ .anyMatch(worldProvider -> worldProvider.isInstance(aWorld.provider)));
+ mDimensionMap.put(aDimName, tValue);
+ return tValue;
+ }
+ return tAllowed;
+ }
}
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
index 900f7808b1..f89d3ad8f8 100644
--- a/src/main/java/gregtech/api/world/GT_Worldgen_Ore_SingleBlock.java
+++ b/src/main/java/gregtech/api/world/GT_Worldgen_Ore_SingleBlock.java
@@ -31,8 +31,7 @@ public class GT_Worldgen_Ore_SingleBlock extends GT_Worldgen_Ore {
@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))
+ if (isGenerationAllowed(aWorld, 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),
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
index 956cd0eb4c..3993c65f2a 100644
--- 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
@@ -31,8 +31,7 @@ public class GT_Worldgen_Ore_SingleBlock_UnderLava extends GT_Worldgen_Ore {
@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))
+ if (isGenerationAllowed(aWorld, 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),
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 fd260d73a4..23bf149b9c 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
@@ -5,12 +5,16 @@ import static gregtech.api.enums.GT_Values.oreveinPlacerOres;
import static gregtech.api.enums.GT_Values.oreveinPlacerOresMultiplier;
import java.util.ArrayList;
+import java.util.List;
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.WorldProviderEnd;
+import net.minecraft.world.WorldProviderHell;
+import net.minecraft.world.WorldProviderSurface;
import net.minecraft.world.chunk.IChunkProvider;
import gregtech.api.GregTech_API;
@@ -48,6 +52,8 @@ public class GT_Worldgen_GT_Ore_Layer extends GT_Worldgen {
public final boolean mMoon = false, mMars = false, mAsteroid = false;
public final String aTextWorldgen = "worldgen.";
+ public Class[] mAllowedProviders;
+
@Deprecated
public GT_Worldgen_GT_Ore_Layer(String aName, boolean aDefault, int aMinY, int aMaxY, int aWeight, int aDensity,
int aSize, boolean aOverworld, boolean aNether, boolean aEnd, boolean GC_UNUSED1, boolean GC_UNUSED2,
@@ -104,6 +110,20 @@ public class GT_Worldgen_GT_Ore_Layer extends GT_Worldgen {
if (this.mEnabled) {
sWeight += this.mWeight;
}
+
+ List<Class> allowedProviders = new ArrayList<>();
+ if (this.mNether) {
+ allowedProviders.add(WorldProviderHell.class);
+ }
+
+ if (this.mOverworld) {
+ allowedProviders.add(WorldProviderSurface.class);
+ }
+
+ if (this.mEnd) {
+ allowedProviders.add(WorldProviderEnd.class);
+ }
+ mAllowedProviders = allowedProviders.toArray(new Class[allowedProviders.size()]);
}
@Override
@@ -114,11 +134,8 @@ public class GT_Worldgen_GT_Ore_Layer extends GT_Worldgen {
// Return a special empty orevein
return ORE_PLACED;
}
- if (!isGenerationAllowed(
- aWorld,
- aDimensionType,
- ((aDimensionType == -1) && (this.mNether)) || ((aDimensionType == 0) && (this.mOverworld))
- || ((aDimensionType == 1) && (this.mEnd)) ? aDimensionType : ~aDimensionType)) {
+
+ if (!isGenerationAllowed(aWorld, mAllowedProviders)) {
// The following code can be used for debugging, but it spams in logs
// if (debugOrevein) { GT_Log.out.println( "Wrong dimension" ); }
return WRONG_DIMENSION;
diff --git a/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_SmallPieces.java b/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_SmallPieces.java
index c8219e8361..f1e0c92703 100644
--- a/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_SmallPieces.java
+++ b/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_SmallPieces.java
@@ -3,9 +3,13 @@ package gregtech.common;
import static gregtech.api.enums.GT_Values.debugSmallOres;
import java.util.ArrayList;
+import java.util.List;
import java.util.Random;
import net.minecraft.world.World;
+import net.minecraft.world.WorldProviderEnd;
+import net.minecraft.world.WorldProviderHell;
+import net.minecraft.world.WorldProviderSurface;
import net.minecraft.world.chunk.IChunkProvider;
import gregtech.api.GregTech_API;
@@ -28,6 +32,8 @@ public class GT_Worldgen_GT_Ore_SmallPieces extends GT_Worldgen {
public final String aTextWorldgen = "worldgen.";
public static ArrayList<GT_Worldgen_GT_Ore_SmallPieces> sList = new ArrayList<>();
+ public Class[] mAllowedProviders;
+
// TODO CHECK IF INSTANTIATION IS CORRECT
public GT_Worldgen_GT_Ore_SmallPieces(String aName, boolean aDefault, int aMinY, int aMaxY, int aAmount,
boolean aOverworld, boolean aNether, boolean aEnd, Materials aPrimary) {
@@ -45,6 +51,20 @@ public class GT_Worldgen_GT_Ore_SmallPieces extends GT_Worldgen {
.get(aTextWorldgen + this.mWorldGenName, "Ore", aPrimary.mMetaItemSubID));
this.mBiome = GregTech_API.sWorldgenFile.get(aTextWorldgen + this.mWorldGenName, "BiomeName", "None");
sList.add(this);
+
+ List<Class> allowedProviders = new ArrayList<>();
+ if (this.mNether) {
+ allowedProviders.add(WorldProviderHell.class);
+ }
+
+ if (this.mOverworld) {
+ allowedProviders.add(WorldProviderSurface.class);
+ }
+
+ if (this.mEnd) {
+ allowedProviders.add(WorldProviderEnd.class);
+ }
+ mAllowedProviders = allowedProviders.toArray(new Class[allowedProviders.size()]);
}
public GT_Worldgen_GT_Ore_SmallPieces(String aName, boolean aDefault, int aMinY, int aMaxY, int aAmount,
@@ -64,6 +84,20 @@ public class GT_Worldgen_GT_Ore_SmallPieces extends GT_Worldgen {
.get(aTextWorldgen + this.mWorldGenName, "Ore", aPrimary.mMetaItemSubID));
this.mBiome = GregTech_API.sWorldgenFile.get(aTextWorldgen + this.mWorldGenName, "BiomeName", "None");
sList.add(this);
+
+ List<Class> allowedProviders = new ArrayList<>();
+ if (this.mNether) {
+ allowedProviders.add(WorldProviderHell.class);
+ }
+
+ if (this.mOverworld) {
+ allowedProviders.add(WorldProviderSurface.class);
+ }
+
+ if (this.mEnd) {
+ allowedProviders.add(WorldProviderEnd.class);
+ }
+ mAllowedProviders = allowedProviders.toArray(new Class[allowedProviders.size()]);
}
@Override
@@ -72,11 +106,7 @@ public class GT_Worldgen_GT_Ore_SmallPieces extends GT_Worldgen {
if (!this.mBiome.equals("None") && !(this.mBiome.equals(aBiome))) {
return false; // Not the correct biome for ore mix
}
- if (!isGenerationAllowed(
- aWorld,
- aDimensionType,
- ((aDimensionType == -1) && (this.mNether)) || ((aDimensionType == 0) && (this.mOverworld))
- || ((aDimensionType == 1) && (this.mEnd)) ? aDimensionType : ~aDimensionType)) {
+ if (!isGenerationAllowed(aWorld, mAllowedProviders)) {
return false;
}
int count = 0;
diff --git a/src/main/java/gregtech/common/GT_Worldgen_Stone.java b/src/main/java/gregtech/common/GT_Worldgen_Stone.java
index 835f9d5c67..a9001d3f26 100644
--- a/src/main/java/gregtech/common/GT_Worldgen_Stone.java
+++ b/src/main/java/gregtech/common/GT_Worldgen_Stone.java
@@ -82,7 +82,7 @@ public class GT_Worldgen_Stone extends GT_Worldgen_Ore {
XSTR stoneRNG = new XSTR();
ArrayList<ValidSeeds> stones = new ArrayList<>();
- if (!isGenerationAllowed(aWorld, aDimensionType, this.mDimensionType)) {
+ if (!isGenerationAllowed(aWorld, mDimensionType)) {
return false;
}
if (!(this.mBiomeList.isEmpty() || this.mBiomeList.contains(aBiome))) {