This commit is contained in:
p2vman 2025-05-06 21:17:13 +03:00
parent 1cdd60934d
commit f3fcfdefdd
22 changed files with 272 additions and 133 deletions

Binary file not shown.

View File

@ -17,7 +17,7 @@ dependencies {
compileOnly "com.google.code.gson:gson:2.8.9" compileOnly "com.google.code.gson:gson:2.8.9"
annotationProcessor 'org.projectlombok:lombok:1.18.30' annotationProcessor 'org.projectlombok:lombok:1.18.30'
compileOnly 'org.projectlombok:lombok:1.18.30' compileOnly 'org.projectlombok:lombok:1.18.30'
compileOnly("com.moandjiezana.toml:toml4j:0.7.2") //implementation 'com.ibm.async:asyncutil:0.1.0'
} }
tasks.withType(JavaCompile).configureEach { tasks.withType(JavaCompile).configureEach {

View File

@ -0,0 +1,119 @@
package io.github.p2vman.config;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import java.util.Map;
import java.util.Scanner;
public class MiniConfig {
public static JsonObject parse(String input) {
return parseBlock(new Scanner(input));
}
private static JsonObject parseBlock(Scanner scanner) {
JsonObject obj = new JsonObject();
while (scanner.hasNextLine()) {
String line = scanner.nextLine().trim();
if (line.isEmpty() || line.startsWith("#") || line.startsWith("//")) continue;
if (line.endsWith("{")) {
String key = line.substring(0, line.length() - 1).trim();
JsonObject nested = parseBlock(scanner);
obj.add(key, nested);
} else if (line.equals("}")) {
break;
} else if (line.endsWith("[")) {
String key = line.substring(0, line.length() - 1).trim();
JsonArray array = parseArrayBlock(scanner);
obj.add(key, array);
} else {
String[] parts = line.split("=", 2);
if (parts.length != 2) continue;
String key = parts[0].trim();
String value = parts[1].trim();
obj.add(key, parseValue(value));
}
}
return obj;
}
private static JsonArray parseArrayBlock(Scanner scanner) {
JsonArray array = new JsonArray();
while (scanner.hasNextLine()) {
String line = scanner.nextLine().trim();
if (line.equals("]")) break;
if (line.equals("{")) {
array.add(parseBlock(scanner));
} else {
array.add(parseValue(line));
}
}
return array;
}
private static JsonElement parseValue(String value) {
if (value.equals("true") || value.equals("false")) return new JsonPrimitive(Boolean.parseBoolean(value));
try { return new JsonPrimitive(Integer.parseInt(value)); } catch (NumberFormatException ignored) {}
try { return new JsonPrimitive(Double.parseDouble(value)); } catch (NumberFormatException ignored) {}
if (value.startsWith("\"") && value.endsWith("\"")) return new JsonPrimitive(value.substring(1, value.length() - 1));
return new JsonPrimitive(value);
}
public static String toMiniConf(JsonObject obj, int indent) {
StringBuilder sb = new StringBuilder();
writeObject(sb, obj, indent);
return sb.toString();
}
private static void writeObject(StringBuilder sb, JsonObject obj, int indent) {
for (Map.Entry<String, JsonElement> entry : obj.entrySet()) {
String pad = indent(indent);
String key = entry.getKey();
JsonElement val = entry.getValue();
if (val.isJsonObject()) {
sb.append(pad).append(key).append(" {\n");
writeObject(sb, val.getAsJsonObject(), indent + 2);
sb.append(pad).append("}\n");
} else if (val.isJsonArray()) {
sb.append(pad).append(key).append(" [\n");
writeArray(sb, val.getAsJsonArray(), indent + 2);
sb.append(pad).append("]\n");
} else {
sb.append(pad).append(key).append(" = ").append(formatValue(val)).append("\n");
}
}
}
private static void writeArray(StringBuilder sb, JsonArray array, int indent) {
for (JsonElement el : array) {
String pad = indent(indent);
if (el.isJsonObject()) {
sb.append(pad).append("{\n");
writeObject(sb, el.getAsJsonObject(), indent + 2);
sb.append(pad).append("}\n");
} else {
sb.append(pad).append(formatValue(el)).append("\n");
}
}
}
private static String formatValue(JsonElement val) {
if (val.isJsonPrimitive()) {
JsonPrimitive prim = val.getAsJsonPrimitive();
if (prim.isString()) return "\"" + prim.getAsString() + "\"";
return prim.toString();
}
return val.toString();
}
private static String indent(int count) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < count; i++) sb.append(' ');
return sb.toString();
}
}

View File

@ -1,16 +1,14 @@
package io.github.p2vman.eptalist; package io.github.p2vman.eptalist;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import com.moandjiezana.toml.Toml;
import com.moandjiezana.toml.TomlWriter;
import io.github.p2vman.Identifier; import io.github.p2vman.Identifier;
import io.github.p2vman.Static; import io.github.p2vman.Static;
import io.github.p2vman.Utils; import io.github.p2vman.Utils;
import io.github.p2vman.config.MiniConfig;
import java.io.File; import java.io.*;
import java.io.FileReader;
import java.io.FileWriter;
import java.nio.charset.StandardCharsets;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -72,26 +70,22 @@ public class Config {
} }
return cfg; return cfg;
} }
public void load() { public void load() {
try { try {
if (!config.exists()) { if (!config.exists()) {
this.cfg = new Config(); this.cfg = new Config();
try (FileWriter writer =new FileWriter(this.config, StandardCharsets.UTF_8)) { save();
if (json) { } else {
Static.GSON.toJson(cfg, writer); try (Reader reader = new InputStreamReader(new FileInputStream(config), "UTF-8")) {
}
else {
new TomlWriter().write(cfg, writer);
}
}
}
else {
try (FileReader reader = new FileReader(this.config, StandardCharsets.UTF_8)) {
if (json) { if (json) {
cfg = Static.GSON.fromJson(reader, Config.class); cfg = Static.GSON.fromJson(reader, Config.class);
} else { } else {
cfg = new Toml().read(reader).to(Config.class); StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(reader);
String line;
while ((line = br.readLine()) != null) sb.append(line).append('\n');
JsonObject raw = MiniConfig.parse(sb.toString());
cfg = Static.GSON.fromJson(raw, Config.class);
} }
} }
} }
@ -101,12 +95,12 @@ public class Config {
} }
public void save() { public void save() {
try (FileWriter writer = new FileWriter(this.config, StandardCharsets.UTF_8)) { try (Writer writer = new OutputStreamWriter(new FileOutputStream(config), "UTF-8")) {
if (json) { if (json) {
Static.GSON.toJson(cfg, writer); Static.GSON.toJson(cfg, writer);
} } else {
else { JsonElement tree = Static.GSON.toJsonTree(cfg);
new TomlWriter().write(cfg, writer); writer.write(MiniConfig.toMiniConf(tree.getAsJsonObject(), 0));
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();

View File

@ -1,17 +1,45 @@
package io.github.p2vman.eptalist.storge; package io.github.p2vman.eptalist.storge;
import java.io.Closeable; import java.io.Closeable;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import java.util.function.Consumer;
public interface Data<T> extends Closeable { public interface Data<T> extends Closeable {
boolean addUser(T name); boolean addUser(T name);
boolean removeUser(T name); boolean removeUser(T name);
boolean is(T name); boolean is(T name);
List<T> toList(); List<T> toList();
boolean addUser(T name, List<String> info); boolean addUser(T name, Consumer<String> callback);
boolean removeUser(T name, List<String> info); boolean removeUser(T name, Consumer<String> callback);
boolean is(T name, List<String> info); boolean is(T name, Consumer<String> callback);
default boolean dirty() { default boolean dirty() {
return false; return false;
} }
default CompletionStage<Boolean> addUserAsync(T name, Consumer<String> callback) {
return CompletableFuture.supplyAsync(() -> {
synchronized (this) {
return addUser(name, callback);
}
}, Storge.threadPool);
}
default CompletableFuture<Boolean> removeUserAsync(T name, Consumer<String> callback) {
return CompletableFuture.supplyAsync(() -> {
synchronized (this) {
return removeUser(name, callback);
}
}, Storge.threadPool);
}
default CompletableFuture<Boolean> isAsync(T name, Consumer<String> callback) {
return CompletableFuture.supplyAsync(() -> {
synchronized (this) {
return is(name, callback);
}
}, Storge.threadPool);
}
} }

View File

@ -8,6 +8,7 @@ import io.github.p2vman.lang.Lang;
import java.io.*; import java.io.*;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.*; import java.util.*;
import java.util.function.Consumer;
public class Json extends ArrayList<String> implements Data<String> { public class Json extends ArrayList<String> implements Data<String> {
@Override @Override
@ -104,23 +105,23 @@ public class Json extends ArrayList<String> implements Data<String> {
} }
@Override @Override
public boolean is(String name, List<String> info) { public boolean is(String name, Consumer<String> info) {
return contains(name); return contains(name);
} }
@Override @Override
public boolean removeUser(String name, List<String> info) { public boolean removeUser(String name, Consumer<String> info) {
if (!is(name)) { if (!is(name)) {
info.add(Lang.LANG.format("storge.remove.not.in", name)); info.accept(Lang.LANG.format("storge.remove.not.in", name));
return false; return false;
} }
return remove(name); return remove(name);
} }
@Override @Override
public boolean addUser(String name, List<String> info) { public boolean addUser(String name, Consumer<String> info) {
if (is(name)) { if (is(name)) {
info.add(Lang.LANG.format("storge.add.is.already", name)); info.accept(Lang.LANG.format("storge.add.is.already", name));
return false; return false;
} }
return add(name); return add(name);

View File

@ -6,6 +6,7 @@ import java.sql.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Consumer;
public class Mysql implements Data<String> { public class Mysql implements Data<String> {
public Connection connection; public Connection connection;
@ -44,9 +45,9 @@ public class Mysql implements Data<String> {
} }
@Override @Override
public boolean removeUser(String name, List<String> info) { public boolean removeUser(String name, Consumer<String> info) {
if (!is(name)) { if (!is(name)) {
info.add(Lang.LANG.format("storge.remove.not.in", name)); info.accept(Lang.LANG.format("storge.remove.not.in", name));
return false; return false;
} }
try { try {
@ -55,17 +56,17 @@ public class Mysql implements Data<String> {
return statement.executeUpdate() > 0; return statement.executeUpdate() > 0;
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
info.add(Lang.LANG.format("err.db")); info.accept(Lang.LANG.format("err.db"));
return false; return false;
} }
} }
@Override @Override
public boolean is(String name, List<String> info) { public boolean is(String name, Consumer<String> info) {
try { try {
if (connection.isClosed()) { if (connection.isClosed()) {
connection = DriverManager.getConnection(String.format((String) this.data.get("file"))); connection = DriverManager.getConnection(String.format((String) this.data.get("file")));
info.add(Lang.LANG.format("storge.reconnect")); info.accept(Lang.LANG.format("storge.reconnect"));
} }
PreparedStatement statement = connection.prepareStatement("SELECT user_name FROM "+this.teable+" WHERE "+this.i+" = ?"); PreparedStatement statement = connection.prepareStatement("SELECT user_name FROM "+this.teable+" WHERE "+this.i+" = ?");
statement.setString(1, name); statement.setString(1, name);
@ -73,7 +74,7 @@ public class Mysql implements Data<String> {
return resultSet.next(); return resultSet.next();
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
info.add(Lang.LANG.format("err.db")); info.accept(Lang.LANG.format("err.db"));
return false; return false;
} }
} }
@ -95,9 +96,9 @@ public class Mysql implements Data<String> {
} }
@Override @Override
public boolean addUser(String name, List<String> info) { public boolean addUser(String name, Consumer<String> info) {
if (is(name)) { if (is(name)) {
info.add(Lang.LANG.format("storge.add.is.already", name)); info.accept(Lang.LANG.format("storge.add.is.already", name));
return false; return false;
} }
try { try {
@ -106,7 +107,7 @@ public class Mysql implements Data<String> {
return statement.executeUpdate() > 0; return statement.executeUpdate() > 0;
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
info.add(Lang.LANG.format("err.db")); info.accept(Lang.LANG.format("err.db"));
return false; return false;
} }
} }

View File

@ -10,6 +10,7 @@ import io.github.p2vman.utils.Pair;
import java.io.*; import java.io.*;
import java.util.*; import java.util.*;
import java.util.function.Consumer;
import java.util.zip.GZIPInputStream; import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream; import java.util.zip.GZIPOutputStream;
@ -139,23 +140,23 @@ public class NBT extends ArrayList<String> implements Data<String> {
} }
@Override @Override
public boolean is(String name, List<String> info) { public boolean is(String name, Consumer<String> info) {
return contains(name); return contains(name);
} }
@Override @Override
public boolean removeUser(String name, List<String> info) { public boolean removeUser(String name, Consumer<String> info) {
if (!is(name)) { if (!is(name)) {
info.add(Lang.LANG.format("storge.remove.not.in", name)); info.accept(Lang.LANG.format("storge.remove.not.in", name));
return false; return false;
} }
return remove(name); return remove(name);
} }
@Override @Override
public boolean addUser(String name, List<String> info) { public boolean addUser(String name, Consumer<String> info) {
if (is(name)) { if (is(name)) {
info.add(Lang.LANG.format("storge.add.is.already", name)); info.accept(Lang.LANG.format("storge.add.is.already", name));
return false; return false;
} }
return add(name); return add(name);

View File

@ -6,6 +6,7 @@ import java.sql.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Consumer;
public class Sqlite implements Data<String> { public class Sqlite implements Data<String> {
@ -45,9 +46,9 @@ public class Sqlite implements Data<String> {
} }
@Override @Override
public boolean removeUser(String name, List<String> info) { public boolean removeUser(String name, Consumer<String> info) {
if (!is(name)) { if (!is(name)) {
info.add(Lang.LANG.format("storge.remove.not.in", name)); info.accept(Lang.LANG.format("storge.remove.not.in", name));
return false; return false;
} }
try { try {
@ -56,17 +57,17 @@ public class Sqlite implements Data<String> {
return statement.executeUpdate() > 0; return statement.executeUpdate() > 0;
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
info.add(Lang.LANG.format("err.db")); info.accept(Lang.LANG.format("err.db"));
return false; return false;
} }
} }
@Override @Override
public boolean is(String name, List<String> info) { public boolean is(String name, Consumer<String> info) {
try { try {
if (connection.isClosed()) { if (connection.isClosed()) {
connection = DriverManager.getConnection(String.format("jdbc:sqlite:%s.db", (String) this.data.get("file"))); connection = DriverManager.getConnection(String.format("jdbc:sqlite:%s.db", (String) this.data.get("file")));
info.add(Lang.LANG.format("storge.reconnect")); info.accept(Lang.LANG.format("storge.reconnect"));
} }
PreparedStatement statement = connection.prepareStatement("SELECT "+this.i+" FROM "+this.teable+" WHERE "+this.i+" = ?"); PreparedStatement statement = connection.prepareStatement("SELECT "+this.i+" FROM "+this.teable+" WHERE "+this.i+" = ?");
statement.setString(1, name); statement.setString(1, name);
@ -74,7 +75,7 @@ public class Sqlite implements Data<String> {
return resultSet.next(); return resultSet.next();
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
info.add(Lang.LANG.format("err.db")); info.accept(Lang.LANG.format("err.db"));
return false; return false;
} }
} }
@ -96,9 +97,9 @@ public class Sqlite implements Data<String> {
} }
@Override @Override
public boolean addUser(String name, List<String> info) { public boolean addUser(String name, Consumer<String> info) {
if (is(name)) { if (is(name)) {
info.add(Lang.LANG.format("storge.add.is.already", name)); info.accept(Lang.LANG.format("storge.add.is.already", name));
return false; return false;
} }
try { try {
@ -107,7 +108,7 @@ public class Sqlite implements Data<String> {
return statement.executeUpdate() > 0; return statement.executeUpdate() > 0;
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
info.add(Lang.LANG.format("err.db")); info.accept(Lang.LANG.format("err.db"));
return false; return false;
} }
} }

View File

@ -8,35 +8,53 @@ import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
@ApiStatus.In_Development @ApiStatus.In_Development
public abstract class Storge<T> implements Closeable { public abstract class Storge<T> implements Closeable {
public static ExecutorService threadPool = Executors.newFixedThreadPool(2, new ThreadFactory() {
private final ThreadFactory defaultFactory = Executors.defaultThreadFactory();
private int count = 0;
public static final Map<String, Class<? extends Data<String>>> sm = Utils.wappeler(new HashMap<String, Class<? extends Data<String>>>()) @Override
.put("NBT", NBT.class) public Thread newThread(Runnable r) {
.put("nbt", NBT.class) Thread t = defaultFactory.newThread(r);
.put("JSON", Json.class) t.setName("data-async-pool-" + count++);
.put("json", Json.class) t.setDaemon(true);
.put("Sqlite", Sqlite.class) return t;
.put("SQLITE", Sqlite.class) }
.put("mysql", Mysql.class) });
.put("MYSQL", Mysql.class)
.put("org.eptalist.storge.Json", Json.class) public static final Map<String, Class<? extends Data<String>>> sm;
.put("org.eptalist.storge.NBT", NBT.class)
.put("org.eptalist.storge.Sqlite", Sqlite.class) static {
.put("org.eptalist.storge.Mysql", Mysql.class) sm = new HashMap<>();
.getMap(); sm.put("NBT", NBT.class);
sm.put("nbt", NBT.class);
sm.put("JSON", Json.class);
sm.put("json", Json.class);
sm.put("Sqlite", Sqlite.class);
sm.put("SQLITE", Sqlite.class);
sm.put("mysql", Mysql.class);
sm.put("MYSQL", Mysql.class);
sm.put("org.eptalist.storge.Json", Json.class);
sm.put("org.eptalist.storge.NBT", NBT.class);
sm.put("org.eptalist.storge.Sqlite", Sqlite.class);
sm.put("org.eptalist.storge.Mysql", Mysql.class);
}
public static Class<? extends Data<String>> find(String clz) throws ClassNotFoundException, ClassCastException { public static Class<? extends Data<String>> find(String clz) throws ClassNotFoundException, ClassCastException {
Class<?> cls = null; Class<?> cls = null;
if (sm.containsKey(clz)) { if (sm.containsKey(clz)) {
cls = sm.get(clz); cls = sm.get(clz);
} } else {
try {
try { cls = Class.forName(clz);
cls = Class.forName(clz); } catch (Exception e) {
} catch (Exception e) {
}
} }
if (cls == null) throw new ClassNotFoundException(); if (cls == null) throw new ClassNotFoundException();
@ -54,12 +72,14 @@ public abstract class Storge<T> implements Closeable {
} }
public abstract List<T> toList(); public abstract List<T> toList();
public abstract Answer addUserAsync(T name);
public abstract Answer addUser(T name); public abstract Answer addUser(T name);
public abstract Answer removeUser(T name); public abstract Answer removeUser(T name);
public abstract Answer is(T name); public abstract Answer removeUserAsync(T name);
public abstract Answer isAsync(T name);
@ApiStatus.In_Development @ApiStatus.In_Development
public class Answer { public static class Answer {
} }
} }

View File

@ -9,7 +9,8 @@
"reconnect": "&6The database has been reconnected" "reconnect": "&6The database has been reconnected"
}, },
"err": { "err": {
"db": "&4There was an error in the database" "db": "&4There was an error in the database",
"internal": "&4 internal server error"
}, },
"command": { "command": {
"reload": { "reload": {

View File

@ -9,7 +9,8 @@
"reconnect": "&6Подключение к базе данных восстановлено" "reconnect": "&6Подключение к базе данных восстановлено"
}, },
"err": { "err": {
"db": "&4Произошла ошибка в базе данных" "db": "&4Произошла ошибка в базе данных",
"internal": "&4 internal server error"
}, },
"command": { "command": {
"reload": { "reload": {

View File

@ -5,7 +5,7 @@
"p2vman" "p2vman"
], ],
"urls": { "urls": {
"source": "https://github.com/p2vman/EptaListProject", "source": "https://git.eptaproject.space/p2vman/EptaListProject",
"discord": "https://discord.gg/UdSXf4tpUF" "discord": "https://discord.gg/UdSXf4tpUF"
} }
} }

View File

@ -49,11 +49,8 @@ public class WhiteListCommand extends Command implements TabExecutor {
break; break;
} }
String usernameToAdd = args[1]; String usernameToAdd = args[1];
List<String> infoAdd = new ArrayList<>(); if (Boungecord.list.addUser(usernameToAdd, (t) -> sender.sendMessage(new TextComponent((String) t)))) {
if (Boungecord.list.addUser(usernameToAdd, infoAdd)) {
sender.sendMessage(new TextComponent(Lang.LANG.format("command.add.succes", usernameToAdd))); sender.sendMessage(new TextComponent(Lang.LANG.format("command.add.succes", usernameToAdd)));
} else {
infoAdd.forEach(line -> sender.sendMessage(new TextComponent(line)));
} }
break; break;
@ -63,11 +60,8 @@ public class WhiteListCommand extends Command implements TabExecutor {
break; break;
} }
String usernameToRemove = args[1]; String usernameToRemove = args[1];
List<String> infoRemove = new ArrayList<>(); if (Boungecord.list.removeUser(usernameToRemove, (t) -> sender.sendMessage(new TextComponent((String) t)))) {
if (Boungecord.list.removeUser(usernameToRemove, infoRemove)) {
sender.sendMessage(new TextComponent(Lang.LANG.format("command.remove.succes", usernameToRemove))); sender.sendMessage(new TextComponent(Lang.LANG.format("command.remove.succes", usernameToRemove)));
} else {
infoRemove.forEach(line -> sender.sendMessage(new TextComponent(line)));
} }
break; break;

View File

@ -73,7 +73,7 @@ tasks.build {
} }
dependencies { dependencies {
implementation("com.moandjiezana.toml:toml4j:0.7.2") //implementation 'com.ibm.async:asyncutil:0.1.0'
} }
shadowJar { shadowJar {

View File

@ -1 +1 @@
version = 1.6 version = 1.8

View File

@ -32,7 +32,7 @@ public final class EptaList extends JavaPlugin {
public static final Logger LOGGER = Logger.getLogger("EptaList"); public static final Logger LOGGER = Logger.getLogger("EptaList");
public static Config.ConfigContainer config; public static Config.ConfigContainer config;
public static Data list; public static Data<String> list;
public static Config.Mode mode; public static Config.Mode mode;
public static List<Identifier> identifiers = new ArrayList<>(); public static List<Identifier> identifiers = new ArrayList<>();

View File

@ -1,5 +1,6 @@
package io.github.p2vman.eptalist.spigot; package io.github.p2vman.eptalist.spigot;
import io.github.p2vman.lang.Lang;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -12,11 +13,17 @@ public class Event implements Listener {
@EventHandler(priority = EventPriority.MONITOR) @EventHandler(priority = EventPriority.MONITOR)
public void onConnect(PlayerLoginEvent e) { public void onConnect(PlayerLoginEvent e) {
Player p = e.getPlayer(); Player p = e.getPlayer();
if (p != null) { if (p != null) {
Config config = EptaList.config.get(); Config config = EptaList.config.get();
if (config.enable) { if (config.enable) {
if (!((config.skip_to_op && p.isOp()) || EptaList.list.is(p.getName()))) { if (!(config.skip_to_op && p.isOp())) {
e.disallow(PlayerLoginEvent.Result.KICK_WHITELIST, ChatColor.translateAlternateColorCodes('&', EptaList.mode.kick_msg)); EptaList.list.isAsync(p.getName(), p::sendMessage).thenAccept((ea) -> {
if (!ea) p.kickPlayer(ChatColor.translateAlternateColorCodes('&', EptaList.mode.kick_msg));
}).exceptionally(er -> {
p.kickPlayer(Lang.LANG.format("err.internal"));
return null;
});
} }
} }
} }

View File

@ -60,6 +60,7 @@ public class WhiteListCommand extends Command {
permission_outher = recal.apply(new Permission("eptalist.outher", PermissionDefault.OP)); permission_outher = recal.apply(new Permission("eptalist.outher", PermissionDefault.OP));
} }
//@SuppressWarnings("unchecked")
@Override @Override
public boolean execute(CommandSender sender, String commandLabel, String[] args) { public boolean execute(CommandSender sender, String commandLabel, String[] args) {
if (!(args.length > 0)) { if (!(args.length > 0)) {
@ -83,25 +84,22 @@ public class WhiteListCommand extends Command {
List<String> info = new ArrayList<>(); List<String> info = new ArrayList<>();
if (!Utils.len(args, 1)) { if (!Utils.len(args, 1)) {
sender.sendMessage("Usage: /" + commandLabel + " add <username>"); sender.sendMessage("Usage: /" + commandLabel + " add <username>");
} else if (EptaList.list.addUser(args[1], info)) {
sender.sendMessage(Lang.LANG.format("command.add.succes", args[1]));
} else { } else {
for (String line : info) { EptaList.list.addUserAsync(args[1], (t) -> sender.sendMessage(ChatColor.translateAlternateColorCodes('&', (String) t)))
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', line)); .thenAccept((d) -> {
} if (d) sender.sendMessage(Lang.LANG.format("command.add.succes", args[1]));
});
} }
} }
break; break;
case "remove": if (testPermission(sender, permission_remove)) { case "remove": if (testPermission(sender, permission_remove)) {
List<String> info = new ArrayList<>();
if (!Utils.len(args, 1)) { if (!Utils.len(args, 1)) {
sender.sendMessage("Usage: /" + commandLabel + " remove <username>"); sender.sendMessage("Usage: /" + commandLabel + " remove <username>");
} else if (EptaList.list.removeUser(args[1], info)) {
sender.sendMessage(Lang.LANG.format("command.remove.succes", args[1]));
} else { } else {
for (String line : info) { EptaList.list.removeUserAsync(args[1], (t) -> sender.sendMessage(ChatColor.translateAlternateColorCodes('&', (String) t)))
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', line)); .thenAccept((d) -> {
} if (d) sender.sendMessage(Lang.LANG.format("command.remove.succes", args[1]));
});
} }
} }
break; break;

View File

@ -1,21 +0,0 @@
The MIT License (MIT)
Copyright (c) 2013-2015 Moandji Ezana
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -42,7 +42,7 @@ public class Velocity {
private Path dataDirectory; private Path dataDirectory;
private final Metrics.Factory metricsFactory; private final Metrics.Factory metricsFactory;
public static Data list; public static Data<String> list;
public static Config.Mode mode; public static Config.Mode mode;
public static List<Identifier> identifiers = new ArrayList<>(); public static List<Identifier> identifiers = new ArrayList<>();
public static void load() { public static void load() {

View File

@ -60,11 +60,8 @@ public class WhiteListCommand implements SimpleCommand {
break; break;
} }
String usernameToAdd = args[1]; String usernameToAdd = args[1];
List<String> infoAdd = new ArrayList<>(); if (Velocity.list.addUser(usernameToAdd, (t) -> sender.sendMessage(Component.text(t)))) {
if (Velocity.list.addUser(usernameToAdd, infoAdd)) {
sender.sendMessage(Component.text(Lang.LANG.format("command.add.succes", usernameToAdd))); sender.sendMessage(Component.text(Lang.LANG.format("command.add.succes", usernameToAdd)));
} else {
infoAdd.forEach(line -> sender.sendMessage(Component.text(line)));
} }
break; break;
@ -74,11 +71,8 @@ public class WhiteListCommand implements SimpleCommand {
break; break;
} }
String usernameToRemove = args[1]; String usernameToRemove = args[1];
List<String> infoRemove = new ArrayList<>(); if (Velocity.list.removeUser(usernameToRemove, (t) -> sender.sendMessage(Component.text(t)))) {
if (Velocity.list.removeUser(usernameToRemove, infoRemove)) {
sender.sendMessage(Component.text(Lang.LANG.format("command.remove.succes", usernameToRemove))); sender.sendMessage(Component.text(Lang.LANG.format("command.remove.succes", usernameToRemove)));
} else {
infoRemove.forEach(line -> sender.sendMessage(Component.text(line)));
} }
break; break;