9
0
mirror of https://github.com/WiIIiam278/HuskSync.git synced 2026-01-04 15:31:37 +00:00

refactor: Migrate from BoostedYaml to Exll's ConfigLib (#233)

* feat: start work on moving to Exll's configlib

* refactor: Fully migrate to Exlll's configlib

* refactor: Optimize imports
This commit is contained in:
William
2024-01-25 15:37:04 +00:00
committed by GitHub
parent a9bd4dd2f0
commit 530b3ef24d
49 changed files with 1652 additions and 1703 deletions

View File

@@ -19,7 +19,14 @@
package net.william278.husksync;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.gson.Gson;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import net.kyori.adventure.platform.AudienceProvider;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import net.william278.desertwell.util.Version;
@@ -64,14 +71,15 @@ import space.arim.morepaperlib.scheduling.AsynchronousScheduler;
import space.arim.morepaperlib.scheduling.GracefulScheduling;
import space.arim.morepaperlib.scheduling.RegionalScheduler;
import java.nio.file.Path;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentSkipListSet;
import java.util.logging.Level;
import java.util.stream.Collectors;
public class BukkitHuskSync extends JavaPlugin implements HuskSync, BukkitTask.Supplier, BukkitEventDispatcher,
BukkitMapPersister {
@Getter
@NoArgsConstructor
public class BukkitHuskSync extends JavaPlugin implements HuskSync, BukkitTask.Supplier,
BukkitEventDispatcher, BukkitMapPersister {
/**
* Metrics ID for <a href="https://bstats.org/plugin/bukkit/HuskSync%20-%20Bukkit/13140">HuskSync on Bukkit</a>.
@@ -79,26 +87,31 @@ public class BukkitHuskSync extends JavaPlugin implements HuskSync, BukkitTask.S
private static final int METRICS_ID = 13140;
private static final String PLATFORM_TYPE_ID = "bukkit";
private final Map<Identifier, Serializer<? extends Data>> serializers = Maps.newLinkedHashMap();
private final Map<UUID, Map<Identifier, Data>> playerCustomDataStore = Maps.newConcurrentMap();
private final Map<Integer, MapView> mapViews = Maps.newConcurrentMap();
private final List<Migrator> availableMigrators = Lists.newArrayList();
private final Set<UUID> lockedPlayers = Sets.newConcurrentHashSet();
private boolean disabling;
private Gson gson;
private AudienceProvider audiences;
private MorePaperLib paperLib;
private Database database;
private RedisManager redisManager;
private EventListener eventListener;
private DataAdapter dataAdapter;
private Map<Identifier, Serializer<? extends Data>> serializers;
private Map<UUID, Map<Identifier, Data>> playerCustomDataStore;
private Set<UUID> lockedPlayers;
private DataSyncer dataSyncer;
private Settings settings;
private Locales locales;
private Server server;
private List<Migrator> availableMigrators;
private LegacyConverter legacyConverter;
private Map<Integer, MapView> mapViews;
private BukkitAudiences audiences;
private MorePaperLib paperLib;
private AsynchronousScheduler asyncScheduler;
private RegionalScheduler regionalScheduler;
private Gson gson;
private boolean disabling;
@Setter
private Settings settings;
@Setter
private Locales locales;
@Setter
@Getter(AccessLevel.NONE)
private Server serverName;
@Override
public void onEnable() {
@@ -107,18 +120,17 @@ public class BukkitHuskSync extends JavaPlugin implements HuskSync, BukkitTask.S
this.gson = createGson();
this.audiences = BukkitAudiences.create(this);
this.paperLib = new MorePaperLib(this);
this.availableMigrators = new ArrayList<>();
this.serializers = new LinkedHashMap<>();
this.lockedPlayers = new ConcurrentSkipListSet<>();
this.playerCustomDataStore = new ConcurrentHashMap<>();
this.mapViews = new ConcurrentHashMap<>();
// Load settings and locales
initialize("plugin config & locale files", (plugin) -> this.loadConfigs());
initialize("plugin config & locale files", (plugin) -> {
loadSettings();
loadLocales();
loadServer();
});
// Prepare data adapter
initialize("data adapter", (plugin) -> {
if (settings.doCompressData()) {
if (settings.getSynchronization().isCompressData()) {
dataAdapter = new SnappyGsonAdapter(this);
} else {
dataAdapter = new GsonAdapter(this);
@@ -150,7 +162,7 @@ public class BukkitHuskSync extends JavaPlugin implements HuskSync, BukkitTask.S
});
// Initialize the database
initialize(getSettings().getDatabaseType().getDisplayName() + " database connection", (plugin) -> {
initialize(getSettings().getDatabase().getType().getDisplayName() + " database connection", (plugin) -> {
this.database = new MySqlDatabase(this);
this.database.initialize();
});
@@ -163,7 +175,7 @@ public class BukkitHuskSync extends JavaPlugin implements HuskSync, BukkitTask.S
// Prepare data syncer
initialize("data syncer", (plugin) -> {
dataSyncer = getSettings().getSyncMode().create(this);
dataSyncer = getSettings().getSynchronization().getMode().create(this);
dataSyncer.initialize();
});
@@ -175,7 +187,7 @@ public class BukkitHuskSync extends JavaPlugin implements HuskSync, BukkitTask.S
// Register plugin hooks
initialize("hooks", (plugin) -> {
if (isDependencyLoaded("Plan") && getSettings().usePlanHook()) {
if (isDependencyLoaded("Plan") && getSettings().isEnablePlanHook()) {
new PlanHook(this).hookIntoPlan();
}
});
@@ -232,30 +244,6 @@ public class BukkitHuskSync extends JavaPlugin implements HuskSync, BukkitTask.S
return Optional.of(BukkitUser.adapt(player, this));
}
@Override
@NotNull
public Database getDatabase() {
return database;
}
@Override
@NotNull
public RedisManager getRedisManager() {
return redisManager;
}
@NotNull
@Override
public DataAdapter getDataAdapter() {
return dataAdapter;
}
@NotNull
@Override
public DataSyncer getDataSyncer() {
return dataSyncer;
}
@Override
public void setDataSyncer(@NotNull DataSyncer dataSyncer) {
log(Level.INFO, String.format("Switching data syncer to %s", dataSyncer.getClass().getSimpleName()));
@@ -269,11 +257,6 @@ public class BukkitHuskSync extends JavaPlugin implements HuskSync, BukkitTask.S
return serializers;
}
@NotNull
@Override
public List<Migrator> getAvailableMigrators() {
return availableMigrators;
}
@NotNull
@Override
@@ -288,35 +271,8 @@ public class BukkitHuskSync extends JavaPlugin implements HuskSync, BukkitTask.S
@Override
@NotNull
public Settings getSettings() {
return settings;
}
@Override
public void setSettings(@NotNull Settings settings) {
this.settings = settings;
}
@NotNull
@Override
public String getServerName() {
return server.getName();
}
@Override
public void setServer(@NotNull Server server) {
this.server = server;
}
@Override
@NotNull
public Locales getLocales() {
return locales;
}
@Override
public void setLocales(@NotNull Locales locales) {
this.locales = locales;
return serverName == null ? "server" : serverName.getName();
}
@Override
@@ -369,28 +325,6 @@ public class BukkitHuskSync extends JavaPlugin implements HuskSync, BukkitTask.S
return Optional.of(legacyConverter);
}
@NotNull
@Override
public Set<UUID> getLockedPlayers() {
return lockedPlayers;
}
@NotNull
@Override
public Gson getGson() {
return gson;
}
@Override
public boolean isDisabling() {
return disabling;
}
@NotNull
public Map<Integer, MapView> getMapViews() {
return mapViews;
}
@NotNull
public GracefulScheduling getScheduler() {
return paperLib.scheduling();
@@ -408,16 +342,17 @@ public class BukkitHuskSync extends JavaPlugin implements HuskSync, BukkitTask.S
? regionalScheduler = getScheduler().globalRegionalScheduler() : regionalScheduler;
}
@NotNull
public AudienceProvider getAudiences() {
return audiences;
}
@NotNull
public CommandRegistration getCommandRegistrar() {
return paperLib.commandRegistration();
}
@Override
@NotNull
public Path getConfigDirectory() {
return getDataFolder().toPath();
}
@Override
@NotNull
public HuskSync getPlugin() {

View File

@@ -98,7 +98,7 @@ public class BukkitCommand extends org.bukkit.command.Command {
}
// Register commodore TAB completion
if (CommodoreProvider.isSupported() && plugin.getSettings().doBrigadierTabCompletion()) {
if (CommodoreProvider.isSupported() && plugin.getSettings().isBrigadierTabCompletion()) {
BrigadierUtil.registerCommodore(plugin, this, command);
}
}

View File

@@ -822,7 +822,7 @@ public abstract class BukkitData implements Data {
// Set max health
final AttributeInstance maxHealth = getMaxHealthAttribute(player);
try {
if (plugin.getSettings().doSynchronizeMaxHealth() && this.maxHealth != 0) {
if (plugin.getSettings().getSynchronization().isSynchronizeMaxHealth() && this.maxHealth != 0) {
maxHealth.setBaseValue(this.maxHealth);
}
} catch (Throwable e) {

View File

@@ -62,7 +62,8 @@ public interface BukkitUserDataHolder extends UserDataHolder {
@NotNull
@Override
default Optional<Data.Items.Inventory> getInventory() {
if ((isDead() && !getPlugin().getSettings().doSynchronizeDeadPlayersChangingServer())) {
if ((isDead() && !getPlugin().getSettings().getSynchronization().getSaveOnDeath()
.isSyncDeadPlayersChangingServer())) {
return Optional.of(BukkitData.Items.Inventory.empty());
}
final PlayerInventory inventory = getBukkitPlayer().getInventory();

View File

@@ -57,13 +57,13 @@ public class BukkitEventListener extends EventListener implements BukkitJoinEven
public BukkitEventListener(@NotNull BukkitHuskSync huskSync) {
super(huskSync);
this.blacklistedCommands = huskSync.getSettings().getBlacklistedCommandsWhileLocked();
this.blacklistedCommands = huskSync.getSettings().getSynchronization().getBlacklistedCommandsWhileLocked();
Bukkit.getServer().getPluginManager().registerEvents(this, huskSync);
}
@Override
public boolean handleEvent(@NotNull ListenerType type, @NotNull Priority priority) {
return plugin.getSettings().getEventPriority(type).equals(priority);
return plugin.getSettings().getSynchronization().getEventPriority(type).equals(priority);
}
@Override
@@ -92,7 +92,7 @@ public class BukkitEventListener extends EventListener implements BukkitJoinEven
}
// Handle saving player data snapshots on death
if (!plugin.getSettings().doSaveOnDeath()) {
if (!plugin.getSettings().getSynchronization().getSaveOnDeath().isEnabled()) {
return;
}
@@ -106,7 +106,7 @@ public class BukkitEventListener extends EventListener implements BukkitJoinEven
@EventHandler(ignoreCancelled = true)
public void onWorldSave(@NotNull WorldSaveEvent event) {
if (!plugin.getSettings().doSaveOnWorldSave()) {
if (!plugin.getSettings().getSynchronization().isSaveOnWorldSave()) {
return;
}
@@ -118,7 +118,7 @@ public class BukkitEventListener extends EventListener implements BukkitJoinEven
@EventHandler(ignoreCancelled = true)
public void onMapInitialize(@NotNull MapInitializeEvent event) {
if (plugin.getSettings().doPersistLockedMaps() && event.getMap().isLocked()) {
if (plugin.getSettings().getSynchronization().isPersistLockedMaps() && event.getMap().isLocked()) {
getPlugin().runAsync(() -> ((BukkitHuskSync) plugin).renderMapFromFile(event.getMap()));
}
}

View File

@@ -42,6 +42,8 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
import java.util.regex.Pattern;
import static net.william278.husksync.config.Settings.DatabaseSettings;
public class LegacyMigrator extends Migrator {
private final HSLConverter hslConverter;
@@ -56,11 +58,13 @@ public class LegacyMigrator extends Migrator {
public LegacyMigrator(@NotNull HuskSync plugin) {
super(plugin);
this.hslConverter = HSLConverter.getInstance();
this.sourceHost = plugin.getSettings().getMySqlHost();
this.sourcePort = plugin.getSettings().getMySqlPort();
this.sourceUsername = plugin.getSettings().getMySqlUsername();
this.sourcePassword = plugin.getSettings().getMySqlPassword();
this.sourceDatabase = plugin.getSettings().getMySqlDatabase();
final DatabaseSettings.DatabaseCredentials credentials = plugin.getSettings().getDatabase().getCredentials();
this.sourceHost = credentials.getHost();
this.sourcePort = credentials.getPort();
this.sourceUsername = credentials.getUsername();
this.sourcePassword = credentials.getPassword();
this.sourceDatabase = credentials.getDatabase();
this.sourcePlayersTable = "husksync_players";
this.sourceDataTable = "husksync_data";
}

View File

@@ -41,6 +41,8 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
import java.util.regex.Pattern;
import static net.william278.husksync.config.Settings.DatabaseSettings;
/**
* A migrator for migrating MySQLPlayerDataBridge data to HuskSync {@link DataSnapshot}s
*/
@@ -62,11 +64,12 @@ public class MpdbMigrator extends Migrator {
Bukkit.getPluginManager().getPlugin("MySQLPlayerDataBridge"),
"MySQLPlayerDataBridge dependency not found!"
));
this.sourceHost = plugin.getSettings().getMySqlHost();
this.sourcePort = plugin.getSettings().getMySqlPort();
this.sourceUsername = plugin.getSettings().getMySqlUsername();
this.sourcePassword = plugin.getSettings().getMySqlPassword();
this.sourceDatabase = plugin.getSettings().getMySqlDatabase();
final DatabaseSettings.DatabaseCredentials credentials = plugin.getSettings().getDatabase().getCredentials();
this.sourceHost = credentials.getHost();
this.sourcePort = credentials.getPort();
this.sourceUsername = credentials.getUsername();
this.sourcePassword = credentials.getPassword();
this.sourceDatabase = credentials.getDatabase();
this.sourceInventoryTable = "mpdb_inventory";
this.sourceEnderChestTable = "mpdb_enderchest";
this.sourceExperienceTable = "mpdb_experience";

View File

@@ -276,7 +276,7 @@ public class BukkitLegacyConverter extends LegacyConverter {
private boolean shouldImport(@NotNull Identifier type) {
return plugin.getSettings().isSyncFeatureEnabled(type);
return plugin.getSettings().getSynchronization().isFeatureEnabled(type);
}
@NotNull

View File

@@ -62,7 +62,7 @@ public interface BukkitMapPersister {
*/
@NotNull
default ItemStack[] persistLockedMaps(@NotNull ItemStack[] items, @NotNull Player delegateRenderer) {
if (!getPlugin().getSettings().doPersistLockedMaps()) {
if (!getPlugin().getSettings().getSynchronization().isPersistLockedMaps()) {
return items;
}
return forEachMap(items, map -> this.persistMapView(map, delegateRenderer));
@@ -76,7 +76,7 @@ public interface BukkitMapPersister {
*/
@NotNull
default ItemStack[] setMapViews(@NotNull ItemStack[] items) {
if (!getPlugin().getSettings().doPersistLockedMaps()) {
if (!getPlugin().getSettings().getSynchronization().isPersistLockedMaps()) {
return items;
}
return forEachMap(items, this::applyMapView);