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:
okx-code
2018-09-01 23:50:57 +01:00
parent 6ba4dcb4d0
commit e9d7a9791a
26 changed files with 513 additions and 487 deletions
+355 -355
View File
@@ -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.
*
@@ -257,58 +312,318 @@ public class Metrics {
}
/**
* Sends the data to the bStats server.
*
* @param data The data to send.
* @throws Exception If the request failed.
* A enum which is used for custom maps.
*/
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();
public enum Country {
// Compress the data to save bandwidth
byte[] compressedData = compress(data.toString());
/**
* bStats will use the country of the server.
*/
AUTO_DETECT("AUTO", "Auto Detected"),
// 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);
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");
// Send data
connection.setDoOutput(true);
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
outputStream.write(compressedData);
outputStream.flush();
outputStream.close();
private String isoTag;
private String name;
connection.getInputStream().close(); // We don't care about the response - Just send our data :)
Country(String isoTag, String name) {
this.isoTag = isoTag;
this.name = name;
}
/**
* Gzips the given String.
* Gets a country by it's iso tag.
*
* @param str The string to gzip.
* @return The gzipped String.
* @throws IOException If the compression failed.
* @param isoTag The iso tag of the county.
* @return The country with the given iso tag or <code>null</code> if unknown.
*/
private static byte[] compress(final String str) throws IOException {
if (str == null) {
public static Country byIsoTag(String isoTag) {
for (Country country : Country.values()) {
if (country.getCountryIsoTag().equals(isoTag)) {
return country;
}
}
return null;
}
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(outputStream);
gzip.write(str.getBytes("UTF-8"));
gzip.close();
return outputStream.toByteArray();
/**
* 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());
}
/**
* 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());
}
}
}
+18 -16
View File
@@ -25,15 +25,19 @@ import sh.okx.rankup.messages.Variable;
import sh.okx.rankup.placeholders.Placeholders;
import sh.okx.rankup.ranks.Rank;
import sh.okx.rankup.ranks.Rankups;
import sh.okx.rankup.ranks.requirements.GroupRequirement;
import sh.okx.rankup.ranks.requirements.MoneyRequirement;
import sh.okx.rankup.ranks.requirements.PlaytimeMinutesRequirement;
import sh.okx.rankup.ranks.requirements.Requirement;
import sh.okx.rankup.ranks.requirements.RequirementRegistry;
import sh.okx.rankup.ranks.requirements.XpLevelRequirement;
import sh.okx.rankup.requirements.OperationRegistry;
import sh.okx.rankup.requirements.Requirement;
import sh.okx.rankup.requirements.RequirementRegistry;
import sh.okx.rankup.requirements.operation.AllOperation;
import sh.okx.rankup.requirements.operation.AnyOperation;
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.IOException;
import java.text.DecimalFormat;
import java.util.List;
import java.util.Map;
@@ -51,6 +55,8 @@ public class Rankup extends JavaPlugin {
@Getter
private RequirementRegistry requirementRegistry = new RequirementRegistry();
@Getter
private OperationRegistry operationRegistry = new OperationRegistry();
@Getter
private FileConfiguration messages;
@Getter
private FileConfiguration config;
@@ -58,7 +64,6 @@ public class Rankup extends JavaPlugin {
private Rankups rankups;
@Getter
private Placeholders placeholders;
/**
* 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("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 PlaytimeMinutesRequirement(this, "playtime-minutes"));
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() {
-55
View File
@@ -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;
}
public String getLatestVersion() throws IOException {
private String getLatestVersion() throws IOException {
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 result;
return CharStreams.toString(new InputStreamReader(url.openStream(), Charsets.UTF_8));
}
}
@@ -6,7 +6,7 @@ import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.ranks.Rank;
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.util.function.Function;
@@ -0,0 +1,4 @@
package sh.okx.rankup.prestige;
public class Prestige {
}
+12 -29
View File
@@ -9,14 +9,16 @@ import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.messages.MessageBuilder;
import sh.okx.rankup.messages.Variable;
import sh.okx.rankup.ranks.requirements.DeductibleRequirement;
import sh.okx.rankup.ranks.requirements.Requirement;
import sh.okx.rankup.requirements.DeductibleRequirement;
import sh.okx.rankup.requirements.Operation;
import sh.okx.rankup.requirements.Requirement;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.function.BinaryOperator;
import java.util.stream.Collectors;
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public class Rank {
@@ -29,14 +31,14 @@ public class Rank {
private final String rank;
@Getter
private final Set<Requirement> requirements;
private final BinaryOperator<Boolean> reducer;
private final Operation operation;
private final List<String> commands;
public static Rank deserialize(Rankup plugin, ConfigurationSection section) {
String rank = section.getString("rank");
Set<Requirement> requirements = new HashSet<>();
BinaryOperator<Boolean> reducer = null;
Operation operation = null;
ConfigurationSection requirementsSection = section.getConfigurationSection("requirements");
if (requirementsSection != null) {
for (Map.Entry<String, Object> entry : requirementsSection.getValues(false).entrySet()) {
@@ -50,26 +52,8 @@ public class Rank {
}
}
String operation = section.getString("operation");
if (operation == null) {
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);
}
String operationName = Optional.ofNullable(section.getString("operation")).orElse("all");
operation = plugin.getOperationRegistry().getOperation(operationName);
}
return new Rank(plugin,
@@ -77,15 +61,14 @@ public class Rank {
section.getString("next"),
rank,
requirements,
reducer,
operation,
section.getStringList("commands"));
}
public boolean checkRequirements(Player player) {
return requirements.stream()
return operation.check(requirements.stream()
.map(requirement -> requirement.check(player))
.reduce(reducer)
.orElse(true);
.collect(Collectors.toList()));
}
public boolean isInRank(Player player) {
@@ -1,4 +1,4 @@
package sh.okx.rankup.ranks.requirements;
package sh.okx.rankup.requirements;
import org.bukkit.entity.Player;
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,4 +1,4 @@
package sh.okx.rankup.ranks.requirements;
package sh.okx.rankup.requirements;
import lombok.Getter;
import org.bukkit.entity.Player;
@@ -1,4 +1,4 @@
package sh.okx.rankup.ranks.requirements;
package sh.okx.rankup.requirements;
import java.util.HashSet;
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);
}
}
@@ -1,7 +1,8 @@
package sh.okx.rankup.ranks.requirements;
package sh.okx.rankup.requirements.requirement;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.requirements.Requirement;
public class GroupRequirement extends Requirement {
public GroupRequirement(Rankup plugin, String name) {
@@ -1,8 +1,10 @@
package sh.okx.rankup.ranks.requirements;
package sh.okx.rankup.requirements.requirement;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.requirements.DeductibleRequirement;
import sh.okx.rankup.requirements.Requirement;
public class MoneyRequirement extends DeductibleRequirement {
public MoneyRequirement(Rankup plugin, String name) {
@@ -1,8 +1,9 @@
package sh.okx.rankup.ranks.requirements;
package sh.okx.rankup.requirements.requirement;
import org.bukkit.Statistic;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.requirements.Requirement;
public class PlaytimeMinutesRequirement extends Requirement {
private static final int TICKS_PER_MINUTE = 20 * 60;
@@ -1,7 +1,9 @@
package sh.okx.rankup.ranks.requirements;
package sh.okx.rankup.requirements.requirement;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.requirements.DeductibleRequirement;
import sh.okx.rankup.requirements.Requirement;
public class XpLevelRequirement extends DeductibleRequirement {
public XpLevelRequirement(Rankup plugin, String name) {
-4
View File
@@ -1,10 +1,6 @@
# this is used for letting you know that you need to update/change your config file
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)
# /rankup3 reload will not do anything if this is changed,
# you will have to restart your server.
-3
View File
@@ -27,7 +27,6 @@ permissions:
rankup.ranks: true
rankup.reload: true
rankup.ranks: true
rankup.sign: true
rankup.info:
default: true
rankup.rankup:
@@ -40,5 +39,3 @@ permissions:
default: op
rankup.ranks:
default: true
rankup.sign:
default: op
+20
View File
@@ -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
+5 -5
View File
@@ -16,13 +16,13 @@ Aexample:
requirements:
money: 1000
# 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.
# and: all requirements
# or: at least one requirement
# xor: only one requirement
# all: all requirements
# any: at least one requirement
# one: only one requirement
# none: no requirements
operation: and
operation: all
# the console will run these commands when a player ranks up
#commands:
# this will run when a player ranks up from A to B.