Improve PreparedBukkitPlugin

This commit is contained in:
Roman Zhuravlev 2023-07-24 02:17:14 +05:00
parent 29872d7777
commit bdc3ed638c

View file

@ -2,18 +2,26 @@ package org.zhdev;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.zhdev.config.ConfigSection;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.zhdev.config.BukkitConfig; import org.zhdev.config.BukkitConfig;
import org.zhdev.config.BukkitYamlConfig; import org.zhdev.config.BukkitYamlConfig;
import org.zhdev.language.Language; import org.zhdev.language.Language;
import org.zhdev.sql.SqlAdapter; import org.zhdev.sql.SqlAdapter;
import org.zhdev.util.ColorUtils;
import org.zhdev.util.ConfigUtils; import org.zhdev.util.ConfigUtils;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.logging.Level;
public abstract class PreparedBukkitPlugin extends BukkitPlugin implements Listener { public abstract class PreparedBukkitPlugin extends BukkitPlugin implements Listener {
protected final BukkitConfig configuration = new BukkitYamlConfig(); protected final BukkitConfig configuration = new BukkitYamlConfig();
protected final Language language = new Language(); protected final Language language = new Language();
protected final SqlAdapter sqlAdapter = new SqlAdapter(); protected final SqlAdapter sqlAdapter = new SqlAdapter();
private ExecutorService singleThreadExecutor;
@Deprecated @Deprecated
@NotNull @NotNull
@Override @Override
@ -29,38 +37,80 @@ public abstract class PreparedBukkitPlugin extends BukkitPlugin implements Liste
return language; return language;
} }
public SqlAdapter getSqlAdapter() {
return sqlAdapter;
}
protected void onLoading() {} protected void onLoading() {}
protected void onEnabling() {} protected void onEnabling() {}
protected void onDisabling() {} protected void onDisabling() {}
@Override private void load() {
public final void onLoad() {
configuration.load(this); configuration.load(this);
String locale = configuration.getString("locale", "default"); ConfigSection languageSection = configuration.getOrCreateSection("language");
String locale = languageSection.getString("locale", "default");
BukkitConfig languageConfig = new BukkitYamlConfig("language/" + locale + ".yml"); BukkitConfig languageConfig = new BukkitYamlConfig("language/" + locale + ".yml");
languageConfig.load(this); languageConfig.load(this);
ConfigUtils.addPhrases(language, languageConfig); String colorCode = languageSection.getString("color-code-char", "&");
if (colorCode.isEmpty()) colorCode = "&";
char colorCodeChar = colorCode.charAt(0);
ConfigUtils.addPhrases(language, languageConfig, s -> ColorUtils.translateAlternateColorCodes(s, colorCodeChar));
BukkitConfig databaseConfig = new BukkitYamlConfig("database.yml"); BukkitConfig databaseConfig = new BukkitYamlConfig("database.yml");
databaseConfig.load(this); databaseConfig.load(this);
sqlAdapter.setConnection(ConfigUtils.createSqlConnection(databaseConfig, getDataFolder().getPath())); sqlAdapter.setConnection(ConfigUtils.createSqlConnection(databaseConfig, getDataFolder().getPath()));
}
@Override
public final void onLoad() {
load();
onLoading(); onLoading();
} }
private void enable() {
registerEvents(this);
}
@Override @Override
public final void onEnable() { public final void onEnable() {
registerEvents(this); enable();
onEnabling(); onEnabling();
} }
private void disable() {
sqlAdapter.close();
configuration.clear();
if (singleThreadExecutor != null) {
singleThreadExecutor.shutdownNow();
}
}
@Override @Override
public final void onDisable() { public final void onDisable() {
try {
onDisabling(); onDisabling();
sqlAdapter.close(); disable();
configuration.clear(); } catch (Exception e) {
disable();
throw e;
}
}
public void runTaskSeparately(Runnable runnable) {
if (singleThreadExecutor == null) {
singleThreadExecutor = Executors.newSingleThreadExecutor();
}
singleThreadExecutor.execute(() -> {
try {
runnable.run();
} catch (Throwable throwable) {
getLogger().log(Level.SEVERE, "Unhandled exception while running separated task", throwable);
}
});
} }
} }