package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon;
import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider;
import micdoodle8.mods.galacticraft.core.world.gen.dungeon.MapGenDungeon;
import net.minecraft.world.World;
import net.minecraft.world.gen.structure.MapGenStructure;
import net.minecraft.world.gen.structure.MapGenStructureIO;
import net.minecraft.world.gen.structure.StructureComponent;
import net.minecraft.world.gen.structure.StructureStart;
import java.util.List;
import java.util.Random;
public class MapGenDungeonVenus extends MapGenStructure
{
private static boolean initialized;
private DungeonConfigurationVenus configuration;
static
{
try
{
MapGenDungeonVenus.initiateStructures();
}
catch (Throwable e)
{
}
}
public MapGenDungeonVenus(DungeonConfigurationVenus configuration)
{
this.configuration = configuration;
}
public static void initiateStructures() throws Throwable
{
if (!MapGenDungeonVenus.initialized)
{
MapGenStructureIO.registerStructure(MapGenDungeonVenus.Start.class, "VenusDungeon");
MapGenStructureIO.registerStructureComponent(DungeonStartVenus.class, "VenusDungeonStart");
MapGenStructureIO.registerStructureComponent(CorridorVenus.class, "VenusDungeonCorridor");
MapGenStructureIO.registerStructureComponent(RoomEmptyVenus.class, "VenusDungeonEmptyRoom");
MapGenStructureIO.registerStructureComponent(RoomBossVenus.class, "VenusDungeonBossRoom");
MapGenStructureIO.registerStructureComponent(RoomTreasureVenus.class, "VenusDungeonTreasureRoom");
MapGenStructureIO.registerStructureComponent(RoomSpawnerVenus.class, "VenusDungeonSpawnerRoom");
MapGenStructureIO.registerStructureComponent(RoomChestVenus.class, "VenusDungeonChestRoom");
}
MapGenDungeonVenus.initialized = true;
}
@Override
public String getStructureName()
{
return "GC_Dungeon_Venus";
}
@Override
protected boolean canSpawnStructureAtCoords(int chunkX, int chunkZ)
{
long dungeonPos = MapGenDungeon.getDungeonPosForCoords(this.worldObj, chunkX, chunkZ, ((IGalacticraftWorldProvider) this.worldObj.provider).getDungeonSpacing());
int i = (int) (dungeonPos >> 32);
int j = (int) dungeonPos;
return i == chunkX && j == chunkZ;
}
@Override
protected StructureStart getStructureStart(int chunkX, int chunkZ)
{
return new MapGenDungeonVenus.Start(this.worldObj, this.rand, chunkX, chunkZ, this.configuration);
}
public static class Start extends StructureStart
{
private DungeonConfigurationVenus configuration;
public Start()
{
}
public Start(World worldIn, Random rand, int chunkX, int chunkZ, DungeonConfigurationVenus configuration)
{
super(chunkX, chunkZ);
this.configuration = configuration;
DungeonStartVenus startPiece = new DungeonStartVenus(worldIn, configuration, rand, (chunkX << 4) + 2, (chunkZ << 4) + 2);
startPiece.buildComponent(startPiece, this.components, rand);
List<StructureComponent> list = startPiece.attachedComponents;
while (!list.isEmpty())
{
int i = rand.nextInt(list.size());
StructureComponent structurecomponent = list.remove(i);
structurecomponent.buildComponent(startPiece, this.components, rand);
}
this.updateBoundingBox();
}
}
}