remove stats system
improve operations and make them extendable more easily and let other plugins add operations, like requirements move requirements/operations out of ranks class as they will be used in prestiges
This commit is contained in:
@@ -112,6 +112,61 @@ public class Metrics {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends the data to the bStats server.
|
||||||
|
*
|
||||||
|
* @param data The data to send.
|
||||||
|
* @throws Exception If the request failed.
|
||||||
|
*/
|
||||||
|
private static void sendData(JSONObject data) throws Exception {
|
||||||
|
if (data == null) {
|
||||||
|
throw new IllegalArgumentException("Data cannot be null!");
|
||||||
|
}
|
||||||
|
if (Bukkit.isPrimaryThread()) {
|
||||||
|
throw new IllegalAccessException("This method must not be called from the main thread!");
|
||||||
|
}
|
||||||
|
HttpsURLConnection connection = (HttpsURLConnection) new URL(URL).openConnection();
|
||||||
|
|
||||||
|
// Compress the data to save bandwidth
|
||||||
|
byte[] compressedData = compress(data.toString());
|
||||||
|
|
||||||
|
// Add headers
|
||||||
|
connection.setRequestMethod("POST");
|
||||||
|
connection.addRequestProperty("Accept", "application/json");
|
||||||
|
connection.addRequestProperty("Connection", "close");
|
||||||
|
connection.addRequestProperty("Content-Encoding", "gzip"); // We gzip our request
|
||||||
|
connection.addRequestProperty("Content-Length", String.valueOf(compressedData.length));
|
||||||
|
connection.setRequestProperty("Content-Type", "application/json"); // We send our data in JSON format
|
||||||
|
connection.setRequestProperty("User-Agent", "MC-Server/" + B_STATS_VERSION);
|
||||||
|
|
||||||
|
// Send data
|
||||||
|
connection.setDoOutput(true);
|
||||||
|
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
|
||||||
|
outputStream.write(compressedData);
|
||||||
|
outputStream.flush();
|
||||||
|
outputStream.close();
|
||||||
|
|
||||||
|
connection.getInputStream().close(); // We don't care about the response - Just send our data :)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gzips the given String.
|
||||||
|
*
|
||||||
|
* @param str The string to gzip.
|
||||||
|
* @return The gzipped String.
|
||||||
|
* @throws IOException If the compression failed.
|
||||||
|
*/
|
||||||
|
private static byte[] compress(final String str) throws IOException {
|
||||||
|
if (str == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||||
|
GZIPOutputStream gzip = new GZIPOutputStream(outputStream);
|
||||||
|
gzip.write(str.getBytes("UTF-8"));
|
||||||
|
gzip.close();
|
||||||
|
return outputStream.toByteArray();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a custom chart.
|
* Adds a custom chart.
|
||||||
*
|
*
|
||||||
@@ -257,58 +312,318 @@ public class Metrics {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends the data to the bStats server.
|
* A enum which is used for custom maps.
|
||||||
*
|
|
||||||
* @param data The data to send.
|
|
||||||
* @throws Exception If the request failed.
|
|
||||||
*/
|
*/
|
||||||
private static void sendData(JSONObject data) throws Exception {
|
public enum Country {
|
||||||
if (data == null) {
|
|
||||||
throw new IllegalArgumentException("Data cannot be null!");
|
/**
|
||||||
|
* bStats will use the country of the server.
|
||||||
|
*/
|
||||||
|
AUTO_DETECT("AUTO", "Auto Detected"),
|
||||||
|
|
||||||
|
ANDORRA("AD", "Andorra"),
|
||||||
|
UNITED_ARAB_EMIRATES("AE", "United Arab Emirates"),
|
||||||
|
AFGHANISTAN("AF", "Afghanistan"),
|
||||||
|
ANTIGUA_AND_BARBUDA("AG", "Antigua and Barbuda"),
|
||||||
|
ANGUILLA("AI", "Anguilla"),
|
||||||
|
ALBANIA("AL", "Albania"),
|
||||||
|
ARMENIA("AM", "Armenia"),
|
||||||
|
NETHERLANDS_ANTILLES("AN", "Netherlands Antilles"),
|
||||||
|
ANGOLA("AO", "Angola"),
|
||||||
|
ANTARCTICA("AQ", "Antarctica"),
|
||||||
|
ARGENTINA("AR", "Argentina"),
|
||||||
|
AMERICAN_SAMOA("AS", "American Samoa"),
|
||||||
|
AUSTRIA("AT", "Austria"),
|
||||||
|
AUSTRALIA("AU", "Australia"),
|
||||||
|
ARUBA("AW", "Aruba"),
|
||||||
|
ÅLAND_ISLANDS("AX", "Åland Islands"),
|
||||||
|
AZERBAIJAN("AZ", "Azerbaijan"),
|
||||||
|
BOSNIA_AND_HERZEGOVINA("BA", "Bosnia and Herzegovina"),
|
||||||
|
BARBADOS("BB", "Barbados"),
|
||||||
|
BANGLADESH("BD", "Bangladesh"),
|
||||||
|
BELGIUM("BE", "Belgium"),
|
||||||
|
BURKINA_FASO("BF", "Burkina Faso"),
|
||||||
|
BULGARIA("BG", "Bulgaria"),
|
||||||
|
BAHRAIN("BH", "Bahrain"),
|
||||||
|
BURUNDI("BI", "Burundi"),
|
||||||
|
BENIN("BJ", "Benin"),
|
||||||
|
SAINT_BARTHÉLEMY("BL", "Saint Barthélemy"),
|
||||||
|
BERMUDA("BM", "Bermuda"),
|
||||||
|
BRUNEI("BN", "Brunei"),
|
||||||
|
BOLIVIA("BO", "Bolivia"),
|
||||||
|
BONAIRE_SINT_EUSTATIUS_AND_SABA("BQ", "Bonaire, Sint Eustatius and Saba"),
|
||||||
|
BRAZIL("BR", "Brazil"),
|
||||||
|
BAHAMAS("BS", "Bahamas"),
|
||||||
|
BHUTAN("BT", "Bhutan"),
|
||||||
|
BOUVET_ISLAND("BV", "Bouvet Island"),
|
||||||
|
BOTSWANA("BW", "Botswana"),
|
||||||
|
BELARUS("BY", "Belarus"),
|
||||||
|
BELIZE("BZ", "Belize"),
|
||||||
|
CANADA("CA", "Canada"),
|
||||||
|
COCOS_ISLANDS("CC", "Cocos Islands"),
|
||||||
|
THE_DEMOCRATIC_REPUBLIC_OF_CONGO("CD", "The Democratic Republic Of Congo"),
|
||||||
|
CENTRAL_AFRICAN_REPUBLIC("CF", "Central African Republic"),
|
||||||
|
CONGO("CG", "Congo"),
|
||||||
|
SWITZERLAND("CH", "Switzerland"),
|
||||||
|
CÔTE_D_IVOIRE("CI", "Côte d'Ivoire"),
|
||||||
|
COOK_ISLANDS("CK", "Cook Islands"),
|
||||||
|
CHILE("CL", "Chile"),
|
||||||
|
CAMEROON("CM", "Cameroon"),
|
||||||
|
CHINA("CN", "China"),
|
||||||
|
COLOMBIA("CO", "Colombia"),
|
||||||
|
COSTA_RICA("CR", "Costa Rica"),
|
||||||
|
CUBA("CU", "Cuba"),
|
||||||
|
CAPE_VERDE("CV", "Cape Verde"),
|
||||||
|
CURAÇAO("CW", "Curaçao"),
|
||||||
|
CHRISTMAS_ISLAND("CX", "Christmas Island"),
|
||||||
|
CYPRUS("CY", "Cyprus"),
|
||||||
|
CZECH_REPUBLIC("CZ", "Czech Republic"),
|
||||||
|
GERMANY("DE", "Germany"),
|
||||||
|
DJIBOUTI("DJ", "Djibouti"),
|
||||||
|
DENMARK("DK", "Denmark"),
|
||||||
|
DOMINICA("DM", "Dominica"),
|
||||||
|
DOMINICAN_REPUBLIC("DO", "Dominican Republic"),
|
||||||
|
ALGERIA("DZ", "Algeria"),
|
||||||
|
ECUADOR("EC", "Ecuador"),
|
||||||
|
ESTONIA("EE", "Estonia"),
|
||||||
|
EGYPT("EG", "Egypt"),
|
||||||
|
WESTERN_SAHARA("EH", "Western Sahara"),
|
||||||
|
ERITREA("ER", "Eritrea"),
|
||||||
|
SPAIN("ES", "Spain"),
|
||||||
|
ETHIOPIA("ET", "Ethiopia"),
|
||||||
|
FINLAND("FI", "Finland"),
|
||||||
|
FIJI("FJ", "Fiji"),
|
||||||
|
FALKLAND_ISLANDS("FK", "Falkland Islands"),
|
||||||
|
MICRONESIA("FM", "Micronesia"),
|
||||||
|
FAROE_ISLANDS("FO", "Faroe Islands"),
|
||||||
|
FRANCE("FR", "France"),
|
||||||
|
GABON("GA", "Gabon"),
|
||||||
|
UNITED_KINGDOM("GB", "United Kingdom"),
|
||||||
|
GRENADA("GD", "Grenada"),
|
||||||
|
GEORGIA("GE", "Georgia"),
|
||||||
|
FRENCH_GUIANA("GF", "French Guiana"),
|
||||||
|
GUERNSEY("GG", "Guernsey"),
|
||||||
|
GHANA("GH", "Ghana"),
|
||||||
|
GIBRALTAR("GI", "Gibraltar"),
|
||||||
|
GREENLAND("GL", "Greenland"),
|
||||||
|
GAMBIA("GM", "Gambia"),
|
||||||
|
GUINEA("GN", "Guinea"),
|
||||||
|
GUADELOUPE("GP", "Guadeloupe"),
|
||||||
|
EQUATORIAL_GUINEA("GQ", "Equatorial Guinea"),
|
||||||
|
GREECE("GR", "Greece"),
|
||||||
|
SOUTH_GEORGIA_AND_THE_SOUTH_SANDWICH_ISLANDS("GS", "South Georgia And The South Sandwich Islands"),
|
||||||
|
GUATEMALA("GT", "Guatemala"),
|
||||||
|
GUAM("GU", "Guam"),
|
||||||
|
GUINEA_BISSAU("GW", "Guinea-Bissau"),
|
||||||
|
GUYANA("GY", "Guyana"),
|
||||||
|
HONG_KONG("HK", "Hong Kong"),
|
||||||
|
HEARD_ISLAND_AND_MCDONALD_ISLANDS("HM", "Heard Island And McDonald Islands"),
|
||||||
|
HONDURAS("HN", "Honduras"),
|
||||||
|
CROATIA("HR", "Croatia"),
|
||||||
|
HAITI("HT", "Haiti"),
|
||||||
|
HUNGARY("HU", "Hungary"),
|
||||||
|
INDONESIA("ID", "Indonesia"),
|
||||||
|
IRELAND("IE", "Ireland"),
|
||||||
|
ISRAEL("IL", "Israel"),
|
||||||
|
ISLE_OF_MAN("IM", "Isle Of Man"),
|
||||||
|
INDIA("IN", "India"),
|
||||||
|
BRITISH_INDIAN_OCEAN_TERRITORY("IO", "British Indian Ocean Territory"),
|
||||||
|
IRAQ("IQ", "Iraq"),
|
||||||
|
IRAN("IR", "Iran"),
|
||||||
|
ICELAND("IS", "Iceland"),
|
||||||
|
ITALY("IT", "Italy"),
|
||||||
|
JERSEY("JE", "Jersey"),
|
||||||
|
JAMAICA("JM", "Jamaica"),
|
||||||
|
JORDAN("JO", "Jordan"),
|
||||||
|
JAPAN("JP", "Japan"),
|
||||||
|
KENYA("KE", "Kenya"),
|
||||||
|
KYRGYZSTAN("KG", "Kyrgyzstan"),
|
||||||
|
CAMBODIA("KH", "Cambodia"),
|
||||||
|
KIRIBATI("KI", "Kiribati"),
|
||||||
|
COMOROS("KM", "Comoros"),
|
||||||
|
SAINT_KITTS_AND_NEVIS("KN", "Saint Kitts And Nevis"),
|
||||||
|
NORTH_KOREA("KP", "North Korea"),
|
||||||
|
SOUTH_KOREA("KR", "South Korea"),
|
||||||
|
KUWAIT("KW", "Kuwait"),
|
||||||
|
CAYMAN_ISLANDS("KY", "Cayman Islands"),
|
||||||
|
KAZAKHSTAN("KZ", "Kazakhstan"),
|
||||||
|
LAOS("LA", "Laos"),
|
||||||
|
LEBANON("LB", "Lebanon"),
|
||||||
|
SAINT_LUCIA("LC", "Saint Lucia"),
|
||||||
|
LIECHTENSTEIN("LI", "Liechtenstein"),
|
||||||
|
SRI_LANKA("LK", "Sri Lanka"),
|
||||||
|
LIBERIA("LR", "Liberia"),
|
||||||
|
LESOTHO("LS", "Lesotho"),
|
||||||
|
LITHUANIA("LT", "Lithuania"),
|
||||||
|
LUXEMBOURG("LU", "Luxembourg"),
|
||||||
|
LATVIA("LV", "Latvia"),
|
||||||
|
LIBYA("LY", "Libya"),
|
||||||
|
MOROCCO("MA", "Morocco"),
|
||||||
|
MONACO("MC", "Monaco"),
|
||||||
|
MOLDOVA("MD", "Moldova"),
|
||||||
|
MONTENEGRO("ME", "Montenegro"),
|
||||||
|
SAINT_MARTIN("MF", "Saint Martin"),
|
||||||
|
MADAGASCAR("MG", "Madagascar"),
|
||||||
|
MARSHALL_ISLANDS("MH", "Marshall Islands"),
|
||||||
|
MACEDONIA("MK", "Macedonia"),
|
||||||
|
MALI("ML", "Mali"),
|
||||||
|
MYANMAR("MM", "Myanmar"),
|
||||||
|
MONGOLIA("MN", "Mongolia"),
|
||||||
|
MACAO("MO", "Macao"),
|
||||||
|
NORTHERN_MARIANA_ISLANDS("MP", "Northern Mariana Islands"),
|
||||||
|
MARTINIQUE("MQ", "Martinique"),
|
||||||
|
MAURITANIA("MR", "Mauritania"),
|
||||||
|
MONTSERRAT("MS", "Montserrat"),
|
||||||
|
MALTA("MT", "Malta"),
|
||||||
|
MAURITIUS("MU", "Mauritius"),
|
||||||
|
MALDIVES("MV", "Maldives"),
|
||||||
|
MALAWI("MW", "Malawi"),
|
||||||
|
MEXICO("MX", "Mexico"),
|
||||||
|
MALAYSIA("MY", "Malaysia"),
|
||||||
|
MOZAMBIQUE("MZ", "Mozambique"),
|
||||||
|
NAMIBIA("NA", "Namibia"),
|
||||||
|
NEW_CALEDONIA("NC", "New Caledonia"),
|
||||||
|
NIGER("NE", "Niger"),
|
||||||
|
NORFOLK_ISLAND("NF", "Norfolk Island"),
|
||||||
|
NIGERIA("NG", "Nigeria"),
|
||||||
|
NICARAGUA("NI", "Nicaragua"),
|
||||||
|
NETHERLANDS("NL", "Netherlands"),
|
||||||
|
NORWAY("NO", "Norway"),
|
||||||
|
NEPAL("NP", "Nepal"),
|
||||||
|
NAURU("NR", "Nauru"),
|
||||||
|
NIUE("NU", "Niue"),
|
||||||
|
NEW_ZEALAND("NZ", "New Zealand"),
|
||||||
|
OMAN("OM", "Oman"),
|
||||||
|
PANAMA("PA", "Panama"),
|
||||||
|
PERU("PE", "Peru"),
|
||||||
|
FRENCH_POLYNESIA("PF", "French Polynesia"),
|
||||||
|
PAPUA_NEW_GUINEA("PG", "Papua New Guinea"),
|
||||||
|
PHILIPPINES("PH", "Philippines"),
|
||||||
|
PAKISTAN("PK", "Pakistan"),
|
||||||
|
POLAND("PL", "Poland"),
|
||||||
|
SAINT_PIERRE_AND_MIQUELON("PM", "Saint Pierre And Miquelon"),
|
||||||
|
PITCAIRN("PN", "Pitcairn"),
|
||||||
|
PUERTO_RICO("PR", "Puerto Rico"),
|
||||||
|
PALESTINE("PS", "Palestine"),
|
||||||
|
PORTUGAL("PT", "Portugal"),
|
||||||
|
PALAU("PW", "Palau"),
|
||||||
|
PARAGUAY("PY", "Paraguay"),
|
||||||
|
QATAR("QA", "Qatar"),
|
||||||
|
REUNION("RE", "Reunion"),
|
||||||
|
ROMANIA("RO", "Romania"),
|
||||||
|
SERBIA("RS", "Serbia"),
|
||||||
|
RUSSIA("RU", "Russia"),
|
||||||
|
RWANDA("RW", "Rwanda"),
|
||||||
|
SAUDI_ARABIA("SA", "Saudi Arabia"),
|
||||||
|
SOLOMON_ISLANDS("SB", "Solomon Islands"),
|
||||||
|
SEYCHELLES("SC", "Seychelles"),
|
||||||
|
SUDAN("SD", "Sudan"),
|
||||||
|
SWEDEN("SE", "Sweden"),
|
||||||
|
SINGAPORE("SG", "Singapore"),
|
||||||
|
SAINT_HELENA("SH", "Saint Helena"),
|
||||||
|
SLOVENIA("SI", "Slovenia"),
|
||||||
|
SVALBARD_AND_JAN_MAYEN("SJ", "Svalbard And Jan Mayen"),
|
||||||
|
SLOVAKIA("SK", "Slovakia"),
|
||||||
|
SIERRA_LEONE("SL", "Sierra Leone"),
|
||||||
|
SAN_MARINO("SM", "San Marino"),
|
||||||
|
SENEGAL("SN", "Senegal"),
|
||||||
|
SOMALIA("SO", "Somalia"),
|
||||||
|
SURINAME("SR", "Suriname"),
|
||||||
|
SOUTH_SUDAN("SS", "South Sudan"),
|
||||||
|
SAO_TOME_AND_PRINCIPE("ST", "Sao Tome And Principe"),
|
||||||
|
EL_SALVADOR("SV", "El Salvador"),
|
||||||
|
SINT_MAARTEN_DUTCH_PART("SX", "Sint Maarten (Dutch part)"),
|
||||||
|
SYRIA("SY", "Syria"),
|
||||||
|
SWAZILAND("SZ", "Swaziland"),
|
||||||
|
TURKS_AND_CAICOS_ISLANDS("TC", "Turks And Caicos Islands"),
|
||||||
|
CHAD("TD", "Chad"),
|
||||||
|
FRENCH_SOUTHERN_TERRITORIES("TF", "French Southern Territories"),
|
||||||
|
TOGO("TG", "Togo"),
|
||||||
|
THAILAND("TH", "Thailand"),
|
||||||
|
TAJIKISTAN("TJ", "Tajikistan"),
|
||||||
|
TOKELAU("TK", "Tokelau"),
|
||||||
|
TIMOR_LESTE("TL", "Timor-Leste"),
|
||||||
|
TURKMENISTAN("TM", "Turkmenistan"),
|
||||||
|
TUNISIA("TN", "Tunisia"),
|
||||||
|
TONGA("TO", "Tonga"),
|
||||||
|
TURKEY("TR", "Turkey"),
|
||||||
|
TRINIDAD_AND_TOBAGO("TT", "Trinidad and Tobago"),
|
||||||
|
TUVALU("TV", "Tuvalu"),
|
||||||
|
TAIWAN("TW", "Taiwan"),
|
||||||
|
TANZANIA("TZ", "Tanzania"),
|
||||||
|
UKRAINE("UA", "Ukraine"),
|
||||||
|
UGANDA("UG", "Uganda"),
|
||||||
|
UNITED_STATES_MINOR_OUTLYING_ISLANDS("UM", "United States Minor Outlying Islands"),
|
||||||
|
UNITED_STATES("US", "United States"),
|
||||||
|
URUGUAY("UY", "Uruguay"),
|
||||||
|
UZBEKISTAN("UZ", "Uzbekistan"),
|
||||||
|
VATICAN("VA", "Vatican"),
|
||||||
|
SAINT_VINCENT_AND_THE_GRENADINES("VC", "Saint Vincent And The Grenadines"),
|
||||||
|
VENEZUELA("VE", "Venezuela"),
|
||||||
|
BRITISH_VIRGIN_ISLANDS("VG", "British Virgin Islands"),
|
||||||
|
U_S__VIRGIN_ISLANDS("VI", "U.S. Virgin Islands"),
|
||||||
|
VIETNAM("VN", "Vietnam"),
|
||||||
|
VANUATU("VU", "Vanuatu"),
|
||||||
|
WALLIS_AND_FUTUNA("WF", "Wallis And Futuna"),
|
||||||
|
SAMOA("WS", "Samoa"),
|
||||||
|
YEMEN("YE", "Yemen"),
|
||||||
|
MAYOTTE("YT", "Mayotte"),
|
||||||
|
SOUTH_AFRICA("ZA", "South Africa"),
|
||||||
|
ZAMBIA("ZM", "Zambia"),
|
||||||
|
ZIMBABWE("ZW", "Zimbabwe");
|
||||||
|
|
||||||
|
private String isoTag;
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
Country(String isoTag, String name) {
|
||||||
|
this.isoTag = isoTag;
|
||||||
|
this.name = name;
|
||||||
}
|
}
|
||||||
if (Bukkit.isPrimaryThread()) {
|
|
||||||
throw new IllegalAccessException("This method must not be called from the main thread!");
|
|
||||||
}
|
|
||||||
HttpsURLConnection connection = (HttpsURLConnection) new URL(URL).openConnection();
|
|
||||||
|
|
||||||
// Compress the data to save bandwidth
|
/**
|
||||||
byte[] compressedData = compress(data.toString());
|
* Gets a country by it's iso tag.
|
||||||
|
*
|
||||||
// Add headers
|
* @param isoTag The iso tag of the county.
|
||||||
connection.setRequestMethod("POST");
|
* @return The country with the given iso tag or <code>null</code> if unknown.
|
||||||
connection.addRequestProperty("Accept", "application/json");
|
*/
|
||||||
connection.addRequestProperty("Connection", "close");
|
public static Country byIsoTag(String isoTag) {
|
||||||
connection.addRequestProperty("Content-Encoding", "gzip"); // We gzip our request
|
for (Country country : Country.values()) {
|
||||||
connection.addRequestProperty("Content-Length", String.valueOf(compressedData.length));
|
if (country.getCountryIsoTag().equals(isoTag)) {
|
||||||
connection.setRequestProperty("Content-Type", "application/json"); // We send our data in JSON format
|
return country;
|
||||||
connection.setRequestProperty("User-Agent", "MC-Server/" + B_STATS_VERSION);
|
}
|
||||||
|
}
|
||||||
// Send data
|
|
||||||
connection.setDoOutput(true);
|
|
||||||
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
|
|
||||||
outputStream.write(compressedData);
|
|
||||||
outputStream.flush();
|
|
||||||
outputStream.close();
|
|
||||||
|
|
||||||
connection.getInputStream().close(); // We don't care about the response - Just send our data :)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gzips the given String.
|
|
||||||
*
|
|
||||||
* @param str The string to gzip.
|
|
||||||
* @return The gzipped String.
|
|
||||||
* @throws IOException If the compression failed.
|
|
||||||
*/
|
|
||||||
private static byte[] compress(final String str) throws IOException {
|
|
||||||
if (str == null) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
|
||||||
GZIPOutputStream gzip = new GZIPOutputStream(outputStream);
|
/**
|
||||||
gzip.write(str.getBytes("UTF-8"));
|
* Gets a country by a locale.
|
||||||
gzip.close();
|
*
|
||||||
return outputStream.toByteArray();
|
* @param locale The locale.
|
||||||
|
* @return The country from the giben locale or <code>null</code> if unknown country or
|
||||||
|
* if the locale does not contain a country.
|
||||||
|
*/
|
||||||
|
public static Country byLocale(Locale locale) {
|
||||||
|
return byIsoTag(locale.getCountry());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the name of the country.
|
||||||
|
*
|
||||||
|
* @return The name of the country.
|
||||||
|
*/
|
||||||
|
public String getCountryName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the iso tag of the country.
|
||||||
|
*
|
||||||
|
* @return The iso tag of the country.
|
||||||
|
*/
|
||||||
|
public String getCountryIsoTag() {
|
||||||
|
return isoTag;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -608,319 +923,4 @@ public class Metrics {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* A enum which is used for custom maps.
|
|
||||||
*/
|
|
||||||
public enum Country {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* bStats will use the country of the server.
|
|
||||||
*/
|
|
||||||
AUTO_DETECT("AUTO", "Auto Detected"),
|
|
||||||
|
|
||||||
ANDORRA("AD", "Andorra"),
|
|
||||||
UNITED_ARAB_EMIRATES("AE", "United Arab Emirates"),
|
|
||||||
AFGHANISTAN("AF", "Afghanistan"),
|
|
||||||
ANTIGUA_AND_BARBUDA("AG", "Antigua and Barbuda"),
|
|
||||||
ANGUILLA("AI", "Anguilla"),
|
|
||||||
ALBANIA("AL", "Albania"),
|
|
||||||
ARMENIA("AM", "Armenia"),
|
|
||||||
NETHERLANDS_ANTILLES("AN", "Netherlands Antilles"),
|
|
||||||
ANGOLA("AO", "Angola"),
|
|
||||||
ANTARCTICA("AQ", "Antarctica"),
|
|
||||||
ARGENTINA("AR", "Argentina"),
|
|
||||||
AMERICAN_SAMOA("AS", "American Samoa"),
|
|
||||||
AUSTRIA("AT", "Austria"),
|
|
||||||
AUSTRALIA("AU", "Australia"),
|
|
||||||
ARUBA("AW", "Aruba"),
|
|
||||||
ÅLAND_ISLANDS("AX", "Åland Islands"),
|
|
||||||
AZERBAIJAN("AZ", "Azerbaijan"),
|
|
||||||
BOSNIA_AND_HERZEGOVINA("BA", "Bosnia and Herzegovina"),
|
|
||||||
BARBADOS("BB", "Barbados"),
|
|
||||||
BANGLADESH("BD", "Bangladesh"),
|
|
||||||
BELGIUM("BE", "Belgium"),
|
|
||||||
BURKINA_FASO("BF", "Burkina Faso"),
|
|
||||||
BULGARIA("BG", "Bulgaria"),
|
|
||||||
BAHRAIN("BH", "Bahrain"),
|
|
||||||
BURUNDI("BI", "Burundi"),
|
|
||||||
BENIN("BJ", "Benin"),
|
|
||||||
SAINT_BARTHÉLEMY("BL", "Saint Barthélemy"),
|
|
||||||
BERMUDA("BM", "Bermuda"),
|
|
||||||
BRUNEI("BN", "Brunei"),
|
|
||||||
BOLIVIA("BO", "Bolivia"),
|
|
||||||
BONAIRE_SINT_EUSTATIUS_AND_SABA("BQ", "Bonaire, Sint Eustatius and Saba"),
|
|
||||||
BRAZIL("BR", "Brazil"),
|
|
||||||
BAHAMAS("BS", "Bahamas"),
|
|
||||||
BHUTAN("BT", "Bhutan"),
|
|
||||||
BOUVET_ISLAND("BV", "Bouvet Island"),
|
|
||||||
BOTSWANA("BW", "Botswana"),
|
|
||||||
BELARUS("BY", "Belarus"),
|
|
||||||
BELIZE("BZ", "Belize"),
|
|
||||||
CANADA("CA", "Canada"),
|
|
||||||
COCOS_ISLANDS("CC", "Cocos Islands"),
|
|
||||||
THE_DEMOCRATIC_REPUBLIC_OF_CONGO("CD", "The Democratic Republic Of Congo"),
|
|
||||||
CENTRAL_AFRICAN_REPUBLIC("CF", "Central African Republic"),
|
|
||||||
CONGO("CG", "Congo"),
|
|
||||||
SWITZERLAND("CH", "Switzerland"),
|
|
||||||
CÔTE_D_IVOIRE("CI", "Côte d'Ivoire"),
|
|
||||||
COOK_ISLANDS("CK", "Cook Islands"),
|
|
||||||
CHILE("CL", "Chile"),
|
|
||||||
CAMEROON("CM", "Cameroon"),
|
|
||||||
CHINA("CN", "China"),
|
|
||||||
COLOMBIA("CO", "Colombia"),
|
|
||||||
COSTA_RICA("CR", "Costa Rica"),
|
|
||||||
CUBA("CU", "Cuba"),
|
|
||||||
CAPE_VERDE("CV", "Cape Verde"),
|
|
||||||
CURAÇAO("CW", "Curaçao"),
|
|
||||||
CHRISTMAS_ISLAND("CX", "Christmas Island"),
|
|
||||||
CYPRUS("CY", "Cyprus"),
|
|
||||||
CZECH_REPUBLIC("CZ", "Czech Republic"),
|
|
||||||
GERMANY("DE", "Germany"),
|
|
||||||
DJIBOUTI("DJ", "Djibouti"),
|
|
||||||
DENMARK("DK", "Denmark"),
|
|
||||||
DOMINICA("DM", "Dominica"),
|
|
||||||
DOMINICAN_REPUBLIC("DO", "Dominican Republic"),
|
|
||||||
ALGERIA("DZ", "Algeria"),
|
|
||||||
ECUADOR("EC", "Ecuador"),
|
|
||||||
ESTONIA("EE", "Estonia"),
|
|
||||||
EGYPT("EG", "Egypt"),
|
|
||||||
WESTERN_SAHARA("EH", "Western Sahara"),
|
|
||||||
ERITREA("ER", "Eritrea"),
|
|
||||||
SPAIN("ES", "Spain"),
|
|
||||||
ETHIOPIA("ET", "Ethiopia"),
|
|
||||||
FINLAND("FI", "Finland"),
|
|
||||||
FIJI("FJ", "Fiji"),
|
|
||||||
FALKLAND_ISLANDS("FK", "Falkland Islands"),
|
|
||||||
MICRONESIA("FM", "Micronesia"),
|
|
||||||
FAROE_ISLANDS("FO", "Faroe Islands"),
|
|
||||||
FRANCE("FR", "France"),
|
|
||||||
GABON("GA", "Gabon"),
|
|
||||||
UNITED_KINGDOM("GB", "United Kingdom"),
|
|
||||||
GRENADA("GD", "Grenada"),
|
|
||||||
GEORGIA("GE", "Georgia"),
|
|
||||||
FRENCH_GUIANA("GF", "French Guiana"),
|
|
||||||
GUERNSEY("GG", "Guernsey"),
|
|
||||||
GHANA("GH", "Ghana"),
|
|
||||||
GIBRALTAR("GI", "Gibraltar"),
|
|
||||||
GREENLAND("GL", "Greenland"),
|
|
||||||
GAMBIA("GM", "Gambia"),
|
|
||||||
GUINEA("GN", "Guinea"),
|
|
||||||
GUADELOUPE("GP", "Guadeloupe"),
|
|
||||||
EQUATORIAL_GUINEA("GQ", "Equatorial Guinea"),
|
|
||||||
GREECE("GR", "Greece"),
|
|
||||||
SOUTH_GEORGIA_AND_THE_SOUTH_SANDWICH_ISLANDS("GS", "South Georgia And The South Sandwich Islands"),
|
|
||||||
GUATEMALA("GT", "Guatemala"),
|
|
||||||
GUAM("GU", "Guam"),
|
|
||||||
GUINEA_BISSAU("GW", "Guinea-Bissau"),
|
|
||||||
GUYANA("GY", "Guyana"),
|
|
||||||
HONG_KONG("HK", "Hong Kong"),
|
|
||||||
HEARD_ISLAND_AND_MCDONALD_ISLANDS("HM", "Heard Island And McDonald Islands"),
|
|
||||||
HONDURAS("HN", "Honduras"),
|
|
||||||
CROATIA("HR", "Croatia"),
|
|
||||||
HAITI("HT", "Haiti"),
|
|
||||||
HUNGARY("HU", "Hungary"),
|
|
||||||
INDONESIA("ID", "Indonesia"),
|
|
||||||
IRELAND("IE", "Ireland"),
|
|
||||||
ISRAEL("IL", "Israel"),
|
|
||||||
ISLE_OF_MAN("IM", "Isle Of Man"),
|
|
||||||
INDIA("IN", "India"),
|
|
||||||
BRITISH_INDIAN_OCEAN_TERRITORY("IO", "British Indian Ocean Territory"),
|
|
||||||
IRAQ("IQ", "Iraq"),
|
|
||||||
IRAN("IR", "Iran"),
|
|
||||||
ICELAND("IS", "Iceland"),
|
|
||||||
ITALY("IT", "Italy"),
|
|
||||||
JERSEY("JE", "Jersey"),
|
|
||||||
JAMAICA("JM", "Jamaica"),
|
|
||||||
JORDAN("JO", "Jordan"),
|
|
||||||
JAPAN("JP", "Japan"),
|
|
||||||
KENYA("KE", "Kenya"),
|
|
||||||
KYRGYZSTAN("KG", "Kyrgyzstan"),
|
|
||||||
CAMBODIA("KH", "Cambodia"),
|
|
||||||
KIRIBATI("KI", "Kiribati"),
|
|
||||||
COMOROS("KM", "Comoros"),
|
|
||||||
SAINT_KITTS_AND_NEVIS("KN", "Saint Kitts And Nevis"),
|
|
||||||
NORTH_KOREA("KP", "North Korea"),
|
|
||||||
SOUTH_KOREA("KR", "South Korea"),
|
|
||||||
KUWAIT("KW", "Kuwait"),
|
|
||||||
CAYMAN_ISLANDS("KY", "Cayman Islands"),
|
|
||||||
KAZAKHSTAN("KZ", "Kazakhstan"),
|
|
||||||
LAOS("LA", "Laos"),
|
|
||||||
LEBANON("LB", "Lebanon"),
|
|
||||||
SAINT_LUCIA("LC", "Saint Lucia"),
|
|
||||||
LIECHTENSTEIN("LI", "Liechtenstein"),
|
|
||||||
SRI_LANKA("LK", "Sri Lanka"),
|
|
||||||
LIBERIA("LR", "Liberia"),
|
|
||||||
LESOTHO("LS", "Lesotho"),
|
|
||||||
LITHUANIA("LT", "Lithuania"),
|
|
||||||
LUXEMBOURG("LU", "Luxembourg"),
|
|
||||||
LATVIA("LV", "Latvia"),
|
|
||||||
LIBYA("LY", "Libya"),
|
|
||||||
MOROCCO("MA", "Morocco"),
|
|
||||||
MONACO("MC", "Monaco"),
|
|
||||||
MOLDOVA("MD", "Moldova"),
|
|
||||||
MONTENEGRO("ME", "Montenegro"),
|
|
||||||
SAINT_MARTIN("MF", "Saint Martin"),
|
|
||||||
MADAGASCAR("MG", "Madagascar"),
|
|
||||||
MARSHALL_ISLANDS("MH", "Marshall Islands"),
|
|
||||||
MACEDONIA("MK", "Macedonia"),
|
|
||||||
MALI("ML", "Mali"),
|
|
||||||
MYANMAR("MM", "Myanmar"),
|
|
||||||
MONGOLIA("MN", "Mongolia"),
|
|
||||||
MACAO("MO", "Macao"),
|
|
||||||
NORTHERN_MARIANA_ISLANDS("MP", "Northern Mariana Islands"),
|
|
||||||
MARTINIQUE("MQ", "Martinique"),
|
|
||||||
MAURITANIA("MR", "Mauritania"),
|
|
||||||
MONTSERRAT("MS", "Montserrat"),
|
|
||||||
MALTA("MT", "Malta"),
|
|
||||||
MAURITIUS("MU", "Mauritius"),
|
|
||||||
MALDIVES("MV", "Maldives"),
|
|
||||||
MALAWI("MW", "Malawi"),
|
|
||||||
MEXICO("MX", "Mexico"),
|
|
||||||
MALAYSIA("MY", "Malaysia"),
|
|
||||||
MOZAMBIQUE("MZ", "Mozambique"),
|
|
||||||
NAMIBIA("NA", "Namibia"),
|
|
||||||
NEW_CALEDONIA("NC", "New Caledonia"),
|
|
||||||
NIGER("NE", "Niger"),
|
|
||||||
NORFOLK_ISLAND("NF", "Norfolk Island"),
|
|
||||||
NIGERIA("NG", "Nigeria"),
|
|
||||||
NICARAGUA("NI", "Nicaragua"),
|
|
||||||
NETHERLANDS("NL", "Netherlands"),
|
|
||||||
NORWAY("NO", "Norway"),
|
|
||||||
NEPAL("NP", "Nepal"),
|
|
||||||
NAURU("NR", "Nauru"),
|
|
||||||
NIUE("NU", "Niue"),
|
|
||||||
NEW_ZEALAND("NZ", "New Zealand"),
|
|
||||||
OMAN("OM", "Oman"),
|
|
||||||
PANAMA("PA", "Panama"),
|
|
||||||
PERU("PE", "Peru"),
|
|
||||||
FRENCH_POLYNESIA("PF", "French Polynesia"),
|
|
||||||
PAPUA_NEW_GUINEA("PG", "Papua New Guinea"),
|
|
||||||
PHILIPPINES("PH", "Philippines"),
|
|
||||||
PAKISTAN("PK", "Pakistan"),
|
|
||||||
POLAND("PL", "Poland"),
|
|
||||||
SAINT_PIERRE_AND_MIQUELON("PM", "Saint Pierre And Miquelon"),
|
|
||||||
PITCAIRN("PN", "Pitcairn"),
|
|
||||||
PUERTO_RICO("PR", "Puerto Rico"),
|
|
||||||
PALESTINE("PS", "Palestine"),
|
|
||||||
PORTUGAL("PT", "Portugal"),
|
|
||||||
PALAU("PW", "Palau"),
|
|
||||||
PARAGUAY("PY", "Paraguay"),
|
|
||||||
QATAR("QA", "Qatar"),
|
|
||||||
REUNION("RE", "Reunion"),
|
|
||||||
ROMANIA("RO", "Romania"),
|
|
||||||
SERBIA("RS", "Serbia"),
|
|
||||||
RUSSIA("RU", "Russia"),
|
|
||||||
RWANDA("RW", "Rwanda"),
|
|
||||||
SAUDI_ARABIA("SA", "Saudi Arabia"),
|
|
||||||
SOLOMON_ISLANDS("SB", "Solomon Islands"),
|
|
||||||
SEYCHELLES("SC", "Seychelles"),
|
|
||||||
SUDAN("SD", "Sudan"),
|
|
||||||
SWEDEN("SE", "Sweden"),
|
|
||||||
SINGAPORE("SG", "Singapore"),
|
|
||||||
SAINT_HELENA("SH", "Saint Helena"),
|
|
||||||
SLOVENIA("SI", "Slovenia"),
|
|
||||||
SVALBARD_AND_JAN_MAYEN("SJ", "Svalbard And Jan Mayen"),
|
|
||||||
SLOVAKIA("SK", "Slovakia"),
|
|
||||||
SIERRA_LEONE("SL", "Sierra Leone"),
|
|
||||||
SAN_MARINO("SM", "San Marino"),
|
|
||||||
SENEGAL("SN", "Senegal"),
|
|
||||||
SOMALIA("SO", "Somalia"),
|
|
||||||
SURINAME("SR", "Suriname"),
|
|
||||||
SOUTH_SUDAN("SS", "South Sudan"),
|
|
||||||
SAO_TOME_AND_PRINCIPE("ST", "Sao Tome And Principe"),
|
|
||||||
EL_SALVADOR("SV", "El Salvador"),
|
|
||||||
SINT_MAARTEN_DUTCH_PART("SX", "Sint Maarten (Dutch part)"),
|
|
||||||
SYRIA("SY", "Syria"),
|
|
||||||
SWAZILAND("SZ", "Swaziland"),
|
|
||||||
TURKS_AND_CAICOS_ISLANDS("TC", "Turks And Caicos Islands"),
|
|
||||||
CHAD("TD", "Chad"),
|
|
||||||
FRENCH_SOUTHERN_TERRITORIES("TF", "French Southern Territories"),
|
|
||||||
TOGO("TG", "Togo"),
|
|
||||||
THAILAND("TH", "Thailand"),
|
|
||||||
TAJIKISTAN("TJ", "Tajikistan"),
|
|
||||||
TOKELAU("TK", "Tokelau"),
|
|
||||||
TIMOR_LESTE("TL", "Timor-Leste"),
|
|
||||||
TURKMENISTAN("TM", "Turkmenistan"),
|
|
||||||
TUNISIA("TN", "Tunisia"),
|
|
||||||
TONGA("TO", "Tonga"),
|
|
||||||
TURKEY("TR", "Turkey"),
|
|
||||||
TRINIDAD_AND_TOBAGO("TT", "Trinidad and Tobago"),
|
|
||||||
TUVALU("TV", "Tuvalu"),
|
|
||||||
TAIWAN("TW", "Taiwan"),
|
|
||||||
TANZANIA("TZ", "Tanzania"),
|
|
||||||
UKRAINE("UA", "Ukraine"),
|
|
||||||
UGANDA("UG", "Uganda"),
|
|
||||||
UNITED_STATES_MINOR_OUTLYING_ISLANDS("UM", "United States Minor Outlying Islands"),
|
|
||||||
UNITED_STATES("US", "United States"),
|
|
||||||
URUGUAY("UY", "Uruguay"),
|
|
||||||
UZBEKISTAN("UZ", "Uzbekistan"),
|
|
||||||
VATICAN("VA", "Vatican"),
|
|
||||||
SAINT_VINCENT_AND_THE_GRENADINES("VC", "Saint Vincent And The Grenadines"),
|
|
||||||
VENEZUELA("VE", "Venezuela"),
|
|
||||||
BRITISH_VIRGIN_ISLANDS("VG", "British Virgin Islands"),
|
|
||||||
U_S__VIRGIN_ISLANDS("VI", "U.S. Virgin Islands"),
|
|
||||||
VIETNAM("VN", "Vietnam"),
|
|
||||||
VANUATU("VU", "Vanuatu"),
|
|
||||||
WALLIS_AND_FUTUNA("WF", "Wallis And Futuna"),
|
|
||||||
SAMOA("WS", "Samoa"),
|
|
||||||
YEMEN("YE", "Yemen"),
|
|
||||||
MAYOTTE("YT", "Mayotte"),
|
|
||||||
SOUTH_AFRICA("ZA", "South Africa"),
|
|
||||||
ZAMBIA("ZM", "Zambia"),
|
|
||||||
ZIMBABWE("ZW", "Zimbabwe");
|
|
||||||
|
|
||||||
private String isoTag;
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
Country(String isoTag, String name) {
|
|
||||||
this.isoTag = isoTag;
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the name of the country.
|
|
||||||
*
|
|
||||||
* @return The name of the country.
|
|
||||||
*/
|
|
||||||
public String getCountryName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the iso tag of the country.
|
|
||||||
*
|
|
||||||
* @return The iso tag of the country.
|
|
||||||
*/
|
|
||||||
public String getCountryIsoTag() {
|
|
||||||
return isoTag;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets a country by it's iso tag.
|
|
||||||
*
|
|
||||||
* @param isoTag The iso tag of the county.
|
|
||||||
* @return The country with the given iso tag or <code>null</code> if unknown.
|
|
||||||
*/
|
|
||||||
public static Country byIsoTag(String isoTag) {
|
|
||||||
for (Country country : Country.values()) {
|
|
||||||
if (country.getCountryIsoTag().equals(isoTag)) {
|
|
||||||
return country;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets a country by a locale.
|
|
||||||
*
|
|
||||||
* @param locale The locale.
|
|
||||||
* @return The country from the giben locale or <code>null</code> if unknown country or
|
|
||||||
* if the locale does not contain a country.
|
|
||||||
*/
|
|
||||||
public static Country byLocale(Locale locale) {
|
|
||||||
return byIsoTag(locale.getCountry());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -25,15 +25,19 @@ import sh.okx.rankup.messages.Variable;
|
|||||||
import sh.okx.rankup.placeholders.Placeholders;
|
import sh.okx.rankup.placeholders.Placeholders;
|
||||||
import sh.okx.rankup.ranks.Rank;
|
import sh.okx.rankup.ranks.Rank;
|
||||||
import sh.okx.rankup.ranks.Rankups;
|
import sh.okx.rankup.ranks.Rankups;
|
||||||
import sh.okx.rankup.ranks.requirements.GroupRequirement;
|
import sh.okx.rankup.requirements.OperationRegistry;
|
||||||
import sh.okx.rankup.ranks.requirements.MoneyRequirement;
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
import sh.okx.rankup.ranks.requirements.PlaytimeMinutesRequirement;
|
import sh.okx.rankup.requirements.RequirementRegistry;
|
||||||
import sh.okx.rankup.ranks.requirements.Requirement;
|
import sh.okx.rankup.requirements.operation.AllOperation;
|
||||||
import sh.okx.rankup.ranks.requirements.RequirementRegistry;
|
import sh.okx.rankup.requirements.operation.AnyOperation;
|
||||||
import sh.okx.rankup.ranks.requirements.XpLevelRequirement;
|
import sh.okx.rankup.requirements.operation.NoneOperation;
|
||||||
|
import sh.okx.rankup.requirements.operation.OneOperation;
|
||||||
|
import sh.okx.rankup.requirements.requirement.GroupRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.MoneyRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.PlaytimeMinutesRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.XpLevelRequirement;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -51,6 +55,8 @@ public class Rankup extends JavaPlugin {
|
|||||||
@Getter
|
@Getter
|
||||||
private RequirementRegistry requirementRegistry = new RequirementRegistry();
|
private RequirementRegistry requirementRegistry = new RequirementRegistry();
|
||||||
@Getter
|
@Getter
|
||||||
|
private OperationRegistry operationRegistry = new OperationRegistry();
|
||||||
|
@Getter
|
||||||
private FileConfiguration messages;
|
private FileConfiguration messages;
|
||||||
@Getter
|
@Getter
|
||||||
private FileConfiguration config;
|
private FileConfiguration config;
|
||||||
@@ -58,7 +64,6 @@ public class Rankup extends JavaPlugin {
|
|||||||
private Rankups rankups;
|
private Rankups rankups;
|
||||||
@Getter
|
@Getter
|
||||||
private Placeholders placeholders;
|
private Placeholders placeholders;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Players who cannot rankup for a certain amount of time.
|
* Players who cannot rankup for a certain amount of time.
|
||||||
*/
|
*/
|
||||||
@@ -112,14 +117,6 @@ public class Rankup extends JavaPlugin {
|
|||||||
getLogger().severe("You may then copy in your config values from the old config.");
|
getLogger().severe("You may then copy in your config values from the old config.");
|
||||||
getLogger().severe("Check the changelog on the Rankup spigot page to see the changes.");
|
getLogger().severe("Check the changelog on the Rankup spigot page to see the changes.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(config.getBoolean("stats")) {
|
|
||||||
try {
|
|
||||||
new Stats().init(this);
|
|
||||||
} catch (IOException e) {
|
|
||||||
getLogger().warning("Could not connect to stats server");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -156,6 +153,11 @@ public class Rankup extends JavaPlugin {
|
|||||||
requirementRegistry.addRequirement(new XpLevelRequirement(this, "xp-level"));
|
requirementRegistry.addRequirement(new XpLevelRequirement(this, "xp-level"));
|
||||||
requirementRegistry.addRequirement(new PlaytimeMinutesRequirement(this, "playtime-minutes"));
|
requirementRegistry.addRequirement(new PlaytimeMinutesRequirement(this, "playtime-minutes"));
|
||||||
requirementRegistry.addRequirement(new GroupRequirement(this, "group"));
|
requirementRegistry.addRequirement(new GroupRequirement(this, "group"));
|
||||||
|
|
||||||
|
operationRegistry.addOperation("all", new AllOperation());
|
||||||
|
operationRegistry.addOperation("none", new NoneOperation());
|
||||||
|
operationRegistry.addOperation("one", new OneOperation());
|
||||||
|
operationRegistry.addOperation("any", new AnyOperation());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupPermissions() {
|
private void setupPermissions() {
|
||||||
|
|||||||
@@ -1,55 +0,0 @@
|
|||||||
package sh.okx.rankup;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.net.HttpURLConnection;
|
|
||||||
import java.net.InetAddress;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.net.URLConnection;
|
|
||||||
import java.net.URLEncoder;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.util.Base64;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.StringJoiner;
|
|
||||||
|
|
||||||
public class Stats {
|
|
||||||
public void init(Rankup plugin) throws IOException {
|
|
||||||
URL url = new URL("http://rankup.okx.sh/api");
|
|
||||||
URLConnection con = url.openConnection();
|
|
||||||
HttpURLConnection http = (HttpURLConnection) con;
|
|
||||||
http.setRequestMethod("POST");
|
|
||||||
http.setDoOutput(true);
|
|
||||||
Map<String, String> arguments = new HashMap<>();
|
|
||||||
arguments.put("ip", InetAddress.getLocalHost().getHostAddress() + ":" + Bukkit.getPort());
|
|
||||||
arguments.put("spigot", Bukkit.getVersion());
|
|
||||||
arguments.put("version", plugin.getDescription().getVersion());
|
|
||||||
Base64.Encoder base64 = Base64.getEncoder();
|
|
||||||
File data = plugin.getDataFolder();
|
|
||||||
arguments.put("config", base64.encodeToString(Files.readAllBytes(data.toPath().resolve("config.yml"))));
|
|
||||||
arguments.put("messages", base64.encodeToString(Files.readAllBytes(data.toPath().resolve("messages.yml"))));
|
|
||||||
arguments.put("rankups", base64.encodeToString(Files.readAllBytes(data.toPath().resolve("rankups.yml"))));
|
|
||||||
StringJoiner sj = new StringJoiner("&");
|
|
||||||
for (Map.Entry<String, String> entry : arguments.entrySet()) {
|
|
||||||
try {
|
|
||||||
sj.add(URLEncoder.encode(entry.getKey(), "UTF-8") + "="
|
|
||||||
+ URLEncoder.encode(entry.getValue(), "UTF-8"));
|
|
||||||
} catch (UnsupportedEncodingException e) {
|
|
||||||
throw new AssertionError("UTF-8 not found.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
byte[] out = sj.toString().getBytes(StandardCharsets.UTF_8);
|
|
||||||
int length = out.length;
|
|
||||||
http.setFixedLengthStreamingMode(length);
|
|
||||||
http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
|
|
||||||
http.connect();
|
|
||||||
try (OutputStream os = http.getOutputStream()) {
|
|
||||||
os.write(out);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -64,9 +64,8 @@ public class InfoCommand implements CommandExecutor {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getLatestVersion() throws IOException {
|
private String getLatestVersion() throws IOException {
|
||||||
URL url = new URL("https://api.spigotmc.org/legacy/update.php?resource=17933");
|
URL url = new URL("https://api.spigotmc.org/legacy/update.php?resource=17933");
|
||||||
String result = CharStreams.toString(new InputStreamReader(url.openStream(), Charsets.UTF_8));
|
return CharStreams.toString(new InputStreamReader(url.openStream(), Charsets.UTF_8));
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ public class Gui implements InventoryHolder {
|
|||||||
item = new ItemStack(material);
|
item = new ItemStack(material);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(item.getType() == Material.AIR && section.getName().equalsIgnoreCase("fill")) {
|
if (item.getType() == Material.AIR && section.getName().equalsIgnoreCase("fill")) {
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import org.bukkit.entity.Player;
|
|||||||
import sh.okx.rankup.Rankup;
|
import sh.okx.rankup.Rankup;
|
||||||
import sh.okx.rankup.ranks.Rank;
|
import sh.okx.rankup.ranks.Rank;
|
||||||
import sh.okx.rankup.ranks.Rankups;
|
import sh.okx.rankup.ranks.Rankups;
|
||||||
import sh.okx.rankup.ranks.requirements.Requirement;
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
|
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package sh.okx.rankup.prestige;
|
||||||
|
|
||||||
|
public class Prestige {
|
||||||
|
}
|
||||||
@@ -9,14 +9,16 @@ import org.bukkit.entity.Player;
|
|||||||
import sh.okx.rankup.Rankup;
|
import sh.okx.rankup.Rankup;
|
||||||
import sh.okx.rankup.messages.MessageBuilder;
|
import sh.okx.rankup.messages.MessageBuilder;
|
||||||
import sh.okx.rankup.messages.Variable;
|
import sh.okx.rankup.messages.Variable;
|
||||||
import sh.okx.rankup.ranks.requirements.DeductibleRequirement;
|
import sh.okx.rankup.requirements.DeductibleRequirement;
|
||||||
import sh.okx.rankup.ranks.requirements.Requirement;
|
import sh.okx.rankup.requirements.Operation;
|
||||||
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.BinaryOperator;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
|
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public class Rank {
|
public class Rank {
|
||||||
@@ -29,14 +31,14 @@ public class Rank {
|
|||||||
private final String rank;
|
private final String rank;
|
||||||
@Getter
|
@Getter
|
||||||
private final Set<Requirement> requirements;
|
private final Set<Requirement> requirements;
|
||||||
private final BinaryOperator<Boolean> reducer;
|
private final Operation operation;
|
||||||
private final List<String> commands;
|
private final List<String> commands;
|
||||||
|
|
||||||
public static Rank deserialize(Rankup plugin, ConfigurationSection section) {
|
public static Rank deserialize(Rankup plugin, ConfigurationSection section) {
|
||||||
String rank = section.getString("rank");
|
String rank = section.getString("rank");
|
||||||
|
|
||||||
Set<Requirement> requirements = new HashSet<>();
|
Set<Requirement> requirements = new HashSet<>();
|
||||||
BinaryOperator<Boolean> reducer = null;
|
Operation operation = null;
|
||||||
ConfigurationSection requirementsSection = section.getConfigurationSection("requirements");
|
ConfigurationSection requirementsSection = section.getConfigurationSection("requirements");
|
||||||
if (requirementsSection != null) {
|
if (requirementsSection != null) {
|
||||||
for (Map.Entry<String, Object> entry : requirementsSection.getValues(false).entrySet()) {
|
for (Map.Entry<String, Object> entry : requirementsSection.getValues(false).entrySet()) {
|
||||||
@@ -50,26 +52,8 @@ public class Rank {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String operation = section.getString("operation");
|
String operationName = Optional.ofNullable(section.getString("operation")).orElse("all");
|
||||||
if (operation == null) {
|
operation = plugin.getOperationRegistry().getOperation(operationName);
|
||||||
operation = "and";
|
|
||||||
}
|
|
||||||
switch (operation) {
|
|
||||||
case "and":
|
|
||||||
reducer = (a, b) -> a && b;
|
|
||||||
break;
|
|
||||||
case "or":
|
|
||||||
reducer = (a, b) -> a || b;
|
|
||||||
break;
|
|
||||||
case "xor":
|
|
||||||
reducer = (a, b) -> (a && !b) || (b && !a);
|
|
||||||
break;
|
|
||||||
case "none":
|
|
||||||
reducer = (a, b) -> !a && !b;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new IllegalArgumentException("Invalid operation type for rank " + rank);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Rank(plugin,
|
return new Rank(plugin,
|
||||||
@@ -77,15 +61,14 @@ public class Rank {
|
|||||||
section.getString("next"),
|
section.getString("next"),
|
||||||
rank,
|
rank,
|
||||||
requirements,
|
requirements,
|
||||||
reducer,
|
operation,
|
||||||
section.getStringList("commands"));
|
section.getStringList("commands"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean checkRequirements(Player player) {
|
public boolean checkRequirements(Player player) {
|
||||||
return requirements.stream()
|
return operation.check(requirements.stream()
|
||||||
.map(requirement -> requirement.check(player))
|
.map(requirement -> requirement.check(player))
|
||||||
.reduce(reducer)
|
.collect(Collectors.toList()));
|
||||||
.orElse(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isInRank(Player player) {
|
public boolean isInRank(Player player) {
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package sh.okx.rankup.ranks.requirements;
|
package sh.okx.rankup.requirements;
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import sh.okx.rankup.Rankup;
|
import sh.okx.rankup.Rankup;
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package sh.okx.rankup.requirements;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public abstract class Operation {
|
||||||
|
public abstract boolean check(List<Boolean> booleans);
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package sh.okx.rankup.requirements;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class OperationRegistry {
|
||||||
|
private Map<String, Operation> operations;
|
||||||
|
|
||||||
|
public void addOperation(String name, Operation operation) {
|
||||||
|
operations.put(name.toLowerCase(), operation);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Operation getOperation(String name) {
|
||||||
|
return operations.get(name.toLowerCase());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package sh.okx.rankup.requirements;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public abstract class ReducerOperation extends Operation {
|
||||||
|
public abstract boolean check(boolean a, boolean b);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean check(List<Boolean> booleans) {
|
||||||
|
return booleans.stream().reduce(this::check).orElse(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package sh.okx.rankup.ranks.requirements;
|
package sh.okx.rankup.requirements;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package sh.okx.rankup.ranks.requirements;
|
package sh.okx.rankup.requirements;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package sh.okx.rankup.requirements.operation;
|
||||||
|
|
||||||
|
import sh.okx.rankup.requirements.ReducerOperation;
|
||||||
|
|
||||||
|
public class AllOperation extends ReducerOperation {
|
||||||
|
@Override
|
||||||
|
public boolean check(boolean a, boolean b) {
|
||||||
|
return a && b;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package sh.okx.rankup.requirements.operation;
|
||||||
|
|
||||||
|
import sh.okx.rankup.requirements.ReducerOperation;
|
||||||
|
|
||||||
|
public class AnyOperation extends ReducerOperation {
|
||||||
|
@Override
|
||||||
|
public boolean check(boolean a, boolean b) {
|
||||||
|
return a || b;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package sh.okx.rankup.requirements.operation;
|
||||||
|
|
||||||
|
import sh.okx.rankup.requirements.ReducerOperation;
|
||||||
|
|
||||||
|
public class NoneOperation extends ReducerOperation {
|
||||||
|
@Override
|
||||||
|
public boolean check(boolean a, boolean b) {
|
||||||
|
return !a && !b;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package sh.okx.rankup.requirements.operation;
|
||||||
|
|
||||||
|
import sh.okx.rankup.requirements.ReducerOperation;
|
||||||
|
|
||||||
|
public class OneOperation extends ReducerOperation {
|
||||||
|
@Override
|
||||||
|
public boolean check(boolean a, boolean b) {
|
||||||
|
return (a && !b) || (b && !a);
|
||||||
|
}
|
||||||
|
}
|
||||||
+2
-1
@@ -1,7 +1,8 @@
|
|||||||
package sh.okx.rankup.ranks.requirements;
|
package sh.okx.rankup.requirements.requirement;
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import sh.okx.rankup.Rankup;
|
import sh.okx.rankup.Rankup;
|
||||||
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
|
|
||||||
public class GroupRequirement extends Requirement {
|
public class GroupRequirement extends Requirement {
|
||||||
public GroupRequirement(Rankup plugin, String name) {
|
public GroupRequirement(Rankup plugin, String name) {
|
||||||
+3
-1
@@ -1,8 +1,10 @@
|
|||||||
package sh.okx.rankup.ranks.requirements;
|
package sh.okx.rankup.requirements.requirement;
|
||||||
|
|
||||||
import net.milkbowl.vault.economy.Economy;
|
import net.milkbowl.vault.economy.Economy;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import sh.okx.rankup.Rankup;
|
import sh.okx.rankup.Rankup;
|
||||||
|
import sh.okx.rankup.requirements.DeductibleRequirement;
|
||||||
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
|
|
||||||
public class MoneyRequirement extends DeductibleRequirement {
|
public class MoneyRequirement extends DeductibleRequirement {
|
||||||
public MoneyRequirement(Rankup plugin, String name) {
|
public MoneyRequirement(Rankup plugin, String name) {
|
||||||
+2
-1
@@ -1,8 +1,9 @@
|
|||||||
package sh.okx.rankup.ranks.requirements;
|
package sh.okx.rankup.requirements.requirement;
|
||||||
|
|
||||||
import org.bukkit.Statistic;
|
import org.bukkit.Statistic;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import sh.okx.rankup.Rankup;
|
import sh.okx.rankup.Rankup;
|
||||||
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
|
|
||||||
public class PlaytimeMinutesRequirement extends Requirement {
|
public class PlaytimeMinutesRequirement extends Requirement {
|
||||||
private static final int TICKS_PER_MINUTE = 20 * 60;
|
private static final int TICKS_PER_MINUTE = 20 * 60;
|
||||||
+3
-1
@@ -1,7 +1,9 @@
|
|||||||
package sh.okx.rankup.ranks.requirements;
|
package sh.okx.rankup.requirements.requirement;
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import sh.okx.rankup.Rankup;
|
import sh.okx.rankup.Rankup;
|
||||||
|
import sh.okx.rankup.requirements.DeductibleRequirement;
|
||||||
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
|
|
||||||
public class XpLevelRequirement extends DeductibleRequirement {
|
public class XpLevelRequirement extends DeductibleRequirement {
|
||||||
public XpLevelRequirement(Rankup plugin, String name) {
|
public XpLevelRequirement(Rankup plugin, String name) {
|
||||||
@@ -1,10 +1,6 @@
|
|||||||
# this is used for letting you know that you need to update/change your config file
|
# this is used for letting you know that you need to update/change your config file
|
||||||
version: 0
|
version: 0
|
||||||
|
|
||||||
# as well as bStats (which can be disabled in the plugins/bStats folder),
|
|
||||||
# this will send more detailed stats privately, to help see what features are being used.
|
|
||||||
stats: true
|
|
||||||
|
|
||||||
# whether /ranks should be enabled (true) or disabled (false)
|
# whether /ranks should be enabled (true) or disabled (false)
|
||||||
# /rankup3 reload will not do anything if this is changed,
|
# /rankup3 reload will not do anything if this is changed,
|
||||||
# you will have to restart your server.
|
# you will have to restart your server.
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ permissions:
|
|||||||
rankup.ranks: true
|
rankup.ranks: true
|
||||||
rankup.reload: true
|
rankup.reload: true
|
||||||
rankup.ranks: true
|
rankup.ranks: true
|
||||||
rankup.sign: true
|
|
||||||
rankup.info:
|
rankup.info:
|
||||||
default: true
|
default: true
|
||||||
rankup.rankup:
|
rankup.rankup:
|
||||||
@@ -39,6 +38,4 @@ permissions:
|
|||||||
rankup.reload:
|
rankup.reload:
|
||||||
default: op
|
default: op
|
||||||
rankup.ranks:
|
rankup.ranks:
|
||||||
default: true
|
default: true
|
||||||
rankup.sign:
|
|
||||||
default: op
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
P1example:
|
||||||
|
# the rank people must be to use this prestige
|
||||||
|
from: 'D'
|
||||||
|
# the rank to change it to
|
||||||
|
to: 'A'
|
||||||
|
# the rank to also add
|
||||||
|
rank: 'P1'
|
||||||
|
# requirements are the same as in rankups.yml
|
||||||
|
requirements:
|
||||||
|
money: 10000
|
||||||
|
# optional
|
||||||
|
operation: all
|
||||||
|
# commands & prestige messages can be added as per rankups.yml too.
|
||||||
|
P1example:
|
||||||
|
from: 'D'
|
||||||
|
to: 'A'
|
||||||
|
rank: 'P2'
|
||||||
|
requirements:
|
||||||
|
money: 20000
|
||||||
|
xp-level: 5
|
||||||
@@ -16,13 +16,13 @@ Aexample:
|
|||||||
requirements:
|
requirements:
|
||||||
money: 1000
|
money: 1000
|
||||||
# What requirements players need to match to /rankup.
|
# What requirements players need to match to /rankup.
|
||||||
# this is optional - if you don't use it, it defaults to "and"
|
# this is optional - if you don't use it, it defaults to "all"
|
||||||
# n.b. if there are no requirements players will always be able to /rankup.
|
# n.b. if there are no requirements players will always be able to /rankup.
|
||||||
# and: all requirements
|
# all: all requirements
|
||||||
# or: at least one requirement
|
# any: at least one requirement
|
||||||
# xor: only one requirement
|
# one: only one requirement
|
||||||
# none: no requirements
|
# none: no requirements
|
||||||
operation: and
|
operation: all
|
||||||
# the console will run these commands when a player ranks up
|
# the console will run these commands when a player ranks up
|
||||||
#commands:
|
#commands:
|
||||||
# this will run when a player ranks up from A to B.
|
# this will run when a player ranks up from A to B.
|
||||||
|
|||||||
Reference in New Issue
Block a user