Skip to content

Instantly share code, notes, and snippets.

@smbarbour
Last active January 30, 2025 17:42
Show Gist options
  • Save smbarbour/b5287cce6f2b5d668a1cf9e45ce07413 to your computer and use it in GitHub Desktop.
Save smbarbour/b5287cce6f2b5d668a1cf9e45ce07413 to your computer and use it in GitHub Desktop.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.mcupdater.com" xmlns:tns="http://www.mcupdater.com" elementFormDefault="qualified">
<xs:element name="ServerPack">
<xs:complexType>
<xs:sequence>
<xs:element type="tns:ModPackType" name="ModPack" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute type="xs:string" name="version" use="required" />
</xs:complexType>
</xs:element>
<xs:complexType name="ModPackType">
<xs:sequence>
<xs:element type="tns:PageType" name="Page" minOccurs="0" maxOccurs="unbounded" />
<xs:element type="tns:ServerListType" name="Server" minOccurs="0" maxOccurs="unbounded" />
<xs:element type="tns:ImportType" name="Import" minOccurs="0" maxOccurs="unbounded" />
<xs:element type="tns:LoaderType" name="Loader" minOccurs="0" maxOccurs="unbounded" />
<xs:element type="tns:ModuleType" name="Module" minOccurs="0" maxOccurs="unbounded" />
<xs:element type="tns:SimpleDownloadType" name="Resourcepack" minOccurs="0" maxOccurs="unbounded" />
<xs:element type="tns:SimpleDownloadType" name="Datapack" minOccurs="0" maxOccurs="unbounded" />
<xs:element type="tns:SimpleDownloadType" name="Shaderpack" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute type="xs:string" name="id" use="required" />
<xs:attribute type="xs:boolean" name="abstract" use="optional" />
<xs:attribute type="xs:string" name="name" use="required" />
<xs:attribute type="xs:anyURI" name="iconUrl" use="optional" />
<xs:attribute type="xs:string" name="mcVersion" use="required" />
<xs:attribute type="xs:string" name="revision" use="required" />
<xs:attribute type="xs:string" name="mainClass" use="optional" />
<xs:attribute type="xs:string" name="launcherType" use="optional" default="Vanilla"/>
<xs:attribute type="xs:string" name="serverClass" use="optional" />
<xs:attribute type="xs:string" name="libOverrides" use="optional" />
</xs:complexType>
<xs:complexType name="ServerListType">
<xs:attribute type="xs:integer" name="order" default="0"/>
<xs:attribute type="xs:string" name="name"/>
</xs:complexType>
<xs:complexType name="PageType">
<xs:attribute type="xs:string" name="title" />
<xs:attribute type="xs:anyURI" name="address"/>
</xs:complexType>
<xs:complexType name="ImportType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:anyURI" name="url" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="LoaderType">
<xs:sequence>
<!-- Allows for future extensible subelements -->
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="type">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Forge"/>
<xs:enumeration value="NeoForge"/>
<!-- Future <xs:enumeration value="Fabric"/> -->
<!-- Future <xs:enumeration value="Quilt"/> -->
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute type="xs:string" name="version"/>
<xs:attribute type="xs:integer" name="loadOrder" default="0"/>
</xs:complexType>
<xs:complexType name="ModuleType">
<xs:complexContent>
<xs:extension base="tns:BaseModuleType">
<xs:sequence>
<xs:element type="tns:BaseModuleType" name="Submodule" minOccurs="0" maxOccurs="unbounded"/>
<xs:element type="tns:ConfigType" name="ConfigFile" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="BaseModuleType">
<xs:complexContent>
<xs:extension base="tns:DownloadableType">
<xs:sequence>
<xs:element type="xs:string" name="LoadPrefix" minOccurs="0" maxOccurs="1"/>
<xs:element type="xs:string" name="ModPath" minOccurs="0" maxOccurs="1"/>
<xs:element type="tns:RequiredType" name="Required" minOccurs="1" maxOccurs="1"/>
<xs:element type="tns:InstallType" name="Type" minOccurs="1" maxOccurs="1"/>
<xs:element type="tns:MetaType" name="Meta" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ConfigType">
<xs:complexContent>
<xs:extension base="tns:DownloadableType">
<xs:sequence>
<xs:element type="xs:string" name="Path" />
<xs:element type="xs:boolean" name="NoOverwrite" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="InstallType">
<xs:simpleContent>
<xs:extension base="tns:ModEnum">
<xs:attribute type="xs:boolean" name="inRoot" />
<xs:attribute type="xs:integer" name="order" />
<xs:attribute type="xs:boolean" name="keepMeta" />
<xs:attribute type="xs:string" name="launchArgs" />
<xs:attribute type="xs:string" name="jreArgs" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="RequiredType">
<xs:simpleContent>
<xs:extension base="xs:boolean">
<xs:attribute type="xs:boolean" name="isDefault"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="SimpleDownloadType">
<xs:complexContent>
<xs:extension base="tns:DownloadableType">
<xs:sequence>
<xs:element type="xs:string" name="FileName" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:attribute type="xs:string" name="name"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="DownloadableType">
<xs:sequence>
<xs:element type="tns:PrioritizedURLType" name="URL" minOccurs="0" maxOccurs="unbounded"/>
<xs:element type="tns:RepositoryType" name="Repository" minOccurs="0" maxOccurs="unbounded"/>
<xs:element type="tns:HashType" name="Hash" minOccurs="0" maxOccurs="unbounded"/>
<xs:element type="xs:long" name="Size" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="PrioritizedURLType">
<xs:attribute type="xs:anyURI" name="address" use="required"/>
<xs:attribute type="xs:integer" name="priority" default="0"/>
</xs:complexType>
<xs:complexType name="RepositoryType">
<xs:attribute type="xs:string" name="type" use="required"/>
<xs:attribute type="xs:string" name="project" />
<xs:attribute type="xs:string" name="file" />
</xs:complexType>
<xs:complexType name="HashType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="algorithm" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="MetaType">
<xs:sequence>
<!-- Metadata is freeform but the following are explicitly supported
<xs:element type="xs:string" name="version" minOccurs="0" />
<xs:element type="xs:string" name="authors" minOccurs="0" />
<xs:element type="xs:anyURI" name="URL" minOccurs="0" />
<xs:element type="xs:string" name="description" minOccurs="0" />
-->
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="ModEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="Regular" />
<xs:enumeration value="Library" />
<xs:enumeration value="Coremod" />
<xs:enumeration value="Jar" />
<xs:enumeration value="Extract" />
<xs:enumeration value="Litemod" />
<!-- <xs:enumeration value="Option" /> -->
<xs:enumeration value="Removal" />
<xs:enumeration value="Override" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment