<?xml version="1.0" encoding="utf-8"?>
<worldGeneration version="3"
				 xmlns="http://warpdrive.lemadec.org"
				 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
				 xsi:schemaLocation="http://warpdrive.lemadec.org WarpDrive.xsd"
				 mods="!galacticraftcore">
	
	<!--
	  This file defines the Celestial Map of your modpack.
	  It's just a basic geometry definition of all celestial objects with lots of customization for world generation and rendering.
	  
	  An astronomical object or celestial object is a naturally occurring physical entity, association, or structure in the observable universe.
	  They can be a planet, a more abstract construct like solar system (space dimension) or the all mighty hyperspace.
	  Hyperspace is defined by its WarpDriveHyperspace dimension provider.
	  Space is a dimension with Hyperspace as its parent.
	  
	  When no dimension is defined, a celestial object is considered 'virtual'. An hyperspace can be virtual. A sun is (in most cases) virtual.
	  In theory, multiple planets can exists in the same Minecraft world (for example: The Twilight Forest exist on multiple planets in different star systems).
	  
	  This default configuration is fairly simple: an oversized earth with a small Pluto in a far corner of the star system.
	  In practice, you can have several hyperspaces containing multiple spaces containing numerous planets, etc..
	  
	  
	  When designing your own Celestial Map, put it first on graph paper or an "Excel" (as a digital graph paper).
	  The map is simple squares into squares but no square borders can cross.
	  For example, each "space" dimension must be completely within hyperspace, but no space dimension can cross into another.
	  Each celestial object must be within a space dimension (not in hyperspace), and their borders cannot cross OR they must be within another celestial object (i.e. the nether under the overworld).
	  
	  Sadly, as we go further away from the center of a dimension (0 0), bad things starts happening around 220km including entity jerky motion, damage
	  and eventually death by suffocation. To account for this, hyperspace should cap at 400 km size (or 200 km radius).
	  You should watch AntVenom panel to learn more about this, here: https://youtu.be/v6-IAntqg5w .
	  
	  worldGeneration.mods defines mod dependencies through a comma separated list of mod ids.
	  Each mod listed shall be present unless preceded by '!'. When preceded by a exclamation character '!', that mod shall be missing.
	  If any dependency condition fails in the list, then the related XML element is ignored completely.
	  For example here, we have mods="!galacticraftcore" which means if Galacticraft is present, this file will be completely ignored.
	  Hint: the mods attribute can be used on any XML element, you can find more examples in the default fillerSets-*.xml configuration files.
     -->
	
	<!--
	  Top level is hyperspace, typically a galaxy.
	  
	  celestialObject.id should be unique for each Celestial object.
	  When provided by WarpDrive, this is the world folder name instead of DIMxxx.
     -->
	<celestialObject id="Hyperspace">
		<!--
		  size defines the world border size, measured in blocks. This is also the size of the orbit area in space, so don't go too big.
		  name defines an optional display name for the player HUD. It defaults to the celestialObject's id. 
		  description defines an optional text displayed on the player HUD.
		  name and description support colors with § or & as the escape code. '\n' is also supported.
		  nbt defines a JSON string for custom tags. It's used by WarpDrive extensions.
		  -->
		<size x="400000" z="400000" />
		<name>Hyperspace</name>
		<description>Your ship warp bubble is your\nonly protection.</description>
		
		<!--
		  dimension defines an actual game world. If it's missing, that celestialObject remains visible but you can't "land" on it.  
		  dimension.id: this is the id of the dimension. 0 is the Overworld, -1 is the Nether, 1 is the End.
		  dimension.isBreathable: this is a boolean flag defining if ambient atmosphere is breathable. This only applies to planets; space and hyperspace are always non-breathable, obviously.
		  dimension.isHyperspace: this is a boolean flag defining if this an hyperspace dimension. 
		  
		  dimension.gravity: this is the gravity simulation type or strength.
		  Valid keywords are 'none' (0.0), 'legacySpace', 'legacyHyperspace', 'normal' (1.0) or any value between 0.001 and 1.000.
		  Value is relative to that dimension default, so 1.000 means normal gravity for that dimension.
		  Since Galacticraft & AdvancedRocketry dimensions already have low gravity, you want to set their gravity to 'normal'.
		  
		  dimension.center.x, dimension.center.z: those are the center coordinate of that dimension world border, measured in blocks. For convenience, it's usually 0, 0.
		  -->
		<dimension id="-100" isBreathable="false" isHyperspace="true" gravity="legacyHyperspace">
			<center x="0" z="0" />
			<!--
			  provider defines how the world biomes are generated. If it's missing, the mod tries to self-assign space and hyperspace dimensions.
			  provider.type: this is the provider type. Valid keywords are "auto", "WarpDriveSpace", "WarpDriveHyperspace", "other".
			  Currently only Space and Hyperspace can be provided: use other mods to generate planet world.
			  -->
			<provider type="WarpDriveHyperspace" />
		</dimension>
		
		<!--
		  skybox defines the sky rendering while inside a WarpDrive provided dimension.
		  Those can be adjusted to your lore: in hyperspace, Babylon 5 is redish, Stargate is bluish, etc.
		  skybox.backgroundColor is self explanatory. Vanilla enforces plain black at max render distance.
		  skybox.starBrightnessBase is the minimum brightness of stars in the sky.
		  skybox.starBrightnessVanilla is how much of the vanilla star brightness is used. Space and hyperspace have no Sun, hence it's a fixed value.
		  skybox.celestialObjectOpacity is used for that eery feeling. 0 will completely hide celestial objects.
		  skybox.fogColor is the main color. Higher values increases the halo effect.
		  skybox.fogFactor is the fog opacity depending on local Sun position. Space and hyperspace have no Sun, hence it's a fixed value.
		  -->
		<skybox>
			<backgroundColor red="1.0" green="0.0" blue="0.0" />
			<starBrightnessBase>0.2</starBrightnessBase>
			<starBrightnessVanilla>0.0</starBrightnessVanilla>
			<celestialObjectOpacity>0.3</celestialObjectOpacity>
			<fogColor red="0.15" green="0.0" blue="0.0" />
			<fogFactor red="0.0" green="0.0" blue="0.0" />
		</skybox>
		
		<!-- Second level is space, typically a star system. -->
		<celestialObject id="solarSystem">
			<!--
			  parent defines the relation with a bigger enveloping celestial object.
			  parent.id (optional): when using multiple files, you can attach to a parent by its id.
			  parent.center.x, parent.center.z: this is the center coordinates in the parent dimension, measured in blocks.
			  -->
			<parent>
				<center x="0" z="0" />
			</parent>
			<size x="400000" z="400000" />
			<name>Space</name>
			<description>The void, filled with §6resources§r.</description>
			<dimension id="-101" isBreathable="false" gravity="legacySpace">
				<center x="0" z="0" />
				<provider type="WarpDriveSpace" />
				<!--
					generate defines the chance of different structures to generate
					generate.group, generate.name: identify the structure from the related XML files (name is optional)
				  -->
				<generate group="moon" ratio="0.00125" />
				<generate group="asteroid" ratio="0.0067" />
				<generate group="asteroids_field" ratio="0.0016" />
			</dimension>
			
			<!--
              skybox can also define a texture for an actual Sky box. The boxTextures & boxTexture elements are mutually exclusive.
              skybox.boxTextures defines a set of 6 textures that you can generate using online tools like http://wwwtyro.github.io/space-3d.
              skybox.boxTexture defines a single texture to repeat like The End dimensions (repeat 16 times the "minecraft:textures/environment/end_sky.png").
              skybox.boxBrightness defines the brightness of the textures.
              -->
			<skybox>
				<backgroundColor red="0.0" green="0.0" blue="0.0" />
				<boxTextures
						 back  ="warpdrive:textures/celestial/skybox-small_blue/back.png"
						 bottom="warpdrive:textures/celestial/skybox-small_blue/bottom.png"
						 front ="warpdrive:textures/celestial/skybox-small_blue/front.png"
						 left  ="warpdrive:textures/celestial/skybox-small_blue/left.png"
						 right ="warpdrive:textures/celestial/skybox-small_blue/right.png"
						 top   ="warpdrive:textures/celestial/skybox-small_blue/top.png" />
				<!-- boxTexture repeat="16" texture="minecraft:textures/environment/end_sky.png" /-->
				<boxBrightness>1.0</boxBrightness>
				<starBrightnessBase>0.9</starBrightnessBase>
				<starBrightnessVanilla>0.0</starBrightnessVanilla>
				<celestialObjectOpacity>1.0</celestialObjectOpacity>
				<fogColor red="0.0" green="0.0" blue="0.0" />
				<fogFactor red="0.0" green="0.0" blue="0.0" />
			</skybox>
			
			<!-- Sun is just displayed, there's no actual game dimension -->
			<celestialObject id="sun">
				<parent>
					<!-- sun is at the center of the solarSystem -->
					<center x="0" z="0" />
				</parent>
				<size x="10000" z="10000" />
				<!--
				  render defines several layers from surface to high atmosphere representing the planet.
				  By extension, if no render element is defined, then you won't see the planet from space.
			      
				  red, green, blue: together, they define a color mixing from 0.00 0.00 0.00 (black) to 1.00 1.00 1.00 (white).
				  alpha: transparency factor from 0.00 (invisible) to 1.00 (opaque).
				  texture: optional texture to use, can come from resource pack, vanilla or the mod itself.
				  periodU, periodV: optional texture rotation period over the planet, measured in seconds, defaults to 0 (disabled)
				  		Texture coordinates are defined along U and V axis (you can see them as X and Y axis in the context of the texture pixels).
				  		A periodU of 40 means the texture will do progressively shift along U axis, doing a full rotation in 40 seconds.
				  		A periodU of -80 means the texture will shift twice slower in the opposite direction. 
				  additive: optional blending function, defaults to false (multiplicative)
				  		Blending is the mathematical operation to mix existing pixel (previous layer or sky background) with the new one.
				  
				  In most cases, you want the first layer to be alpha="1.00", or the players will see the sky through the planet.
				  -->
				<render red="0.80" green="0.50" blue="0.20" alpha="1.00" texture="" />
				<render red="0.80" green="0.70" blue="0.30" alpha="0.40" texture="warpdrive:textures/celestial/surface_icy2.png" periodU="-20" periodV="104" additive="true" />
				<render red="0.80" green="0.55" blue="0.10" alpha="0.48" texture="warpdrive:textures/celestial/surface_metallic1.png" periodU="-40" periodV="140" additive="true" />
				<render red="0.80" green="0.45" blue="0.30" alpha="0.34" texture="warpdrive:textures/celestial/surface_magma1.png" periodU="24" periodV="-35" additive="true" />
				<render red="0.80" green="0.50" blue="0.20" alpha="0.08" texture="" />
				<render red="0.75" green="0.48" blue="0.20" alpha="0.08" texture="" />
				<render red="0.70" green="0.55" blue="0.20" alpha="0.08" texture="" />
			</celestialObject>
			
			<!-- Earth is the overworld (dimension.id is 0) -->
			<celestialObject id="earth">
				<parent>
					<!-- coordinates in the solar system, measured in blocks -->
					<center x="-110000" z="110000" />
				</parent>
				<size x="180000" z="180000" />
				<dimension id="0" isBreathable="true" gravity="normal">
					<center x="0" z="0" />
				</dimension>
				<render red="0.70" green="0.70" blue="0.70" alpha="1.00" texture="warpdrive:textures/celestial/surface_temperate2.png" />
				<render red="0.90" green="0.95" blue="1.00" alpha="0.15" texture="warpdrive:textures/celestial/cloud_small1.png" periodU="100" periodV="1100" additive="true" />
				<render red="0.90" green="0.90" blue="1.00" alpha="0.15" texture="warpdrive:textures/celestial/cloud_medium1.png" periodU="300" periodV="1500" additive="false" />
				<render red="0.80" green="0.70" blue="1.00" alpha="0.15" texture="warpdrive:textures/celestial/cloud_large1.png" periodU="500" periodV="2100" additive="false" />
				<render red="0.50" green="0.50" blue="1.00" alpha="0.08" />
				<render red="0.50" green="0.50" blue="1.00" alpha="0.08" />
				<render red="0.50" green="0.50" blue="1.00" alpha="0.08" />
				
				<!-- Hell is the nether. It's located below earth. In other words, falling below bedrock will drop you to the nether... -->
				<celestialObject id="hell">
					<parent>
						<center x="0" z="0" />
					</parent>
					<size x="50000" z="50000" />
					<dimension id="-1" isBreathable="true" gravity="normal">
						<center x="0" z="0" />
					</dimension>
				</celestialObject>
			</celestialObject>
			
			<!-- Pluto is The End. It's a far planet. --> 
			<celestialObject id="pluto">
				<parent>
					<center x="160000" z="170000" />
				</parent>
				<size x="40000" z="40000" />
				<dimension id="1" isBreathable="true" gravity="normal">
					<center x="0" z="0" />
				</dimension>
				<render red="1.00" green="1.00" blue="1.00" alpha="1.00" texture="minecraft:textures/blocks/end_stone.png" periodU="150" />
				<render red="0.50" green="0.50" blue="0.40" alpha="0.30" />
			</celestialObject>
			
		</celestialObject>
		
	</celestialObject>
	
</worldGeneration>
