// Path: projects/main/src/main/java/libshapedraw/ApiInfo.java
// public class ApiInfo {
//     public static String getName() {
//         return getInstance().name;
//     }
//     public static String getVersion() {
//         return getInstance().version;
//     }
//     public static boolean isVersionAtLeast(String minVersion) {
//         if (minVersion == null) {
//             throw new IllegalArgumentException("minVersion cannot be null");
//         }
//         return minVersion.compareTo(getInstance().version) <= 0;
//     }
//     @Deprecated public static String getUrl() {
//         return getInstance().urlMain.toString();
//     }
//     public static URL getUrlMain() {
//         return getInstance().urlMain;
//     }
//     public static URL getUrlShort() {
//         return getInstance().urlShort;
//     }
//     public static URL getUrlSource() {
//         return getInstance().urlSource;
//     }
//     public static URL getUrlUpdate() {
//         return getInstance().urlUpdate;
//     }
//     public static String getAuthors() {
//         return getInstance().authors;
//     }
//     public static File getModDirectory() {
//         return LSDModDirectory.DIRECTORY;
//     }
// 
//     private final String name;
//     private final String version;
//     private final URL urlMain;
//     private final URL urlShort;
//     private final URL urlSource;
//     private final URL urlUpdate;
//     private final String authors;
// 
//     private static ApiInfo instance;
// 
//     private ApiInfo() {
//         Properties props = new Properties();
//         InputStream in = getClass().getResourceAsStream("api.properties");
//         try {
//             props.load(in);
//             in.close();
//         } catch (IOException e) {
//             throw new LSDInternalException("unable to load resource", e);
//         }
//         name = notNull(props.getProperty("name"));
//         version = notNull(props.getProperty("version"));
//         urlMain = validUrl(props.getProperty("url-main"));
//         urlShort = validUrl(props.getProperty("url-short"));
//         urlSource = validUrl(props.getProperty("url-source"));
//         urlUpdate = validUrl(props.getProperty("url-update"));
//         authors = notNull(props.getProperty("authors"));
//     }
// 
//     private static ApiInfo getInstance() {
//         if (instance == null) {
//             instance = new ApiInfo();
//         }
//         return instance;
//     }
// 
//     private String notNull(String value) {
//         if (value == null) {
//             throw new IllegalArgumentException("value cannot be null");
//         }
//         return value;
//     }
// 
//     private URL validUrl(String value) {
//         try {
//             return new URL(notNull(value));
//         } catch (MalformedURLException e) {
//             throw new IllegalArgumentException("invalid url: " + value, e);
//         }
//     }
// }
// 
// Path: projects/main/src/main/java/libshapedraw/MinecraftAccess.java
// public interface MinecraftAccess {
//     /** Tessellator.instance.startDrawing */
//     public MinecraftAccess startDrawing(int mode);
// 
//     /** Tessellator.instance.addVertex */
//     public MinecraftAccess addVertex(double x, double y, double z);
// 
//     /** Tessellator.instance.addVertex */
//     public MinecraftAccess addVertex(ReadonlyVector3 coords);
// 
//     /** Tessellator.instance.draw */
//     public MinecraftAccess finishDrawing();
// 
//     /** RenderHelper.enableStandardItemLighting */
//     public MinecraftAccess enableStandardItemLighting();
// 
//     /** Minecraft.ingameGUI.getChatGUI().printChatMessage */
//     public MinecraftAccess sendChatMessage(String message);
// 
//     /** Minecraft.ingameGUI.getChatGUI() */
//     public boolean chatWindowExists();
// 
//     /** Minecraft.timer.renderPartialTicks */
//     public float getPartialTick();
// 
//     /** Minecraft.mcProfiler.startSection */
//     public MinecraftAccess profilerStartSection(String sectionName);
// 
//     /** Minecraft.mcProfiler.endSection */
//     public MinecraftAccess profilerEndSection();
// 
//     /** Minecraft.mcProfiler.endStartSection */
//     public MinecraftAccess profilerEndStartSection(String sectionName);
// }


import libshapedraw.ApiInfo;
import libshapedraw.MinecraftAccess;
package libshapedraw.internal;


/**
 * Internal class. Check the remote website for updates.
 * <p>
 * The server-side part of this is dead simple: a static text file hosted on a
 * web server.
 */
public class LSDUpdateCheck {
    public class UrlRetriever implements Runnable {
        @Override
        public void run() {
// Path: projects/main/src/main/java/libshapedraw/ApiInfo.java
// public class ApiInfo {
//     public static String getName() {
//         return getInstance().name;
//     }
//     public static String getVersion() {
//         return getInstance().version;
//     }
//     public static boolean isVersionAtLeast(String minVersion) {
//         if (minVersion == null) {
//             throw new IllegalArgumentException("minVersion cannot be null");
//         }
//         return minVersion.compareTo(getInstance().version) <= 0;
//     }
//     @Deprecated public static String getUrl() {
//         return getInstance().urlMain.toString();
//     }
//     public static URL getUrlMain() {
//         return getInstance().urlMain;
//     }
//     public static URL getUrlShort() {
//         return getInstance().urlShort;
//     }
//     public static URL getUrlSource() {
//         return getInstance().urlSource;
//     }
//     public static URL getUrlUpdate() {
//         return getInstance().urlUpdate;
//     }
//     public static String getAuthors() {
//         return getInstance().authors;
//     }
//     public static File getModDirectory() {
//         return LSDModDirectory.DIRECTORY;
//     }
// 
//     private final String name;
//     private final String version;
//     private final URL urlMain;
//     private final URL urlShort;
//     private final URL urlSource;
//     private final URL urlUpdate;
//     private final String authors;
// 
//     private static ApiInfo instance;
// 
//     private ApiInfo() {
//         Properties props = new Properties();
//         InputStream in = getClass().getResourceAsStream("api.properties");
//         try {
//             props.load(in);
//             in.close();
//         } catch (IOException e) {
//             throw new LSDInternalException("unable to load resource", e);
//         }
//         name = notNull(props.getProperty("name"));
//         version = notNull(props.getProperty("version"));
//         urlMain = validUrl(props.getProperty("url-main"));
//         urlShort = validUrl(props.getProperty("url-short"));
//         urlSource = validUrl(props.getProperty("url-source"));
//         urlUpdate = validUrl(props.getProperty("url-update"));
//         authors = notNull(props.getProperty("authors"));
//     }
// 
//     private static ApiInfo getInstance() {
//         if (instance == null) {
//             instance = new ApiInfo();
//         }
//         return instance;
//     }
// 
//     private String notNull(String value) {
//         if (value == null) {
//             throw new IllegalArgumentException("value cannot be null");
//         }
//         return value;
//     }
// 
//     private URL validUrl(String value) {
//         try {
//             return new URL(notNull(value));
//         } catch (MalformedURLException e) {
//             throw new IllegalArgumentException("invalid url: " + value, e);
//         }
//     }
// }
// 
// Path: projects/main/src/main/java/libshapedraw/MinecraftAccess.java
// public interface MinecraftAccess {
//     /** Tessellator.instance.startDrawing */
//     public MinecraftAccess startDrawing(int mode);
// 
//     /** Tessellator.instance.addVertex */
//     public MinecraftAccess addVertex(double x, double y, double z);
// 
//     /** Tessellator.instance.addVertex */
//     public MinecraftAccess addVertex(ReadonlyVector3 coords);
// 
//     /** Tessellator.instance.draw */
//     public MinecraftAccess finishDrawing();
// 
//     /** RenderHelper.enableStandardItemLighting */
//     public MinecraftAccess enableStandardItemLighting();
// 
//     /** Minecraft.ingameGUI.getChatGUI().printChatMessage */
//     public MinecraftAccess sendChatMessage(String message);
// 
//     /** Minecraft.ingameGUI.getChatGUI() */
//     public boolean chatWindowExists();
// 
//     /** Minecraft.timer.renderPartialTicks */
//     public float getPartialTick();
// 
//     /** Minecraft.mcProfiler.startSection */
//     public MinecraftAccess profilerStartSection(String sectionName);
// 
//     /** Minecraft.mcProfiler.endSection */
//     public MinecraftAccess profilerEndSection();
// 
//     /** Minecraft.mcProfiler.endStartSection */
//     public MinecraftAccess profilerEndStartSection(String sectionName);
// }


// Path: projects/main/src/main/java/libshapedraw/internal/LSDUpdateCheck.java
import libshapedraw.ApiInfo;
import libshapedraw.MinecraftAccess;

package libshapedraw.internal;


/**
 * Internal class. Check the remote website for updates.
 * <p>
 * The server-side part of this is dead simple: a static text file hosted on a
 * web server.
 */
public class LSDUpdateCheck {
    public class UrlRetriever implements Runnable {
        @Override
        public void run() {
            LSDController.getLog().info("update check request: " + ApiInfo.getUrlUpdate());