package com.laytonsmith.abstraction.enums;
import com.laytonsmith.PureUtilities.Common.StringUtils;
import com.laytonsmith.PureUtilities.Version;
/**
* Created by jb_aero on 3/17/2015.
* <p/>
* This may require unforeseen changes later to support fossil versions, but odds are support will not be requested.
*/
public enum MCVersion implements Version {
/**
* Baseline, highly unlikely anyone is running something before this
*/
MC1_0,
MC1_1,
MC1_2,
MC1_2_5,
MC1_3,
MC1_3_2,
MC1_4,
MC1_4_2,
MC1_4_5,
// below this point, Bukkit begins package versioning
MC1_4_7,
MC1_5,
MC1_5_2,
MC1_6,
MC1_6_2,
MC1_6_4,
MC1_7,
MC1_7_2,
MC1_7_X,
MC1_8,
MC1_8_3,
MC1_8_6,
MC1_8_7,
MC1_8_X,
MC1_9,
MC1_9_X,
MC1_9_4,
MC1_10,
MC1_10_X,
MC1_11,
MC1_11_X,
MC1_X,
MC2_X,
MCX_X,
CURRENT,
FUTURE,
NEVER;
public static MCVersion match(String[] source) {
String[] parts = new String[Math.min(3, source.length)];
for (int i = 0; i < parts.length; i++) {
parts[i] = source[i];
}
String attempt = "MC" + StringUtils.Join(parts, "_");
try {
return valueOf(attempt);
} catch (IllegalArgumentException iae) {
if (parts.length == 3) {
parts[2] = "0".equals(parts[2]) ? null : "X";
attempt = "MC" + StringUtils.Join(parts[2] == null ? new String[]{parts[0], parts[1]} : parts, "_");
try {
return valueOf(attempt);
} catch (IllegalArgumentException iae2) {
parts[1] = "X";
attempt = "MC" + StringUtils.Join(new String[]{parts[0], parts[1]}, "_");
try {
return valueOf(attempt);
} catch (IllegalArgumentException iae3) {
return MCX_X;
}
}
}
if (parts.length == 2) {
parts[1] = "X";
attempt = "MC" + StringUtils.Join(parts, "_");
try {
return valueOf(attempt);
} catch (IllegalArgumentException iae2) {
return MCX_X;
}
}
return MCX_X;
}
}
@Override
public int getMajor() {
String form = name().split("_")[0].substring(2);
if ("X".equals(form)) {
return -1;
}
return Integer.valueOf(form);
}
@Override
public int getMinor() {
String form = name().split("_")[1];
if ("X".equals(form)) {
return -1;
}
return Integer.valueOf(form);
}
@Override
public int getSupplemental() {
String[] parts = name().split("_");
if (parts.length > 2) {
if ("X".equals(parts[2])) {
return -1;
}
return Integer.valueOf(parts[2]);
}
if (getMinor() == -1) {
return -1;
}
return Integer.valueOf(parts[2]);
}
@Override
public boolean lt(Version other) {
if (other instanceof MCVersion) {
return this.ordinal() < ((MCVersion) other).ordinal();
}
return false;
}
@Override
public boolean lte(Version other) {
if (other instanceof MCVersion) {
return !(this.ordinal() > ((MCVersion) other).ordinal());
}
return false;
}
@Override
public boolean gt(Version other) {
if (other instanceof MCVersion) {
return this.ordinal() > ((MCVersion) other).ordinal();
}
return false;
}
@Override
public boolean gte(Version other) {
if (other instanceof MCVersion) {
return !(this.ordinal() < ((MCVersion) other).ordinal());
}
return false;
}
}