mirror of
https://github.com/EssentialsX/Essentials.git
synced 2025-01-21 23:51:42 +01:00
This commit is contained in:
parent
e57d0e96e2
commit
d92884800b
@ -23,6 +23,8 @@ import java.util.logging.Level;
|
|||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.zip.GZIPInputStream;
|
import java.util.zip.GZIPInputStream;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
import com.ice.tar.TarInputStream;
|
import com.ice.tar.TarInputStream;
|
||||||
import com.ice.tar.TarEntry;
|
import com.ice.tar.TarEntry;
|
||||||
|
|
||||||
@ -62,46 +64,37 @@ public class EssentialsGeoIPPlayerListener implements Listener, IConf {
|
|||||||
}
|
}
|
||||||
InetAddress address = player.getAddress().getAddress();
|
InetAddress address = player.getAddress().getAddress();
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
String locale = ess.getI18n().getCurrentLocale().toString().replace('_', '-'); // get locale setting from Essentials
|
try {
|
||||||
try {
|
if (config.getBoolean("database.show-cities", false)) {
|
||||||
if (config.getBoolean("database.show-cities", false)) {
|
CityResponse response = mmreader.city(address);
|
||||||
CityResponse response = mmreader.city(address);
|
if (response == null) {
|
||||||
if (response == null) {
|
return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
String city;
|
|
||||||
String region;
|
|
||||||
String country;
|
|
||||||
if (config.getBoolean("enable-locale")) {
|
|
||||||
// Get geolocation based on locale. If not avaliable in specific language, get the default one.
|
|
||||||
city = ((city=response.getCity().getNames().get(locale))!=null) ? city : response.getCity().getName();
|
|
||||||
region = ((region=response.getMostSpecificSubdivision().getNames().get(locale))!=null) ? region : response.getMostSpecificSubdivision().getName();
|
|
||||||
country = ((country=response.getCountry().getNames().get(locale))!=null) ? country : response.getCountry().getName();
|
|
||||||
} else {
|
|
||||||
// Get geolocation regarding locale setting.
|
|
||||||
city = response.getCity().getName();
|
|
||||||
region = response.getMostSpecificSubdivision().getName();
|
|
||||||
country = response.getCountry().getName();
|
|
||||||
}
|
|
||||||
if (city != null) {
|
|
||||||
sb.append(city).append(", ");
|
|
||||||
}
|
|
||||||
if (region != null) {
|
|
||||||
sb.append(region).append(", ");
|
|
||||||
}
|
|
||||||
sb.append(country);
|
|
||||||
} else {
|
|
||||||
CountryResponse response = mmreader.country(address);
|
|
||||||
sb.append(response.getCountry().getNames().get(locale));
|
|
||||||
}
|
}
|
||||||
} catch (AddressNotFoundException ex) {
|
String city;
|
||||||
// GeoIP2 API forced this when address not found in their DB. jar will not complied without this.
|
String region;
|
||||||
// TODO: Maybe, we can set a new custom msg about addr-not-found in messages.properties.
|
String country;
|
||||||
logger.log(Level.INFO, tl("cantReadGeoIpDB") + " " + ex.getLocalizedMessage());
|
city = response.getCity().getName();
|
||||||
} catch (IOException | GeoIp2Exception ex) {
|
region = response.getMostSpecificSubdivision().getName();
|
||||||
// GeoIP2 API forced this when address not found in their DB. jar will not complied without this.
|
country = response.getCountry().getName();
|
||||||
logger.log(Level.SEVERE, tl("cantReadGeoIpDB") + " " + ex.getLocalizedMessage());
|
if (city != null) {
|
||||||
|
sb.append(city).append(", ");
|
||||||
|
}
|
||||||
|
if (region != null) {
|
||||||
|
sb.append(region).append(", ");
|
||||||
|
}
|
||||||
|
sb.append(country);
|
||||||
|
} else {
|
||||||
|
CountryResponse response = mmreader.country(address);
|
||||||
|
sb.append(response.getCountry().getName());
|
||||||
}
|
}
|
||||||
|
} catch (AddressNotFoundException ex) {
|
||||||
|
// GeoIP2 API forced this when address not found in their DB. jar will not complied without this.
|
||||||
|
// TODO: Maybe, we can set a new custom msg about addr-not-found in messages.properties.
|
||||||
|
logger.log(Level.INFO, tl("cantReadGeoIpDB") + " " + ex.getLocalizedMessage());
|
||||||
|
} catch (IOException | GeoIp2Exception ex) {
|
||||||
|
// GeoIP2 API forced this when address not found in their DB. jar will not complied without this.
|
||||||
|
logger.log(Level.SEVERE, tl("cantReadGeoIpDB") + " " + ex.getLocalizedMessage());
|
||||||
|
}
|
||||||
if (config.getBoolean("show-on-whois", true)) {
|
if (config.getBoolean("show-on-whois", true)) {
|
||||||
u.setGeoLocation(sb.toString());
|
u.setGeoLocation(sb.toString());
|
||||||
}
|
}
|
||||||
@ -127,6 +120,11 @@ public class EssentialsGeoIPPlayerListener implements Listener, IConf {
|
|||||||
config.set("database.update.by-every-x-days", 30);
|
config.set("database.update.by-every-x-days", 30);
|
||||||
config.set("enable-locale", true);
|
config.set("enable-locale", true);
|
||||||
config.save();
|
config.save();
|
||||||
|
// delete old GeoIP.dat fiiles
|
||||||
|
File oldDatFile = new File(dataFolder, "GeoIP.dat");
|
||||||
|
File oldDatFileCity = new File(dataFolder, "GeoIP-City.dat");
|
||||||
|
oldDatFile.delete();
|
||||||
|
oldDatFileCity.delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.getBoolean("database.show-cities", false)) {
|
if (config.getBoolean("database.show-cities", false)) {
|
||||||
@ -149,7 +147,14 @@ public class EssentialsGeoIPPlayerListener implements Listener, IConf {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
mmreader = new DatabaseReader.Builder(databaseFile).build();
|
// locale setting
|
||||||
|
if (config.getBoolean("enable-locale")) {
|
||||||
|
// Get geolocation based on Essentials' locale. If the locale is not avaliable, use "en".
|
||||||
|
String locale = ess.getI18n().getCurrentLocale().toString().replace('_', '-');
|
||||||
|
mmreader = new DatabaseReader.Builder(databaseFile).locales(Arrays.asList(locale,"en")).build();
|
||||||
|
} else {
|
||||||
|
mmreader = new DatabaseReader.Builder(databaseFile).build();
|
||||||
|
}
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
logger.log(Level.SEVERE, tl("cantReadGeoIpDB"), ex);
|
logger.log(Level.SEVERE, tl("cantReadGeoIpDB"), ex);
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ database:
|
|||||||
by-every-x-days: 30
|
by-every-x-days: 30
|
||||||
show-on-login: true
|
show-on-login: true
|
||||||
show-on-whois: true
|
show-on-whois: true
|
||||||
# "enable-locale" enables locale on geolocation display. Not all languages are supported.
|
# "enable-locale" enables locale on geolocation display.
|
||||||
# Check your Essentials/config.yml "locale" section for details.
|
# Language is determined by Essentials/config.yml "locale" section.
|
||||||
|
# Not all languages are supported. See https://dev.maxmind.com/geoip/geoip2/web-services/#Languages
|
||||||
enable-locale: true
|
enable-locale: true
|
Loading…
Reference in New Issue
Block a user