package amidst.version; import java.io.File; import java.util.ArrayList; import amidst.json.InstallInformation; public class MinecraftProfile implements ILatestVersionListListener { public enum Status { IDLE("scanning"), MISSING("missing"), FAILED("failed"), FOUND("found"); private String name; private Status(String name) { this.name = name; } @Override public String toString() { return name; } } private ArrayList<IProfileUpdateListener> listeners = new ArrayList<IProfileUpdateListener>(); private MinecraftVersion version; private InstallInformation profile; private Status status = Status.IDLE; private String versionName = "unknown"; public MinecraftProfile(InstallInformation profile) { this.profile = profile; if (profile.lastVersionId.equals("latest")) { LatestVersionList.get().addAndNotifyLoadListener(this); } else { version = MinecraftVersion.fromVersionId(profile.lastVersionId); if (version == null) { status = Status.MISSING; return; } status = Status.FOUND; versionName = version.getName(); } } public String getProfileName() { return profile.name; } public String getGameDir() { return profile.gameDir; } public String getVersionName() { return versionName; } public void addUpdateListener(IProfileUpdateListener listener) { listeners.add(listener); } public void removeUpdateListener(IProfileUpdateListener listener) { listeners.remove(listener); } public Status getStatus() { return status; } @Override public void onLoadStateChange(LatestVersionListEvent event) { switch (event.getSource().getLoadState()) { case FAILED: status = Status.FAILED; break; case IDLE: status = Status.IDLE; break; case LOADED: status = Status.FOUND; boolean usingSnapshots = false; for (int i = 0; i < profile.allowedReleaseTypes.length; i++) if (profile.allowedReleaseTypes[i].equals("snapshot")) usingSnapshots = true; if (usingSnapshots) version = MinecraftVersion.fromLatestSnapshot(); else version = MinecraftVersion.fromLatestRelease(); if (version == null) status = Status.FAILED; else versionName = version.getName(); break; case LOADING: status = Status.IDLE; break; } for (IProfileUpdateListener listener: listeners) listener.onProfileUpdate(new ProfileUpdateEvent(this)); } public File getJarFile() { return version.getJarFile(); } }