upd
This commit is contained in:
parent
1cdd60934d
commit
f3fcfdefdd
BIN
ModuleLoader.zip
BIN
ModuleLoader.zip
Binary file not shown.
|
@ -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 {
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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": {
|
||||||
|
|
|
@ -9,7 +9,8 @@
|
||||||
"reconnect": "&6Подключение к базе данных восстановлено"
|
"reconnect": "&6Подключение к базе данных восстановлено"
|
||||||
},
|
},
|
||||||
"err": {
|
"err": {
|
||||||
"db": "&4Произошла ошибка в базе данных"
|
"db": "&4Произошла ошибка в базе данных",
|
||||||
|
"internal": "&4 internal server error"
|
||||||
},
|
},
|
||||||
"command": {
|
"command": {
|
||||||
"reload": {
|
"reload": {
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
version = 1.6
|
version = 1.8
|
|
@ -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<>();
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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.
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue