package micdoodle8.mods.galacticraft.core.dimension; import java.util.HashSet; import java.util.Set; import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; import micdoodle8.mods.galacticraft.api.vector.Vector3; import micdoodle8.mods.galacticraft.api.world.IExitHeight; import micdoodle8.mods.galacticraft.api.world.IOrbitDimension; import micdoodle8.mods.galacticraft.api.world.ISolarLevel; import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; import micdoodle8.mods.galacticraft.core.Constants; import micdoodle8.mods.galacticraft.core.GalacticraftCore; import micdoodle8.mods.galacticraft.core.client.CloudRenderer; import micdoodle8.mods.galacticraft.core.client.SkyProviderOrbit; import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; import net.minecraft.entity.Entity; import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class WorldProviderOverworldOrbit extends WorldProviderSpaceStation implements IOrbitDimension, IZeroGDimension, ISolarLevel, IExitHeight { Set<Entity> freefallingEntities = new HashSet<Entity>(); @Override public Vector3 getFogColor() { return new Vector3(0, 0, 0); } @Override public Vector3 getSkyColor() { return new Vector3(0, 0, 0); } @Override public boolean hasSunset() { return false; } @Override public long getDayLength() { return 24000L; } @Override public boolean isDaytime() { final float a = this.worldObj.getCelestialAngle(0F); //TODO: adjust this according to size of planet below return a < 0.42F || a > 0.58F; } @Override @SideOnly(Side.CLIENT) public float getStarBrightness(float par1) { final float var2 = this.worldObj.getCelestialAngle(par1); float var3 = 1.0F - (MathHelper.cos(var2 * Constants.twoPI) * 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 boolean isSkyColored() { return false; } @Override public double getHorizon() { return 44.0D; } @Override public int getAverageGroundLevel() { return 64; } @Override public boolean canCoordinateBeSpawn(int var1, int var2) { return true; } // @Override // public String getWelcomeMessage() // { // return "Entering Earth Orbit"; // } // // @Override // public String getDepartMessage() // { // return "Leaving Earth Orbit"; // } @Override public CelestialBody getCelestialBody() { return GalacticraftCore.satelliteSpaceStation; } @Override public String getDimensionName() { return "Space Station " + this.dimensionId; } @Override public float getGravity() { return 0.075F; } @Override public double getMeteorFrequency() { return 0; } @Override public double getFuelUsageMultiplier() { return 0.5D; } @Override public String getPlanetToOrbit() { return "Overworld"; } @Override public int getYCoordToTeleportToPlanet() { return 30; } @Override public String getSaveFolder() { return "DIM_SPACESTATION" + this.dimensionId; } @Override public double getSolarEnergyMultiplier() { return ConfigManagerCore.spaceStationEnergyScalar; } @Override public double getYCoordinateToTeleport() { return 750; } @Override public boolean canSpaceshipTierPass(int tier) { return tier > 0; } @Override public float getFallDamageModifier() { return 0.4F; } @Override public String getInternalNameSuffix() { return "_orbit"; } @Override public boolean inFreefall(Entity entity) { return freefallingEntities.contains(entity); } @Override public void setInFreefall(Entity entity) { freefallingEntities.add(entity); } @Override public void updateWeather() { freefallingEntities.clear(); super.updateWeather(); } @Override @SideOnly(Side.CLIENT) public void setSpinDeltaPerTick(float angle) { SkyProviderOrbit skyProvider = ((SkyProviderOrbit)this.getSkyRenderer()); if (skyProvider != null) skyProvider.spinDeltaPerTick = angle; } @Override @SideOnly(Side.CLIENT) public float getSkyRotation() { SkyProviderOrbit skyProvider = ((SkyProviderOrbit)this.getSkyRenderer()); return skyProvider.spinAngle; } @Override @SideOnly(Side.CLIENT) public void createSkyProvider() { this.setSkyRenderer(new SkyProviderOrbit(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png"), true, true)); this.setSpinDeltaPerTick(this.getSpinManager().getSpinRate()); if (this.getCloudRenderer() == null) this.setCloudRenderer(new CloudRenderer()); } @Override public int getDungeonSpacing() { return 0; } }