<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://enderio.com/recipes" elementFormDefault="unqualified" attributeFormDefault="unqualified"
  xmlns="http://www.w3.org/2001/XMLSchema" xmlns:enderio="http://enderio.com/recipes">
  <element name="recipes">
    <complexType>
      <sequence maxOccurs="unbounded" minOccurs="0">
        <choice maxOccurs="1" minOccurs="1">
          <element name="alias">
            <annotation>
              <documentation>
                Adds an alias into the system. The alias can be used in following elements just like the value itself. Aliases can
                be replaced.
              </documentation>
            </annotation>
            <complexType>
              <sequence>
                <element minOccurs="0" maxOccurs="unbounded" name="config" type="enderio:configComplexType">
                  <annotation>
                    <documentation>
                      Restricts this alias to only be used if the given config value has the given value.
                    </documentation>
                  </annotation>
                </element>
                <element minOccurs="0" maxOccurs="unbounded" name="dependency" type="enderio:dependencyComplexType">
                  <annotation>
                    <documentation>
                      Restricts this alias to only be used if the given elements descriptor can (not) be found in the game. Use this
                      to prevent replacing good aliases with bad ones.
                    </documentation>
                  </annotation>
                </element>
              </sequence>
              <attribute name="name" type="string" use="required">
                <annotation>
                  <documentation>
                    The name of the alias. You can use anything here, but be aware that you share the namespace with all other game
                    elements.
                  </documentation>
                </annotation>
              </attribute>
              <attribute name="item" type="enderio:ThingsString" use="required">
                <annotation>
                  <documentation>A descriptor naming an item, block, ordict or another alias.</documentation>
                </annotation>
              </attribute>
            </complexType>
          </element>
          <element name="recipe">
            <annotation>
              <documentation>
                A single recipe. It can have any number of crafting or any number of smelting variants (no mixing), but at any time
                only one of them may be active.
              </documentation>
            </annotation>
            <complexType>
              <sequence minOccurs="0" maxOccurs="1">
                <element minOccurs="0" maxOccurs="unbounded" name="config" type="enderio:configComplexType">
                  <annotation>
                    <documentation>
                      Restricts this recipe to only be used if the given config value has the given value.
                    </documentation>
                  </annotation>
                </element>
                <element minOccurs="0" maxOccurs="unbounded" name="dependency" type="enderio:dependencyComplexType">
                  <annotation>
                    <documentation>
                      Restricts this recipe to only be used if the given game element can (not) be found in the game.
                    </documentation>
                  </annotation>
                </element>
                <choice minOccurs="1" maxOccurs="unbounded">
                  <element minOccurs="1" maxOccurs="1" name="crafting">
                    <annotation>
                      <documentation>Crafting variants are crafted in a crafting table.</documentation>
                    </annotation>
                    <complexType>
                      <sequence>
                        <element minOccurs="0" maxOccurs="unbounded" name="config" type="enderio:configComplexType">
                          <annotation>
                            <documentation>
                              Restricts this variant to only be used if the given config value has the given value.
                            </documentation>
                          </annotation>
                        </element>
                        <element minOccurs="0" maxOccurs="unbounded" name="dependency" type="enderio:dependencyComplexType">
                          <annotation>
                            <documentation>
                              Restricts this variant to only be used if the given game element can (not) be found in the game.
                            </documentation>
                          </annotation>
                        </element>
                        <choice minOccurs="1" maxOccurs="1">
                          <element minOccurs="1" maxOccurs="1" name="grid">
                            <annotation>
                              <documentation>
                                A grid represents a shaped recipe. All items must be in the exact position they are given here. If
                                the recipe is smaller than 3x3, it may be moved in the grid.
                              </documentation>
                            </annotation>
                            <complexType>
                              <sequence>
                                <element minOccurs="1" maxOccurs="9" name="item" type="enderio:itemType">
                                  <annotation>
                                    <documentation>An item to be used for crafting.</documentation>
                                  </annotation>

                                </element>
                              </sequence>
                              <attribute use="optional" name="size">
                                <annotation>
                                  <documentation>
                                    The size of the grid in the form "width 'x' height". Default is "3x3".
                                  </documentation>
                                </annotation>
                                <simpleType>
                                  <restriction base="string">
                                    <length value="3" />
                                  </restriction>
                                </simpleType>
                              </attribute>
                            </complexType>
                          </element>
                          <element minOccurs="1" maxOccurs="1" name="shapeless">
                            <annotation>
                              <documentation>
                                A shapeless recipe only required the given items to be in the grid, regardless of their position.
                              </documentation>
                            </annotation>
                            <complexType>
                              <sequence>
                                <element minOccurs="1" maxOccurs="9" name="item" type="enderio:itemType">
                                  <annotation>
                                    <documentation>An item to be used for crafting.</documentation>
                                  </annotation>

                                </element>
                              </sequence>
                            </complexType>
                          </element>
                        </choice>
                        <element minOccurs="1" maxOccurs="unbounded" name="output">
                          <annotation>
                            <documentation>The result of the crafting.</documentation>
                          </annotation>
                          <complexType>
                            <sequence>
                              <element minOccurs="0" maxOccurs="unbounded" name="config">
                                <annotation>
                                  <documentation>
                                    Restricts this output to only be used if the given config value has the given value.
                                  </documentation>
                                </annotation>
                                <complexType>
                                  <attribute use="required" name="section" type="string" />
                                  <attribute use="required" name="name" type="string" />
                                  <attribute use="optional" name="value" type="boolean" />
                                </complexType>
                              </element>
                              <element minOccurs="0" maxOccurs="unbounded" name="dependency" type="enderio:dependencyComplexType">
                                <annotation>
                                  <documentation>
                                    Restricts this output to only be used if the given game element can (not) be found in the game.
                                  </documentation>
                                </annotation>
                              </element>
                            </sequence>
                            <attribute use="required" name="name" type="enderio:ThingsString" />
                            <attribute use="optional" name="amount">
                              <simpleType>
                                <restriction base="int">
                                  <minInclusive value="1" />
                                  <maxInclusive value="64" />
                                </restriction>
                              </simpleType>
                            </attribute>
                            <attribute name="nbt" type="string" use="optional"></attribute>
                          </complexType>
                        </element>
                      </sequence>
                      <attribute use="optional" name="upgrade" type="boolean">
                        <annotation>
                          <documentation>
                            If true, a special recipe class will be used that will copy over all nbt from the first input item of
                            the same type.
                          </documentation>
                        </annotation>
                      </attribute>
                    </complexType>
                  </element>
                  <element minOccurs="1" maxOccurs="1" name="smelting">
                    <annotation>
                      <documentation>Smelting variants are crafted in a furnace (or alloy smelter in furnace mode).</documentation>
                    </annotation>
                    <complexType>
                      <sequence>
                        <element minOccurs="0" maxOccurs="unbounded" name="config" type="enderio:configComplexType">
                          <annotation>
                            <documentation>
                              Restricts this variant to only be used if the given config value has the given value.
                            </documentation>
                          </annotation>
                        </element>
                        <element minOccurs="0" maxOccurs="unbounded" name="dependency" type="enderio:dependencyComplexType">
                          <annotation>
                            <documentation>
                              Restricts this variant to only be used if the given game element can (not) be found in the game.
                            </documentation>
                          </annotation>
                        </element>
                        <element minOccurs="1" maxOccurs="1" name="input">
                          <complexType>
                            <attribute use="required" name="name" type="string" />
                            <attribute name="amount" use="optional">
                              <simpleType>
                                <restriction base="float">
                                  <minExclusive value="0" />
                                </restriction>
                              </simpleType>
                            </attribute>
                          </complexType>
                        </element>
                        <element minOccurs="1" maxOccurs="unbounded" name="output">
                          <annotation>
                            <documentation>The result of the smelting.</documentation>
                          </annotation>
                          <complexType>
                            <sequence>
                              <element minOccurs="0" maxOccurs="unbounded" name="config">
                                <annotation>
                                  <documentation>
                                    Restricts this output to only be used if the given config value has the given value.
                                  </documentation>
                                </annotation>
                                <complexType>
                                  <attribute use="required" name="section" type="string" />
                                  <attribute use="required" name="name" type="string" />
                                  <attribute use="optional" name="value" type="boolean" />
                                </complexType>
                              </element>
                              <element minOccurs="0" maxOccurs="unbounded" name="dependency" type="enderio:dependencyComplexType">
                                <annotation>
                                  <documentation>
                                    Restricts this output to only be used if the given game element can (not) be found in the game.
                                  </documentation>
                                </annotation>
                              </element>
                            </sequence>
                            <attribute use="required" name="name" type="enderio:ThingsString" />
                            <attribute use="optional" name="amount">
                              <simpleType>
                                <annotation>
                                  <documentation>The number of items to smelt into.</documentation>
                                </annotation>
                                <restriction base="int">
                                  <maxInclusive value="64" />
                                  <minInclusive value="1" />
                                </restriction>
                              </simpleType>
                            </attribute>
                          </complexType>
                        </element>
                      </sequence>
                      <attribute use="optional" name="exp">
                        <annotation>
                          <documentation>
                            The chance to get 1 EXP from the smelting one output item. Note that this is always for one item,
                            regardless of the recipe size. The number must be between 0.0 (for no EXP) and 1.0 for a 100% chance. If
                            this attribute is missing it's value will be taken from already existing smelting recipes that produce
                            this item (really recommended for stuff that already has vanilla smelting recipes). If there's no
                            existing smelting, it will be 0. Please note that items have the possibility to override this value.
                          </documentation>
                        </annotation>
                        <simpleType>
                          <restriction base="float">
                            <minInclusive value="0" />
                            <maxInclusive value="1" />
                          </restriction>
                        </simpleType>
                      </attribute>
                      <attribute name="tinkers" type="boolean" use="optional">
                        <annotation>
                          <documentation>
                            If set to true, the recipe will be registered for the Tinkers' Smeltery. For this to work, the output
                            item must already be registered with Tinkers to smelt into a fluid.
                          </documentation>
                        </annotation>
                      </attribute>
                      <attribute name="vanilla" type="boolean" use="optional">
                        <annotation>
                          <documentation>If set to true, the recipe will be registered for the Vanilla Furnace.</documentation>
                        </annotation>
                      </attribute>
                    </complexType>
                  </element>
                  <element name="casting" minOccurs="1" maxOccurs="1">
                    <annotation>
                      <documentation>Smelting variants are crafted in Tinkers' casting table.</documentation>
                    </annotation>
                    <complexType>
                      <sequence>
                        <element minOccurs="0" maxOccurs="unbounded" name="config" type="enderio:configComplexType">
                          <annotation>
                            <documentation>
                              Restricts this variant to only be used if the given config value has the given value.
                            </documentation>
                          </annotation>
                        </element>
                        <element minOccurs="0" maxOccurs="unbounded" name="dependency" type="enderio:dependencyComplexType">
                          <annotation>
                            <documentation>
                              Restricts this variant to only be used if the given game element can (not) be found in the game.
                            </documentation>
                          </annotation>
                        </element>
                        <element minOccurs="1" maxOccurs="1" name="input">
                          <annotation>
                            <documentation>
                              Items that represent the fluid (type and amount) that needs to be put into the cast.
                            </documentation>
                          </annotation>
                          <complexType>
                            <attribute use="required" name="name" type="enderio:ThingsString" />
                            <attribute name="amount" use="optional">
                              <annotation>
                                <documentation>
                                  Only valid for Tinkers recipe. Number of input items needed for the output. Note that this is
                                  applied to the amount of fluid, not the number of items to smelt.
                                </documentation>
                              </annotation>
                              <simpleType>
                                <restriction base="float">
                                  <minExclusive value="0" />
                                </restriction>
                              </simpleType>
                            </attribute>
                          </complexType>
                        </element>
                        <element minOccurs="0" maxOccurs="1" name="cast">
                          <annotation>
                            <documentation>The Tinkers cast to use.</documentation>
                          </annotation>
                          <complexType>
                            <attribute use="required" name="name" type="enderio:ThingsString" />
                            <attribute name="consumed" type="boolean" use="optional" default="false">
                              <annotation>
                                <documentation>Should the cast be consumed?</documentation>
                              </annotation>
                            </attribute>
                          </complexType>
                        </element>
                        <element minOccurs="1" maxOccurs="unbounded" name="output">
                          <annotation>
                            <documentation>The result of the casting process.</documentation>
                          </annotation>
                          <complexType>
                            <attribute use="required" name="name" type="enderio:ThingsString" />
                          </complexType>
                        </element>
                      </sequence>
                    </complexType>
                  </element>
                  <element name="enchanting" minOccurs="1" maxOccurs="1">
                    <annotation>
                      <documentation>Enchantment recipes used in the Enchanter.</documentation>
                    </annotation>
                    <complexType>
                      <sequence>
                        <element minOccurs="0" maxOccurs="unbounded" name="config" type="enderio:configComplexType">
                          <annotation>
                            <documentation>
                              Restricts this variant to only be used if the given config value has the given value.
                            </documentation>
                          </annotation>
                        </element>
                        <element minOccurs="0" maxOccurs="unbounded" name="dependency" type="enderio:dependencyComplexType">
                          <annotation>
                            <documentation>
                              Restricts this variant to only be used if the given game element can (not) be found in the game.
                            </documentation>
                          </annotation>
                        </element>
                        <element minOccurs="1" maxOccurs="1" name="input">
                          <annotation>
                            <documentation>When this item is used in the Enchanter it will give this recipe.</documentation>
                          </annotation>
                          <complexType>
                            <attribute use="required" name="name" type="enderio:ThingsString" />
                            <attribute name="amount" use="optional">
                              <annotation>
                                <documentation>
                                  Only valid for Enchanter recipe. Number of input items needed for one level of the enchantment.
                                </documentation>
                              </annotation>
                              <simpleType>
                                <restriction base="int">
                                  <maxInclusive value="64" />
                                  <minInclusive value="1" />
                                </restriction>
                              </simpleType>
                            </attribute>
                            <attribute name="nbt" type="string" use="optional">
                              <annotation>
                                <documentation>
                                  An NBT tag in the same syntax Minecraft uses for recipes, the give command, etc.
                                </documentation>
                              </annotation>
                            </attribute>
                          </complexType>
                        </element>
                        <element minOccurs="1" maxOccurs="1" name="enchantment">
                          <annotation>
                            <documentation>Enchantment to produce.</documentation>
                          </annotation>
                          <complexType>
                            <attribute use="required" name="name" type="string" />
                            <attribute name="costMultiplier" default="1">
                              <annotation>
                                <documentation>
                                  The XP cost of the recipe will be multiplied with this value. Defaults to 1.
                                </documentation>
                              </annotation>
                              <simpleType>
                                <restriction base="double">
                                  <minExclusive value="0" />
                                </restriction>
                              </simpleType>
                            </attribute>
                          </complexType>
                        </element>
                      </sequence>
                    </complexType>
                  </element>
                  <element name="spawning" maxOccurs="1" minOccurs="1">
                    <complexType>
                      <annotation>
                        <documentation>Spawn recipes to be used in the powered spawner.</documentation>
                      </annotation>
                      <sequence>
                        <element minOccurs="0" maxOccurs="unbounded" name="config" type="enderio:configComplexType">
                          <annotation>
                            <documentation>
                              Restricts this variant to only be used if the given config value has the given value.
                            </documentation>
                          </annotation>
                        </element>
                        <element minOccurs="0" maxOccurs="unbounded" name="dependency" type="enderio:dependencyComplexType">
                          <annotation>
                            <documentation>
                              Restricts this variant to only be used if the given game element can (not) be found in the game.
                            </documentation>
                          </annotation>
                        </element>
                        <element minOccurs="1" maxOccurs="unbounded" name="entity">
                          <annotation>
                            <documentation>The settings for one type of entity.</documentation>
                          </annotation>
                          <complexType>
                            <attribute use="required" name="name" type="string">
                              <annotation>
                                <documentation>
                                  The ResourceLocation of the entity this entry is for. Aside from a literal ResourceLocation, a
                                  number of special values can be used. "*" denotes the default entry, its values are used when
                                  there is no matching configuration. "*boss*" matches all modded boss mobs; it can only be used for
                                  soul vial configuration. Additionally, both the modid and the mobid (the part before and after the
                                  colon) can contain a single asterisk as wildcard ("*:*" is an alias for "*"). If multiple entries
                                  match the same mob (only possible when using wildcards), the configurations combine. On entry
                                  disabling spawning or soulvialing is enough to disable that and the highest cost multipier is
                                  used.
                                </documentation>
                              </annotation>
                            </attribute>
                            <attribute name="costMultiplier" default="1">
                              <annotation>
                                <documentation>
                                  The cost of the recipe will be multiplied with this value. Defaults to 1.
                                </documentation>
                              </annotation>
                              <simpleType>
                                <restriction base="double">
                                  <minExclusive value="0" />
                                </restriction>
                              </simpleType>
                            </attribute>
                            <attribute name="disabled" type="boolean" use="optional" default="false">
                              <annotation>
                                <documentation>Entities that are disabled cannot be spawned by powered spawners.</documentation>
                              </annotation>
                            </attribute>
                            <attribute name="clone" type="boolean" use="optional" default="false">
                              <annotation>
                                <documentation>
                                  When set to true, the entity cannot be spawned and must be cloned from a captured entity instead
                                  (Attention: Possibility of item duping!)
                                </documentation>
                              </annotation>
                            </attribute>
                            <attribute name="soulvial" type="boolean" use="optional" default="true">
                              <annotation>
                                <documentation>
                                  Specifies if this mob can be captured with a soul vial (default is yes). If an entity cannot be
                                  captured, it also cannot be spawning by powered spawners.
                                </documentation>
                              </annotation>
                            </attribute>
                          </complexType>
                        </element>
                      </sequence>
                    </complexType>
                  </element>
                  <element minOccurs="1" maxOccurs="1" name="alloying">
                    <annotation>
                      <documentation>Alloying variants are crafted in an alloy smelter.</documentation>
                    </annotation>
                    <complexType>
                      <sequence>
                        <element minOccurs="0" maxOccurs="unbounded" name="config" type="enderio:configComplexType">
                          <annotation>
                            <documentation>
                              Restricts this variant to only be used if the given config value has the given value.
                            </documentation>
                          </annotation>
                        </element>
                        <element minOccurs="0" maxOccurs="unbounded" name="dependency" type="enderio:dependencyComplexType">
                          <annotation>
                            <documentation>
                              Restricts this variant to only be used if the given game element can (not) be found in the game.
                            </documentation>
                          </annotation>
                        </element>
                        <element minOccurs="1" maxOccurs="3" name="input">
                          <complexType>
                            <attribute use="required" name="name" type="enderio:ThingsString" />
                            <attribute name="amount" use="optional">
                              <annotation>
                                <documentation>Number of input items needed.</documentation>
                              </annotation>
                              <simpleType>
                                <restriction base="int">
                                  <maxInclusive value="64" />
                                  <minInclusive value="1" />
                                </restriction>
                              </simpleType>
                            </attribute>
                            <attribute name="nbt" type="string" use="optional">
                              <annotation>
                                <documentation>
                                  An NBT tag in the same syntax Minecraft uses for recipes, the give command, etc.
                                </documentation>
                              </annotation>
                            </attribute>
                          </complexType>
                        </element>
                        <element minOccurs="1" maxOccurs="unbounded" name="output">
                          <annotation>
                            <documentation>The result of the alloying.</documentation>
                          </annotation>
                          <complexType>
                            <sequence>
                              <element minOccurs="0" maxOccurs="unbounded" name="config" type="enderio:configComplexType">
                                <annotation>
                                  <documentation>
                                    Restricts this output to only be used if the given config value has the given value.
                                  </documentation>
                                </annotation>
                              </element>
                              <element minOccurs="0" maxOccurs="unbounded" name="dependency" type="enderio:dependencyComplexType">
                                <annotation>
                                  <documentation>
                                    Restricts this output to only be used if the given game element can (not) be found in the game.
                                  </documentation>
                                </annotation>
                              </element>
                            </sequence>
                            <attribute use="required" name="name" type="enderio:ThingsString" />
                            <attribute use="optional" name="amount">
                              <simpleType>
                                <annotation>
                                  <documentation>The number of items to smelt into.</documentation>
                                </annotation>
                                <restriction base="int">
                                  <maxInclusive value="64" />
                                  <minInclusive value="1" />
                                </restriction>
                              </simpleType>
                            </attribute>
                          </complexType>
                        </element>
                      </sequence>
                      <attribute use="optional" name="exp">
                        <annotation>
                          <documentation>
                            The chance to get 1 EXP from the smelting one recipe. The number must be between 0.0 (for no EXP) and
                            1.0 for a 100% chance.
                          </documentation>
                        </annotation>
                        <simpleType>
                          <restriction base="float">
                            <minInclusive value="0" />
                            <maxInclusive value="1" />
                          </restriction>
                        </simpleType>
                      </attribute>
                      <attribute name="energy" use="required">
                        <annotation>
                          <documentation>The amount of energy running this recipe takes.</documentation>
                        </annotation>
                        <simpleType>
                          <restriction base="float">
                            <minExclusive value="0" />
                          </restriction>
                        </simpleType>
                      </attribute>
                    </complexType>
                  </element>
                  <element name="sagmilling" maxOccurs="1" minOccurs="1">
                    <annotation>
                      <documentation>Sagmilling recipes are used in a Sag Mill.</documentation>
                    </annotation>
                    <complexType>
                      <sequence>
                        <element name="config" type="enderio:configComplexType" maxOccurs="unbounded" minOccurs="0">
                          <annotation>
                            <documentation>
                              Restricts this variant to only be used if the given config value has the given value.
                            </documentation>
                          </annotation>
                        </element>
                        <element name="dependency" type="enderio:dependencyComplexType" maxOccurs="unbounded" minOccurs="0">
                          <annotation>
                            <documentation>
                              Restricts this variant to only be used if the given game element can (not) be found in the game.
                            </documentation>
                          </annotation>
                        </element>
                        <element minOccurs="1" maxOccurs="1" name="input">
                          <complexType>
                            <attribute use="required" name="name" type="enderio:ThingsString" />
                          </complexType>
                        </element>
                        <element minOccurs="1" maxOccurs="unbounded" name="output">
                          <annotation>
                            <documentation>The result of the sagmilling.</documentation>
                          </annotation>
                          <complexType>
                            <sequence>
                              <element minOccurs="0" maxOccurs="unbounded" name="config" type="enderio:configComplexType">
                                <annotation>
                                  <documentation>
                                    Restricts this output to only be used if the given config value has the given value.
                                  </documentation>
                                </annotation>
                              </element>
                              <element minOccurs="0" maxOccurs="unbounded" name="dependency" type="enderio:dependencyComplexType">
                                <annotation>
                                  <documentation>
                                    Restricts this output to only be used if the given game element can (not) be found in the game.
                                  </documentation>
                                </annotation>
                              </element>
                            </sequence>
                            <attribute use="required" name="name" type="enderio:ThingsString" />
                            <attribute use="optional" name="amount">
                              <simpleType>
                                <annotation>
                                  <documentation>The number of items to sagmill into.</documentation>
                                </annotation>
                                <restriction base="int">
                                  <maxInclusive value="64" />
                                  <minInclusive value="1" />
                                </restriction>
                              </simpleType>
                            </attribute>
                            <attribute name="chance" use="optional" default="1">
                              <annotation>
                                <documentation>
                                  The chance that this item is produced by one run of the recipe. The chance is increased by the
                                  "chanceMultiplier" of the used grinding ball.
                                </documentation>
                              </annotation>
                              <simpleType>
                                <restriction base="float">
                                  <minExclusive value="0"></minExclusive>
                                  <maxInclusive value="1"></maxInclusive>
                                </restriction>
                              </simpleType>
                            </attribute>
                            <attribute name="required" type="boolean" use="optional" default="true">
                              <annotation>
                                <documentation>
                                  If required is false, an output for something that doesn't exist in the game is silently skipped.
                                  Use this for optional additional outputs, as the whole recipe still needs at least one output
                                  (unless the whole recipe is optional).
                                </documentation>
                              </annotation>
                            </attribute>
                          </complexType>
                        </element>
                      </sequence>
                      <attribute name="bonus" use="optional" default="multiply_output">
                        <annotation>
                          <documentation>
                            Use of grinding balls is restricted by the bonus type of the recipe. If it is set to "none", it will not
                            have any grinding ball bonuses applied and will not reduce the durability of any balls in the mill at
                            the time it is processed. If it is set to "chance_only", the chance and power multipliers of the
                            grinding balls are applied, but not the grinding multiplier. If it is set to "multiply_output"
                            (default), all multipliers apply.
                          </documentation>
                        </annotation>
                        <simpleType>
                          <restriction base="string">
                            <enumeration value="multiply_output"></enumeration>
                            <enumeration value="chance_only"></enumeration>
                            <enumeration value="none"></enumeration>
                          </restriction>
                        </simpleType>
                      </attribute>
                      <attribute name="energy" use="required">
                        <annotation>
                          <documentation>The amount of energy running this recipe takes.</documentation>
                        </annotation>
                        <simpleType>
                          <restriction base="float">
                            <minExclusive value="0" />
                          </restriction>
                        </simpleType>
                      </attribute>
                    </complexType>
                  </element>
                  <element name="slicing" type="enderio:slicingType" maxOccurs="1" minOccurs="1">
                    <annotation>
                      <documentation>Recipe for the Slice'n'Splice</documentation>
                    </annotation>
                  </element>
                  <element name="fermenting" type="enderio:fermentingType" maxOccurs="1" minOccurs="1">
                    <annotation>
                      <documentation>A recipe for the VAT.</documentation>
                    </annotation>
                  </element>
                  <element name="soulbinding" type="enderio:soulbindingType" minOccurs="1" maxOccurs="1">
                    <annotation>
                      <documentation>A recipe for the Soul Binder.</documentation>
                    </annotation>
                  </element>
                  <element name="brewing" type="enderio:brewingType" minOccurs="1" maxOccurs="1">
                    <annotation>
                      <documentation>A recipe for the vanilla brewing stand.</documentation>
                    </annotation>
                  </element>
                  <element name="tanking" type="enderio:tankingType" minOccurs="1" maxOccurs="1">
                    <annotation>
                      <documentation>A recipe for the Tank.</documentation>
                    </annotation>
                  </element>
                  <element name="hiding" type="enderio:hidingType" maxOccurs="1" minOccurs="1">
                    <annotation>
                      <documentation>A pseudo-recipe for hiding items and fluids in the JEI list of ingredients.</documentation>
                    </annotation>
                  </element>
                </choice>
              </sequence>
              <attribute use="optional" name="required" type="boolean">
                <annotation>
                  <documentation>If a recipe is required, it is an error if none of its variants is valid.</documentation>
                </annotation>
              </attribute>
              <attribute use="required" name="name" type="string">
                <annotation>
                  <documentation>A display name. Used for error messages only.</documentation>
                </annotation>
              </attribute>
              <attribute name="disabled" type="boolean" use="optional">
                <annotation>
                  <documentation>
                    If a recipe is disabled it will not be registered and it will not check the validity of its content. Use this in
                    the user file to disable core recipes.
                  </documentation>
                </annotation>
              </attribute>
            </complexType>
          </element>
          <element name="grindingball" type="enderio:GrindingType"></element>
          <element name="capacitor" type="enderio:CapacitorType"></element>
        </choice>
      </sequence>
    </complexType>
  </element>
  <complexType name="configComplexType">
    <attribute use="required" name="section" type="string"></attribute>
    <attribute use="required" name="name" type="string"></attribute>
    <attribute use="optional" name="value" type="boolean"></attribute>
  </complexType>
  <complexType name="dependencyComplexType">
        <annotation>
          <documentation>Either item or mod or upgrade must be given. A dependency is met (or not met if reverse is set) if the item (if given) exists and the upgrade (if given) exists and the mod (if given) is loaded.</documentation>
        </annotation>
        <attribute use="optional" name="item" type="enderio:ThingsString">
      <annotation>
        <documentation>The ID of an item that must exist in the game</documentation>
      </annotation></attribute>
    <attribute name="mod" type="string" use="optional">
      <annotation>
        <documentation>The ID of a mod that must be loaded</documentation>
      </annotation></attribute>
    <attribute name="upgrade" type="string" use="optional">
      <annotation>
        <documentation>The ID of a Dark Steel Upgrade that must be loaded</documentation>
      </annotation></attribute>
    <attribute use="optional" name="reverse" type="boolean">
      <annotation>
        <documentation>When set to true, the dependency is reversed, i.e. the item/mod/upgrade must not exist</documentation>
      </annotation></attribute>
  </complexType>
  <complexType name="slicingType">
    <sequence>
      <element name="config" type="enderio:configComplexType" maxOccurs="unbounded" minOccurs="0"></element>
      <element name="dependency" type="enderio:dependencyComplexType" maxOccurs="unbounded" minOccurs="0"></element>

      <element name="input" minOccurs="6" maxOccurs="6">
        <complexType>
          <attribute use="required" name="name" type="enderio:ThingsString" />
          <attribute name="nbt" type="string" use="optional"></attribute>
        </complexType>
      </element>
      <element name="output" minOccurs="1" maxOccurs="1"><complexType>
        <sequence>
                              <element minOccurs="0" maxOccurs="unbounded" name="config" type="enderio:configComplexType">
                                <annotation>
                                  <documentation>
                                    Restricts this output to only be used if the given config value has the given value.
                                  </documentation>
                                </annotation>
                              </element>
                              <element minOccurs="0" maxOccurs="unbounded" name="dependency" type="enderio:dependencyComplexType">
                                <annotation>
                                  <documentation>
                                    Restricts this output to only be used if the given game element can (not) be found in the game.
                                  </documentation>
                                </annotation>
                              </element>

                            </sequence>
                            <attribute use="required" name="name" type="enderio:ThingsString" />
      </complexType></element>
    </sequence>
    <attribute name="energy" use="required">
      <annotation>
        <documentation>The amount of energy running this recipe takes.</documentation>
      </annotation>
      <simpleType>
        <restriction base="int">
          <minExclusive value="0"></minExclusive>
        </restriction>
      </simpleType>
    </attribute>
  </complexType>

  <complexType name="GrindingType">
        <annotation>
          <documentation>  Grinding balls provide bonus outputs and reduced power use. Using the user config new grinding balls may be added and
  existing ones removed.

  Use of the grinding ball is restricted by the bonusType of the recipe. If it is set to &quot;none&quot;, it will not have any grinding
  ball bonuses applied and will not reduce the durability of any balls in the mill at the time it is  processed. If it is set
  to &quot;chance_only&quot;, the chance and power multipliers of the grinding balls are applied, but not the grinding multiplier. If it
  is set to &quot;multiply_output&quot; (default), all multipliers apply.
</documentation></annotation>
        <sequence>
      <element name="config" type="enderio:configComplexType" minOccurs="0" maxOccurs="unbounded"></element>
      <element name="dependency" type="enderio:dependencyComplexType" minOccurs="0" maxOccurs="unbounded"></element>
      <element name="item" minOccurs="1" maxOccurs="1">
        <complexType>
          <attribute name="name" type="enderio:ThingsString" use="required"></attribute>
        </complexType>
      </element>
    </sequence>
    <attribute name="name" type="string" use="required"></attribute>
    <attribute name="required" type="boolean" use="optional" default="true"></attribute>
    <attribute name="disabled" type="boolean" use="optional" default="false"></attribute>
    <attribute name="grinding" use="optional" default="1.0">
            <annotation>
              <documentation>The recipe output will be produced this many times. e.g. &quot;3.14&quot; would produce 3 copies of the complete
                        output set and a 14% chance for a forth copy.</documentation></annotation>
            <simpleType>
              <restriction base="float">
                <minExclusive value="0"></minExclusive>
                <maxInclusive value="5"></maxInclusive>
              </restriction>
            </simpleType>
    </attribute>
    <attribute name="chance" use="optional" default="1.0">
            <annotation>
              <documentation>The chances for the different outputs of the recipe are multiplied with this. e.g. if a recipe specifies
                        &lt;output name=&quot;cobblestone&quot; chance=&quot;0.15&quot; /&gt; a chance multiplier of &quot;3.14&quot; would make it a 47.1% chance
                        of getting one cobblestone. Results of more than 100% do not give multiples.</documentation></annotation>
            <simpleType>
        <restriction base="float">
          <minExclusive value="0"></minExclusive>
          <maxInclusive value="5"></maxInclusive>
        </restriction>
      </simpleType>
    </attribute>
    <attribute name="power" use="optional" default="1.0">
            <annotation>
              <documentation>The &quot;energy cost&quot; of the recipe is multiplied with this.</documentation></annotation>
            <simpleType>
        <restriction base="float">
          <minExclusive value="0"></minExclusive>
          <maxInclusive value="5"></maxInclusive>
        </restriction>
      </simpleType>
    </attribute>
    <attribute name="durability" use="required">
            <annotation>
              <documentation>This specifies how long one grinding ball will last before it is used up. The unit is the amount of
                        power used by the SAG Mill.</documentation></annotation>
            <simpleType>
        <restriction base="int">
          <minExclusive value="0"></minExclusive>
        </restriction>
      </simpleType>
    </attribute>
  </complexType>

  <complexType name="fermentingType">
    <sequence>
      <element name="config" type="enderio:configComplexType" minOccurs="0" maxOccurs="unbounded"></element>
      <element name="dependency" type="enderio:dependencyComplexType" maxOccurs="unbounded" minOccurs="0"></element>
      <element name="inputgroup" minOccurs="1" maxOccurs="2">
        <complexType>
          <sequence>
            <element name="input" minOccurs="1" maxOccurs="unbounded">
              <complexType>
                <attribute name="name" type="enderio:ThingsString" use="required"></attribute>
                <attribute name="multiplier" type="float" use="optional" default="1.0"></attribute>
              </complexType></element>
          </sequence>
        </complexType>
      </element>
      <element name="inputfluid" maxOccurs="1" minOccurs="1">
        <complexType>
          <attribute name="name" type="string" use="required"></attribute>
          <attribute name="multiplier" type="float" default="1.0"></attribute>
        </complexType>
      </element>
      <element name="outputfluid" maxOccurs="1" minOccurs="1">
        <complexType>
          <attribute name="name" type="string" use="required"></attribute>
        </complexType></element>
    </sequence>
    <attribute name="energy" use="required">
      <simpleType>
        <restriction base="int">
          <minExclusive value="0"></minExclusive>
        </restriction>
      </simpleType>
    </attribute>
  </complexType>

  <complexType name="CapacitorType">
    <annotation>
      <documentation>Capacitor Keys</documentation>
    </annotation>
    <sequence>
      <element name="config" type="enderio:configComplexType" minOccurs="0" maxOccurs="unbounded"></element>
      <element name="dependency" type="enderio:dependencyComplexType" minOccurs="0" maxOccurs="unbounded"></element>
      <choice minOccurs="0" maxOccurs="1">
        <element name="scaler" minOccurs="1" maxOccurs="1">
          <complexType>
            <attribute name="name" use="required">
              <simpleType>
                <restriction base="enderio:ScalerString" />
              </simpleType>
            </attribute>
          </complexType>
        </element>
        <element name="indexed" minOccurs="1" maxOccurs="1">
          <complexType>
            <sequence>
              <element name="data" minOccurs="1" maxOccurs="unbounded">
                <complexType>
                  <attribute name="value" type="float" use="required"></attribute>
                </complexType>
              </element>
            </sequence>
            <attribute name="step" type="float" use="optional" default="1"></attribute>
          </complexType>
        </element>
      </choice>
    </sequence>
    <attribute name="key" use="required">
      <simpleType>
        <restriction base="string">
          <pattern value="[a-z][a-z0-9]*:[^:]+"></pattern>
        </restriction>
      </simpleType>
    </attribute>
    <attribute name="required" type="boolean" use="optional" default="true"></attribute>
    <attribute name="disabled" type="boolean" use="optional" default="false"></attribute>
    <attribute name="base" type="int" use="required"></attribute>
    <attribute name="scaler" type="enderio:ScalerString" use="optional"></attribute>
  </complexType>
  <simpleType name="ScalerString">
    <restriction base="string">
                  <pattern value="IDENTITY"></pattern>
                  <pattern value="LINEAR_0_8"></pattern>
                  <pattern value="QUADRATIC"></pattern>
                  <pattern value="QUADRATIC_1_8"></pattern>
                  <pattern value="CUBIC"></pattern>
                  <pattern value="OCTADIC_1_8"></pattern>
                  <pattern value="POWER"></pattern>
                  <pattern value="CHARGE"></pattern>
                  <pattern value="SPEED"></pattern>
                  <pattern value="POWER10"></pattern>
                  <pattern value="RANGE"></pattern>
                  <pattern value="FIXED"></pattern>
                  <pattern value="SPAWNER"></pattern>
                  <pattern value="BURNTIME"></pattern>
                  <pattern value="CHEMICAL"></pattern>
                  <pattern value="DROPOFF"></pattern>
                  <pattern value="CENT"></pattern>
                  <pattern value="idx:([1-9]\d*(\.\d+)?|0\.\d+)(:([1-9]\d*|0)(\.\d+)?)+"></pattern>
                  <pattern value="idx\(([1-9]\d*(\.\d+)?|0\.\d+)\)(:?([1-9]\d*|0)(\.\d+)?)(:([1-9]\d*|0)(\.\d+)?)*"></pattern>
                </restriction>
  </simpleType>

  <complexType name="soulbindingType">
    <annotation>
      <documentation>A Soul Binder recipe.</documentation>
    </annotation>
    <sequence>
      <element name="config" type="enderio:configComplexType" maxOccurs="unbounded" minOccurs="0"></element>
      <element name="dependency" type="enderio:dependencyComplexType" maxOccurs="unbounded" minOccurs="0"></element>
      <element name="input" minOccurs="1" maxOccurs="1">
        <annotation>
          <documentation>The item that is the input.</documentation>
        </annotation>
        <complexType>
          <attribute use="required" name="name" type="enderio:ThingsString" />
          <attribute name="nbt" type="string" use="optional"></attribute>
        </complexType>
      </element>
      <element minOccurs="0" maxOccurs="unbounded" name="soul">
        <annotation>
          <documentation>
            The soul that is the input. All souls must be in Soul Vials, so you only specify the soul itself here.
          </documentation>
        </annotation>
        <complexType>
          <attribute use="required" name="name" type="string" />
        </complexType>
      </element>
      <element name="output" minOccurs="1" maxOccurs="1">
        <annotation>
          <documentation>The item to produce.</documentation>
        </annotation>
        <complexType>
          <sequence>
            <element minOccurs="0" maxOccurs="unbounded" name="config" type="enderio:configComplexType">
              <annotation>
                <documentation>Restricts this output to only be used if the given config value has the given value.</documentation>
              </annotation>
            </element>
            <element minOccurs="0" maxOccurs="unbounded" name="dependency" type="enderio:dependencyComplexType">
              <annotation>
                <documentation>
                  Restricts this output to only be used if the given game element can (not) be found in the game.
                </documentation>
              </annotation>
            </element>
          </sequence>
          <attribute use="required" name="name" type="enderio:ThingsString" />
        </complexType>
      </element>
    </sequence>
    <attribute name="energy" use="required">
      <annotation>
        <documentation>The amount of energy running this recipe takes.</documentation>
      </annotation>
      <simpleType>
        <restriction base="int">
          <minExclusive value="0"></minExclusive>
        </restriction>
      </simpleType>
    </attribute>
    <attribute name="levels" use="required">
      <annotation>
        <documentation>The amount of XP levels running this recipe takes.</documentation>
      </annotation>
      <simpleType>
        <restriction base="int">
          <minExclusive value="1"></minExclusive>
          <maxInclusive value="21862"></maxInclusive>
        </restriction>
      </simpleType>
    </attribute>
    <attribute name="logic" use="optional" default="NONE">
      <simpleType>
        <restriction base="string">
          <enumeration value="NONE"></enumeration>
          <enumeration value="APPLY"></enumeration>
          <enumeration value="FILTER"></enumeration>
        </restriction>
      </simpleType>
    </attribute>
    <attribute name="souls" use="optional" default="LISTED">
            <annotation>
              <documentation>Which souls can be used with this recipe:

* LISTED: Souls will be given with the 'soul' tag
* ALL: All souls can be used
* SPAWNABLE: All souls that can be used with the Powered Spawner can be used.</documentation>
            </annotation>
            <simpleType>
        <restriction base="string">
          <enumeration value="LISTED"></enumeration>
          <enumeration value="ALL"></enumeration>
          <enumeration value="SPAWNABLE"></enumeration>
        </restriction>
      </simpleType>
    </attribute>
  </complexType>
  
  <complexType name="brewingType">
    <annotation>
      <documentation>A Brewing recipe.</documentation>
    </annotation>
    <sequence>
      <element name="config" type="enderio:configComplexType" maxOccurs="unbounded" minOccurs="0"></element>
      <element name="dependency" type="enderio:dependencyComplexType" maxOccurs="unbounded" minOccurs="0"></element>
      <element name="input" type="enderio:potionType" minOccurs="1" maxOccurs="1"></element>
      <element name="reagent" minOccurs="1" maxOccurs="1">
        <annotation>
          <documentation>The item that is the input.</documentation>
        </annotation>
        <complexType>
          <attribute use="required" name="name" type="enderio:ThingsString" />
          <attribute name="nbt" type="string" use="optional"></attribute>
        </complexType>
      </element>
      <element name="output" type="enderio:potionType" minOccurs="1" maxOccurs="1"></element>
    </sequence>
  </complexType>

  <complexType name="tankingType">
    <annotation>
      <documentation>A filling or emptying recipe for the tank.</documentation>
    </annotation>
    <sequence>
      <element name="config" type="enderio:configComplexType" maxOccurs="unbounded" minOccurs="0"></element>
      <element name="dependency" type="enderio:dependencyComplexType" maxOccurs="unbounded" minOccurs="0"></element>
      <element name="input" type="enderio:itemType" minOccurs="1" maxOccurs="1"></element>
      <element name="fluid" type="enderio:fluidType" minOccurs="1" maxOccurs="1"></element>
      <element name="output" type="enderio:itemType" minOccurs="0" maxOccurs="1"></element>
    </sequence>
    <attribute name="type" use="required">
      <simpleType>
        <restriction base="string">
          <enumeration value="FILL"></enumeration>
          <enumeration value="EMPTY"></enumeration>
        </restriction>
      </simpleType>
    </attribute>
    <attribute name="logic" use="optional" default="NONE">
      <simpleType>
        <restriction base="string">
          <enumeration value="NONE"></enumeration>
          <enumeration value="XPBOTTLE"></enumeration>
          <enumeration value="XP"></enumeration>
        </restriction>
      </simpleType>
    </attribute>
  </complexType>

  <complexType name="hidingType">
    <annotation>
      <documentation>Configure which items/fluids should be hidden in JEI.</documentation>
    </annotation>
    <sequence>
      <element name="config" type="enderio:configComplexType" maxOccurs="unbounded" minOccurs="0"></element>
      <element name="dependency" type="enderio:dependencyComplexType" maxOccurs="unbounded" minOccurs="0"></element>
      <choice maxOccurs="unbounded" minOccurs="1">
        <element name="item" type="enderio:itemHidingType" minOccurs="1" maxOccurs="1"></element>
        <element name="fluid" type="enderio:fluidHidingType" minOccurs="1" maxOccurs="1"></element>
      </choice>
    </sequence>
  </complexType>


  <complexType name="potionType">
    <attribute name="potion" type="string" use="required">
      <annotation>
        <documentation>The resource ID of a potion.</documentation>
      </annotation></attribute>
  </complexType>

  <complexType name="fluidHidingType">
    <attribute name="name" type="string" use="required">
      <annotation>
        <documentation>The ID of a fluid.</documentation>
      </annotation>
    </attribute>
    <attribute name="show" type="boolean" use="optional" default="false">
      <annotation>
        <documentation>An element will be hidden if:

(1) there exists a configuration for it. Elements that are never configured will not be hidden.

(2) There is no configuration that sets "show" to true OR

(3) There is at least one configuration that sets "hide" to true.

Ender IO itself will never set "hide" to true and will only use "show" internally. Modpack makers (and players) are expected to only use "hide" to hide stuff and use "show" to unhide stuff that Ender IO has hidden.</documentation>
      </annotation></attribute>
    <attribute name="hide" type="boolean" use="optional" default="false">
      <annotation>
        <documentation>An element will be hidden if:

(1) there exists a configuration for it. Elements that are never configured will not be hidden.

(2) There is no configuration that sets "show" to true OR

(3) There is at least one configuration that sets "hide" to true.

Ender IO itself will never set "hide" to true and will only use "show" internally. Modpack makers (and players) are expected to only use "hide" to hide stuff and use "show" to unhide stuff that Ender IO has hidden.</documentation>
      </annotation></attribute>
  </complexType>
  <complexType name="itemHidingType">
    <attribute use="required" name="name" type="enderio:ThingsString" />
    <attribute name="show" type="boolean" use="optional" default="false">
      <annotation>
        <documentation>An element will be hidden if:

(1) there exists a configuration for it. Elements that are never configured will not be hidden.

(2) There is no configuration that sets "show" to true OR

(3) There is at least one configuration that sets "hide" to true.

Ender IO itself will never set "hide" to true and will only use "show" internally. Modpack makers (and players) are expected to only use "hide" to hide stuff and use "show" to unhide stuff that Ender IO has hidden.</documentation>
      </annotation></attribute>
    <attribute name="hide" type="boolean" use="optional" default="false">
      <annotation>
        <documentation>An element will be hidden if:

(1) there exists a configuration for it. Elements that are never configured will not be hidden.

(2) There is no configuration that sets "show" to true OR

(3) There is at least one configuration that sets "hide" to true.

Ender IO itself will never set "hide" to true and will only use "show" internally. Modpack makers (and players) are expected to only use "hide" to hide stuff and use "show" to unhide stuff that Ender IO has hidden.</documentation>
      </annotation></attribute>
  </complexType>
  <complexType name="fluidType">
    <attribute name="name" type="string" use="required">
      <annotation>
        <documentation>The ID of a fluid.</documentation>
      </annotation>
    </attribute>
    <attribute name="nbt" type="string" use="optional">
      <annotation>
        <documentation>NBT for the fluid stack.</documentation>
      </annotation></attribute>
    <attribute name="amount" use="optional" default="1000">
      <annotation>
        <documentation>Amount of fluid in mB.</documentation>
      </annotation>
      <simpleType>
        <restriction base="int">
          <minInclusive value="0"></minInclusive>
        </restriction>
      </simpleType>
    </attribute>
  </complexType>
  <complexType name="itemType">
    <attribute use="optional" name="name" type="enderio:ThingsString" />
    <attribute name="nbt" type="string" use="optional" />
    <attribute name="potion" type="string" use="optional">
      <annotation>
        <documentation>The registry name of a potion effect. If this is given, a potion bottle with this effect is created. Cannot be used together with name or nbt.</documentation>
      </annotation></attribute>
  </complexType>
  <simpleType name="ThingsString">
        <annotation>
          <documentation>A string that specifies one or more items, consisting of a comma-separated list of item specifiers. Specifiers may be prefixed with a "+" or "-", the latter removes that item from the list.

If this is used as an input, all items in the list will be used. If it is used as an output, only the first one is used. The list can contain non-existing items as long as there also is at least one existing one.

Each specifuer can be one of 4 things:

(1) An alias, e.g. "IRON"

(2) An oredict name, e.g. "ingotIron". Oredict names can be prefixed with "oredict:" to prevent confusion, e.g. "oredict:ingotIron"

(3) The resource location of a block, e.g. "minecraft:stone". Block resource locations may be prefixed with "block:" to prevent confusion, e.g. "block:minecraft:stone". In recipes these will only work if that block has a corresponding item that is internally linked to the block.

(4) The resource location of an item, e.g. "minecraft:iron_ingot". Item resource locations may be prefixed with "item:" to prevent confusion, e.g. "item:minecraft:iron_ingot". A number of items have blocks with the same name that are NOT linked, for them the "item:" prefix is required. Items can further be limited to specific meta values by postfixing with ":(number)", e.g. "item:minecraft:stone:3".

</documentation>
        </annotation>
        <restriction base="string">
      <pattern value="((\+|\-)?(([A-Z0-9_]+)|(((item:)?([a-z][a-z0-9_-]*:)?[a-z][a-z0-9_-]*(:(\*|\d+))?))|((block:)?([a-z][a-z0-9_-]*:)?[a-z][a-z0-9_-]*)|((oredict:)?[a-zA-Z][A-Za-z0-9_-]*)))(,\s*(\+|\-)?(([A-Z0-9_]+)|(((item:)?([a-z][a-z0-9_-]*:)?[a-z][a-z0-9_-]*(:(\*|\d+))?))|((block:)?([a-z][a-z0-9_-]*:)?[a-z][a-z0-9_-]*)|((oredict:)?[a-zA-Z][A-Za-z0-9_-]*)))*"></pattern>
      <whiteSpace value="collapse"></whiteSpace>
    </restriction>
  </simpleType>

</schema>