<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wikivg.fentanylsolutions.org/index.php?action=history&amp;feed=atom&amp;title=Internal_versioning</id>
	<title>Internal versioning - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wikivg.fentanylsolutions.org/index.php?action=history&amp;feed=atom&amp;title=Internal_versioning"/>
	<link rel="alternate" type="text/html" href="https://wikivg.fentanylsolutions.org/index.php?title=Internal_versioning&amp;action=history"/>
	<updated>2026-05-05T19:00:41Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.5</generator>
	<entry>
		<id>https://wikivg.fentanylsolutions.org/index.php?title=Internal_versioning&amp;diff=1329&amp;oldid=prev</id>
		<title>imported&gt;Root op: Explains the internal versioning number Minecraft uses, plus a POC.</title>
		<link rel="alternate" type="text/html" href="https://wikivg.fentanylsolutions.org/index.php?title=Internal_versioning&amp;diff=1329&amp;oldid=prev"/>
		<updated>2011-08-11T16:22:27Z</updated>

		<summary type="html">&lt;p&gt;Explains the internal versioning number Minecraft uses, plus a POC.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;The version used by the GameUpdate procedure differs from what the end-user sees, as many may have noticed by viewing the contents of the version file.&lt;br /&gt;
One who is up-to-date with version 1.7.3 as an example would have it containing the number 1310111031000 with an additional nul character prepended.&lt;br /&gt;
&lt;br /&gt;
This number does not in any way relate or resolve to the update version, but is in fact a UNIX timestamp telling when the update was uploaded.&lt;br /&gt;
&lt;br /&gt;
It might not come to you as a surprise that Minecraft primarily uses Amazon services for both their homepage and update storage location (downloading from https://s3.amazonaws.com/MinecraftDownload/minecraft.jar might&amp;#039;ve give that away).&lt;br /&gt;
&lt;br /&gt;
Truth be told, Amazon maintains a quite extensive HTTP based API to interface with their service, both for end-user and administration purposes.&lt;br /&gt;
However, the MinecraftDownload bucket [http://www.labnol.org/internet/tools/amazon-s3-buckets-tutorial/3890/] is privilege limited with Amazons internal Access Control Lists.&lt;br /&gt;
&lt;br /&gt;
We can however utilize what is described as the HEAD [http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectHEAD.html] operation to determine the timestamp of the latest update.&lt;br /&gt;
&lt;br /&gt;
The HEAD operation returns a fair bit of HTTP response headers, including one named Last-Modified. This header contains a RFC1123 formatted date string that easily can be parsed into a UNIX timestamp.&lt;br /&gt;
&lt;br /&gt;
== Java POC ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.text.SimpleDateFormat;&lt;br /&gt;
import java.util.Date;&lt;br /&gt;
import java.util.Locale;&lt;br /&gt;
&lt;br /&gt;
class VersionPOC {&lt;br /&gt;
  public static String RFC1123_PATTERN = &amp;quot;EEE, dd MMM yyyyy HH:mm:ss z&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  public static main(String args[])&lt;br /&gt;
  {&lt;br /&gt;
    long              timestamp  = 0;&lt;br /&gt;
    HttpURLConnection connection = null;&lt;br /&gt;
&lt;br /&gt;
    try {&lt;br /&gt;
      URL minecraftJar = new URL(&amp;quot;http://s3.amazonaws.com/MinecraftDownload/minecraft.jar&amp;quot;);&lt;br /&gt;
      connection = (HttpURLConnection)minecraftJar.openConnection();&lt;br /&gt;
			&lt;br /&gt;
      connection.setUseCaches(false);&lt;br /&gt;
      connection.setRequestMethod(&amp;quot;HEAD&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
      timestamp = new SimpleDateFormat(RFC1123_PATTERN, Locale.US)      .&lt;br /&gt;
                      parse(connection.getHeaderField(&amp;quot;Last-Modified&amp;quot;)) .&lt;br /&gt;
                      getTime();&lt;br /&gt;
			&lt;br /&gt;
      System.out.println(&amp;quot;Latest internal version is &amp;quot; + timestamp);&lt;br /&gt;
			&lt;br /&gt;
      connection.disconnect();&lt;br /&gt;
    } catch (Exception except) {&lt;br /&gt;
      except.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>imported&gt;Root op</name></author>
	</entry>
</feed>