diff --git a/Bootstrap/pom.xml b/Bootstrap/pom.xml
index f01df61..8ea5596 100644
--- a/Bootstrap/pom.xml
+++ b/Bootstrap/pom.xml
@@ -6,12 +6,13 @@
com.craftaro
UltimateStackerParent
- ${revision}
+ 3.0.0-SNAPSHOT
Bootstrap
+ UltimateStacker-${project.version}
org.apache.maven.plugins
@@ -57,7 +58,7 @@
com.craftaro
UltimateStacker
- ${revision}
+ 3.0.0-SNAPSHOT
diff --git a/UltimateStacker/pom.xml b/UltimateStacker/pom.xml
index 0cf894c..06338f2 100644
--- a/UltimateStacker/pom.xml
+++ b/UltimateStacker/pom.xml
@@ -6,7 +6,7 @@
com.craftaro
UltimateStackerParent
- ${revision}
+ 3.0.0-SNAPSHOT
UltimateStacker
@@ -114,7 +114,7 @@
com.songoda
SongodaCore
- 2.6.21
+ 2.6.23-SNAPSHOT
compile
diff --git a/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/UltimateStacker.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/UltimateStacker.java
index eacd32d..edbb3eb 100644
--- a/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/UltimateStacker.java
+++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/UltimateStacker.java
@@ -16,7 +16,6 @@ import com.craftaro.ultimatestacker.commands.CommandReload;
import com.craftaro.ultimatestacker.commands.CommandRemoveAll;
import com.craftaro.ultimatestacker.commands.CommandSettings;
import com.craftaro.ultimatestacker.commands.CommandSpawn;
-import com.craftaro.ultimatestacker.database.DataManager;
import com.craftaro.ultimatestacker.database.migrations._1_InitialMigration;
import com.craftaro.ultimatestacker.database.migrations._2_EntityStacks;
import com.craftaro.ultimatestacker.database.migrations._3_BlockStacks;
@@ -54,10 +53,7 @@ import com.songoda.core.commands.CommandManager;
import com.songoda.core.compatibility.CompatibleMaterial;
import com.songoda.core.compatibility.ServerVersion;
import com.songoda.core.configuration.Config;
-import com.songoda.core.database.DataMigrationManager;
-import com.songoda.core.database.DatabaseConnector;
-import com.songoda.core.database.MySQLConnector;
-import com.songoda.core.database.SQLiteConnector;
+import com.songoda.core.database.DataManager;
import com.songoda.core.gui.GuiManager;
import com.songoda.core.hooks.EntityStackerManager;
import com.songoda.core.hooks.HologramManager;
@@ -98,10 +94,6 @@ public class UltimateStacker extends SongodaPlugin {
private CommandManager commandManager;
private CustomEntityManager customEntityManager;
private StackingTask stackingTask;
-
- private DatabaseConnector databaseConnector;
- private DataMigrationManager dataMigrationManager;
- private DataManager dataManager;
private UltimateStackerAPI API;
public static UltimateStacker getInstance() {
@@ -120,8 +112,8 @@ public class UltimateStacker extends SongodaPlugin {
public void onPluginDisable() {
this.stackingTask.stop();
this.stackingTask = null;
- this.dataManager.bulkUpdateSpawners(this.spawnerStackManager.getStacks());
- this.dataManager.bulkUpdateBlocks(this.blockStackManager.getStacks());
+ this.dataManager.saveBatch(this.spawnerStackManager.getStacksData());
+ this.dataManager.saveBatch(this.blockStackManager.getStacksData());
HologramManager.removeAllHolograms();
Async.shutdown();
}
@@ -229,37 +221,9 @@ public class UltimateStacker extends SongodaPlugin {
HologramManager.load(this);
EntityStackerManager.load();
- // Database stuff, go!
- try {
- if (Settings.MYSQL_ENABLED.getBoolean()) {
- String hostname = Settings.MYSQL_HOSTNAME.getString();
- int port = Settings.MYSQL_PORT.getInt();
- String database = Settings.MYSQL_DATABASE.getString();
- String username = Settings.MYSQL_USERNAME.getString();
- String password = Settings.MYSQL_PASSWORD.getString();
- boolean useSSL = Settings.MYSQL_USE_SSL.getBoolean();
- int poolSize = Settings.MYSQL_POOL_SIZE.getInt();
+ initDatabase(Arrays.asList(new _1_InitialMigration(), new _2_EntityStacks(), new _3_BlockStacks(), new _6_RemoveStackedEntityTable()));
- this.databaseConnector = new MySQLConnector(this, hostname, port, database, username, password, useSSL, poolSize);
- this.getLogger().info("Data handler connected using MySQL.");
- } else {
- this.databaseConnector = new SQLiteConnector(this);
- this.getLogger().info("Data handler connected using SQLite.");
- }
- } catch (Exception ex) {
- this.getLogger().severe("Fatal error trying to connect to database. Please make sure all your connection settings are correct and try again. Plugin has been disabled.");
- Bukkit.getPluginManager().disablePlugin(this);
- }
-
- this.dataManager = new DataManager(this.databaseConnector, this);
- this.dataMigrationManager = new DataMigrationManager(this.databaseConnector, this.dataManager,
- new _1_InitialMigration(),
- new _2_EntityStacks(),
- new _3_BlockStacks(),
- new _6_RemoveStackedEntityTable());
- this.dataMigrationManager.runMigrations();
-
- API = new UltimateStackerAPI(entityStackManager, stackedItemManager, spawnerStackManager, blockStackManager);
+ API = new UltimateStackerAPI(this, entityStackManager, stackedItemManager, spawnerStackManager, blockStackManager, new Settings());
}
@Override
@@ -270,30 +234,27 @@ public class UltimateStacker extends SongodaPlugin {
// Load current data.
final boolean useSpawnerHolo = Settings.SPAWNER_HOLOGRAMS.getBoolean();
- this.dataManager.getSpawners((spawners) -> {
- this.spawnerStackManager.addSpawners(spawners);
+ this.dataManager.loadBatch(SpawnerStackImpl.class, "spawners").forEach((data) -> {
+ SpawnerStack spawner = (SpawnerStack) data;
+ this.spawnerStackManager.addSpawner(spawner);
if (useSpawnerHolo) {
- if (spawners.isEmpty()) return;
-
- for (SpawnerStack spawner : spawners.values()) {
- if (spawner.getLocation().getWorld() != null) {
- updateHologram(spawner);
- }
+ if (spawner == null) return;
+ if (spawner.getLocation() == null) return;
+ if (spawner.getLocation().getWorld() != null) {
+ updateHologram(spawner);
}
}
});
this.stackingTask = new StackingTask(this);
final boolean useBlockHolo = Settings.BLOCK_HOLOGRAMS.getBoolean();
- this.dataManager.getBlocks((blocks) -> {
- this.blockStackManager.addBlocks(blocks);
+ this.dataManager.loadBatch(BlockStackImpl.class, "blocks").forEach((data) -> {
+ BlockStack blockStack = (BlockStack) data;
+ this.blockStackManager.addBlock(blockStack);
if (useBlockHolo) {
- if (blocks.isEmpty()) return;
-
- for (BlockStack stack : blocks.values()) {
- if (stack.getLocation().getWorld() != null) {
- updateHologram(stack);
- }
+ if (blockStack == null) return;
+ if (blockStack.getLocation().getWorld() != null) {
+ updateHologram(blockStack);
}
}
});
@@ -362,11 +323,7 @@ public class UltimateStacker extends SongodaPlugin {
return spawnerFile;
}
- public DatabaseConnector getDatabaseConnector() {
- return databaseConnector;
- }
-
- public DataManager getDataManager() {
+ public DataManager getPluginDataManager() {
return dataManager;
}
diff --git a/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/database/DataManager.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/database/DataManager.java
deleted file mode 100644
index fb021bf..0000000
--- a/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/database/DataManager.java
+++ /dev/null
@@ -1,243 +0,0 @@
-package com.craftaro.ultimatestacker.database;
-
-import com.craftaro.ultimatestacker.api.stack.block.BlockStack;
-import com.craftaro.ultimatestacker.api.stack.spawner.SpawnerStack;
-import com.craftaro.ultimatestacker.stackable.block.BlockStackImpl;
-import com.craftaro.ultimatestacker.stackable.spawner.SpawnerStackImpl;
-import com.songoda.core.compatibility.CompatibleMaterial;
-import com.songoda.core.database.DataManagerAbstract;
-import com.songoda.core.database.DatabaseConnector;
-import com.songoda.core.database.DatabaseType;
-import org.bukkit.Bukkit;
-import org.bukkit.Location;
-import org.bukkit.World;
-import org.bukkit.plugin.Plugin;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.function.Consumer;
-
-public class DataManager extends DataManagerAbstract {
-
- public DataManager(DatabaseConnector databaseConnector, Plugin plugin) {
- super(databaseConnector, plugin);
- }
-
- public void bulkUpdateSpawners(Collection spawnerStacks) {
- try (Connection connection = this.databaseConnector.getConnection()) {
- String updateSpawner = "UPDATE " + this.getTablePrefix() + "spawners SET amount = ? WHERE id = ?";
- PreparedStatement statement = connection.prepareStatement(updateSpawner);
- for (SpawnerStack spawnerStack : spawnerStacks) {
- statement.setInt(1, spawnerStack.getAmount());
- statement.setInt(2, spawnerStack.getId());
- statement.addBatch();
- }
- statement.executeBatch();
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
-
- public void updateSpawner(SpawnerStack spawnerStack) {
- this.runAsync(() -> {
- try (Connection connection = this.databaseConnector.getConnection()) {
-
- String updateSpawner = "UPDATE " + this.getTablePrefix() + "spawners SET amount = ? WHERE id = ?";
-
- PreparedStatement statement = connection.prepareStatement(updateSpawner);
- statement.setInt(1, spawnerStack.getAmount());
- statement.setInt(2, spawnerStack.getId());
- statement.executeUpdate();
- } catch (SQLException exception) {
- exception.printStackTrace();
- }
- });
- }
-
- public void createSpawner(SpawnerStack spawnerStack) {
- this.runAsync(() -> {
- try (Connection connection = this.databaseConnector.getConnection()) {
- String createSpawner = "INSERT " + getSyntax("INTO ", DatabaseType.MYSQL) + getSyntax("OR REPLACE INTO ", DatabaseType.SQLITE) + this.getTablePrefix() + "spawners (amount, world, x, y, z) VALUES (?, ?, ?, ?, ?)";
- 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();
- int spawnerId = this.lastInsertedId(connection, "spawners");
- this.sync(() -> spawnerStack.setId(spawnerId));
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- });
- }
-
- public void updateBlock(BlockStack blockStack) {
- if (blockStack.getAmount() == 0) return;
- this.runAsync(() -> {
- try (Connection connection = this.databaseConnector.getConnection()) {
- String updateBlock = "UPDATE " + this.getTablePrefix() + "blocks SET amount = ? WHERE id = ?";
- PreparedStatement statement = connection.prepareStatement(updateBlock);
- if (blockStack.getAmount() == 0) return;
- statement.setInt(1, blockStack.getAmount());
- statement.setInt(2, blockStack.getId());
- statement.executeUpdate();
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- });
- }
-
- public void createBlock(BlockStack blockStack) {
- this.runAsync(() -> {
- try (Connection connection = this.databaseConnector.getConnection()) {
- String createSpawner = "INSERT " + getSyntax("INTO ", DatabaseType.MYSQL) + getSyntax("OR REPLACE INTO ", DatabaseType.SQLITE) + this.getTablePrefix() + "blocks (amount, material, world, x, y, z) VALUES (?, ?, ?, ?, ?, ?)";
- PreparedStatement statement = connection.prepareStatement(createSpawner);
- statement.setInt(1, blockStack.getAmount());
- statement.setString(2, blockStack.getMaterial().name());
-
- statement.setString(3, blockStack.getLocation().getWorld().getName());
- statement.setInt(4, (int) blockStack.getLocation().getX());
- statement.setInt(5, (int) blockStack.getLocation().getY());
- statement.setInt(6, (int) blockStack.getLocation().getZ());
- statement.executeUpdate();
- int blockId = this.lastInsertedId(connection, "blocks");
- this.sync(() -> ((BlockStackImpl)blockStack).setId(blockId));
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- });
- }
-
- public void deleteSpawner(SpawnerStack spawnerStack) {
- this.runAsync(() -> {
- try (Connection connection = this.databaseConnector.getConnection()) {
- String deleteSpawner = "DELETE FROM " + this.getTablePrefix() + "spawners WHERE id = ?";
- PreparedStatement statement = connection.prepareStatement(deleteSpawner);
- statement.setInt(1, spawnerStack.getId());
- statement.executeUpdate();
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- });
- }
-
- public void deleteBlock(BlockStackImpl blockStack) {
- this.runAsync(() -> {
- try (Connection connection = this.databaseConnector.getConnection()) {
- String deleteBlock = "DELETE FROM " + this.getTablePrefix() + "blocks WHERE id = ?";
- PreparedStatement statement = connection.prepareStatement(deleteBlock);
- statement.setInt(1, blockStack.getId());
- statement.executeUpdate();
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- });
- }
-
- public void getSpawners(Consumer