diff --git a/api/build.gradle.kts b/api/build.gradle.kts index 12b3b88..20f78e7 100644 --- a/api/build.gradle.kts +++ b/api/build.gradle.kts @@ -3,23 +3,18 @@ plugins { } dependencies { - // Galaxy - compileOnly("com.alttd:galaxy-api:1.17.1-R0.1-SNAPSHOT") + compileOnly("com.alttd:Galaxy-API:1.18.1-R0.1-SNAPSHOT") + compileOnly("net.kyori:adventure-text-minimessage:4.2.0-SNAPSHOT") // Minimessage + compileOnly("org.spongepowered:configurate-yaml:4.1.2") // Configurate + compileOnly("net.luckperms:api:5.3") // Luckperms } -//publishing { -// publications { -// create("mavenJava") { -// from(components["java"]) -// } -// } -// -// repositories{ -// maven { -// name = "maven" -// url = uri("http://leo:8081/") -// isAllowInsecureProtocol = true -// credentials(PasswordCredentials::class) -// } -// } -//} \ No newline at end of file +publishing { + repositories{ + maven { + name = "maven" + url = uri("https://repo.destro.xyz/snapshots") + credentials(PasswordCredentials::class) + } + } +} \ No newline at end of file diff --git a/api/src/main/java/com/alttd/boosters/api/Booster.java b/api/src/main/java/com/alttd/boosterapi/Booster.java similarity index 88% rename from api/src/main/java/com/alttd/boosters/api/Booster.java rename to api/src/main/java/com/alttd/boosterapi/Booster.java index 28e8470..36ab7e7 100644 --- a/api/src/main/java/com/alttd/boosters/api/Booster.java +++ b/api/src/main/java/com/alttd/boosterapi/Booster.java @@ -1,4 +1,4 @@ -package com.alttd.boosters.api; +package com.alttd.boosterapi; import java.util.UUID; @@ -35,4 +35,8 @@ public interface Booster { void stopBooster(); void saveBooster(); + + void finish(); + + boolean finished(); } diff --git a/api/src/main/java/com/alttd/boosterapi/BoosterAPI.java b/api/src/main/java/com/alttd/boosterapi/BoosterAPI.java new file mode 100644 index 0000000..5c1241a --- /dev/null +++ b/api/src/main/java/com/alttd/boosterapi/BoosterAPI.java @@ -0,0 +1,14 @@ +package com.alttd.boosterapi; + +import net.luckperms.api.LuckPerms; + +public interface BoosterAPI { + + static BoosterAPI get() { + return BoosterImplementation.get(); + } + + LuckPerms getLuckPerms(); + + void reloadConfig(); +} diff --git a/api/src/main/java/com/alttd/boosterapi/BoosterImplementation.java b/api/src/main/java/com/alttd/boosterapi/BoosterImplementation.java new file mode 100644 index 0000000..8c28699 --- /dev/null +++ b/api/src/main/java/com/alttd/boosterapi/BoosterImplementation.java @@ -0,0 +1,40 @@ +package com.alttd.boosterapi; + +import com.alttd.boosterapi.config.Config; +import com.alttd.boosterapi.database.Database; +import net.luckperms.api.LuckPerms; +import net.luckperms.api.LuckPermsProvider; + +public class BoosterImplementation implements BoosterAPI { + + private static BoosterAPI instance; + + private LuckPerms luckPerms; + private Database database; + + public BoosterImplementation() { + instance = this; + reloadConfig(); + + luckPerms = getLuckPerms(); + } + + public static BoosterAPI get() { + if (instance == null) + instance = new BoosterImplementation(); + return instance; + } + + @Override + public LuckPerms getLuckPerms() { + if(luckPerms == null) + luckPerms = LuckPermsProvider.get(); + return luckPerms; + } + + @Override + public void reloadConfig() { + Config.init(); + } + +} diff --git a/api/src/main/java/com/alttd/boosters/api/BoosterType.java b/api/src/main/java/com/alttd/boosterapi/BoosterType.java similarity index 94% rename from api/src/main/java/com/alttd/boosters/api/BoosterType.java rename to api/src/main/java/com/alttd/boosterapi/BoosterType.java index fa3f0a4..0e8819e 100644 --- a/api/src/main/java/com/alttd/boosters/api/BoosterType.java +++ b/api/src/main/java/com/alttd/boosterapi/BoosterType.java @@ -1,4 +1,4 @@ -package com.alttd.boosters.api; +package com.alttd.boosterapi; public enum BoosterType { @@ -6,6 +6,7 @@ public enum BoosterType { * MCMMO - implies all mcmmo skills are boosted */ MCMMO("mcmmo"), + // TODO : add individual mcmmo skills /** * MYPET - Boosts MyPet exp gains */ diff --git a/velocity/src/main/java/com/alttd/vboosters/config/Config.java b/api/src/main/java/com/alttd/boosterapi/config/Config.java similarity index 54% rename from velocity/src/main/java/com/alttd/vboosters/config/Config.java rename to api/src/main/java/com/alttd/boosterapi/config/Config.java index 2f0df4e..708d7d2 100755 --- a/velocity/src/main/java/com/alttd/vboosters/config/Config.java +++ b/api/src/main/java/com/alttd/boosterapi/config/Config.java @@ -1,20 +1,19 @@ -package com.alttd.vboosters.config; +package com.alttd.boosterapi.config; -import com.google.common.base.Throwables; -import com.google.common.reflect.TypeToken; -import ninja.leaping.configurate.ConfigurationNode; -import ninja.leaping.configurate.ConfigurationOptions; -import ninja.leaping.configurate.objectmapping.ObjectMappingException; -import ninja.leaping.configurate.yaml.YAMLConfigurationLoader; -import org.yaml.snakeyaml.DumperOptions; +import com.alttd.boosterapi.util.ALogger; +import io.leangen.geantyref.TypeToken; +import org.spongepowered.configurate.ConfigurationNode; +import org.spongepowered.configurate.ConfigurationOptions; +import org.spongepowered.configurate.serialize.SerializationException; +import org.spongepowered.configurate.yaml.NodeStyle; +import org.spongepowered.configurate.yaml.YamlConfigurationLoader; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.List; +import java.util.*; import java.util.regex.Pattern; public final class Config { @@ -23,7 +22,7 @@ public final class Config { private static File CONFIG_FILE; public static ConfigurationNode config; - public static YAMLConfigurationLoader configLoader; + public static YamlConfigurationLoader configLoader; static int version; static boolean verbose; @@ -32,9 +31,9 @@ public final class Config { public static void init() { CONFIGPATH = new File(System.getProperty("user.home") + File.separator + "share" + File.separator + "configs" + File.separator + "Boosters"); CONFIG_FILE = new File(CONFIGPATH, "config.yml"); - configLoader = YAMLConfigurationLoader.builder() - .setFile(CONFIG_FILE) - .setFlowStyle(DumperOptions.FlowStyle.BLOCK) + configLoader = YamlConfigurationLoader.builder() + .file(CONFIG_FILE) + .nodeStyle(NodeStyle.BLOCK) .build(); if (!CONFIG_FILE.getParentFile().exists()) { if(!CONFIG_FILE.getParentFile().mkdirs()) { @@ -52,7 +51,7 @@ public final class Config { } try { - config = configLoader.load(ConfigurationOptions.defaults().setHeader(HEADER)); + config = configLoader.load(ConfigurationOptions.defaults().header(HEADER)); } catch (IOException e) { e.printStackTrace(); } @@ -76,23 +75,19 @@ public final class Config { method.setAccessible(true); method.invoke(instance); } catch (InvocationTargetException | IllegalAccessException ex) { - throw Throwables.propagate(ex.getCause()); + ALogger.fatal("Error reading config", ex); } } } } - try { - configLoader.save(config); - } catch (IOException ex) { - throw Throwables.propagate(ex.getCause()); - } + saveConfig(); } public static void saveConfig() { try { configLoader.save(config); } catch (IOException ex) { - throw Throwables.propagate(ex.getCause()); + ALogger.fatal("Error saving config", ex); } } @@ -101,66 +96,85 @@ public final class Config { } private static void set(String path, Object def) { - if(config.getNode(splitPath(path)).isVirtual()) - config.getNode(splitPath(path)).setValue(def); + if(config.node(splitPath(path)).virtual()) { + try { + config.node(splitPath(path)).set(def); + } catch (SerializationException e) { + } + } } private static void setString(String path, String def) { try { - if(config.getNode(splitPath(path)).isVirtual()) - config.getNode(splitPath(path)).setValue(TypeToken.of(String.class), def); - } catch(ObjectMappingException ex) { + if(config.node(splitPath(path)).virtual()) + config.node(splitPath(path)).set(TypeToken.get(String.class), def); + } catch(SerializationException ex) { } } private static boolean getBoolean(String path, boolean def) { set(path, def); - return config.getNode(splitPath(path)).getBoolean(def); + return config.node(splitPath(path)).getBoolean(def); } private static double getDouble(String path, double def) { set(path, def); - return config.getNode(splitPath(path)).getDouble(def); + return config.node(splitPath(path)).getDouble(def); } private static int getInt(String path, int def) { set(path, def); - return config.getNode(splitPath(path)).getInt(def); + return config.node(splitPath(path)).getInt(def); } private static String getString(String path, String def) { setString(path, def); - return config.getNode(splitPath(path)).getString(def); + return config.node(splitPath(path)).getString(def); } private static Long getLong(String path, Long def) { set(path, def); - return config.getNode(splitPath(path)).getLong(def); + return config.node(splitPath(path)).getLong(def); } private static List getList(String path, T def) { try { set(path, def); - return config.getNode(splitPath(path)).getList(TypeToken.of(String.class)); - } catch(ObjectMappingException ex) { + return config.node(splitPath(path)).getList(TypeToken.get(String.class)); + } catch(SerializationException ex) { } return new ArrayList<>(); } - private static ConfigurationNode getNode(String path) { - if(config.getNode(splitPath(path)).isVirtual()) { - //new RegexConfig("Dummy"); - } - config.getChildrenMap(); - return config.getNode(splitPath(path)); + /** ONLY EDIT ANYTHING BELOW THIS LINE **/ + public static String driver = "com.mysql.cj.jdbc.Driver"; + public static String host = "13.11.1.78"; + public static String port = "3306"; + public static String database = "McTestSql"; + public static String user = "root"; + public static String password = "foobar"; + public static String options = "?MaxPooledStatements=250&useSSL=false&autoReconnect=true&maxReconnects=3"; + private static void databaseSettings() { + String path = "database."; + driver = getString(path + "driver", driver); + host = getString(path + "host", host); + port = getString(path + "port", port); + database = getString(path + "database", database); + user = getString(path + "user", user); + password = getString(path + "password", password); + options = getString(path + "options", options); } - /** ONLY EDIT ANYTHING BELOW THIS LINE **/ - public static Long queueTaskCheckFrequency = 1L; public static Long activeTaskCheckFrequency = 1L; - private static void BoosterTaskSettings() { - queueTaskCheckFrequency = getLong("task.queue-frequency", queueTaskCheckFrequency); + public static Long taskCheckFrequency = 1L; + private static void boosterTaskSettings() { activeTaskCheckFrequency = getLong("task.queue-frequency", activeTaskCheckFrequency); + taskCheckFrequency = getLong("task.check-frequency", taskCheckFrequency); + } + + public static String pluginMessageChannel = "altitude:boosterplugin"; + private static void pluginMessageSettings() { + pluginMessageChannel = getString("settings.message-channel", pluginMessageChannel); } } diff --git a/api/src/main/java/com/alttd/boosterapi/config/ServerConfig.java b/api/src/main/java/com/alttd/boosterapi/config/ServerConfig.java new file mode 100755 index 0000000..855ffff --- /dev/null +++ b/api/src/main/java/com/alttd/boosterapi/config/ServerConfig.java @@ -0,0 +1,74 @@ +package com.alttd.boosterapi.config; + +import io.leangen.geantyref.TypeToken; +import org.spongepowered.configurate.serialize.SerializationException; + +import java.util.regex.Pattern; + +public final class ServerConfig { + private static final Pattern PATH_PATTERN = Pattern.compile("\\."); + + private final String serverName; + private final String configPath; + private final String defaultPath; + + public ServerConfig(String serverName) { + this.serverName = serverName; + this.configPath = "server-settings." + this.serverName + "."; + this.defaultPath = "server-settings.default."; + init(); + } + + public void init() { + Config.readConfig(ServerConfig.class, this); + Config.saveConfig(); + } + + public static Object[] splitPath(String key) { + return PATH_PATTERN.split(key); + } + + private static void set(String path, Object def) { + if(Config.config.node(splitPath(path)).virtual()) { + try { + Config.config.node(splitPath(path)).set(def); + } catch (SerializationException ex) { + } + } + } + + private static void setString(String path, String def) { + try { + if(Config.config.node(splitPath(path)).virtual()) + Config.config.node(splitPath(path)).set(TypeToken.get(String.class), def); + } catch(SerializationException ex) { + } + } + + private boolean getBoolean(String path, boolean def) { + set(defaultPath +path, def); + return Config.config.node(splitPath(configPath+path)).getBoolean( + Config.config.node(splitPath(defaultPath +path)).getBoolean(def)); + } + + private double getDouble(String path, double def) { + set(defaultPath +path, def); + return Config.config.node(splitPath(configPath+path)).getDouble( + Config.config.node(splitPath(defaultPath +path)).getDouble(def)); + } + + private int getInt(String path, int def) { + set(defaultPath +path, def); + return Config.config.node(splitPath(configPath+path)).getInt( + Config.config.node(splitPath(defaultPath +path)).getInt(def)); + } + + private String getString(String path, String def) { + set(defaultPath +path, def); + return Config.config.node(splitPath(configPath+path)).getString( + Config.config.node(splitPath(defaultPath +path)).getString(def)); + } + + /** DO NOT EDIT ANYTHING ABOVE **/ + +} diff --git a/api/src/main/java/com/alttd/boosterapi/database/Database.java b/api/src/main/java/com/alttd/boosterapi/database/Database.java new file mode 100644 index 0000000..de44b8f --- /dev/null +++ b/api/src/main/java/com/alttd/boosterapi/database/Database.java @@ -0,0 +1,40 @@ +package com.alttd.boosterapi.database; + +import com.alttd.boosterapi.config.Config; +import com.alttd.boosterapi.util.ALogger; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class Database { + + private static Connection connection; + + public static Connection getConnection() { + if (connection == null) { + try { + Class.forName(Config.driver); + + connection = DriverManager.getConnection("jdbc:mysql://" + Config.host + ":" + Config.port + "/" + Config.database + Config.options, Config.user, Config.password); + } catch (ClassNotFoundException | SQLException ex) { + ALogger.fatal("Failed to connect to sql.", ex); + } + } + return connection; + } + + public void disconnect() { + if (connection != null) { + try { + connection.close(); + + connection = null; + + } catch (SQLException ex) { + ALogger.fatal("Failed to disconnect from sql.", ex); + } + } + } + +} diff --git a/api/src/main/java/com/alttd/boosterapi/util/ALogger.java b/api/src/main/java/com/alttd/boosterapi/util/ALogger.java new file mode 100755 index 0000000..69d3e99 --- /dev/null +++ b/api/src/main/java/com/alttd/boosterapi/util/ALogger.java @@ -0,0 +1,32 @@ +package com.alttd.boosterapi.util; + +import org.apache.commons.lang.exception.ExceptionUtils; + +public class ALogger { + + private static org.slf4j.Logger logger; + + public static void init(org.slf4j.Logger log) { + logger = log; + } + + private void log(String message) { + logger.info(message); + } + + public static void warn(String message) { + logger.warn(message); + } + + public static void info(String message) { + logger.info(message); + } + + public static void error(String message) { + logger.error(message); + } + + public static void fatal(String error, Exception exception) { + logger.error(error + "\n" + ExceptionUtils.getStackTrace(exception)); + } +} diff --git a/api/src/main/java/com/alttd/boosterapi/util/Utils.java b/api/src/main/java/com/alttd/boosterapi/util/Utils.java new file mode 100644 index 0000000..9033de3 --- /dev/null +++ b/api/src/main/java/com/alttd/boosterapi/util/Utils.java @@ -0,0 +1,21 @@ +package com.alttd.boosterapi.util; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.minimessage.Template; +import net.kyori.adventure.text.minimessage.template.TemplateResolver; + +import java.util.List; + +public class Utils { + + public static Component parseMiniMessage(String message, List