package mattparks.mods.exoplanets.elipse.dimension;
import mattparks.mods.exoplanets.elipse.ElipseCore;
import mattparks.mods.exoplanets.elipse.util.ConfigManagerElipse;
import mattparks.mods.exoplanets.elipse.world.gen.ChunkProviderElipse;
import mattparks.mods.exoplanets.elipse.world.gen.WorldChunkManagerElipse;
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 WorldProviderElipse 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() {
return 22000L;
}
@Override
public boolean shouldForceRespawn() {
return !ConfigManagerCore.forceOverworldRespawn;
}
@Override
public Class<? extends IChunkProvider> getChunkProviderClass() {
return ChunkProviderElipse.class;
}
@Override
public Class<? extends WorldChunkManager> getWorldChunkManagerClass() {
return WorldChunkManagerElipse.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 WorldChunkManagerElipse();
}
@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 ChunkProviderElipse(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" + ConfigManagerElipse.idDimensionElipse;
}
@Override
public String getWelcomeMessage() {
return "Entering Elipse";
}
@Override
public String getDepartMessage() {
return "Leaving Elipse";
}
@Override
public String getDimensionName() {
return "Elipse";
}
// @Override
// public boolean canSnowAt(int x, int y, int z)
// {
// return false;
// }
@Override
public boolean canBlockFreeze(int x, int y, int z, boolean byWater) {
if (this.isDaytime()) {
return false;
} else {
return true;
}
}
@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 - 1.125));
}
@Override
public int getHeight() {
return 800;
}
@Override
public double getMeteorFrequency() {
return 16.0D;
}
@Override
public double getFuelUsageMultiplier() {
return 0.6D;
}
@Override
public boolean canSpaceshipTierPass(int tier) {
return tier >= 3;
}
@Override
public float getFallDamageModifier() {
return 0.659F;
}
@Override
public float getSoundVolReductionAmount() {
return 0.01F;
}
@Override
public CelestialBody getCelestialBody() {
return ElipseCore.planetElpis;
}
@Override
public boolean hasBreathableAtmosphere() {
return true;
}
@Override
public float getThermalLevelModifier() {
return 9.0F;
}
@Override
public float getWindLevel() {
return 6.0F;
}
}