package mattparks.mods.space.pluto.dimension;
import mattparks.mods.space.pluto.PlutoCore;
import mattparks.mods.space.pluto.util.ConfigManagerPluto;
import mattparks.mods.space.pluto.world.gen.ChunkProviderPluto;
import mattparks.mods.space.pluto.world.gen.WorldChunkManagerPluto;
import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody;
import micdoodle8.mods.galacticraft.api.prefab.world.gen.WorldProviderSpace;
import micdoodle8.mods.galacticraft.api.vector.Vector3;
import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider;
import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore;
import net.minecraft.util.MathHelper;
import net.minecraft.world.biome.WorldChunkManager;
import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.chunk.IChunkProvider;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class WorldProviderPluto extends WorldProviderSpace implements IGalacticraftWorldProvider {
@Override
public Vector3 getFogColor() {
return new Vector3(0, 0, 0);
}
@Override
public Vector3 getSkyColor() {
return new Vector3(0, 0, 0);
}
@Override
public boolean canRainOrSnow() {
return false;
}
@Override
public float calculateCelestialAngle(long par1, float par3) {
final int var4 = (int) (par1 % 58320L);
float var5 = (var4 + par3) / 58320.0F - 0.25F;
if (var5 < 0.0F) {
++var5;
}
if (var5 > 1.0F) {
--var5;
}
final float var6 = var5;
var5 = 1.0F - (float) ((Math.cos(var5 * Math.PI) + 1.0D) / 2.0D);
var5 = var6 + (var5 - var6) / 3.0F;
return var5;
}
public float calculateDeimosAngle(long par1, float par3) {
return this.calculatePhobosAngle(par1, par3) * 0.0000000001F;
}
public float calculatePhobosAngle(long par1, float par3) {
return this.calculateCelestialAngle(par1, par3) * 3000;
}
@Override
public boolean hasSunset() {
return false;
}
@Override
public long getDayLength() {
if (ConfigManagerPluto.idDayLength == false) {
return 24000L;
}
else {
return 156000L;
}
}
@Override
public boolean shouldForceRespawn() {
return !ConfigManagerCore.forceOverworldRespawn;
}
@Override
public Class<? extends IChunkProvider> getChunkProviderClass() {
return ChunkProviderPluto.class;
}
@Override
public Class<? extends WorldChunkManager> getWorldChunkManagerClass() {
return WorldChunkManagerPluto.class;
}
@Override
public void setDimension(int var1) {
this.dimensionId = var1;
super.setDimension(var1);
}
@Override
protected void generateLightBrightnessTable() {
final float var1 = 0.0F;
for (int var2 = 0; var2 <= 15; ++var2) {
final float var3 = 1.0F - var2 / 15.0F;
this.lightBrightnessTable[var2] = (1.0F - var3) / (var3 * 3.0F + 1.0F) * (1.0F - var1) + var1;
}
}
@Override
public float[] calcSunriseSunsetColors(float var1, float var2) {
return null;
}
@Override
public void registerWorldChunkManager() {
this.worldChunkMgr = new WorldChunkManagerPluto();
}
@Override
@SideOnly(Side.CLIENT)
public float getStarBrightness(float par1) {
final float var2 = this.worldObj.getCelestialAngle(par1);
float var3 = 1.0F - (MathHelper.cos(var2 * (float) Math.PI * 2.0F) * 2.0F + 0.25F);
if (var3 < 0.0F) {
var3 = 0.0F;
}
if (var3 > 1.0F) {
var3 = 1.0F;
}
return var3 * var3 * 0.5F + 0.3F;
}
/*
* @Override public float calculateCelestialAngle(long par1, float par3) {
* return super.calculateCelestialAngle(par1, par3); }
*
* public float calculatePhobosAngle(long par1, float par3) { return
* this.calculateCelestialAngle(par1, par3) * 3000; }
*
* public float calculateDeimosAngle(long par1, float par3) { return
* this.calculatePhobosAngle(par1, par3) * 0.0000000001F; }
*/
@Override
public IChunkProvider createChunkGenerator() {
return new ChunkProviderPluto(this.worldObj, this.worldObj.getSeed(), this.worldObj.getWorldInfo().isMapFeaturesEnabled());
}
@Override
public boolean isSkyColored() {
return true;
}
@Override
public double getHorizon() {
return 44.0D;
}
@Override
public int getAverageGroundLevel() {
return 44;
}
@Override
public boolean isSurfaceWorld() {
return true;
}
@Override
public boolean canCoordinateBeSpawn(int var1, int var2) {
return true;
}
@Override
public boolean canRespawnHere() {
return !ConfigManagerCore.forceOverworldRespawn;
}
@Override
public String getSaveFolder() {
return "DIM" + ConfigManagerPluto.idDimensionPluto;
}
@Override
public String getWelcomeMessage() {
return "Entering Pluto";
}
@Override
public String getDepartMessage() {
return "Leaving Pluto";
}
@Override
public String getDimensionName() {
return "Pluto";
}
// @Override
// public boolean canSnowAt(int x, int y, int z)
// {
// return false;
// }
@Override
public boolean canBlockFreeze(int x, int y, int z, boolean byWater) {
return false;
}
@Override
public boolean canDoLightning(Chunk chunk) {
return false;
}
@Override
public boolean canDoRainSnowIce(Chunk chunk) {
return false;
}
@Override
public float getGravity() {
return (float) (0.08D * (1 - 0.068));
}
@Override
public int getHeight() {
return 800;
}
@Override
public double getMeteorFrequency() {
return 10.0D;
}
@Override
public double getFuelUsageMultiplier() {
return 0.9D;
}
@Override
public boolean canSpaceshipTierPass(int tier) {
return tier >= 3;
}
@Override
public float getFallDamageModifier() {
return 0.068F;
}
@Override
public float getSoundVolReductionAmount() {
return 10.0F;
}
@Override
public CelestialBody getCelestialBody() {
return PlutoCore.planetPluto;
}
@Override
public boolean hasBreathableAtmosphere() {
return false;
}
@Override
public float getThermalLevelModifier() {
return -15.0F;
}
@Override
public float getWindLevel() {
return 0.0F;
}
}