package mattparks.mods.space.mercury.dimension;
import mattparks.mods.space.mercury.MercuryCore;
import mattparks.mods.space.mercury.util.ConfigManagerMercury;
import mattparks.mods.space.mercury.world.gen.ChunkProviderMercury;
import mattparks.mods.space.mercury.world.gen.WorldChunkManagerMercury;
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 WorldProviderMercury 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 (ConfigManagerMercury.idDayLength == false) {
return 24000L;
}
else {
return 5832000L;
}
}
@Override
public boolean shouldForceRespawn() {
return !ConfigManagerCore.forceOverworldRespawn;
}
@Override
public Class<? extends IChunkProvider> getChunkProviderClass() {
return ChunkProviderMercury.class;
}
@Override
public Class<? extends WorldChunkManager> getWorldChunkManagerClass() {
return WorldChunkManagerMercury.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 WorldChunkManagerMercury();
}
@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 ChunkProviderMercury(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" + ConfigManagerMercury.idDimensionMercury;
}
@Override
public String getWelcomeMessage() {
return "Entering Mercury";
}
@Override
public String getDepartMessage() {
return "Leaving Mercury";
}
@Override
public String getDimensionName() {
return "Mercury";
}
// @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 - 0.378));
}
@Override
public int getHeight() {
return 800;
}
@Override
public double getMeteorFrequency() {
return 6.0D;
}
@Override
public double getFuelUsageMultiplier() {
return 0.6D;
}
@Override
public boolean canSpaceshipTierPass(int tier) {
return tier >= 2;
}
@Override
public float getFallDamageModifier() {
return 0.378F;
}
@Override
public float getSoundVolReductionAmount() {
return 10.0F;
}
@Override
public CelestialBody getCelestialBody() {
return MercuryCore.planetMercury;
}
@Override
public boolean hasBreathableAtmosphere() {
return false;
}
@Override
public float getThermalLevelModifier() {
if (this.isDaytime()) {
return 12.0F;
} else {
return -9.0F;
}
}
@Override
public float getWindLevel() {
return 0.2F;
}
}