UltimateStacker/src/main/java/com/songoda/ultimatestacker/database/DataManager.java

114 lines
4.5 KiB
Java
Raw Normal View History

2019-08-02 15:59:10 +02:00
package com.songoda.ultimatestacker.database;
2019-09-03 22:38:00 +02:00
import com.songoda.core.database.DataManagerAbstract;
import com.songoda.core.database.DatabaseConnector;
2019-08-02 15:59:10 +02:00
import com.songoda.ultimatestacker.spawner.SpawnerStack;
2019-09-03 22:38:00 +02:00
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
2019-08-02 15:59:10 +02:00
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;
2019-09-03 22:38:00 +02:00
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
2019-09-03 22:38:00 +02:00
import org.bukkit.plugin.Plugin;
2019-08-02 15:59:10 +02:00
2019-09-03 22:38:00 +02:00
public class DataManager extends DataManagerAbstract {
2019-08-02 15:59:10 +02:00
public DataManager(DatabaseConnector databaseConnector, Plugin plugin) {
2019-09-03 22:38:00 +02:00
super(databaseConnector, plugin);
2019-08-02 15:59:10 +02:00
}
public void bulkUpdateSpawners(Collection<SpawnerStack> spawnerStacks) {
this.databaseConnector.connect(connection -> {
2019-08-03 06:23:36 +02:00
String updateSpawner = "UPDATE " + this.getTablePrefix() + "spawners SET amount = ? WHERE id = ?";
2019-08-02 15:59:10 +02:00
try (PreparedStatement statement = connection.prepareStatement(updateSpawner)) {
for (SpawnerStack spawnerStack : spawnerStacks) {
statement.setInt(1, spawnerStack.getAmount());
2019-08-03 06:23:36 +02:00
statement.setInt(2, spawnerStack.getId());
2019-08-02 15:59:10 +02:00
statement.addBatch();
}
statement.executeBatch();
}
});
}
public void updateSpawner(SpawnerStack spawnerStack) {
this.async(() -> this.databaseConnector.connect(connection -> {
2019-08-02 20:51:15 +02:00
String updateSpawner = "UPDATE " + this.getTablePrefix() + "spawners SET amount = ? WHERE id = ?";
2019-08-02 15:59:10 +02:00
try (PreparedStatement statement = connection.prepareStatement(updateSpawner)) {
statement.setInt(1, spawnerStack.getAmount());
2019-08-02 20:51:15 +02:00
statement.setInt(2, spawnerStack.getId());
2019-08-02 15:59:10 +02:00
statement.executeUpdate();
}
}));
}
public void createSpawner(SpawnerStack spawnerStack) {
this.async(() -> this.databaseConnector.connect(connection -> {
2019-08-02 20:51:15 +02:00
String createSpawner = "INSERT INTO " + this.getTablePrefix() + "spawners (amount, world, x, y, z) VALUES (?, ?, ?, ?, ?)";
2019-08-02 15:59:10 +02:00
try (PreparedStatement statement = connection.prepareStatement(createSpawner)) {
statement.setInt(1, spawnerStack.getAmount());
statement.setString(2, spawnerStack.getWorld().getName());
statement.setInt(3, spawnerStack.getX());
statement.setInt(4, spawnerStack.getY());
statement.setInt(5, spawnerStack.getZ());
statement.executeUpdate();
}
2019-08-02 20:51:15 +02:00
int spawnerId = this.lastInsertedId(connection);
this.sync(() -> spawnerStack.setId(spawnerId));
2019-08-02 15:59:10 +02:00
}));
}
public void deleteSpawner(SpawnerStack spawnerStack) {
this.async(() -> this.databaseConnector.connect(connection -> {
2019-08-02 20:51:15 +02:00
String deleteSpawner = "DELETE FROM " + this.getTablePrefix() + "spawners WHERE id = ?";
2019-08-02 15:59:10 +02:00
try (PreparedStatement statement = connection.prepareStatement(deleteSpawner)) {
2019-08-02 20:51:15 +02:00
statement.setInt(1, spawnerStack.getId());
2019-08-02 15:59:10 +02:00
statement.executeUpdate();
}
}));
}
public void getSpawners(Consumer<Map<Location, SpawnerStack>> callback) {
this.async(() -> this.databaseConnector.connect(connection -> {
String selectSpawners = "SELECT * FROM " + this.getTablePrefix() + "spawners";
Map<Location, SpawnerStack> spawners = new HashMap<>();
try (Statement statement = connection.createStatement()) {
ResultSet result = statement.executeQuery(selectSpawners);
while (result.next()) {
World world = Bukkit.getWorld(result.getString("world"));
if(world == null)
continue;
2019-08-02 20:51:15 +02:00
int spawnerId = result.getInt("id");
2019-08-02 15:59:10 +02:00
int amount = result.getInt("amount");
int x = result.getInt("x");
int y = result.getInt("y");
int z = result.getInt("z");
Location location = new Location(world, x, y, z);
2019-08-02 15:59:10 +02:00
SpawnerStack spawnerStack = new SpawnerStack(location, amount);
2019-08-02 20:51:15 +02:00
spawnerStack.setId(spawnerId);
2019-08-02 15:59:10 +02:00
spawners.put(location, spawnerStack);
}
2019-08-09 02:52:41 +02:00
} catch (Exception e) {
e.printStackTrace();
2019-08-02 15:59:10 +02:00
}
this.sync(() -> callback.accept(spawners));
}));
}
}