9
0
mirror of https://github.com/HibiscusMC/HMCCosmetics.git synced 2025-12-29 11:59:21 +00:00

Changed loading of database to be async

This commit is contained in:
HeroBrineGoat
2022-01-21 18:39:45 -05:00
parent edc8724e90
commit 80f6e02598

View File

@@ -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<User> 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<User> consumer) {
switch (version) {
case 1 -> this.convertVersionOne(consumer);
}
}
private Set<User> convert(final int version) {
return switch (version) {
case 1 -> this.convertVersionOne();
default -> new HashSet<>();
};
}
private Set<User> convertVersionOne() {
private void convertVersionOne(final Consumer<User> consumer) {
final String query = "SELECT * from user";
final Set<User> 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;
}
}