diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/database/DatabaseConverter.java b/src/main/java/io/github/fisher2911/hmccosmetics/database/DatabaseConverter.java index cbc48d37..aa380154 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/database/DatabaseConverter.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/database/DatabaseConverter.java @@ -5,6 +5,7 @@ import io.github.fisher2911.hmccosmetics.cosmetic.CosmeticManager; import io.github.fisher2911.hmccosmetics.gui.ArmorItem; import io.github.fisher2911.hmccosmetics.inventory.PlayerArmor; import io.github.fisher2911.hmccosmetics.user.User; +import org.bukkit.Bukkit; import org.bukkit.configuration.file.YamlConfiguration; import java.io.File; @@ -16,6 +17,7 @@ import java.sql.SQLException; import java.util.HashSet; import java.util.Set; import java.util.UUID; +import java.util.function.Consumer; public class DatabaseConverter { @@ -46,7 +48,7 @@ public class DatabaseConverter { final YamlConfiguration config = YamlConfiguration.loadConfiguration(file); final int version = config.getInt("version"); - final Set users = this.convert(version); + this.convert(version, this.database::saveUser); try { config.set("version", CURRENT_VERSION); @@ -54,59 +56,61 @@ public class DatabaseConverter { } catch (final IOException exception) { exception.printStackTrace(); } - this.database.createTables(); - for (final User user : users) { - this.database.saveUser(user); + this.database.createTables(); + } + + private void convert(final int version, final Consumer consumer) { + switch (version) { + case 1 -> this.convertVersionOne(consumer); } } - private Set convert(final int version) { - return switch (version) { - case 1 -> this.convertVersionOne(); - default -> new HashSet<>(); - }; - } - - private Set convertVersionOne() { + private void convertVersionOne(final Consumer consumer) { final String query = "SELECT * from user"; - final Set users = new HashSet<>(); final CosmeticManager cosmeticManager = this.plugin.getCosmeticManager(); try (final PreparedStatement statement = this.database.getDataSource().getReadOnlyConnection("user"). getUnderlyingConnection().prepareStatement(query); - final PreparedStatement dropStatement = this.database.getDataSource().getReadWriteConnection("user"). - getUnderlyingConnection().prepareStatement("DROP TABLE user")) { + final PreparedStatement dropStatement = this.database.getDataSource().getReadWriteConnection("user"). + getUnderlyingConnection().prepareStatement("DROP TABLE user")) { final ResultSet results = statement.executeQuery(); - while (results.next()) { - final PlayerArmor playerArmor = PlayerArmor.empty(); - final User user = new User - (UUID.fromString(results.getString(1)), - playerArmor, - this.database.ARMOR_STAND_ID.getAndDecrement() - ); - final String backpackId = results.getString(2); - final String hatId = results.getString(3); - final int hatDye = results.getInt(4); + Bukkit.getScheduler().runTask(this.plugin, () -> { - final ArmorItem backpack = cosmeticManager.getArmorItem(backpackId); - final ArmorItem hat = cosmeticManager.getArmorItem(hatId); - if (backpack != null) playerArmor.setItem(backpack); - if (hat != null) { - hat.setDye(hatDye); - playerArmor.setItem(hat); + }); + Bukkit.getScheduler().runTask(this.plugin, () -> { + try { + while (results.next()) { + final PlayerArmor playerArmor = PlayerArmor.empty(); + final User user = new User + (UUID.fromString(results.getString(1)), + playerArmor, + this.database.ARMOR_STAND_ID.getAndDecrement() + ); + final String backpackId = results.getString(2); + final String hatId = results.getString(3); + final int hatDye = results.getInt(4); + + final ArmorItem backpack = cosmeticManager.getArmorItem(backpackId); + final ArmorItem hat = cosmeticManager.getArmorItem(hatId); + if (backpack != null) playerArmor.setItem(backpack); + if (hat != null) { + hat.setDye(hatDye); + playerArmor.setItem(hat); + } + + consumer.accept(user); + } + } catch (final SQLException exception) { + exception.printStackTrace(); } - - users.add(user); - } + }); dropStatement.executeUpdate(); } catch (final SQLException exception) { exception.printStackTrace(); } - - return users; } }