aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/bloodasp
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bloodasp')
-rw-r--r--src/main/java/bloodasp/galacticgreg/GT_TileEntity_Ores_Space.java144
-rw-r--r--src/main/java/bloodasp/galacticgreg/GT_Worldgen_GT_Ore_Layer_Space.java390
-rw-r--r--src/main/java/bloodasp/galacticgreg/GT_Worldgen_GT_Ore_SmallPieces_Space.java123
-rw-r--r--src/main/java/bloodasp/galacticgreg/GT_Worldgenerator_Space.java578
-rw-r--r--src/main/java/bloodasp/galacticgreg/GalacticGreg.java143
-rw-r--r--src/main/java/bloodasp/galacticgreg/ModRegisterer.java283
-rw-r--r--src/main/java/bloodasp/galacticgreg/WorldGenGaGT.java89
-rw-r--r--src/main/java/bloodasp/galacticgreg/api/AsteroidBlockComb.java77
-rw-r--r--src/main/java/bloodasp/galacticgreg/api/BlockMetaComb.java50
-rw-r--r--src/main/java/bloodasp/galacticgreg/api/Enums.java57
-rw-r--r--src/main/java/bloodasp/galacticgreg/api/GTOreTypes.java66
-rw-r--r--src/main/java/bloodasp/galacticgreg/api/ISpaceObjectGenerator.java58
-rw-r--r--src/main/java/bloodasp/galacticgreg/api/ModContainer.java85
-rw-r--r--src/main/java/bloodasp/galacticgreg/api/ModDBMDef.java165
-rw-r--r--src/main/java/bloodasp/galacticgreg/api/ModDimensionDef.java470
-rw-r--r--src/main/java/bloodasp/galacticgreg/api/SpecialBlockComb.java71
-rw-r--r--src/main/java/bloodasp/galacticgreg/api/StructureInformation.java59
-rw-r--r--src/main/java/bloodasp/galacticgreg/auxiliary/ConfigManager.java79
-rw-r--r--src/main/java/bloodasp/galacticgreg/auxiliary/GTOreGroup.java19
-rw-r--r--src/main/java/bloodasp/galacticgreg/auxiliary/GalacticGregConfig.java141
-rw-r--r--src/main/java/bloodasp/galacticgreg/auxiliary/LogHelper.java267
-rw-r--r--src/main/java/bloodasp/galacticgreg/auxiliary/PlayerChatHelper.java106
-rw-r--r--src/main/java/bloodasp/galacticgreg/auxiliary/ProfilingStorage.java74
-rw-r--r--src/main/java/bloodasp/galacticgreg/bartworks/BW_Worldgen_Ore_Layer_Space.java271
-rw-r--r--src/main/java/bloodasp/galacticgreg/bartworks/BW_Worldgen_Ore_SmallOre_Space.java165
-rw-r--r--src/main/java/bloodasp/galacticgreg/command/AEStorageCommand.java180
-rw-r--r--src/main/java/bloodasp/galacticgreg/command/ProfilingCommand.java99
-rw-r--r--src/main/java/bloodasp/galacticgreg/dynconfig/DynamicDimensionConfig.java168
-rw-r--r--src/main/java/bloodasp/galacticgreg/dynconfig/DynamicOreMixWorldConfig.java93
-rw-r--r--src/main/java/bloodasp/galacticgreg/generators/GenEllipsoid.java126
-rw-r--r--src/main/java/bloodasp/galacticgreg/registry/GalacticGregRegistry.java181
-rw-r--r--src/main/java/bloodasp/galacticgreg/schematics/SpaceSchematic.java100
-rw-r--r--src/main/java/bloodasp/galacticgreg/schematics/SpaceSchematicFactory.java33
-rw-r--r--src/main/java/bloodasp/galacticgreg/schematics/SpaceSchematicHandler.java182
-rw-r--r--src/main/java/bloodasp/galacticgreg/schematics/SpaceSchematicWrapper.java104
35 files changed, 5296 insertions, 0 deletions
diff --git a/src/main/java/bloodasp/galacticgreg/GT_TileEntity_Ores_Space.java b/src/main/java/bloodasp/galacticgreg/GT_TileEntity_Ores_Space.java
new file mode 100644
index 0000000000..dfa1307bce
--- /dev/null
+++ b/src/main/java/bloodasp/galacticgreg/GT_TileEntity_Ores_Space.java
@@ -0,0 +1,144 @@
+package bloodasp.galacticgreg;
+
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+import bloodasp.galacticgreg.api.Enums.ReplaceState;
+import bloodasp.galacticgreg.api.ModDimensionDef;
+import gregtech.api.GregTech_API;
+import gregtech.api.util.GT_Log;
+import gregtech.common.blocks.GT_Block_Ores_Abstract;
+import gregtech.common.blocks.GT_TileEntity_Ores;
+
+public class GT_TileEntity_Ores_Space {
+
+ // Renamed function to prevent function shadowing with base GT-code
+ public static boolean setOuterSpaceOreBlock(ModDimensionDef pDimensionDef, World pWorld, int pX, int pY, int pZ,
+ int pMetaData) {
+ return setOuterSpaceOreBlock(pDimensionDef, pWorld, pX, pY, pZ, pMetaData, false, -1);
+ }
+
+ public static boolean setOuterSpaceOreBlock(ModDimensionDef pDimensionDef, World pWorld, int pX, int pY, int pZ,
+ int pMetaData, boolean pAir) {
+ return setOuterSpaceOreBlock(pDimensionDef, pWorld, pX, pY, pZ, pMetaData, pAir, -1);
+ }
+
+ /**
+ * Check if the block at given position may be replaced by an ore
+ *
+ * @param pWorld the world in question
+ * @param pX X-Cord
+ * @param pY Y-Cord
+ * @param pZ Z-Cord
+ * @return
+ */
+ private static ReplaceState CheckForReplaceableBlock(World pWorld, int pX, int pY, int pZ,
+ ModDimensionDef pDimDef) {
+ try {
+ ReplaceState tFlag = ReplaceState.Unknown;
+
+ Block targetBlock = pWorld.getBlock(pX, pY, pZ);
+ int targetBlockMeta = pWorld.getBlockMetadata(pX, pY, pZ);
+
+ if (targetBlock == Blocks.air) tFlag = ReplaceState.Airblock;
+ else tFlag = pDimDef.getReplaceStateForBlock(targetBlock, targetBlockMeta);
+
+ return tFlag;
+ } catch (Exception e) {
+ e.printStackTrace(GT_Log.err);
+ GalacticGreg.Logger.error("Error while processing CheckForReplaceableBlock(), defaulting to UNKNOWN");
+ return ReplaceState.Unknown;
+ }
+ }
+
+ /**
+ * Actually set the OreBlock
+ *
+ * @param pWorld the world in question
+ * @param pX
+ * @param pY
+ * @param pZ
+ * @param pMetaData GT-Ore metadata
+ * @param pAir
+ * @return
+ */
+ public static boolean setOuterSpaceOreBlock(ModDimensionDef pDimensionDef, World pWorld, int pX, int pY, int pZ,
+ int pMetaData, boolean pAir, int pCustomGTOreOffset) {
+ if (!pAir) pY = Math.min(pWorld.getActualHeight(), Math.max(pY, 1));
+
+ if (pDimensionDef == null) {
+ GalacticGreg.Logger
+ .warn("Unknown DimensionID: %d. Will not set anything here", pWorld.provider.dimensionId);
+ return false;
+ }
+ try {
+ Block tBlock = pWorld.getBlock(pX, pY, pZ);
+ // If the meta is non-zero, and the target block is either non-air or the air-override is active
+ if ((pMetaData > 0) && ((tBlock != Blocks.air) || pAir)) {
+ // make sure we're either going with normal ore-metas, or small ores.
+ // Probably should do another check for <= 1700
+ if (pMetaData < 1000 || pMetaData >= 16000) {
+ ReplaceState tRS = CheckForReplaceableBlock(pWorld, pX, pY, pZ, pDimensionDef);
+
+ // Unable to lookup replacement state. Means: The block is unknown, and shall not be replaced
+ if (tRS == ReplaceState.Unknown) {
+ GalacticGreg.Logger.trace("Not placing ore Meta %d, as target block is unknown", pMetaData);
+ return false;
+ } else if (tRS == ReplaceState.Airblock && !pAir) {
+ GalacticGreg.Logger.trace("Not placing ore Meta %d in midair, as AIR is FALSE", pMetaData);
+ return false;
+ }
+ if (tRS == ReplaceState.CannotReplace) {
+ // wrong metaData ID for target block
+ GalacticGreg.Logger.trace("Not placing ore Meta %d, as the state is CANNOTREPLACE", pMetaData);
+ return false;
+ }
+
+ if (pCustomGTOreOffset == -1) pMetaData += pDimensionDef.getStoneType()
+ .getOffset();
+ else pMetaData += pCustomGTOreOffset;
+ // This fix seems like cargo cult coding...The Abstract class just returns 0 for the harvest level.
+ // But it aligns with the GT5U method, so yay?
+ pWorld.setBlock(
+ pX,
+ pY,
+ pZ,
+ GregTech_API.sBlockOres1,
+ GT_TileEntity_Ores.getHarvestData(
+ (short) pMetaData,
+ ((GT_Block_Ores_Abstract) GregTech_API.sBlockOres1)
+ .getBaseBlockHarvestLevel(pMetaData % 16000 / 1000)),
+ 0);
+ TileEntity tTileEntity = pWorld.getTileEntity(pX, pY, pZ);
+ if ((tTileEntity instanceof GT_TileEntity_Ores)) {
+ ((GT_TileEntity_Ores) tTileEntity).mMetaData = ((short) pMetaData);
+ ((GT_TileEntity_Ores) tTileEntity).mNatural = true;
+ } else {
+ // This is somehow triggered randomly, and most times the target block is air, which should
+ // never happen as we check for air...
+ // That's why I put this behind a debug config option. If you ever find the reason for it,
+ // please tell me what caused this
+ if (GalacticGreg.GalacticConfig.ReportOreGenFailures) GalacticGreg.Logger.warn(
+ "Something went wrong while placing GT OreTileEntity. Meta: %d X [%d] Y [%d] Z [%d]",
+ pMetaData,
+ pX,
+ pY,
+ pZ);
+ }
+
+ return true;
+ } else GalacticGreg.Logger.warn(
+ "Not replacing block at pos %d %d %d due unexpected metaData for OreBlock: %d",
+ pX,
+ pY,
+ pZ,
+ pMetaData);
+ }
+ } catch (Exception e) {
+ if (GalacticGreg.GalacticConfig.ReportOreGenFailures) e.printStackTrace();
+ }
+ return false;
+ }
+}
diff --git a/src/main/java/bloodasp/galacticgreg/GT_Worldgen_GT_Ore_Layer_Space.java b/src/main/java/bloodasp/galacticgreg/GT_Worldgen_GT_Ore_Layer_Space.java
new file mode 100644
index 0000000000..44fa0bf5a4
--- /dev/null
+++ b/src/main/java/bloodasp/galacticgreg/GT_Worldgen_GT_Ore_Layer_Space.java
@@ -0,0 +1,390 @@
+package bloodasp.galacticgreg;
+
+import static gregtech.api.enums.GT_Values.oreveinPlacerOres;
+import static gregtech.api.enums.GT_Values.oreveinPlacerOresMultiplier;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+import net.minecraft.util.MathHelper;
+import net.minecraft.world.World;
+import net.minecraft.world.chunk.IChunkProvider;
+
+import bloodasp.galacticgreg.api.ModDimensionDef;
+import bloodasp.galacticgreg.auxiliary.GTOreGroup;
+import bloodasp.galacticgreg.bartworks.BW_Worldgen_Ore_Layer_Space;
+import bloodasp.galacticgreg.dynconfig.DynamicOreMixWorldConfig;
+import bloodasp.galacticgreg.registry.GalacticGregRegistry;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.util.GT_Log;
+import gregtech.api.world.GT_Worldgen;
+
+public class GT_Worldgen_GT_Ore_Layer_Space extends GT_Worldgen {
+
+ public static int sWeight = 0;
+ public final short mMinY;
+ public final short mMaxY;
+ public final short mWeight;
+ public final short mDensity;
+ public final short mSize;
+ public final short mPrimaryMeta;
+ public final short mSecondaryMeta;
+ public final short mBetweenMeta;
+ public final short mSporadicMeta;
+
+ private long mProfilingStart;
+ private long mProfilingEnd;
+
+ private DynamicOreMixWorldConfig _mDynWorldConfig;
+
+ public GT_Worldgen_GT_Ore_Layer_Space(String pName, boolean pDefault, int pMinY, int pMaxY, int pWeight,
+ int pDensity, int pSize, Materials pPrimary, Materials pSecondary, Materials pBetween, Materials pSporadic) {
+ super(pName, GalacticGreg.oreVeinWorldgenList, pDefault);
+ mMinY = ((short) GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "MinHeight", pMinY));
+ mMaxY = ((short) Math
+ .max(this.mMinY + 5, GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "MaxHeight", pMaxY)));
+ mWeight = ((short) GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "RandomWeight", pWeight));
+ mDensity = ((short) GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "Density", pDensity));
+ mSize = ((short) Math.max(1, GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "Size", pSize)));
+ mPrimaryMeta = ((short) GregTech_API.sWorldgenFile
+ .get("worldgen." + this.mWorldGenName, "OrePrimaryLayer", pPrimary.mMetaItemSubID));
+ mSecondaryMeta = ((short) GregTech_API.sWorldgenFile
+ .get("worldgen." + this.mWorldGenName, "OreSecondaryLayer", pSecondary.mMetaItemSubID));
+ mBetweenMeta = ((short) GregTech_API.sWorldgenFile
+ .get("worldgen." + this.mWorldGenName, "OreSporadiclyInbetween", pBetween.mMetaItemSubID));
+ mSporadicMeta = ((short) GregTech_API.sWorldgenFile
+ .get("worldgen." + this.mWorldGenName, "OreSporaticlyAround", pSporadic.mMetaItemSubID));
+
+ _mDynWorldConfig = new DynamicOreMixWorldConfig(mWorldGenName);
+ _mDynWorldConfig.InitDynamicConfig();
+
+ GalacticGreg.Logger.trace("Initialized new OreLayer: %s", pName);
+
+ if (mEnabled) GT_Worldgen_GT_Ore_Layer_Space.sWeight += this.mWeight;
+
+ }
+
+ public GT_Worldgen_GT_Ore_Layer_Space(String pName, boolean pDefault, int pMinY, int pMaxY, int pWeight,
+ int pDensity, int pSize, short pPrimary, short pSecondary, short pBetween, short pSporadic) {
+ super(pName, GalacticGreg.oreVeinWorldgenList, pDefault);
+ mMinY = ((short) GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "MinHeight", pMinY));
+ mMaxY = ((short) Math
+ .max(this.mMinY + 5, GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "MaxHeight", pMaxY)));
+ mWeight = ((short) GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "RandomWeight", pWeight));
+ mDensity = ((short) GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "Density", pDensity));
+ mSize = ((short) Math.max(1, GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "Size", pSize)));
+ mPrimaryMeta = ((short) GregTech_API.sWorldgenFile
+ .get("worldgen." + this.mWorldGenName, "OrePrimaryLayer", pPrimary));
+ mSecondaryMeta = ((short) GregTech_API.sWorldgenFile
+ .get("worldgen." + this.mWorldGenName, "OreSecondaryLayer", pSecondary));
+ mBetweenMeta = ((short) GregTech_API.sWorldgenFile
+ .get("worldgen." + this.mWorldGenName, "OreSporadiclyInbetween", pBetween));
+ mSporadicMeta = ((short) GregTech_API.sWorldgenFile
+ .get("worldgen." + this.mWorldGenName, "OreSporaticlyAround", pSporadic));
+
+ _mDynWorldConfig = new DynamicOreMixWorldConfig(mWorldGenName);
+ _mDynWorldConfig.InitDynamicConfig();
+
+ GalacticGreg.Logger.trace("Initialized new OreLayer: %s", pName);
+
+ if (mEnabled) sWeight += this.mWeight;
+
+ }
+
+ /**
+ * Check if *this* orelayer is enabled for pDimensionDef
+ *
+ * @param pDimensionDef the ChunkProvider in question
+ * @return
+ */
+ public boolean isEnabledForDim(ModDimensionDef pDimensionDef) {
+ return _mDynWorldConfig.isEnabledInDim(pDimensionDef);
+ }
+
+ private static Map<String, Integer> _mBufferedVeinCountList = new HashMap<>();
+
+ /**
+ * Get the number of enabled OreMixes for given Dimension. This query is buffered and will only consume calculation
+ * time on the first run for each dimension
+ *
+ * @param pDimensionDef
+ * @return
+ */
+ private static int getNumOremixedForDim(ModDimensionDef pDimensionDef) {
+ int tVal = 0;
+ if (_mBufferedVeinCountList.containsKey(pDimensionDef.getDimIdentifier()))
+ tVal = _mBufferedVeinCountList.get(pDimensionDef.getDimIdentifier());
+ else {
+ for (GT_Worldgen tWorldGen : GalacticGreg.oreVeinWorldgenList)
+ if (tWorldGen instanceof GT_Worldgen_GT_Ore_Layer_Space
+ && ((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).isEnabledForDim(pDimensionDef)) tVal++;
+
+ _mBufferedVeinCountList.put(pDimensionDef.getDimIdentifier(), tVal);
+ }
+
+ return tVal;
+ }
+
+ private static Map<String, List<String>> _mBufferedVeinList = new HashMap<>();
+
+ /**
+ * Get a List of all Veins which are enabled for given Dim. Query is buffered
+ *
+ * @param pDimensionDef
+ * @return null if nothing is found or error
+ */
+ private static List<String> getOreMixIDsForDim(ModDimensionDef pDimensionDef) {
+ List<String> tReturn;
+
+ if (_mBufferedVeinList.containsKey(pDimensionDef.getDimIdentifier()))
+ tReturn = _mBufferedVeinList.get(pDimensionDef.getDimIdentifier());
+ else {
+ tReturn = new ArrayList<>();
+ for (GT_Worldgen tWorldGen : GalacticGreg.oreVeinWorldgenList)
+ if (tWorldGen instanceof GT_Worldgen_GT_Ore_Layer_Space
+ && ((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).isEnabledForDim(pDimensionDef))
+ tReturn.add(tWorldGen.mWorldGenName);
+ else if (tWorldGen instanceof BW_Worldgen_Ore_Layer_Space
+ && ((BW_Worldgen_Ore_Layer_Space) tWorldGen).isEnabledForDim(pDimensionDef))
+ tReturn.add(tWorldGen.mWorldGenName);
+
+ _mBufferedVeinList.put(pDimensionDef.getDimIdentifier(), tReturn);
+ }
+
+ return tReturn;
+ }
+
+ private static short getMaxWeightForDim(ModDimensionDef pDimensionDef) {
+ short tVal = 0;
+ for (GT_Worldgen tWorldGen : GalacticGreg.oreVeinWorldgenList)
+ if (tWorldGen instanceof GT_Worldgen_GT_Ore_Layer_Space
+ && ((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).isEnabledForDim(pDimensionDef)
+ && tVal < ((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).mWeight)
+ tVal = ((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).mWeight;
+
+ return tVal;
+ }
+
+ /**
+ * Select a random ore-vein from the list
+ *
+ * @param pDimensionDef
+ * @param pRandom
+ * @return
+ */
+ public static GTOreGroup getRandomOreGroup(ModDimensionDef pDimensionDef, Random pRandom, boolean pIgnoreWeight) {
+ short primaryMeta = 0;
+ short secondaryMeta = 0;
+ short betweenMeta = 0;
+ short sporadicMeta = 0;
+
+ // int tRangeSplit = getMaxWeightForDim(pDimensionDef) / 2;
+
+ if (pIgnoreWeight) {
+ List<String> tEnabledVeins = getOreMixIDsForDim(pDimensionDef);
+ int tRnd = pRandom.nextInt(tEnabledVeins.size());
+ String tVeinName = tEnabledVeins.get(tRnd);
+
+ // No lambda in Java 1.6 and 1.7 :(
+ // GT_Worldgen_GT_Ore_Layer_Space tGen = GalacticGreg.oreVeinWorldgenList.stream().filter(p ->
+ // p.mWorldGenName == tVeinName).findFirst();
+
+ GT_Worldgen tGen = null;
+ for (GT_Worldgen tWorldGen : GalacticGreg.oreVeinWorldgenList)
+ if (tWorldGen instanceof GT_Worldgen_GT_Ore_Layer_Space
+ && ((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).mWorldGenName.equals(tVeinName)) tGen = tWorldGen;
+
+ if (tGen != null) {
+ // GT_Worldgen_GT_Ore_Layer_Space tGen = GalacticGreg.oreVeinWorldgenList.get(tRndMix);
+ GalacticGreg.Logger.trace("Using Oremix %s for asteroid", tGen.mWorldGenName);
+ primaryMeta = ((GT_Worldgen_GT_Ore_Layer_Space) tGen).mPrimaryMeta;
+ secondaryMeta = ((GT_Worldgen_GT_Ore_Layer_Space) tGen).mSecondaryMeta;
+ betweenMeta = ((GT_Worldgen_GT_Ore_Layer_Space) tGen).mBetweenMeta;
+ sporadicMeta = ((GT_Worldgen_GT_Ore_Layer_Space) tGen).mSporadicMeta;
+ }
+ } else {
+ if ((GT_Worldgen_GT_Ore_Layer_Space.sWeight > 0) && (GalacticGreg.oreVeinWorldgenList.size() > 0)) {
+ GalacticGreg.Logger.trace("About to select oremix");
+ boolean temp = true;
+ int tRandomWeight;
+ for (int i = 0; (i < 256) && (temp); i++) {
+ tRandomWeight = pRandom.nextInt(GT_Worldgen_GT_Ore_Layer_Space.sWeight);
+ for (GT_Worldgen tWorldGen : GalacticGreg.oreVeinWorldgenList) {
+ if (!(tWorldGen instanceof GT_Worldgen_GT_Ore_Layer_Space)) continue;
+
+ tRandomWeight -= ((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).mWeight;
+ if (tRandomWeight <= 0) {
+ try {
+ if (((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).isEnabledForDim(pDimensionDef)) {
+ GalacticGreg.Logger.trace("Using Oremix %s for asteroid", tWorldGen.mWorldGenName);
+ primaryMeta = ((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).mPrimaryMeta;
+ secondaryMeta = ((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).mSecondaryMeta;
+ betweenMeta = ((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).mBetweenMeta;
+ sporadicMeta = ((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).mSporadicMeta;
+
+ temp = false;
+ break;
+ }
+ } catch (Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ }
+ }
+ }
+ }
+ if (primaryMeta != 0 || secondaryMeta != 0 || betweenMeta != 0 || sporadicMeta != 0)
+ return new GTOreGroup(primaryMeta, secondaryMeta, betweenMeta, sporadicMeta);
+ else return null;
+ }
+
+ @Override
+ public boolean executeWorldgen(World pWorld, Random pRandom, String pBiome, int pDimensionType, int pChunkX,
+ int pChunkZ, IChunkProvider pChunkGenerator, IChunkProvider pChunkProvider) {
+ GalacticGreg.Logger.trace("Entering executeWorldgen for [%s]", mWorldGenName);
+ ModDimensionDef tMDD = GalacticGregRegistry.getDimensionTypeByChunkGenerator(pChunkGenerator);
+ if (tMDD == null) {
+ GalacticGreg.Logger
+ .trace("Can't find dimension definition for ChunkProvider %s, skipping", pChunkGenerator.toString());
+ return false;
+ }
+
+ if (!_mDynWorldConfig.isEnabledInDim(tMDD)) {
+ GalacticGreg.Logger
+ .trace("OreGen for %s is disallowed in dimension %s, skipping", mWorldGenName, tMDD.getDimensionName());
+ return false;
+ }
+
+ if (GalacticGreg.GalacticConfig.ProfileOreGen) mProfilingStart = System.currentTimeMillis();
+ // ---------------------------
+ int tMinY = this.mMinY + pRandom.nextInt(this.mMaxY - this.mMinY - 7);
+
+ int cX = pChunkX - pRandom.nextInt(this.mSize);
+ int eX = pChunkX + 16 + pRandom.nextInt(this.mSize);
+ int cZ = pChunkZ - pRandom.nextInt(this.mSize);
+ int eZ = pChunkZ + 16 + pRandom.nextInt(this.mSize);
+ for (int tX = cX; tX <= eX; tX++) {
+ for (int tZ = cZ; tZ <= eZ; tZ++) {
+ if (this.mSecondaryMeta > 0) {
+ for (int i = tMinY - 1; i < tMinY + 3; i++) {
+ int placeX = Math.max(
+ 1,
+ Math.max(MathHelper.abs_int(cX - tX), MathHelper.abs_int(eX - tX))
+ / getDensityFromPos(tX, tZ, pChunkX, pChunkZ));
+ int placeZ = Math.max(
+ 1,
+ Math.max(MathHelper.abs_int(cZ - tZ), MathHelper.abs_int(eZ - tZ))
+ / getDensityFromPos(tX, tZ, pChunkX, pChunkZ));
+ if ((pRandom.nextInt(placeZ) == 0) || (pRandom.nextInt(placeX) == 0)) {
+ GT_TileEntity_Ores_Space
+ .setOuterSpaceOreBlock(tMDD, pWorld, tX, i, tZ, this.mSecondaryMeta);
+ }
+ }
+ }
+ if (this.mBetweenMeta > 0) {
+ for (int i = tMinY + 2; i < tMinY + 6; i++) {
+ int placeX = Math.max(
+ 1,
+ Math.max(MathHelper.abs_int(cX - tX), MathHelper.abs_int(eX - tX))
+ / getDensityFromPos(tX, tZ, pChunkX, pChunkZ));
+ int placeZ = Math.max(
+ 1,
+ Math.max(MathHelper.abs_int(cZ - tZ), MathHelper.abs_int(eZ - tZ))
+ / getDensityFromPos(tX, tZ, pChunkX, pChunkZ));
+ if (((pRandom.nextInt(placeZ) == 0) || (pRandom.nextInt(placeX) == 0))
+ && (pRandom.nextInt(2) == 0)) {
+ GT_TileEntity_Ores_Space.setOuterSpaceOreBlock(tMDD, pWorld, tX, i, tZ, this.mBetweenMeta);
+ }
+ }
+
+ }
+ if (this.mPrimaryMeta > 0) {
+ for (int i = tMinY + 4; i < tMinY + 8; i++) {
+ int placeX = Math.max(
+ 1,
+ Math.max(MathHelper.abs_int(cX - tX), MathHelper.abs_int(eX - tX))
+ / getDensityFromPos(tX, tZ, pChunkX, pChunkZ));
+ int placeZ = Math.max(
+ 1,
+ Math.max(MathHelper.abs_int(cZ - tZ), MathHelper.abs_int(eZ - tZ))
+ / getDensityFromPos(tX, tZ, pChunkX, pChunkZ));
+ if ((pRandom.nextInt(placeZ) == 0) || (pRandom.nextInt(placeX) == 0)) {
+ GT_TileEntity_Ores_Space.setOuterSpaceOreBlock(tMDD, pWorld, tX, i, tZ, this.mPrimaryMeta);
+ }
+ }
+ }
+ if (this.mSporadicMeta > 0) {
+ for (int i = tMinY - 1; i < tMinY + 8; i++) {
+ int placeX = Math.max(
+ 1,
+ Math.max(MathHelper.abs_int(cX - tX), MathHelper.abs_int(eX - tX))
+ / getDensityFromPos(tX, tZ, pChunkX, pChunkZ));
+ int placeZ = Math.max(
+ 1,
+ Math.max(MathHelper.abs_int(cZ - tZ), MathHelper.abs_int(eZ - tZ))
+ / getDensityFromPos(tX, tZ, pChunkX, pChunkZ));
+ if (((pRandom.nextInt(placeX) == 0) || (pRandom.nextInt(placeZ) == 0))
+ && (pRandom.nextInt(7) == 0)) {
+ GT_TileEntity_Ores_Space.setOuterSpaceOreBlock(tMDD, pWorld, tX, i, tZ, this.mSporadicMeta);
+ }
+ }
+ }
+ }
+ }
+
+ if (oreveinPlacerOres) {
+ int nSmallOres = (cX - eX) * (cZ - eZ) * this.mDensity / 10 * oreveinPlacerOresMultiplier;
+ for (int nSmallOresCount = 0; nSmallOresCount < nSmallOres; nSmallOresCount++) {
+ int tX = pRandom.nextInt(16) + pChunkX + 2;
+ int tZ = pRandom.nextInt(16) + pChunkZ + 2;
+ int tY = pRandom.nextInt(160) + 10; // Y height can vary from 10 to 170 for small ores.
+ if (this.mPrimaryMeta > 0)
+ GT_TileEntity_Ores_Space.setOuterSpaceOreBlock(tMDD, pWorld, tX, tY, tZ, this.mPrimaryMeta + 16000);
+ tX = pRandom.nextInt(16) + pChunkX + 2;
+ tZ = pRandom.nextInt(16) + pChunkZ + 2;
+ tY = pRandom.nextInt(160) + 10; // Y height can vary from 10 to 170 for small ores.
+ if (this.mSecondaryMeta > 0) GT_TileEntity_Ores_Space
+ .setOuterSpaceOreBlock(tMDD, pWorld, tX, tY, tZ, this.mSecondaryMeta + 16000);
+ tX = pRandom.nextInt(16) + pChunkX + 2;
+ tZ = pRandom.nextInt(16) + pChunkZ + 2;
+ tY = pRandom.nextInt(160) + 10; // Y height can vary from 10 to 170 for small ores.
+ if (this.mBetweenMeta > 0)
+ GT_TileEntity_Ores_Space.setOuterSpaceOreBlock(tMDD, pWorld, tX, tY, tZ, this.mBetweenMeta + 16000);
+ tX = pRandom.nextInt(16) + pChunkX + 2;
+ tZ = pRandom.nextInt(16) + pChunkZ + 2;
+ tY = pRandom.nextInt(190) + 10; // Y height can vary from 10 to 200 for small ores.
+ if (this.mSporadicMeta > 0) GT_TileEntity_Ores_Space
+ .setOuterSpaceOreBlock(tMDD, pWorld, tX, tY, tZ, this.mSporadicMeta + 16000);
+ }
+ }
+
+ // ---------------------------
+ if (GalacticGreg.GalacticConfig.ProfileOreGen) {
+ try {
+ mProfilingEnd = System.currentTimeMillis();
+ long tTotalTime = mProfilingEnd - mProfilingStart;
+ GalacticGreg.Profiler.AddTimeToList(tMDD, tTotalTime);
+ GalacticGreg.Logger.debug(
+ "Done with OreLayer-Worldgen in DimensionType %s. Generation took %d ms",
+ tMDD.getDimensionName(),
+ tTotalTime);
+ } catch (Exception ignored) {} // Silently ignore errors
+ }
+
+ GalacticGreg.Logger.trace("Leaving executeWorldgen");
+ return true;
+ }
+
+ public int getDensityFromPos(int aX, int aZ, int aSeedX, int aSeedZ) {
+ if (aX < 0) aX -= 16;
+ if (aZ < 0) aZ -= 16;
+ return Math.max(
+ 1,
+ this.mDensity
+ / ((int) Math.sqrt(2 + Math.pow(aX / 16 - aSeedX / 16, 2) + Math.pow(aZ / 16 - aSeedZ / 16, 2))));
+ }
+}
diff --git a/src/main/java/bloodasp/galacticgreg/GT_Worldgen_GT_Ore_SmallPieces_Space.java b/src/main/java/bloodasp/galacticgreg/GT_Worldgen_GT_Ore_SmallPieces_Space.java
new file mode 100644
index 0000000000..11e264b4fb
--- /dev/null
+++ b/src/main/java/bloodasp/galacticgreg/GT_Worldgen_GT_Ore_SmallPieces_Space.java
@@ -0,0 +1,123 @@
+package bloodasp.galacticgreg;
+
+import java.util.Random;
+
+import net.minecraft.world.World;
+import net.minecraft.world.chunk.IChunkProvider;
+
+import bloodasp.galacticgreg.api.ModDimensionDef;
+import bloodasp.galacticgreg.dynconfig.DynamicOreMixWorldConfig;
+import bloodasp.galacticgreg.registry.GalacticGregRegistry;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.world.GT_Worldgen;
+
+public class GT_Worldgen_GT_Ore_SmallPieces_Space extends GT_Worldgen {
+
+ public final short mMinY;
+ public final short mMaxY;
+ public final short mAmount;
+ public final short mMeta;
+
+ private long mProfilingStart;
+ private long mProfilingEnd;
+ private DynamicOreMixWorldConfig _mDynWorldConfig;
+
+ public GT_Worldgen_GT_Ore_SmallPieces_Space(String pName, boolean pDefault, int pMinY, int pMaxY, int pAmount,
+ Materials pPrimary) {
+ super(pName, GalacticGreg.smallOreWorldgenList, pDefault);
+
+ mMinY = ((short) GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "MinHeight", pMinY));
+ mMaxY = ((short) Math
+ .max(this.mMinY + 1, GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "MaxHeight", pMaxY)));
+ mAmount = ((short) Math
+ .max(1, GregTech_API.sWorldgenFile.get("worldgen." + this.mWorldGenName, "Amount", pAmount)));
+ mMeta = ((short) GregTech_API.sWorldgenFile
<