aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/galacticgreg
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/galacticgreg')
-rw-r--r--src/main/java/galacticgreg/GalacticGreg.java113
-rw-r--r--src/main/java/galacticgreg/SpaceDimRegisterer.java140
-rw-r--r--src/main/java/galacticgreg/TileEntitySpaceOres.java144
-rw-r--r--src/main/java/galacticgreg/WorldGeneratorSpace.java564
-rw-r--r--src/main/java/galacticgreg/WorldgenGaGT.java28
-rw-r--r--src/main/java/galacticgreg/WorldgenOreLayerSpace.java320
-rw-r--r--src/main/java/galacticgreg/WorldgenOreSmallSpace.java116
-rw-r--r--src/main/java/galacticgreg/api/AsteroidBlockComb.java77
-rw-r--r--src/main/java/galacticgreg/api/BlockMetaComb.java50
-rw-r--r--src/main/java/galacticgreg/api/Enums.java51
-rw-r--r--src/main/java/galacticgreg/api/GTOreTypes.java66
-rw-r--r--src/main/java/galacticgreg/api/ISpaceObjectGenerator.java58
-rw-r--r--src/main/java/galacticgreg/api/ModContainer.java85
-rw-r--r--src/main/java/galacticgreg/api/ModDBMDef.java159
-rw-r--r--src/main/java/galacticgreg/api/ModDimensionDef.java461
-rw-r--r--src/main/java/galacticgreg/api/SpecialBlockComb.java69
-rw-r--r--src/main/java/galacticgreg/api/StructureInformation.java59
-rw-r--r--src/main/java/galacticgreg/api/enums/DimensionBlockMetaDefinitionList.java57
-rw-r--r--src/main/java/galacticgreg/api/enums/DimensionDef.java228
-rw-r--r--src/main/java/galacticgreg/api/enums/ModContainers.java19
-rw-r--r--src/main/java/galacticgreg/api/enums/properties/AsteroidPropertyBuilder.java105
-rw-r--r--src/main/java/galacticgreg/api/enums/properties/Asteroids.java78
-rw-r--r--src/main/java/galacticgreg/auxiliary/ConfigManager.java79
-rw-r--r--src/main/java/galacticgreg/auxiliary/GTOreGroup.java19
-rw-r--r--src/main/java/galacticgreg/auxiliary/GalacticGregConfig.java141
-rw-r--r--src/main/java/galacticgreg/auxiliary/LogHelper.java267
-rw-r--r--src/main/java/galacticgreg/auxiliary/PlayerChatHelper.java106
-rw-r--r--src/main/java/galacticgreg/auxiliary/ProfilingStorage.java74
-rw-r--r--src/main/java/galacticgreg/command/AEStorageCommand.java180
-rw-r--r--src/main/java/galacticgreg/command/ProfilingCommand.java99
-rw-r--r--src/main/java/galacticgreg/dynconfig/DynamicDimensionConfig.java160
-rw-r--r--src/main/java/galacticgreg/generators/GenEllipsoid.java126
-rw-r--r--src/main/java/galacticgreg/registry/GalacticGregRegistry.java183
-rw-r--r--src/main/java/galacticgreg/schematics/SpaceSchematic.java100
-rw-r--r--src/main/java/galacticgreg/schematics/SpaceSchematicFactory.java33
-rw-r--r--src/main/java/galacticgreg/schematics/SpaceSchematicHandler.java182
-rw-r--r--src/main/java/galacticgreg/schematics/SpaceSchematicWrapper.java104
37 files changed, 4900 insertions, 0 deletions
diff --git a/src/main/java/galacticgreg/GalacticGreg.java b/src/main/java/galacticgreg/GalacticGreg.java
new file mode 100644
index 0000000000..03cb4d1569
--- /dev/null
+++ b/src/main/java/galacticgreg/GalacticGreg.java
@@ -0,0 +1,113 @@
+package galacticgreg;
+
+import static gregtech.api.enums.Mods.AppliedEnergistics2;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+import cpw.mods.fml.common.Mod;
+import cpw.mods.fml.common.Mod.EventHandler;
+import cpw.mods.fml.common.event.FMLPostInitializationEvent;
+import cpw.mods.fml.common.event.FMLPreInitializationEvent;
+import cpw.mods.fml.common.event.FMLServerStartingEvent;
+import galacticgreg.auxiliary.GalacticGregConfig;
+import galacticgreg.auxiliary.LogHelper;
+import galacticgreg.auxiliary.ProfilingStorage;
+import galacticgreg.command.AEStorageCommand;
+import galacticgreg.command.ProfilingCommand;
+import galacticgreg.registry.GalacticGregRegistry;
+import galacticgreg.schematics.SpaceSchematicHandler;
+import gregtech.GT_Version;
+import gregtech.api.world.GTWorldgen;
+
+@Mod(
+ modid = GalacticGreg.MODID,
+ name = GalacticGreg.MODNAME,
+ version = GalacticGreg.VERSION,
+ dependencies = "after:GalacticraftCore; required-after:gregtech@5.09.32.30;",
+ acceptableRemoteVersions = "*")
+public class GalacticGreg {
+
+ public static final List<GTWorldgen> smallOreWorldgenList = new ArrayList<>();
+ public static final List<GTWorldgen> oreVeinWorldgenList = new ArrayList<>();
+
+ public static final String NICE_MODID = "GalacticGreg";
+ public static final String MODID = "galacticgreg";
+ public static final String MODNAME = "Galactic Greg";
+
+ public static final String VERSION = GT_Version.VERSION;
+
+ public static final LogHelper Logger = new LogHelper(NICE_MODID);
+ public static ProfilingStorage Profiler = new ProfilingStorage();
+ public static SpaceSchematicHandler SchematicHandler;
+
+ public static Random GalacticRandom = null;
+
+ public static GalacticGregConfig GalacticConfig = null;
+
+ /**
+ * Preload phase. Read config values and set various features.. n stuff...
+ *
+ * @param aEvent
+ */
+ @EventHandler
+ public void onPreLoad(FMLPreInitializationEvent aEvent) {
+ GalacticConfig = new GalacticGregConfig(aEvent.getModConfigurationDirectory(), NICE_MODID, NICE_MODID);
+ if (!GalacticConfig.LoadConfig()) GalacticGreg.Logger
+ .warn("Something went wrong while reading GalacticGregs config file. Things will be wonky..");
+
+ GalacticRandom = new Random(System.currentTimeMillis());
+
+ if (GalacticConfig.SchematicsEnabled)
+ SchematicHandler = new SpaceSchematicHandler(aEvent.getModConfigurationDirectory());
+
+ Logger.trace("Leaving PRELOAD");
+ }
+
+ public static final ArrayList<Runnable> ADDITIONALVEINREGISTER = new ArrayList<>();
+
+ /**
+ * Postload phase. Mods can add their custom definition to our api in their own PreLoad or Init-phase Once
+ * GalacticGregRegistry.InitRegistry() is called, no changes are accepted. (Well you can with reflection, but on a
+ * "normal" way it's not possible)
+ *
+ * @param aEvent
+ */
+ @EventHandler
+ public void onPostLoad(FMLPostInitializationEvent aEvent) {
+ Logger.trace("Entering POSTLOAD");
+
+ if (!GalacticGregRegistry.InitRegistry()) throw new RuntimeException(
+ "GalacticGreg registry has been finalized from a 3rd-party mod, this is forbidden!");
+
+ for (Runnable r : ADDITIONALVEINREGISTER) {
+ try {
+ r.run();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ GalacticConfig.serverPostInit();
+
+ Logger.trace("Leaving POSTLOAD");
+ }
+
+ /**
+ * If oregen profiling is enabled, then register the command
+ *
+ * @param pEvent
+ */
+ @EventHandler
+ public void serverLoad(FMLServerStartingEvent pEvent) {
+ Logger.trace("Entering SERVERLOAD");
+
+ if (GalacticConfig.ProfileOreGen) pEvent.registerServerCommand(new ProfilingCommand());
+
+ if (AppliedEnergistics2.isModLoaded() && GalacticConfig.EnableAEExportCommand
+ && GalacticConfig.SchematicsEnabled) pEvent.registerServerCommand(new AEStorageCommand());
+
+ Logger.trace("Leaving SERVERLOAD");
+ }
+}
diff --git a/src/main/java/galacticgreg/SpaceDimRegisterer.java b/src/main/java/galacticgreg/SpaceDimRegisterer.java
new file mode 100644
index 0000000000..611477f7df
--- /dev/null
+++ b/src/main/java/galacticgreg/SpaceDimRegisterer.java
@@ -0,0 +1,140 @@
+package galacticgreg;
+
+import net.minecraft.init.Blocks;
+
+import galacticgreg.api.AsteroidBlockComb;
+import galacticgreg.api.Enums;
+import galacticgreg.api.GTOreTypes;
+import galacticgreg.api.ModContainer;
+import galacticgreg.api.SpecialBlockComb;
+import galacticgreg.api.enums.DimensionDef;
+import galacticgreg.api.enums.ModContainers;
+import galacticgreg.registry.GalacticGregRegistry;
+
+/**
+ * In this class, you'll find everything you need in order to tell GGreg what to do and where. Everything is done in
+ * here. If you're trying to use anything else, you're probably doing something wrong (Or I forgot to add it. In that
+ * case, find me on github and create an issue please)
+ */
+public class SpaceDimRegisterer {
+
+ public static void register() {
+ GalacticGregRegistry.registerModContainer(setupVanilla());
+ GalacticGregRegistry.registerModContainer(setupGalactiCraftCore());
+ GalacticGregRegistry.registerModContainer(setupGalactiCraftPlanets());
+ GalacticGregRegistry.registerModContainer(setupGalaxySpace());
+ GalacticGregRegistry.registerModContainer(setupAmunRa());
+ }
+
+ /**
+ * Vanilla MC (End Asteroids)
+ */
+ private static ModContainer setupVanilla() {
+
+ // If you happen to have an asteroid dim, just skip the blocklist, and setDimensionType() to
+ // DimensionType.Asteroid
+ // also don't forget to add at least one asteroid type, or nothing will generate!
+ DimensionDef.EndAsteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.Netherrack));
+ DimensionDef.EndAsteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.RedGranite));
+ DimensionDef.EndAsteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.BlackGranite));
+ DimensionDef.EndAsteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.EndStone));
+
+ // These Blocks will randomly be generated
+ DimensionDef.EndAsteroids.modDimensionDef.addSpecialAsteroidBlock(new SpecialBlockComb(Blocks.glowstone));
+ DimensionDef.EndAsteroids.modDimensionDef
+ .addSpecialAsteroidBlock(new SpecialBlockComb(Blocks.lava, Enums.AllowedBlockPosition.AsteroidCore));
+
+ ModContainers.Vanilla.modContainer.addDimensionDef(DimensionDef.EndAsteroids.modDimensionDef);
+
+ return ModContainers.Vanilla.modContainer;
+ }
+
+ /**
+ * Mod GalactiCraft
+ */
+ private static ModContainer setupGalactiCraftCore() {
+ ModContainers.GalactiCraftCore.modContainer.addDimensionDef(DimensionDef.Moon.modDimensionDef);
+ return ModContainers.GalactiCraftCore.modContainer;
+ }
+
+ /**
+ * As GalactiCraftPlanets is an optional mod, don't hardlink it here
+ */
+ private static ModContainer setupGalactiCraftPlanets() {
+ // Overwrite ore blocks on mars with red granite ones. This will default to regular stone if not set
+ DimensionDef.Mars.modDimensionDef.setStoneType(GTOreTypes.RedGranite);
+ ModContainers.GalacticraftMars.modContainer.addDimensionDef(DimensionDef.Mars.modDimensionDef);
+
+ DimensionDef.Asteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.BlackGranite));
+ DimensionDef.Asteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.RedGranite));
+ DimensionDef.Asteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.Netherrack));
+ ModContainers.GalacticraftMars.modContainer.addDimensionDef(DimensionDef.Asteroids.modDimensionDef);
+
+ return ModContainers.GalacticraftMars.modContainer;
+ }
+
+ /**
+ * Mod GalaxySpace by BlesseNtumble
+ */
+ private static ModContainer setupGalaxySpace() {
+ // First, we create a mod-container that will be populated with dimensions later.
+ // The Name must match your ID, as it is checked if this mod is loaded, in order
+ // to enable/disable the parsing/registering of dimensions
+ // See enum ModContainers
+
+ // Now lets first define a block here for our dimension. You can add the ID, but you don't have to.
+ // It will automatically add the mods name that is defined in the modcontainer.
+ // See enum DimensionBlockMetaDefinitionList
+
+ // Now define the available dimensions, and their chunkprovider.
+ // Same as above, to not have any dependency in your code, you can just give it a string.
+ // But it's better to use the actual ChunkProvider class. The Name is used for the GalacticGreg config file.
+ // The resulting config setting will be: <ModID>_<Name you give here as arg0>_false = false
+ // make sure to never change this name once you've generated your config files, as it will overwrite everything!
+
+ // 30.11.2016 GSpace v1.1.3 Stable
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Pluto.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Triton.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Proteus.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Oberon.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Titan.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Callisto.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Ganymede.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Ceres.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Deimos.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Enceladus.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Io.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Europa.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Phobos.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Venus.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Mercury.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.MakeMake.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Haumea.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.CentauriAlpha.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.VegaB.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.BarnardC.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.BarnardE.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.BarnardF.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.TcetiE.modDimensionDef);
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Miranda.modDimensionDef);
+ DimensionDef.KuiperBelt.modDimensionDef.setDimensionType(Enums.DimensionType.Asteroid);
+ DimensionDef.KuiperBelt.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.RedGranite));
+ DimensionDef.KuiperBelt.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.BlackGranite));
+ ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.KuiperBelt.modDimensionDef);
+ return ModContainers.GalaxySpace.modContainer;
+ }
+
+ /**
+ * Mod Amun-Ra
+ */
+ private static ModContainer setupAmunRa() {
+ ModContainers.AmunRa.modContainer.addDimensionDef(DimensionDef.Neper.modDimensionDef);
+ ModContainers.AmunRa.modContainer.addDimensionDef(DimensionDef.Maahes.modDimensionDef);
+ ModContainers.AmunRa.modContainer.addDimensionDef(DimensionDef.Anubis.modDimensionDef);
+ ModContainers.AmunRa.modContainer.addDimensionDef(DimensionDef.Horus.modDimensionDef);
+ ModContainers.AmunRa.modContainer.addDimensionDef(DimensionDef.Seth.modDimensionDef);
+ DimensionDef.MehenBelt.modDimensionDef.addAsteroidMaterial(GTOreTypes.BlackGranite);
+ ModContainers.AmunRa.modContainer.addDimensionDef(DimensionDef.MehenBelt.modDimensionDef);
+ return ModContainers.AmunRa.modContainer;
+ }
+}
diff --git a/src/main/java/galacticgreg/TileEntitySpaceOres.java b/src/main/java/galacticgreg/TileEntitySpaceOres.java
new file mode 100644
index 0000000000..00ad3ba51f
--- /dev/null
+++ b/src/main/java/galacticgreg/TileEntitySpaceOres.java
@@ -0,0 +1,144 @@
+package galacticgreg;
+
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+import galacticgreg.api.Enums;
+import galacticgreg.api.ModDimensionDef;
+import gregtech.api.GregTechAPI;
+import gregtech.api.util.GTLog;
+import gregtech.common.blocks.BlockOresAbstract;
+import gregtech.common.blocks.TileEntityOres;
+
+public class TileEntitySpaceOres {
+
+ // 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 Enums.ReplaceState CheckForReplaceableBlock(World pWorld, int pX, int pY, int pZ,
+ ModDimensionDef pDimDef) {
+ try {
+ Enums.ReplaceState tFlag = Enums.ReplaceState.Unknown;
+
+ Block targetBlock = pWorld.getBlock(pX, pY, pZ);
+ int targetBlockMeta = pWorld.getBlockMetadata(pX, pY, pZ);
+
+ if (targetBlock == Blocks.air) tFlag = Enums.ReplaceState.Airblock;
+ else tFlag = pDimDef.getReplaceStateForBlock(targetBlock, targetBlockMeta);
+
+ return tFlag;
+ } catch (Exception e) {
+ e.printStackTrace(GTLog.err);
+ GalacticGreg.Logger.error("Error while processing CheckForReplaceableBlock(), defaulting to UNKNOWN");
+ return Enums.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) {
+ Enums.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 == Enums.ReplaceState.Unknown) {
+ GalacticGreg.Logger.trace("Not placing ore Meta %d, as target block is unknown", pMetaData);
+ return false;
+ } else if (tRS == Enums.ReplaceState.Airblock && !pAir) {
+ GalacticGreg.Logger.trace("Not placing ore Meta %d in midair, as AIR is FALSE", pMetaData);
+ return false;
+ }
+ if (tRS == Enums.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,
+ GregTechAPI.sBlockOres1,
+ TileEntityOres.getHarvestData(
+ (short) pMetaData,
+ ((BlockOresAbstract) GregTechAPI.sBlockOres1)
+ .getBaseBlockHarvestLevel(pMetaData % 16000 / 1000)),
+ 0);
+ TileEntity tTileEntity = pWorld.getTileEntity(pX, pY, pZ);
+ if ((tTileEntity instanceof TileEntityOres)) {
+ ((TileEntityOres) tTileEntity).mMetaData = ((short) pMetaData);
+ ((TileEntityOres) 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/galacticgreg/WorldGeneratorSpace.java b/src/main/java/galacticgreg/WorldGeneratorSpace.java
new file mode 100644
index 0000000000..336900326c
--- /dev/null
+++ b/src/main/java/galacticgreg/WorldGeneratorSpace.java
@@ -0,0 +1,564 @@
+package galacticgreg;
+
+import java.util.Random;
+
+import net.minecraft.block.Block;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.util.Vec3;
+import net.minecraft.util.WeightedRandomChestContent;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraft.world.chunk.Chunk;
+import net.minecraft.world.chunk.IChunkProvider;
+import net.minecraftforge.common.ChestGenHooks;
+
+import cpw.mods.fml.common.IWorldGenerator;
+import cpw.mods.fml.common.eventhandler.EventBus;
+import cpw.mods.fml.common.registry.GameRegistry;
+import galacticgreg.api.AsteroidBlockComb;
+import galacticgreg.api.BlockMetaComb;
+import galacticgreg.api.Enums;
+import galacticgreg.api.GTOreTypes;
+import galacticgreg.api.ISpaceObjectGenerator;
+import galacticgreg.api.ModDimensionDef;
+import galacticgreg.api.SpecialBlockComb;
+import galacticgreg.api.StructureInformation;
+import galacticgreg.auxiliary.GTOreGroup;
+import galacticgreg.dynconfig.DynamicDimensionConfig;
+import galacticgreg.registry.GalacticGregRegistry;
+import gregtech.api.util.GTLog;
+import gregtech.api.world.GTWorldgen;
+import gregtech.common.GTWorldgenerator;
+
+public class WorldGeneratorSpace implements IWorldGenerator {
+
+ public static boolean sAsteroids = true;
+ private final EventBus eventBus = new EventBus();
+ private World worldObj;
+
+ private int chunkX;
+ private int chunkZ;
+ private int mSize = 100;
+
+ private long mProfilingStart;
+ private long mProfilingEnd;
+
+ public WorldGeneratorSpace() {
+ GameRegistry.registerWorldGenerator(this, Integer.MAX_VALUE);
+ }
+
+ public void generate(Random pRandom, int pX, int pZ, World pWorld, IChunkProvider pChunkGenerator,
+ IChunkProvider pChunkProvider) {
+ pX *= 16;
+ pZ *= 16;
+
+ String tBiome = pWorld.getBiomeGenForCoords(pX + 8, pZ + 8).biomeName;
+ pRandom = new Random(pRandom.nextInt());
+ if (tBiome == null) {
+ tBiome = BiomeGenBase.plains.biomeName;
+ }
+ GalacticGreg.Logger
+ .trace("Triggered generate: [ChunkGenerator %s] [Biome %s]", pChunkGenerator.toString(), tBiome);
+
+ ModDimensionDef tDimDef = GalacticGregRegistry.getDimensionTypeByChunkGenerator(pChunkGenerator);
+
+ if (tDimDef == null) {
+ GalacticGreg.Logger.trace(
+ "Ignoring ChunkGenerator type %s as there is no definition for it in the registry",
+ pChunkGenerator.toString());
+ return;
+ } else {
+ GalacticGreg.Logger.trace("Selected DimDef: [%s]", tDimDef.getDimIdentifier());
+ }
+
+ /*
+ * In some later addons maybe, not for now. Ignoring Biome-based worldgen String tBiome =
+ * pWorld.getBiomeGenForCoords(pX + 8, pZ + 8).biomeName; pRandom = new Random(pRandom.nextInt()); if (tBiome ==
+ * null) { tBiome = BiomeGenBase.plains.biomeName; }
+ */
+
+ if (tDimDef.getDimensionType() != Enums.DimensionType.Planet) {
+ if (tDimDef.getRandomAsteroidMaterial() == null) GalacticGreg.Logger.error(
+ "Dimension [%s] is set to Asteroids, but no asteroid material is specified! Nothing will generate",
+ tDimDef.getDimensionName());
+ else Generate_Asteroids(tDimDef, pRandom, pWorld, pX, pZ);
+ } else if (tDimDef.getDimensionType() != Enums.DimensionType.Asteroid) {
+ Generate_OreVeins(tDimDef, pRandom, pWorld, pX, pZ, "", pChunkGenerator, pChunkProvider);
+ }
+
+ Chunk tChunk = pWorld.getChunkFromBlockCoords(pX, pZ);
+ if (tChunk != null) {
+ tChunk.isModified = true;
+ }
+ }
+
+ private void Generate_Asteroids(ModDimensionDef pDimensionDef, Random pRandom, World pWorld, int pX, int pZ) {
+ GalacticGreg.Logger.trace("Running asteroid-gen in Dim %s", pDimensionDef.getDimIdentifier());
+
+ DynamicDimensionConfig.AsteroidConfig tAConf = DynamicDimensionConfig.getAsteroidConfig(pDimensionDef);
+ if (tAConf == null) {
+ GalacticGreg.Logger.error(
+ "Dimension %s is set to asteroid, but no config object can be found. Skipping!",
+ pDimensionDef.getDimIdentifier());
+ return;
+ } else {
+ GalacticGreg.Logger.trace("Asteroid probability: %d", tAConf.Probability);
+ }
+
+ if ((tAConf.Probability <= 1) || (pRandom.nextInt(tAConf.Probability) == 0)) {
+ GalacticGreg.Logger.trace("Generating asteroid NOW");
+ // ---------------------------
+ if (GalacticGreg.GalacticConfig.ProfileOreGen) mProfilingStart = System.currentTimeMillis();
+ // -----------------------------
+
+ // Get Random position
+ int tX = pX + pRandom.nextInt(16);
+ int tY = 50 + pRandom.nextInt(200 - 50);
+ int tZ = pZ + pRandom.nextInt(16);
+
+ // Check if position is free
+ if ((pWorld.getBlock(tX, tY, tZ)
+ .isAir(pWorld, tX, tY, tZ))) {
+
+ int tCustomAsteroidOffset = -1;
+ int tGraniteMeta = 0;
+
+ // Select Random OreGroup and Asteroid Material
+ GTOreGroup tOreGroup = WorldgenOreLayerSpace.getRandomOreGroup(pDimensionDef, pRandom, true);
+ AsteroidBlockComb tABComb = pDimensionDef.getRandomAsteroidMaterial();
+ if (tABComb == null) return;
+
+ // Fill Vars for random Asteroid
+ Block tFinalAsteroidBlock = tABComb.getBlock();
+ int tFinalAsteroidBlockMeta = tABComb.getMeta();
+ int tFinalOreOffset = tABComb.getOreMaterial()
+ .getOffset();
+ int tFinalUpdateMode = tABComb.getOreMaterial()
+ .getUpdateMode();
+ GalacticGreg.Logger.debug(
+ "Asteroid will be build with: Block: [%s] OreType: [%s]",
+ Block.blockRegistry.getNameForObject(tABComb.getBlock()),
+ tABComb.getOreMaterial()
+ .toString());
+
+ // get random Ore-asteroid generator from the list of registered generators
+ ISpaceObjectGenerator aGen = pDimensionDef.getRandomSOGenerator(Enums.SpaceObjectType.OreAsteroid);
+ if (aGen == null) {
+ GalacticGreg.Logger.ot_error(
+ "GalacticGreg.Generate_Asteroids.NoSOGenFound",
+ "No SpaceObjectGenerator has been registered for type ORE_ASTEROID in Dimension %s. Nothing will generate",
+ pDimensionDef.getDimensionName());
+ return;
+ }
+
+ aGen.reset();
+ aGen.setCenterPoint(tX, tY, tZ);
+ aGen.randomize(tAConf.MinSize, tAConf.MaxSize); // Initialize random values and set size
+ aGen.calculate(); // Calculate structure
+
+ // Random loot-chest somewhere in the asteroid
+ Vec3 tChestPosition = Vec3.createVectorHelper(0, 0, 0);
+ boolean tDoLootChest = false;
+ int tNumLootItems = 0;
+ if (tAConf.LootChestChance > 0) {
+ GalacticGreg.Logger.trace("Random loot chest enabled, flipping the coin");
+ int tChance = pRandom.nextInt(100); // Loot chest is 1 in 100 (Was: 1:1000 which actually never
+ // happend)
+ if (tAConf.LootChestChance >= tChance) {
+ GalacticGreg.Logger.debug("We got a match. Preparing to generate the loot chest");
+ // Get amount of items for the loot chests, randomize it (1-num) if enabled
+ if (tAConf.RandomizeNumLootItems) tNumLootItems = pRandom.nextInt(tAConf.NumLootItems - 1) + 1;
+ else tNumLootItems = tAConf.NumLootItems;
+
+ GalacticGreg.Logger
+ .debug(String.format("Loot chest random item count will be: %d", tNumLootItems));
+
+ // t