diff --git a/base/src/main/java/io/github/p2vman/Identifier.java b/base/src/main/java/io/github/p2vman/Identifier.java index a57aace..814057c 100644 --- a/base/src/main/java/io/github/p2vman/Identifier.java +++ b/base/src/main/java/io/github/p2vman/Identifier.java @@ -1,6 +1,52 @@ package io.github.p2vman; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; + +import java.io.IOException; + public class Identifier implements Comparable { + public static class Adapter extends TypeAdapter { + @Override + public void write(JsonWriter out, Identifier value) throws IOException { + out.value(value.toString()); + } + + @Override + public Identifier read(JsonReader in) throws IOException { + JsonToken token = in.peek(); + + if (token == JsonToken.STRING) { + return new Identifier(in.nextString()); + } else if (token == JsonToken.BEGIN_OBJECT) { + in.beginObject(); + String namespace = "minecraft"; + String path = null; + + while (in.hasNext()) { + String name = in.nextName(); + if (name.equals("namespace")) { + namespace = in.nextString(); + } else if (name.equals("path")) { + path = in.nextString(); + } else { + in.skipValue(); + } + } + + in.endObject(); + if (path == null) { + throw new IOException("Missing 'path' in Identifier object"); + } + + return Identifier.of(namespace, path); + } + + throw new IOException("Unexpected token: " + token); + } + } public static final char NAMESPACE_SEPARATOR = ':'; public static final String DEFAULT_NAMESPACE = "minecraft"; private final String namespace; diff --git a/base/src/main/java/io/github/p2vman/Static.java b/base/src/main/java/io/github/p2vman/Static.java index 005fd5b..a9f1c1a 100644 --- a/base/src/main/java/io/github/p2vman/Static.java +++ b/base/src/main/java/io/github/p2vman/Static.java @@ -1,7 +1,11 @@ package io.github.p2vman; import com.google.gson.Gson; +import com.google.gson.GsonBuilder; public class Static { - public static final Gson GSON = new Gson(); + public static final Gson GSON = new GsonBuilder() + .registerTypeAdapter(Identifier.class, new Identifier.Adapter()) + .setPrettyPrinting() + .create(); } diff --git a/base/src/main/java/io/github/p2vman/lang/Formatter.java b/base/src/main/java/io/github/p2vman/lang/Formatter.java new file mode 100644 index 0000000..a806aaa --- /dev/null +++ b/base/src/main/java/io/github/p2vman/lang/Formatter.java @@ -0,0 +1,6 @@ +package io.github.p2vman.lang; + +@FunctionalInterface +public interface Formatter { + String format(String string, Object... args); +} diff --git a/base/src/main/java/io/github/p2vman/lang/Lang.java b/base/src/main/java/io/github/p2vman/lang/Lang.java new file mode 100644 index 0000000..d3a0b40 --- /dev/null +++ b/base/src/main/java/io/github/p2vman/lang/Lang.java @@ -0,0 +1,22 @@ +package io.github.p2vman.lang; + +import com.google.gson.JsonElement; + +import java.io.InputStream; +import java.util.Stack; +import java.util.function.BiConsumer; +import java.util.function.BiFunction; +import java.util.function.Consumer; + +public interface Lang extends BiConsumer, Consumer, BiFunction, Void> { + Lang LANG = new Language(); + String get(String id); + String getOrDefult(String id, String defult); + default String getOrDefult(String id) { + return getOrDefult(id, id); + } + boolean has(String id); + void clear(); + String format(String id, Object... args); + Formatter setFormater(Formatter formatter); +} diff --git a/base/src/main/java/io/github/p2vman/lang/Language.java b/base/src/main/java/io/github/p2vman/lang/Language.java new file mode 100644 index 0000000..2c64d9b --- /dev/null +++ b/base/src/main/java/io/github/p2vman/lang/Language.java @@ -0,0 +1,93 @@ +package io.github.p2vman.lang; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import io.github.p2vman.Static; +import lombok.ToString; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; +import java.util.Stack; +import java.util.function.BiConsumer; +import java.util.function.BiFunction; +import java.util.function.Consumer; +import java.util.regex.Pattern; + +@ToString +public class Language implements Lang, BiConsumer, Consumer, BiFunction, Void> { + private Formatter formatter = String::format; + private Map map; + private static final Pattern UNSUPPORTED_FORMAT_PATTERN = Pattern.compile("%(\\d+\\$)?[\\d.]*[df]"); + public Language() { + map = new HashMap<>(); + } + + @Override + public String get(String id) { + return map.get(id); + } + + @Override + public String getOrDefult(String id) { + return map.getOrDefault(id, id); + } + + @Override + public String getOrDefult(String id, String defult) { + return map.getOrDefault(id, defult); + } + + @Override + public void accept(String s, String s2) { + map.put(s, s2); + } + + @Override + public boolean has(String id) { + return map.containsKey(id); + } + + @Override + public void accept(InputStream stream) { + JsonObject jsonObject = Static.GSON.fromJson(new InputStreamReader(stream, StandardCharsets.UTF_8), JsonObject.class); + + for (Map.Entry entry : jsonObject.entrySet()) { + Stack stack = new Stack<>(); + stack.push(entry.getKey()); + apply(entry.getValue(), stack); + } + } + + @Override + public Void apply(JsonElement jsonElement, Stack strings) { + if (jsonElement.isJsonObject()) { + for (Map.Entry entry : jsonElement.getAsJsonObject().entrySet()) { + Stack strings2 = new Stack<>(); + strings2.addAll(strings); + strings2.push(entry.getKey()); + apply(entry.getValue(), strings2); + } + } else { + this.accept(String.join(".", strings), UNSUPPORTED_FORMAT_PATTERN.matcher(jsonElement.getAsString()).replaceAll("%$1s")); + } + return null; + } + + @Override + public void clear() { + map.clear(); + } + + @Override + public String format(String id, Object... args) { + return formatter.format(getOrDefult(id), args); + } + + public Formatter setFormatter(Formatter formatter) { + this.formatter = formatter; + return formatter; + } +} diff --git a/base/src/main/java/io/github/p2vman/updater/Updater.java b/base/src/main/java/io/github/p2vman/updater/Updater.java index bd73efd..2892292 100644 --- a/base/src/main/java/io/github/p2vman/updater/Updater.java +++ b/base/src/main/java/io/github/p2vman/updater/Updater.java @@ -2,7 +2,6 @@ package io.github.p2vman.updater; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import com.google.gson.stream.JsonReader; import java.io.BufferedReader; import java.io.IOException; @@ -27,10 +26,16 @@ public class Updater { private static final String API_URL = "https://api.spiget.org/v2/resources/"; private static final String URL = "https://www.spigotmc.org/"; private static final String SPIGOT_SIDE_API = "https://api.spigotmc.org/legacy/"; + private JsonObject object; + + public JsonObject getJson() { + return object.deepCopy(); + } public Updater() { try (InputStreamReader reader = new InputStreamReader(Objects.requireNonNull(Updater.class.getClassLoader().getResourceAsStream("updater.json")))) { JsonObject jsonObject = JsonParser.parseReader(reader).getAsJsonObject(); + this.object = jsonObject; id = jsonObject.get("id").getAsString(); } catch (Exception e) { e.printStackTrace(); diff --git a/base/src/main/java/org/eptalist/Config.java b/base/src/main/java/org/eptalist/Config.java index be02f1a..198d453 100644 --- a/base/src/main/java/org/eptalist/Config.java +++ b/base/src/main/java/org/eptalist/Config.java @@ -6,15 +6,19 @@ import io.github.p2vman.Static; import io.github.p2vman.Utils; import java.io.*; -import java.util.ArrayList; +import java.nio.charset.StandardCharsets; import java.util.HashMap; -import java.util.List; import java.util.Map; public class Config { + public Identifier command = new Identifier("command", "eptalist"); + @SerializedName("updater") + public boolean auto_update_check = true; public boolean enable = false; public boolean skip_to_op = true; public Identifier curent = new Identifier("whitelist", "base"); + @SerializedName("lang") + public String language = "en"; public Mode[] modes = new Mode[] { new Mode( new Identifier( @@ -67,12 +71,12 @@ public class Config { try { if (!config.exists()) { this.cfg = new Config(); - try (FileWriter writer =new FileWriter(this.config)) { + try (FileWriter writer =new FileWriter(this.config, StandardCharsets.UTF_8)) { Static.GSON.toJson(cfg, writer); } } else { - try (FileReader reader = new FileReader(this.config)) { + try (FileReader reader = new FileReader(this.config, StandardCharsets.UTF_8)) { cfg = Static.GSON.fromJson(reader, Config.class); } } @@ -82,7 +86,7 @@ public class Config { } public void save() { - try (FileWriter writer = new FileWriter(this.config)) { + try (FileWriter writer = new FileWriter(this.config, StandardCharsets.UTF_8)) { Static.GSON.toJson(cfg, writer); } catch (Exception e) { e.printStackTrace(); diff --git a/base/src/main/java/org/eptalist/storge/Json.java b/base/src/main/java/org/eptalist/storge/Json.java index dd77dee..70f6c0a 100644 --- a/base/src/main/java/org/eptalist/storge/Json.java +++ b/base/src/main/java/org/eptalist/storge/Json.java @@ -3,6 +3,7 @@ package org.eptalist.storge; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import io.github.p2vman.Static; +import io.github.p2vman.lang.Lang; import java.io.*; import java.nio.charset.StandardCharsets; @@ -110,7 +111,7 @@ public class Json extends ArrayList implements Data { @Override public boolean removeUser(String name, List info) { if (!is(name)) { - info.add("&r" + name + "is not in the whitelist"); + info.add(Lang.LANG.format("storge.remove.not.in", name)); return false; } return remove(name); @@ -119,7 +120,7 @@ public class Json extends ArrayList implements Data { @Override public boolean addUser(String name, List info) { if (is(name)) { - info.add("&r" + name + "is already on the whitelist"); + info.add(Lang.LANG.format("storge.add.is.already", name)); return false; } return add(name); diff --git a/base/src/main/java/org/eptalist/storge/Mysql.java b/base/src/main/java/org/eptalist/storge/Mysql.java index 49a901b..f17e1d8 100644 --- a/base/src/main/java/org/eptalist/storge/Mysql.java +++ b/base/src/main/java/org/eptalist/storge/Mysql.java @@ -1,5 +1,7 @@ package org.eptalist.storge; +import io.github.p2vman.lang.Lang; + import java.sql.*; import java.util.ArrayList; import java.util.List; @@ -44,7 +46,7 @@ public class Mysql implements Data { @Override public boolean removeUser(String name, List info) { if (!is(name)) { - info.add("&r" + name + "is not in the whitelist"); + info.add(Lang.LANG.format("storge.remove.not.in", name)); return false; } try { @@ -53,7 +55,7 @@ public class Mysql implements Data { return statement.executeUpdate() > 0; } catch (SQLException e) { e.printStackTrace(); - info.add("&rThere was an error in the database"); + info.add(Lang.LANG.format("err.db")); return false; } } @@ -63,7 +65,7 @@ public class Mysql implements Data { try { if (connection.isClosed()) { connection = DriverManager.getConnection(String.format((String) this.data.get("file"))); - info.add("&6The database has been reconnected"); + info.add(Lang.LANG.format("storge.reconnect")); } PreparedStatement statement = connection.prepareStatement("SELECT user_name FROM "+this.teable+" WHERE "+this.i+" = ?"); statement.setString(1, name); @@ -71,7 +73,7 @@ public class Mysql implements Data { return resultSet.next(); } catch (SQLException e) { e.printStackTrace(); - info.add("&rThere was an error in the database"); + info.add(Lang.LANG.format("err.db")); return false; } } @@ -95,7 +97,7 @@ public class Mysql implements Data { @Override public boolean addUser(String name, List info) { if (is(name)) { - info.add("&r" + name + "is already on the whitelist"); + info.add(Lang.LANG.format("storge.add.is.already", name)); return false; } try { @@ -104,7 +106,7 @@ public class Mysql implements Data { return statement.executeUpdate() > 0; } catch (SQLException e) { e.printStackTrace(); - info.add("&rThere was an error in the database"); + info.add(Lang.LANG.format("err.db")); return false; } } diff --git a/base/src/main/java/org/eptalist/storge/NBT.java b/base/src/main/java/org/eptalist/storge/NBT.java index a113055..8025770 100644 --- a/base/src/main/java/org/eptalist/storge/NBT.java +++ b/base/src/main/java/org/eptalist/storge/NBT.java @@ -1,5 +1,6 @@ package org.eptalist.storge; +import io.github.p2vman.lang.Lang; import io.github.p2vman.nbt.NbtIo; import io.github.p2vman.nbt.tag.Tag; import io.github.p2vman.nbt.tag.TagCompound; @@ -145,7 +146,7 @@ public class NBT extends ArrayList implements Data { @Override public boolean removeUser(String name, List info) { if (!is(name)) { - info.add("&r" + name + "is not in the whitelist"); + info.add(Lang.LANG.format("storge.remove.not.in", name)); return false; } return remove(name); @@ -154,7 +155,7 @@ public class NBT extends ArrayList implements Data { @Override public boolean addUser(String name, List info) { if (is(name)) { - info.add("&r" + name + "is already on the whitelist"); + info.add(Lang.LANG.format("storge.add.is.already", name)); return false; } return add(name); diff --git a/base/src/main/java/org/eptalist/storge/Sqlite.java b/base/src/main/java/org/eptalist/storge/Sqlite.java index 71a73e7..a2c1cac 100644 --- a/base/src/main/java/org/eptalist/storge/Sqlite.java +++ b/base/src/main/java/org/eptalist/storge/Sqlite.java @@ -1,5 +1,7 @@ package org.eptalist.storge; +import io.github.p2vman.lang.Lang; + import java.sql.*; import java.util.ArrayList; import java.util.List; @@ -45,7 +47,7 @@ public class Sqlite implements Data { @Override public boolean removeUser(String name, List info) { if (!is(name)) { - info.add("&r" + name + "is not in the whitelist"); + info.add(Lang.LANG.format("storge.remove.not.in", name)); return false; } try { @@ -54,7 +56,7 @@ public class Sqlite implements Data { return statement.executeUpdate() > 0; } catch (SQLException e) { e.printStackTrace(); - info.add("&rThere was an error in the database"); + info.add(Lang.LANG.format("err.db")); return false; } } @@ -64,7 +66,7 @@ public class Sqlite implements Data { try { if (connection.isClosed()) { connection = DriverManager.getConnection(String.format("jdbc:sqlite:%s.db", (String) this.data.get("file"))); - info.add("&6The database has been reconnected"); + info.add(Lang.LANG.format("storge.reconnect")); } PreparedStatement statement = connection.prepareStatement("SELECT "+this.i+" FROM "+this.teable+" WHERE "+this.i+" = ?"); statement.setString(1, name); @@ -72,7 +74,7 @@ public class Sqlite implements Data { return resultSet.next(); } catch (SQLException e) { e.printStackTrace(); - info.add("&rThere was an error in the database"); + info.add(Lang.LANG.format("err.db")); return false; } } @@ -96,7 +98,7 @@ public class Sqlite implements Data { @Override public boolean addUser(String name, List info) { if (is(name)) { - info.add("&r" + name + "is already on the whitelist"); + info.add(Lang.LANG.format("storge.add.is.already", name)); return false; } try { @@ -105,7 +107,7 @@ public class Sqlite implements Data { return statement.executeUpdate() > 0; } catch (SQLException e) { e.printStackTrace(); - info.add("&rThere was an error in the database"); + info.add(Lang.LANG.format("err.db")); return false; } } diff --git a/base/src/main/resources/res/en.json b/base/src/main/resources/res/en.json new file mode 100644 index 0000000..21f0c7b --- /dev/null +++ b/base/src/main/resources/res/en.json @@ -0,0 +1,35 @@ +{ + "storge": { + "remove": { + "not.in": "&4 %s is not in the whitelist" + }, + "add": { + "is.already": "&4 %s is already on the whitelist" + }, + "reconnect": "&6The database has been reconnected" + }, + "err": { + "db": "&4There was an error in the database" + }, + "command": { + "reload": { + "succes": "Configuration reloaded successfully.", + "failed": "&4Failed to reload the configuration." + }, + "remove": { + "succes": "User removed from the whitelist: %s" + }, + "add": { + "succes": "User added to the whitelist: %s" + }, + "mode": { + "succes": "Mode set to: %s", + "invalid.id": "&4Invalid mode ID!" + }, + "on": "Whitelist enabled.", + "off": "Whitelist disabled." + }, + "perm": { + "throw": "&4You don't have permission to perform this command." + } +} \ No newline at end of file diff --git a/base/src/main/resources/updater.json b/base/src/main/resources/updater.json index 81c8ee5..93423ec 100644 --- a/base/src/main/resources/updater.json +++ b/base/src/main/resources/updater.json @@ -1,4 +1,12 @@ { "id": "122225", - "source": "https://github.com/p2vman/EptaListProject" + "info": { + "authors": [ + "p2vman" + ], + "urls": { + "source": "https://github.com/p2vman/EptaListProject", + "discord": "https://discord.gg/UdSXf4tpUF" + } + } } \ No newline at end of file diff --git a/boungecord/src/main/java/org/eptalist/bounge/Boungecord.java b/boungecord/src/main/java/org/eptalist/bounge/Boungecord.java index 47309b8..589c5d3 100644 --- a/boungecord/src/main/java/org/eptalist/bounge/Boungecord.java +++ b/boungecord/src/main/java/org/eptalist/bounge/Boungecord.java @@ -2,7 +2,6 @@ package org.eptalist.bounge; import com.google.gson.JsonObject; import io.github.p2vman.Identifier; -import io.github.p2vman.Static; import io.github.p2vman.profiling.ExempleProfiler; import io.github.p2vman.profiling.Profiler; import io.github.p2vman.updater.Updater; @@ -51,27 +50,30 @@ public final class Boungecord extends Plugin { @Override public void onEnable() { - try { - Updater updater = Updater.getInstance(); - JsonObject obj = updater.getLasted(); - if (!getDescription().getVersion().equals(obj.get("name").getAsString())) { - LOGGER.log(Level.WARNING, "---------- Outdated Version ----------"); - LOGGER.log(Level.WARNING, ""); - LOGGER.log(Level.WARNING, "new version:"); - LOGGER.log(Level.WARNING, updater.getVersionUrl()); - LOGGER.log(Level.WARNING, ""); - LOGGER.log(Level.WARNING, "---------------------------------"); - } - } catch (Exception e) { - e.printStackTrace(); - } File data = getDataFolder(); if (!data.exists()) { data.mkdirs(); } config = new Config.ConfigContainer(new File(data, "wh.json")); - load(); + if (config.get().auto_update_check) + { + try { + Updater updater = Updater.getInstance(); + JsonObject obj = updater.getLasted(); + if (!getDescription().getVersion().equals(obj.get("name").getAsString())) { + LOGGER.log(Level.WARNING, "---------- Outdated Version ----------"); + LOGGER.log(Level.WARNING, ""); + LOGGER.log(Level.WARNING, "new version:"); + LOGGER.log(Level.WARNING, updater.getVersionUrl()); + LOGGER.log(Level.WARNING, ""); + LOGGER.log(Level.WARNING, "---------------------------------"); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + Metrics metrics = new Metrics(this, Constants.bstats_id); metrics.addCustomChart(new SimplePie("data_type", () -> mode.storage)); diff --git a/boungecord/src/main/java/org/eptalist/bounge/WhiteListCommand.java b/boungecord/src/main/java/org/eptalist/bounge/WhiteListCommand.java index efd3ba1..a1a6511 100644 --- a/boungecord/src/main/java/org/eptalist/bounge/WhiteListCommand.java +++ b/boungecord/src/main/java/org/eptalist/bounge/WhiteListCommand.java @@ -1,6 +1,9 @@ package org.eptalist.bounge; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import io.github.p2vman.Identifier; +import io.github.p2vman.updater.Updater; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.plugin.Command; @@ -9,14 +12,14 @@ import net.md_5.bungee.api.plugin.TabExecutor; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.logging.Logger; +import java.util.Map; import java.util.stream.Collectors; public class WhiteListCommand extends Command implements TabExecutor { - private final String[] w1 = {"off", "on", "add", "remove", "list", "help", "mode", "reload"}; + private final String[] w1 = {"off", "on", "add", "remove", "list", "help", "mode", "reload","info"}; public WhiteListCommand() { - super("eptalist"); + super(Boungecord.config.get().command.getPath()); } @Override @@ -109,6 +112,16 @@ public class WhiteListCommand extends Command implements TabExecutor { sender.sendMessage(new TextComponent("Failed to reload the configuration.")); } break; + case "info": + { + JsonObject object = Updater.getInstance().getJson().getAsJsonObject("info"); + sender.sendMessage(new TextComponent("links:")); + for (Map.Entry entry : object.getAsJsonObject("urls").entrySet()) { + sender.sendMessage(new TextComponent(entry.getKey()+": "+entry.getValue().getAsString())); + } + sender.sendMessage(new TextComponent()); + break; + } default: sender.sendMessage(new TextComponent("Unknown command. Use /eptalist help for the list of commands.")); diff --git a/build.gradle b/build.gradle index dafd15c..7c98acf 100644 --- a/build.gradle +++ b/build.gradle @@ -7,6 +7,7 @@ plugins { import de.undercouch.gradle.tasks.download.Download subprojects { + plugins.apply("java") tasks.withType(JavaCompile) { options.encoding = "UTF-8" } diff --git a/gradle.properties b/gradle.properties index ef59847..3b450db 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1 @@ -version = 1.5 \ No newline at end of file +version = 1.6 \ No newline at end of file diff --git a/spigot/src/main/java/org/eptalist/spigot/EptaList.java b/spigot/src/main/java/org/eptalist/spigot/EptaList.java index 8f15f8f..6dee53c 100644 --- a/spigot/src/main/java/org/eptalist/spigot/EptaList.java +++ b/spigot/src/main/java/org/eptalist/spigot/EptaList.java @@ -1,9 +1,11 @@ package org.eptalist.spigot; import com.google.gson.JsonObject; +import io.github.p2vman.lang.Lang; import io.github.p2vman.profiling.ExempleProfiler; import io.github.p2vman.profiling.Profiler; import io.github.p2vman.updater.Updater; +import org.bukkit.ChatColor; import org.eptalist.Config; import io.github.p2vman.Identifier; import org.eptalist.Constants; @@ -37,6 +39,13 @@ public final class EptaList extends JavaPlugin { profiler.push("load"); config.load(); identifiers.clear(); + Lang.LANG.clear(); + Lang.LANG.setFormater(((string, args) -> ChatColor.translateAlternateColorCodes('&', String.format(string, args)))); + try { + Lang.LANG.accept(EptaList.class.getResourceAsStream("/res/"+config.get().language+".json")); + } catch (Exception e) { + e.printStackTrace(); + } for (Config.Mode mode1 : config.get().modes) { identifiers.add(mode1.id); } @@ -57,22 +66,6 @@ public final class EptaList extends JavaPlugin { @Override public void onEnable() { - try { - Updater updater = Updater.getInstance(); - JsonObject obj = updater.getLasted(); - if (!getDescription().getVersion().equals(obj.get("name").getAsString())) { - LOGGER.log(Level.WARNING, "---------- Outdated Version ----------"); - LOGGER.log(Level.WARNING, ""); - LOGGER.log(Level.WARNING, "new version:"); - LOGGER.log(Level.WARNING, updater.getVersionUrl()); - LOGGER.log(Level.WARNING, ""); - LOGGER.log(Level.WARNING, "---------------------------------"); - } - } catch (Exception e) { - e.printStackTrace(); - } - - profiler.push("init"); metrics = new Metrics(this, Constants.bstats_id); @@ -83,14 +76,31 @@ public final class EptaList extends JavaPlugin { config = new Config.ConfigContainer(new File(data, "wh.json")); load(); + if (config.get().auto_update_check) { + try { + Updater updater = Updater.getInstance(); + JsonObject obj = updater.getLasted(); + if (!getDescription().getVersion().equals(obj.get("name").getAsString())) { + LOGGER.log(Level.WARNING, "---------- Outdated Version ----------"); + LOGGER.log(Level.WARNING, ""); + LOGGER.log(Level.WARNING, "new version:"); + LOGGER.log(Level.WARNING, updater.getVersionUrl()); + LOGGER.log(Level.WARNING, ""); + LOGGER.log(Level.WARNING, "---------------------------------"); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + try { Field commandMapField = Bukkit.getServer().getClass().getDeclaredField("commandMap"); commandMapField.setAccessible(true); CommandMap map = (CommandMap)commandMapField.get(Bukkit.getServer()); - Command command = new WhiteListCommand(); + Command command = new WhiteListCommand(config.get().command); - map.register("minecraft", command); + map.register(config.get().command.getNamespace(), command); } catch (Exception e) { e.printStackTrace(); } @@ -98,6 +108,7 @@ public final class EptaList extends JavaPlugin { getServer().getPluginManager().registerEvents(new Event(), this); metrics.addCustomChart(new SimplePie("data_type", () -> mode.storage)); LOGGER.log(Level.INFO, String.format("Init Plugin %sms", profiler.getElapsedTimeAndRemove(profiler.pop()))); + System.out.println(Lang.LANG); } @Override diff --git a/spigot/src/main/java/org/eptalist/spigot/WhiteListCommand.java b/spigot/src/main/java/org/eptalist/spigot/WhiteListCommand.java index 7e377b0..501b271 100644 --- a/spigot/src/main/java/org/eptalist/spigot/WhiteListCommand.java +++ b/spigot/src/main/java/org/eptalist/spigot/WhiteListCommand.java @@ -1,6 +1,10 @@ package org.eptalist.spigot; import com.google.common.collect.ImmutableList; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import io.github.p2vman.lang.Lang; +import io.github.p2vman.updater.Updater; import org.apache.commons.lang.Validate; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -27,7 +31,8 @@ public class WhiteListCommand extends Command { "help", "mode", "kick_nolisted", - "reload" + "reload", + "info" }; private final Permission permission_enable; private final Permission permission_add; @@ -38,8 +43,8 @@ public class WhiteListCommand extends Command { private final Permission permission_list; - public WhiteListCommand() { - super("eptalist"); + public WhiteListCommand(Identifier identifier) { + super(identifier.getPath()); Function recal = (p) -> { p.recalculatePermissibles(); return p; @@ -64,13 +69,13 @@ public class WhiteListCommand extends Command { case "off": if (testPermission(sender, permission_enable)) { EptaList.config.get().enable = false; EptaList.config.save(); - sender.sendMessage("Whitelist disabled."); + sender.sendMessage(Lang.LANG.format("command.off")); } break; case "on": if (testPermission(sender, permission_enable)) { EptaList.config.get().enable = true; EptaList.config.save(); - sender.sendMessage("Whitelist enabled."); + sender.sendMessage(Lang.LANG.format("command.on")); } break; case "add": if (testPermission(sender, permission_add)) { @@ -78,7 +83,7 @@ public class WhiteListCommand extends Command { if (!Utils.len(args, 1)) { sender.sendMessage("Usage: /" + commandLabel + " add "); } else if (EptaList.list.addUser(args[1], info)) { - sender.sendMessage("User added to the whitelist: " + args[1]); + sender.sendMessage(Lang.LANG.format("command.add.succes", args[1])); } else { for (String line : info) { sender.sendMessage(ChatColor.translateAlternateColorCodes('&', line)); @@ -91,7 +96,7 @@ public class WhiteListCommand extends Command { if (!Utils.len(args, 1)) { sender.sendMessage("Usage: /" + commandLabel + " remove "); } else if (EptaList.list.removeUser(args[1], info)) { - sender.sendMessage("User removed from the whitelist: " + args[1]); + sender.sendMessage(Lang.LANG.format("command.remove.succes", args[1])); } else { for (String line : info) { sender.sendMessage(ChatColor.translateAlternateColorCodes('&', line)); @@ -112,9 +117,9 @@ public class WhiteListCommand extends Command { EptaList.config.get().curent = id; EptaList.config.save(); EptaList.load(); - sender.sendMessage("Mode set to: " + id); + sender.sendMessage(Lang.LANG.format("command.mode.succes", id)); } else { - sender.sendMessage("Invalid mode ID!"); + sender.sendMessage(Lang.LANG.format("command.mode.invalid.id")); } } } @@ -144,13 +149,23 @@ public class WhiteListCommand extends Command { case "reload": if (testPermission(sender, permission_reload)) { try { EptaList.load(); - sender.sendMessage("Configuration reloaded successfully."); + sender.sendMessage(Lang.LANG.format("command.reload.succes")); } catch (Exception e) { e.printStackTrace(); - sender.sendMessage("Failed to reload the configuration."); + sender.sendMessage(Lang.LANG.format("command.reload.failed")); } } break; + case "info": + { + JsonObject object = Updater.getInstance().getJson().getAsJsonObject("info"); + sender.sendMessage("links:"); + for (Map.Entry entry : object.getAsJsonObject("urls").entrySet()) { + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&2"+entry.getKey()+"&f: &4"+entry.getValue().getAsString())); + } + sender.sendMessage(""); + break; + } } return true; } @@ -232,7 +247,7 @@ public class WhiteListCommand extends Command { if (target.hasPermission(permission.getName())) { return true; } else { - target.sendMessage(ChatColor.RED + "You don't have permission to perform this command."); + target.sendMessage(Lang.LANG.format("perm.throw")); return false; } } diff --git a/velocity/src/main/java/org/eptalist/velocity/Velocity.java b/velocity/src/main/java/org/eptalist/velocity/Velocity.java index ea0f215..0938265 100644 --- a/velocity/src/main/java/org/eptalist/velocity/Velocity.java +++ b/velocity/src/main/java/org/eptalist/velocity/Velocity.java @@ -68,20 +68,6 @@ public class Velocity { @Inject public Velocity(ProxyServer server, @DataDirectory Path dataDirectory, Metrics.Factory metricsFactory) { - try { - Updater updater = Updater.getInstance(); - JsonObject obj = updater.getLasted(); - if (!BuildConstants.VERSION.equals(obj.get("name").getAsString())) { - LOGGER.log(Level.WARNING, "---------- Outdated Version ----------"); - LOGGER.log(Level.WARNING, ""); - LOGGER.log(Level.WARNING, "new version:"); - LOGGER.log(Level.WARNING, updater.getVersionUrl()); - LOGGER.log(Level.WARNING, ""); - LOGGER.log(Level.WARNING, "---------------------------------"); - } - } catch (Exception e) { - e.printStackTrace(); - } profiler.push("init"); this.metricsFactory = metricsFactory; this.dataDirectory = dataDirectory; @@ -90,8 +76,24 @@ public class Velocity { } config = new Config.ConfigContainer(new File(dataDirectory.toFile(), "config.json")); load(); + if (config.get().auto_update_check) { + try { + Updater updater = Updater.getInstance(); + JsonObject obj = updater.getLasted(); + if (!BuildConstants.VERSION.equals(obj.get("name").getAsString())) { + LOGGER.log(Level.WARNING, "---------- Outdated Version ----------"); + LOGGER.log(Level.WARNING, ""); + LOGGER.log(Level.WARNING, "new version:"); + LOGGER.log(Level.WARNING, updater.getVersionUrl()); + LOGGER.log(Level.WARNING, ""); + LOGGER.log(Level.WARNING, "---------------------------------"); + } + } catch (Exception e) { + e.printStackTrace(); + } + } CommandManager commandManager = server.getCommandManager(); - commandManager.register("eptalist", new WhiteListCommand(logger)); + commandManager.register(config.get().command.getPath(), new WhiteListCommand(logger)); LOGGER.log(Level.INFO, String.format("Load Plugin Configuration %sms", profiler.getElapsedTimeAndRemove(profiler.pop()))); }