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:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user