diff --git a/src/main/java/sh/okx/rankup/Metrics.java b/src/main/java/sh/okx/rankup/Metrics.java
index fba3376..29075ff 100644
--- a/src/main/java/sh/okx/rankup/Metrics.java
+++ b/src/main/java/sh/okx/rankup/Metrics.java
@@ -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!");
+ 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;
}
- 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) {
+ /**
+ * 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 null if unknown.
+ */
+ 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 null 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 null 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 null if unknown country or
- * if the locale does not contain a country.
- */
- public static Country byLocale(Locale locale) {
- return byIsoTag(locale.getCountry());
- }
-
- }
-
}
\ No newline at end of file
diff --git a/src/main/java/sh/okx/rankup/Rankup.java b/src/main/java/sh/okx/rankup/Rankup.java
index e13c467..2351fc3 100644
--- a/src/main/java/sh/okx/rankup/Rankup.java
+++ b/src/main/java/sh/okx/rankup/Rankup.java
@@ -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() {
diff --git a/src/main/java/sh/okx/rankup/Stats.java b/src/main/java/sh/okx/rankup/Stats.java
deleted file mode 100644
index cc2e0bc..0000000
--- a/src/main/java/sh/okx/rankup/Stats.java
+++ /dev/null
@@ -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 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 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);
- }
- }
-}
diff --git a/src/main/java/sh/okx/rankup/commands/InfoCommand.java b/src/main/java/sh/okx/rankup/commands/InfoCommand.java
index 5c22a3f..fa66e88 100644
--- a/src/main/java/sh/okx/rankup/commands/InfoCommand.java
+++ b/src/main/java/sh/okx/rankup/commands/InfoCommand.java
@@ -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));
}
}
diff --git a/src/main/java/sh/okx/rankup/gui/Gui.java b/src/main/java/sh/okx/rankup/gui/Gui.java
index 5e07d4e..3a3d167 100644
--- a/src/main/java/sh/okx/rankup/gui/Gui.java
+++ b/src/main/java/sh/okx/rankup/gui/Gui.java
@@ -70,7 +70,7 @@ public class Gui implements InventoryHolder {
item = new ItemStack(material);
}
- if(item.getType() == Material.AIR && section.getName().equalsIgnoreCase("fill")) {
+ if (item.getType() == Material.AIR && section.getName().equalsIgnoreCase("fill")) {
return item;
}
diff --git a/src/main/java/sh/okx/rankup/placeholders/Placeholders.java b/src/main/java/sh/okx/rankup/placeholders/Placeholders.java
index 1bfa7c5..063640f 100644
--- a/src/main/java/sh/okx/rankup/placeholders/Placeholders.java
+++ b/src/main/java/sh/okx/rankup/placeholders/Placeholders.java
@@ -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;
diff --git a/src/main/java/sh/okx/rankup/prestige/Prestige.java b/src/main/java/sh/okx/rankup/prestige/Prestige.java
new file mode 100644
index 0000000..9e67fa5
--- /dev/null
+++ b/src/main/java/sh/okx/rankup/prestige/Prestige.java
@@ -0,0 +1,4 @@
+package sh.okx.rankup.prestige;
+
+public class Prestige {
+}
diff --git a/src/main/java/sh/okx/rankup/ranks/Rank.java b/src/main/java/sh/okx/rankup/ranks/Rank.java
index 6b09d10..0efbdb9 100644
--- a/src/main/java/sh/okx/rankup/ranks/Rank.java
+++ b/src/main/java/sh/okx/rankup/ranks/Rank.java
@@ -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 requirements;
- private final BinaryOperator reducer;
+ private final Operation operation;
private final List commands;
public static Rank deserialize(Rankup plugin, ConfigurationSection section) {
String rank = section.getString("rank");
Set requirements = new HashSet<>();
- BinaryOperator reducer = null;
+ Operation operation = null;
ConfigurationSection requirementsSection = section.getConfigurationSection("requirements");
if (requirementsSection != null) {
for (Map.Entry 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) {
diff --git a/src/main/java/sh/okx/rankup/ranks/requirements/DeductibleRequirement.java b/src/main/java/sh/okx/rankup/requirements/DeductibleRequirement.java
similarity index 94%
rename from src/main/java/sh/okx/rankup/ranks/requirements/DeductibleRequirement.java
rename to src/main/java/sh/okx/rankup/requirements/DeductibleRequirement.java
index 3e57eb6..ef6113e 100644
--- a/src/main/java/sh/okx/rankup/ranks/requirements/DeductibleRequirement.java
+++ b/src/main/java/sh/okx/rankup/requirements/DeductibleRequirement.java
@@ -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;
diff --git a/src/main/java/sh/okx/rankup/requirements/Operation.java b/src/main/java/sh/okx/rankup/requirements/Operation.java
new file mode 100644
index 0000000..29dcdd7
--- /dev/null
+++ b/src/main/java/sh/okx/rankup/requirements/Operation.java
@@ -0,0 +1,7 @@
+package sh.okx.rankup.requirements;
+
+import java.util.List;
+
+public abstract class Operation {
+ public abstract boolean check(List booleans);
+}
diff --git a/src/main/java/sh/okx/rankup/requirements/OperationRegistry.java b/src/main/java/sh/okx/rankup/requirements/OperationRegistry.java
new file mode 100644
index 0000000..2df6b65
--- /dev/null
+++ b/src/main/java/sh/okx/rankup/requirements/OperationRegistry.java
@@ -0,0 +1,15 @@
+package sh.okx.rankup.requirements;
+
+import java.util.Map;
+
+public class OperationRegistry {
+ private Map operations;
+
+ public void addOperation(String name, Operation operation) {
+ operations.put(name.toLowerCase(), operation);
+ }
+
+ public Operation getOperation(String name) {
+ return operations.get(name.toLowerCase());
+ }
+}
diff --git a/src/main/java/sh/okx/rankup/requirements/ReducerOperation.java b/src/main/java/sh/okx/rankup/requirements/ReducerOperation.java
new file mode 100644
index 0000000..f045d75
--- /dev/null
+++ b/src/main/java/sh/okx/rankup/requirements/ReducerOperation.java
@@ -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 booleans) {
+ return booleans.stream().reduce(this::check).orElse(true);
+ }
+}
diff --git a/src/main/java/sh/okx/rankup/ranks/requirements/Requirement.java b/src/main/java/sh/okx/rankup/requirements/Requirement.java
similarity index 97%
rename from src/main/java/sh/okx/rankup/ranks/requirements/Requirement.java
rename to src/main/java/sh/okx/rankup/requirements/Requirement.java
index 38d3d61..9b9fce6 100644
--- a/src/main/java/sh/okx/rankup/ranks/requirements/Requirement.java
+++ b/src/main/java/sh/okx/rankup/requirements/Requirement.java
@@ -1,4 +1,4 @@
-package sh.okx.rankup.ranks.requirements;
+package sh.okx.rankup.requirements;
import lombok.Getter;
import org.bukkit.entity.Player;
diff --git a/src/main/java/sh/okx/rankup/ranks/requirements/RequirementRegistry.java b/src/main/java/sh/okx/rankup/requirements/RequirementRegistry.java
similarity index 93%
rename from src/main/java/sh/okx/rankup/ranks/requirements/RequirementRegistry.java
rename to src/main/java/sh/okx/rankup/requirements/RequirementRegistry.java
index 8123069..81331e1 100644
--- a/src/main/java/sh/okx/rankup/ranks/requirements/RequirementRegistry.java
+++ b/src/main/java/sh/okx/rankup/requirements/RequirementRegistry.java
@@ -1,4 +1,4 @@
-package sh.okx.rankup.ranks.requirements;
+package sh.okx.rankup.requirements;
import java.util.HashSet;
import java.util.Set;
diff --git a/src/main/java/sh/okx/rankup/requirements/operation/AllOperation.java b/src/main/java/sh/okx/rankup/requirements/operation/AllOperation.java
new file mode 100644
index 0000000..0e3fd7c
--- /dev/null
+++ b/src/main/java/sh/okx/rankup/requirements/operation/AllOperation.java
@@ -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;
+ }
+}
diff --git a/src/main/java/sh/okx/rankup/requirements/operation/AnyOperation.java b/src/main/java/sh/okx/rankup/requirements/operation/AnyOperation.java
new file mode 100644
index 0000000..f889431
--- /dev/null
+++ b/src/main/java/sh/okx/rankup/requirements/operation/AnyOperation.java
@@ -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;
+ }
+}
diff --git a/src/main/java/sh/okx/rankup/requirements/operation/NoneOperation.java b/src/main/java/sh/okx/rankup/requirements/operation/NoneOperation.java
new file mode 100644
index 0000000..aab791a
--- /dev/null
+++ b/src/main/java/sh/okx/rankup/requirements/operation/NoneOperation.java
@@ -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;
+ }
+}
diff --git a/src/main/java/sh/okx/rankup/requirements/operation/OneOperation.java b/src/main/java/sh/okx/rankup/requirements/operation/OneOperation.java
new file mode 100644
index 0000000..abdce20
--- /dev/null
+++ b/src/main/java/sh/okx/rankup/requirements/operation/OneOperation.java
@@ -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);
+ }
+}
diff --git a/src/main/java/sh/okx/rankup/ranks/requirements/GroupRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/GroupRequirement.java
similarity index 88%
rename from src/main/java/sh/okx/rankup/ranks/requirements/GroupRequirement.java
rename to src/main/java/sh/okx/rankup/requirements/requirement/GroupRequirement.java
index d62187e..a5a7b6c 100644
--- a/src/main/java/sh/okx/rankup/ranks/requirements/GroupRequirement.java
+++ b/src/main/java/sh/okx/rankup/requirements/requirement/GroupRequirement.java
@@ -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) {
diff --git a/src/main/java/sh/okx/rankup/ranks/requirements/MoneyRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/MoneyRequirement.java
similarity index 85%
rename from src/main/java/sh/okx/rankup/ranks/requirements/MoneyRequirement.java
rename to src/main/java/sh/okx/rankup/requirements/requirement/MoneyRequirement.java
index f1b7f4d..b6c5c29 100644
--- a/src/main/java/sh/okx/rankup/ranks/requirements/MoneyRequirement.java
+++ b/src/main/java/sh/okx/rankup/requirements/requirement/MoneyRequirement.java
@@ -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) {
diff --git a/src/main/java/sh/okx/rankup/ranks/requirements/PlaytimeMinutesRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/PlaytimeMinutesRequirement.java
similarity index 92%
rename from src/main/java/sh/okx/rankup/ranks/requirements/PlaytimeMinutesRequirement.java
rename to src/main/java/sh/okx/rankup/requirements/requirement/PlaytimeMinutesRequirement.java
index 136de3c..b93038d 100644
--- a/src/main/java/sh/okx/rankup/ranks/requirements/PlaytimeMinutesRequirement.java
+++ b/src/main/java/sh/okx/rankup/requirements/requirement/PlaytimeMinutesRequirement.java
@@ -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;
diff --git a/src/main/java/sh/okx/rankup/ranks/requirements/XpLevelRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/XpLevelRequirement.java
similarity index 82%
rename from src/main/java/sh/okx/rankup/ranks/requirements/XpLevelRequirement.java
rename to src/main/java/sh/okx/rankup/requirements/requirement/XpLevelRequirement.java
index 14f8c19..b2e1945 100644
--- a/src/main/java/sh/okx/rankup/ranks/requirements/XpLevelRequirement.java
+++ b/src/main/java/sh/okx/rankup/requirements/requirement/XpLevelRequirement.java
@@ -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) {
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 3e92d8b..efb012a 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -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.
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 4437ef6..1e29070 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -27,7 +27,6 @@ permissions:
rankup.ranks: true
rankup.reload: true
rankup.ranks: true
- rankup.sign: true
rankup.info:
default: true
rankup.rankup:
@@ -39,6 +38,4 @@ permissions:
rankup.reload:
default: op
rankup.ranks:
- default: true
- rankup.sign:
- default: op
\ No newline at end of file
+ default: true
\ No newline at end of file
diff --git a/src/main/resources/prestiges.yml b/src/main/resources/prestiges.yml
new file mode 100644
index 0000000..f772a4e
--- /dev/null
+++ b/src/main/resources/prestiges.yml
@@ -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
\ No newline at end of file
diff --git a/src/main/resources/rankups.yml b/src/main/resources/rankups.yml
index 1e49894..408d6cb 100644
--- a/src/main/resources/rankups.yml
+++ b/src/main/resources/rankups.yml
@@ -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.