package micdoodle8.mods.galacticraft.api.world;
import micdoodle8.mods.galacticraft.api.entity.IRocketType;
import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody;
public interface IGalacticraftWorldProvider
{
/**
* gets additional gravity to add to players in this dimension. Typical
* values range from 0.040 to 0.065
*
* @return additional gravity for this provider
*/
public float getGravity();
/**
* Gets custom arrow gravity, overriding the vanilla gravity for arrows
*
* @return added y-motion per tick for arrows
*/
public float getArrowGravity();
/**
* Determines the rate to spawn meteors in this planet. Lower means MORE
* meteors.
* <p/>
* Typical value would be about 7. Return 0 for no meteors.
*
* @return
*/
public double getMeteorFrequency();
/**
* Depending on gravity, different fuel depletion rates will occur in
* spacecraft (less force required to lift)
*
* @return multiplier of fuel usage, relative to the earth. Lower gravity =
* Lower fuel usage (multiplier less than zero)
*/
public double getFuelUsageMultiplier();
/**
* Whether or not the spaceship tier from {@link IRocketType} can enter this
* dimension
*
* @param tier The tier of the spaceship entering this dimension
* @return Whether or not the spaceship with given tier can enter this
* dimension
*/
public boolean canSpaceshipTierPass(int tier);
/**
* Fall damage will be multiplied by this number while on the planet/moon.
*
* @return Fall damage multiplier, returning 1 will be equal to earth.
*/
public float getFallDamageModifier();
/**
*
* @return true if this world has no type of atmosphere at all - e.g. the Moon
*/
boolean hasNoAtmosphere();
/**
* Changes volume of sounds on this planet. You should be using higher
* values for thin atmospheres and high values for dense atmospheres
*
* @return Sound reduction divisor. Value of 10 will make sounds ten times
* more quiet. Value of 0.1 will make sounds 10 times louder. Be
* careful with the values you choose!
*/
public float getSoundVolReductionAmount();
/**
* Whether or not the atmosphere of this dimension is valid for players to
* breathe
*
* @return True if players can breathe here, False if not.
*/
public boolean hasBreathableAtmosphere();
/**
* If false (the default) then Nether Portals will have no function on this world.
* Nether Portals can still be constructed, if the player can make fire, they just
* won't do anything.
*
* @return True if Nether Portals should work like on the Overworld.
*/
public boolean netherPortalsOperational();
/**
* Whether or not the atmosphere of this dimension contains the specified gas
*
* @return True if the gas is present in the atmosphere, False if not.
*/
public boolean isGasPresent(IAtmosphericGas gas);
/**
* This value will affect player's thermal level, damaging them if it
* reaches too high or too low.
*
* @return Positive integer for hot celestial bodies, negative for cold.
* Zero for neutral
*/
public float getThermalLevelModifier();
/**
* Amount of wind on this world. Used for flag waving.
* <p/>
* Earth has a value of 1.0F, Luna (Moon) has a value of 0.0F.
*
* @return Flag movement magnitude. Relative to earth's value of 1.0F
*/
public float getWindLevel();
/**
* Factor by which the sun is to be drawn smaller (<1.0) or larger (>1.0) than
* the sun on the Overworld
*
* @return factor
*/
public float getSolarSize();
/**
* The celestial body object for this dimension
*
* @return The Moon or Planet object for this dimension
* @see micdoodle8.mods.galacticraft.api.galaxies.Planet
* @see micdoodle8.mods.galacticraft.api.galaxies.Moon
*/
public abstract CelestialBody getCelestialBody();
/**
* Whether rain and snow should be disabled on this planet
*
* @return true if precipitation should be disabled. False otherwise.
*/
public boolean shouldDisablePrecipitation();
/**
* Whether or not player's armor should be corroded in this world
*
* @return true if armor should be corroded, false if not
*/
public boolean shouldCorrodeArmor();
/**
* The size (in blocks) of the average spacing between dungeons
* For example, on the Moon it's 704 blocks, meaning one dungeon in each (704 x 704) square in the (x, z) plane
* <p/>
* If your world has no dungeons you can safely return 0 here.
*/
public int getDungeonSpacing();
}