mirror of
https://github.com/songoda/UltimateStacker.git
synced 2024-12-26 18:37:43 +01:00
Upload progress (changes will be in next commit)
This commit is contained in:
parent
5a9964c45e
commit
ff8cc1ddb2
@ -6,12 +6,13 @@
|
||||
<parent>
|
||||
<groupId>com.craftaro</groupId>
|
||||
<artifactId>UltimateStackerParent</artifactId>
|
||||
<version>${revision}</version>
|
||||
<version>3.0.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>Bootstrap</artifactId>
|
||||
|
||||
<build>
|
||||
<finalName>UltimateStacker-${project.version}</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
@ -57,7 +58,7 @@
|
||||
<dependency>
|
||||
<groupId>com.craftaro</groupId>
|
||||
<artifactId>UltimateStacker</artifactId>
|
||||
<version>${revision}</version>
|
||||
<version>3.0.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.craftaro</groupId>
|
||||
<artifactId>UltimateStackerParent</artifactId>
|
||||
<version>${revision}</version>
|
||||
<version>3.0.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>UltimateStacker</artifactId>
|
||||
|
||||
@ -114,7 +114,7 @@
|
||||
<dependency>
|
||||
<groupId>com.songoda</groupId>
|
||||
<artifactId>SongodaCore</artifactId>
|
||||
<version>2.6.21</version>
|
||||
<version>2.6.23-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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<SpawnerStack> 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<Map<Location, SpawnerStack>> callback) {
|
||||
this.runAsync(() -> {
|
||||
try (Connection connection = this.databaseConnector.getConnection()){
|
||||
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;
|
||||
|
||||
int spawnerId = result.getInt("id");
|
||||
|
||||
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);
|
||||
|
||||
SpawnerStack spawnerStack = new SpawnerStackImpl(location, amount);
|
||||
spawnerStack.setId(spawnerId);
|
||||
spawners.put(location, spawnerStack);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
this.sync(() -> callback.accept(spawners));
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void getBlocks(Consumer<Map<Location, BlockStack>> callback) {
|
||||
this.runAsync(() -> {
|
||||
try (Connection connection = this.databaseConnector.getConnection()) {
|
||||
String selectBlocks = "SELECT * FROM " + this.getTablePrefix() + "blocks";
|
||||
|
||||
Map<Location, BlockStack> blocks = new HashMap<>();
|
||||
|
||||
Statement statement = connection.createStatement();
|
||||
|
||||
ResultSet result = statement.executeQuery(selectBlocks);
|
||||
while (result.next()) {
|
||||
World world = Bukkit.getWorld(result.getString("world"));
|
||||
|
||||
if (world == null)
|
||||
continue;
|
||||
|
||||
int blockId = result.getInt("id");
|
||||
|
||||
CompatibleMaterial material = CompatibleMaterial.getMaterial(result.getString("material"));
|
||||
|
||||
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);
|
||||
|
||||
BlockStackImpl blockStack = new BlockStackImpl(material, location, amount);
|
||||
blockStack.setId(blockId);
|
||||
if (amount == 0) {
|
||||
//remove from database
|
||||
this.deleteBlock(blockStack);
|
||||
continue;
|
||||
}
|
||||
blocks.put(location, blockStack);
|
||||
|
||||
this.sync(() -> callback.accept(blocks));
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void bulkUpdateBlocks(Collection<BlockStack> stacks) {
|
||||
try (Connection connection = this.databaseConnector.getConnection()) {
|
||||
String updateSpawner = "UPDATE " + this.getTablePrefix() + "blocks SET amount = ? WHERE id = ?";
|
||||
PreparedStatement statement = connection.prepareStatement(updateSpawner);
|
||||
for (BlockStack spawnerStack : stacks) {
|
||||
statement.setInt(1, spawnerStack.getAmount());
|
||||
statement.setInt(2, spawnerStack.getId());
|
||||
statement.addBatch();
|
||||
}
|
||||
statement.executeBatch();
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
@ -2,6 +2,7 @@ package com.craftaro.ultimatestacker.database.migrations;
|
||||
|
||||
import com.craftaro.ultimatestacker.UltimateStacker;
|
||||
import com.songoda.core.database.DataMigration;
|
||||
import com.songoda.core.database.DatabaseConnector;
|
||||
import com.songoda.core.database.MySQLConnector;
|
||||
|
||||
import java.sql.Connection;
|
||||
@ -15,11 +16,11 @@ public class _1_InitialMigration extends DataMigration {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void migrate(Connection connection, String tablePrefix) throws SQLException {
|
||||
String autoIncrement = UltimateStacker.getInstance().getDatabaseConnector() instanceof MySQLConnector ? " AUTO_INCREMENT" : "";
|
||||
public void migrate(DatabaseConnector connector, String tablePrefix) throws SQLException {
|
||||
String autoIncrement = connector instanceof MySQLConnector ? " AUTO_INCREMENT" : "";
|
||||
|
||||
// Create spawners table
|
||||
try (Statement statement = connection.createStatement()) {
|
||||
try (Statement statement = connector.getConnection().createStatement()) {
|
||||
statement.execute("CREATE TABLE IF NOT EXISTS " + tablePrefix + "spawners (" +
|
||||
"id INTEGER PRIMARY KEY" + autoIncrement + ", " +
|
||||
"amount INTEGER NOT NULL," +
|
||||
|
@ -2,6 +2,7 @@ package com.craftaro.ultimatestacker.database.migrations;
|
||||
|
||||
import com.craftaro.ultimatestacker.UltimateStacker;
|
||||
import com.songoda.core.database.DataMigration;
|
||||
import com.songoda.core.database.DatabaseConnector;
|
||||
import com.songoda.core.database.MySQLConnector;
|
||||
|
||||
import java.sql.Connection;
|
||||
@ -15,11 +16,11 @@ public class _2_EntityStacks extends DataMigration {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void migrate(Connection connection, String tablePrefix) throws SQLException {
|
||||
String autoIncrement = UltimateStacker.getInstance().getDatabaseConnector() instanceof MySQLConnector ? " AUTO_INCREMENT" : "";
|
||||
public void migrate(DatabaseConnector connector, String tablePrefix) throws SQLException {
|
||||
String autoIncrement = connector instanceof MySQLConnector ? " AUTO_INCREMENT" : "";
|
||||
|
||||
// Create host entities table
|
||||
try (Statement statement = connection.createStatement()) {
|
||||
try (Statement statement = connector.getConnection().createStatement()) {
|
||||
statement.execute("CREATE TABLE IF NOT EXISTS " + tablePrefix + "host_entities (" +
|
||||
"id INTEGER PRIMARY KEY" + autoIncrement + ", " +
|
||||
"uuid VARCHAR(36) NOT NULL," +
|
||||
|
@ -2,6 +2,7 @@ package com.craftaro.ultimatestacker.database.migrations;
|
||||
|
||||
import com.craftaro.ultimatestacker.UltimateStacker;
|
||||
import com.songoda.core.database.DataMigration;
|
||||
import com.songoda.core.database.DatabaseConnector;
|
||||
import com.songoda.core.database.MySQLConnector;
|
||||
|
||||
import java.sql.Connection;
|
||||
@ -15,11 +16,11 @@ public class _3_BlockStacks extends DataMigration {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void migrate(Connection connection, String tablePrefix) throws SQLException {
|
||||
String autoIncrement = UltimateStacker.getInstance().getDatabaseConnector() instanceof MySQLConnector ? " AUTO_INCREMENT" : "";
|
||||
public void migrate(DatabaseConnector connector, String tablePrefix) throws SQLException {
|
||||
String autoIncrement = connector instanceof MySQLConnector ? " AUTO_INCREMENT" : "";
|
||||
|
||||
// Create blocks table
|
||||
try (Statement statement = connection.createStatement()) {
|
||||
try (Statement statement = connector.getConnection().createStatement()) {
|
||||
statement.execute("CREATE TABLE IF NOT EXISTS " + tablePrefix + "blocks (" +
|
||||
"id INTEGER PRIMARY KEY" + autoIncrement + ", " +
|
||||
"amount INTEGER NOT NULL," +
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.craftaro.ultimatestacker.database.migrations;
|
||||
|
||||
import com.songoda.core.database.DataMigration;
|
||||
import com.songoda.core.database.DatabaseConnector;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
@ -13,9 +14,9 @@ public class _6_RemoveStackedEntityTable extends DataMigration {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void migrate(Connection connection, String tablePrefix) {
|
||||
try (Statement statement = connection.createStatement()) {
|
||||
statement.execute("DROP TABLE " + tablePrefix + "stacked_entities");
|
||||
public void migrate(DatabaseConnector connector, String tablePrefix) {
|
||||
try (Statement statement = connector.getConnection().createStatement()) {
|
||||
statement.execute("DROP TABLE IF EXISTS " + tablePrefix + "stacked_entities");
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
@ -129,7 +129,7 @@ public class BlockListeners implements Listener {
|
||||
}
|
||||
//update hologram
|
||||
plugin.updateHologram(stack);
|
||||
plugin.getDataManager().updateBlock(stack);
|
||||
plugin.getPluginDataManager().save(stack);
|
||||
return;
|
||||
} else {
|
||||
if (isSneaking) return;
|
||||
@ -143,7 +143,7 @@ public class BlockListeners implements Listener {
|
||||
hand.takeItem(player, 1);
|
||||
}
|
||||
BlockStack newStack = blockStackManager.createBlock(block);
|
||||
plugin.getDataManager().createBlock(newStack);
|
||||
plugin.getPluginDataManager().save(newStack);
|
||||
plugin.updateHologram(newStack);
|
||||
}
|
||||
return;
|
||||
@ -232,7 +232,7 @@ public class BlockListeners implements Listener {
|
||||
}
|
||||
|
||||
SpawnerStack stack = UltimateStackerAPI.getSpawnerStackManager().addSpawner(new SpawnerStackImpl(block.getLocation(), amount));
|
||||
plugin.getDataManager().createSpawner(stack);
|
||||
plugin.getPluginDataManager().save(stack);
|
||||
|
||||
cs.setSpawnedType(cs2.getSpawnedType());
|
||||
cs.update();
|
||||
@ -279,7 +279,7 @@ public class BlockListeners implements Listener {
|
||||
event.setCancelled(false);
|
||||
plugin.removeHologram(stack);
|
||||
SpawnerStack spawnerStack = UltimateStackerAPI.getSpawnerStackManager().removeSpawner(block.getLocation());
|
||||
plugin.getDataManager().deleteSpawner(spawnerStack);
|
||||
plugin.getPluginDataManager().delete(spawnerStack);
|
||||
} else {
|
||||
stack.setAmount(stack.getAmount() - 1);
|
||||
plugin.updateHologram(stack);
|
||||
|
@ -138,7 +138,7 @@ public class EntityListeners implements Listener {
|
||||
spawnLocation.getWorld().dropItemNaturally(spawnLocation.clone().add(.5, 0, .5), item);
|
||||
|
||||
SpawnerStack spawnerStack = UltimateStackerAPI.getSpawnerStackManager().removeSpawner(spawnLocation);
|
||||
plugin.getDataManager().deleteSpawner(spawnerStack);
|
||||
plugin.getPluginDataManager().delete(spawnerStack);
|
||||
plugin.removeHologram(spawnerStack);
|
||||
}
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class Settings {
|
||||
public class Settings implements com.craftaro.ultimatestacker.api.Settings {
|
||||
|
||||
static final Config config = UltimateStacker.getInstance().getCoreConfig();
|
||||
|
||||
@ -275,16 +275,6 @@ public class Settings {
|
||||
"The enabled language file.",
|
||||
"More language files (if available) can be found in the plugins data folder.");
|
||||
|
||||
public static final ConfigSetting MYSQL_ENABLED = new ConfigSetting(config, "MySQL.Enabled", false,
|
||||
"Set to 'true' to use MySQL instead of SQLite for data storage.");
|
||||
public static final ConfigSetting MYSQL_HOSTNAME = new ConfigSetting(config, "MySQL.Hostname", "localhost");
|
||||
public static final ConfigSetting MYSQL_PORT = new ConfigSetting(config, "MySQL.Port", 3306);
|
||||
public static final ConfigSetting MYSQL_DATABASE = new ConfigSetting(config, "MySQL.Database", "your-database");
|
||||
public static final ConfigSetting MYSQL_USERNAME = new ConfigSetting(config, "MySQL.Username", "user");
|
||||
public static final ConfigSetting MYSQL_PASSWORD = new ConfigSetting(config, "MySQL.Password", "pass");
|
||||
public static final ConfigSetting MYSQL_USE_SSL = new ConfigSetting(config, "MySQL.Use SSL", false);
|
||||
public static final ConfigSetting MYSQL_POOL_SIZE = new ConfigSetting(config, "MySQL.Pool Size", 3, "Determines the number of connections the pool is using. Increase this value if you are getting timeout errors when more players online.");
|
||||
|
||||
public static void setupConfig() {
|
||||
config.load();
|
||||
config.setAutoremove(true).setAutosave(true);
|
||||
@ -302,4 +292,9 @@ public class Settings {
|
||||
|
||||
config.saveChanges();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxItemStackSize() {
|
||||
return MAX_STACK_ITEMS.getInt();
|
||||
}
|
||||
}
|
||||
|
@ -4,9 +4,13 @@ import com.craftaro.ultimatestacker.UltimateStacker;
|
||||
import com.craftaro.ultimatestacker.api.stack.block.BlockStack;
|
||||
import com.craftaro.ultimatestacker.settings.Settings;
|
||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||
import com.songoda.core.database.Data;
|
||||
import com.songoda.core.database.SerializedLocation;
|
||||
import com.songoda.core.utils.TextUtils;
|
||||
import org.bukkit.Location;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
public class BlockStackImpl implements BlockStack {
|
||||
@ -20,8 +24,8 @@ public class BlockStackImpl implements BlockStack {
|
||||
private int id;
|
||||
|
||||
private int amount = 1;
|
||||
private final CompatibleMaterial material;
|
||||
private final Location location;
|
||||
private CompatibleMaterial material;
|
||||
private Location location;
|
||||
|
||||
public BlockStackImpl(CompatibleMaterial material, Location location) {
|
||||
this.material = material;
|
||||
@ -39,6 +43,30 @@ public class BlockStackImpl implements BlockStack {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> serialize() {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("id", id);
|
||||
map.put("amount", amount);
|
||||
map.put("material", material.name());
|
||||
map.putAll(SerializedLocation.of(location));
|
||||
return map;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Data deserialize(Map<String, Object> map) {
|
||||
id = (int) map.get("id");
|
||||
amount = (int) map.get("amount");
|
||||
material = CompatibleMaterial.valueOf((String) map.get("material"));
|
||||
location = SerializedLocation.of(map);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTableName() {
|
||||
return "blocks";
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
@ -78,7 +106,7 @@ public class BlockStackImpl implements BlockStack {
|
||||
UltimateStacker plugin = UltimateStacker.getInstance();
|
||||
plugin.getBlockStackManager().removeBlock(location);
|
||||
plugin.removeHologram(this);
|
||||
plugin.getDataManager().deleteBlock(this);
|
||||
plugin.getPluginDataManager().delete(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -4,6 +4,7 @@ import com.craftaro.ultimatestacker.UltimateStacker;
|
||||
import com.craftaro.ultimatestacker.api.stack.block.BlockStack;
|
||||
import com.craftaro.ultimatestacker.api.stack.block.BlockStackManager;
|
||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||
import com.songoda.core.database.Data;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
@ -64,6 +65,11 @@ public class BlockStackManagerImpl implements BlockStackManager {
|
||||
return Collections.unmodifiableCollection(this.registeredBlocks.values());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Data> getStacksData() {
|
||||
return Collections.unmodifiableCollection(this.registeredBlocks.values());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isMaterialBlacklisted(ItemStack item) {
|
||||
return UltimateStacker.isMaterialBlacklisted(item);
|
||||
|
@ -6,6 +6,7 @@ import com.craftaro.ultimatestacker.api.stack.item.StackedItem;
|
||||
import com.craftaro.ultimatestacker.api.stack.item.StackedItemManager;
|
||||
import com.craftaro.ultimatestacker.settings.Settings;
|
||||
import com.songoda.core.compatibility.ServerVersion;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
@ -15,7 +16,11 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class StackedItemManagerImpl implements StackedItemManager {
|
||||
|
||||
@ -56,6 +61,16 @@ public class StackedItemManagerImpl implements StackedItemManager {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable Future<StackedItem> createStackSync(ItemStack item, Location location, int amount) {
|
||||
return Bukkit.getScheduler().callSyncMethod(UltimateStacker.getInstance(), () -> createStack(item, location, amount));
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable Future<StackedItem> createStackSync(Item item, int amount) {
|
||||
return Bukkit.getScheduler().callSyncMethod(UltimateStacker.getInstance(), () -> createStack(item, amount));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getActualItemAmount(Item item) {
|
||||
if (isStackedItem(item)) {
|
||||
|
@ -6,6 +6,8 @@ import com.craftaro.ultimatestacker.api.stack.spawner.SpawnerStack;
|
||||
import com.craftaro.ultimatestacker.settings.Settings;
|
||||
import com.craftaro.ultimatestacker.utils.Methods;
|
||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||
import com.songoda.core.database.Data;
|
||||
import com.songoda.core.database.SerializedLocation;
|
||||
import com.songoda.core.nms.world.SpawnedEntity;
|
||||
import com.songoda.core.world.SSpawner;
|
||||
import org.bukkit.Location;
|
||||
@ -13,6 +15,8 @@ import org.bukkit.World;
|
||||
import org.bukkit.block.CreatureSpawner;
|
||||
import org.bukkit.entity.EntityType;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
@ -48,7 +52,7 @@ public class SpawnerStackImpl extends SSpawner implements SpawnerStack {
|
||||
@Override
|
||||
public void setAmount(int amount) {
|
||||
this.amount = amount;
|
||||
plugin.getDataManager().updateSpawner(this);
|
||||
plugin.getPluginDataManager().save(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -86,6 +90,28 @@ public class SpawnerStackImpl extends SSpawner implements SpawnerStack {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> serialize() {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("id", id);
|
||||
map.put("amount", amount);
|
||||
map.putAll(new SerializedLocation(location).asMap());
|
||||
return map;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Data deserialize(Map<String, Object> map) {
|
||||
this.id = (int) map.get("id");
|
||||
this.amount = (int) map.get("amount");
|
||||
this.initFromData(map);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTableName() {
|
||||
return "spawners";
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
@ -3,12 +3,14 @@ package com.craftaro.ultimatestacker.stackable.spawner;
|
||||
import com.craftaro.ultimatestacker.UltimateStacker;
|
||||
import com.craftaro.ultimatestacker.api.stack.spawner.SpawnerStack;
|
||||
import com.craftaro.ultimatestacker.api.stack.spawner.SpawnerStackManager;
|
||||
import com.songoda.core.database.Data;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class SpawnerStackManagerImpl implements SpawnerStackManager {
|
||||
@ -16,8 +18,10 @@ public class SpawnerStackManagerImpl implements SpawnerStackManager {
|
||||
private final Map<Location, SpawnerStack> registeredSpawners = new HashMap<>();
|
||||
|
||||
@Override
|
||||
public void addSpawners(Map<Location, SpawnerStack> spawners) {
|
||||
this.registeredSpawners.putAll(spawners);
|
||||
public void addSpawners(List<SpawnerStack> spawners) {
|
||||
for (SpawnerStack spawner : spawners) {
|
||||
this.registeredSpawners.put(roundLocation(spawner.getLocation()), spawner);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -35,7 +39,7 @@ public class SpawnerStackManagerImpl implements SpawnerStackManager {
|
||||
public SpawnerStack getSpawner(Location location) {
|
||||
if (!this.registeredSpawners.containsKey(roundLocation(location))) {
|
||||
SpawnerStack spawnerStack = addSpawner(new SpawnerStackImpl(roundLocation(location), 1));
|
||||
UltimateStacker.getInstance().getDataManager().createSpawner(spawnerStack);
|
||||
UltimateStacker.getInstance().getPluginDataManager().save(spawnerStack);
|
||||
return spawnerStack;
|
||||
}
|
||||
return this.registeredSpawners.get(location);
|
||||
@ -56,6 +60,11 @@ public class SpawnerStackManagerImpl implements SpawnerStackManager {
|
||||
return Collections.unmodifiableCollection(this.registeredSpawners.values());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Data> getStacksData() {
|
||||
return Collections.unmodifiableCollection(this.registeredSpawners.values());
|
||||
}
|
||||
|
||||
private Location roundLocation(Location location) {
|
||||
location = location.clone();
|
||||
location.setX(location.getBlockX());
|
||||
|
@ -3,8 +3,8 @@ description: UltimateStacker
|
||||
version: maven-version-number
|
||||
softdepend: [MythicMobs, HolographicDisplays, Holograms, DecentHolograms, CMI, WorldGuard, EpicSpawners, mcMMO, WildStacker, StackMob, BentoBox, ViaVersion]
|
||||
loadbefore: [WorldGuard]
|
||||
main: com.songoda.ultimatestacker.UltimateStacker
|
||||
author: songoda
|
||||
main: com.craftaro.ultimatestacker.UltimateStacker
|
||||
author: craftaro
|
||||
api-version: 1.13
|
||||
commands:
|
||||
us:
|
||||
|
@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.craftaro</groupId>
|
||||
<artifactId>UltimateStackerParent</artifactId>
|
||||
<version>${revision}</version>
|
||||
<version>3.0.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>UltimateStackerAPI</artifactId>
|
||||
@ -37,6 +37,15 @@
|
||||
</goals>
|
||||
<configuration>
|
||||
<createDependencyReducedPom>false</createDependencyReducedPom>
|
||||
<filters>
|
||||
<filter>
|
||||
<artifact>com.songoda:SongodaCore</artifact>
|
||||
<excludeDefaults>false</excludeDefaults>
|
||||
<includes>
|
||||
<include>**/nms/v*/**</include>
|
||||
</includes>
|
||||
</filter>
|
||||
</filters>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
@ -72,7 +81,7 @@
|
||||
<dependency>
|
||||
<groupId>com.songoda</groupId>
|
||||
<artifactId>SongodaCore</artifactId>
|
||||
<version>2.6.22</version>
|
||||
<version>2.6.23-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
|
@ -0,0 +1,11 @@
|
||||
package com.craftaro.ultimatestacker.api;
|
||||
|
||||
public interface Settings {
|
||||
|
||||
/**
|
||||
* @return The maximum size of a StackedItem
|
||||
*/
|
||||
int getMaxItemStackSize();
|
||||
|
||||
|
||||
}
|
@ -4,23 +4,29 @@ import com.craftaro.ultimatestacker.api.stack.block.BlockStackManager;
|
||||
import com.craftaro.ultimatestacker.api.stack.entity.EntityStackManager;
|
||||
import com.craftaro.ultimatestacker.api.stack.item.StackedItemManager;
|
||||
import com.craftaro.ultimatestacker.api.stack.spawner.SpawnerStackManager;
|
||||
import com.songoda.core.hooks.stackers.UltimateStacker;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
public final class UltimateStackerAPI {
|
||||
|
||||
private static Plugin plugin;
|
||||
private static EntityStackManager entityStackManager;
|
||||
private static StackedItemManager stackedItemManager;
|
||||
private static SpawnerStackManager spawnerStackManager;
|
||||
private static BlockStackManager blockStackManager;
|
||||
private static Settings settings;
|
||||
private static UltimateStackerAPI instance;
|
||||
|
||||
public UltimateStackerAPI(EntityStackManager entityStackManager, StackedItemManager itemStackManager, SpawnerStackManager spawnerStackManager, BlockStackManager blockStackManager) {
|
||||
if (UltimateStackerAPI.entityStackManager != null || UltimateStackerAPI.stackedItemManager != null || UltimateStackerAPI.spawnerStackManager != null || UltimateStackerAPI.blockStackManager != null) {
|
||||
public UltimateStackerAPI(Plugin plugin, EntityStackManager entityStackManager, StackedItemManager itemStackManager, SpawnerStackManager spawnerStackManager, BlockStackManager blockStackManager, Settings settings) {
|
||||
if (UltimateStackerAPI.plugin != null || UltimateStackerAPI.entityStackManager != null || UltimateStackerAPI.stackedItemManager != null || UltimateStackerAPI.spawnerStackManager != null || UltimateStackerAPI.blockStackManager != null || UltimateStackerAPI.settings != null) {
|
||||
throw new IllegalStateException("UltimateStackerAPI has already been initialized!");
|
||||
}
|
||||
UltimateStackerAPI.plugin = plugin;
|
||||
UltimateStackerAPI.entityStackManager = entityStackManager;
|
||||
UltimateStackerAPI.stackedItemManager = itemStackManager;
|
||||
UltimateStackerAPI.spawnerStackManager = spawnerStackManager;
|
||||
UltimateStackerAPI.blockStackManager = blockStackManager;
|
||||
UltimateStackerAPI.settings = settings;
|
||||
instance = this;
|
||||
}
|
||||
|
||||
@ -28,6 +34,14 @@ public final class UltimateStackerAPI {
|
||||
return instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to interact with the plugin
|
||||
* @return The plugin
|
||||
*/
|
||||
public static Plugin getPlugin() {
|
||||
return plugin;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to interact with EntityStacks
|
||||
* @return The EntityStackManager
|
||||
@ -60,4 +74,12 @@ public final class UltimateStackerAPI {
|
||||
return blockStackManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to interact with the plugin's settings
|
||||
* @return The Settings
|
||||
*/
|
||||
public static Settings getSettings() {
|
||||
return settings;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3,8 +3,9 @@ package com.craftaro.ultimatestacker.api.stack.block;
|
||||
import com.craftaro.ultimatestacker.api.utils.Hologramable;
|
||||
import com.craftaro.ultimatestacker.api.utils.Stackable;
|
||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||
import com.songoda.core.database.Data;
|
||||
|
||||
public interface BlockStack extends Stackable, Hologramable {
|
||||
public interface BlockStack extends Stackable, Hologramable, Data {
|
||||
|
||||
|
||||
int getId();
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.craftaro.ultimatestacker.api.stack.block;
|
||||
|
||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||
import com.songoda.core.database.Data;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
@ -29,6 +30,8 @@ public interface BlockStackManager {
|
||||
|
||||
Collection<BlockStack> getStacks();
|
||||
|
||||
Collection<Data> getStacksData();
|
||||
|
||||
/**
|
||||
* Check to see if this material is not permitted to stack
|
||||
*
|
||||
|
@ -7,6 +7,8 @@ import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
|
||||
public interface StackedItemManager {
|
||||
|
||||
@ -42,6 +44,23 @@ public interface StackedItemManager {
|
||||
*/
|
||||
@Nullable StackedItem createStack(Item item, int amount);
|
||||
|
||||
/**
|
||||
* Create a new StackedItem for the given item in the main thread
|
||||
* @param item The ItemStack to create the stack for
|
||||
* @param amount The amount of items in the stack
|
||||
* @param location The location to spawn the stack
|
||||
* @return The StackedItem for the given Item or null if it could not be created
|
||||
*/
|
||||
@Nullable Future<StackedItem> createStackSync(ItemStack item, Location location, int amount);
|
||||
|
||||
/**
|
||||
* Create a new StackedItem for the given item in the main thread
|
||||
* @param item The item to create the stack for
|
||||
* @param amount The amount of items in the stack
|
||||
* @return The StackedItem for the given Item or null if it could not be created
|
||||
*/
|
||||
@Nullable Future<StackedItem> createStackSync(Item item, int amount);
|
||||
|
||||
/**
|
||||
* Get the actual amount of the given item
|
||||
* @param item item to check
|
||||
|
@ -3,6 +3,7 @@ package com.craftaro.ultimatestacker.api.stack.spawner;
|
||||
import com.craftaro.ultimatestacker.api.utils.Hologramable;
|
||||
import com.craftaro.ultimatestacker.api.utils.Stackable;
|
||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||
import com.songoda.core.database.Data;
|
||||
import com.songoda.core.nms.world.SpawnedEntity;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
@ -10,7 +11,7 @@ import org.bukkit.entity.EntityType;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public interface SpawnerStack extends Stackable, Hologramable {
|
||||
public interface SpawnerStack extends Stackable, Hologramable, Data {
|
||||
|
||||
int getAmount();
|
||||
|
||||
|
@ -1,13 +1,15 @@
|
||||
package com.craftaro.ultimatestacker.api.stack.spawner;
|
||||
|
||||
import com.songoda.core.database.Data;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface SpawnerStackManager {
|
||||
void addSpawners(Map<Location, SpawnerStack> spawners);
|
||||
void addSpawners(List<SpawnerStack> spawners);
|
||||
|
||||
SpawnerStack addSpawner(SpawnerStack spawnerStack);
|
||||
|
||||
@ -20,4 +22,6 @@ public interface SpawnerStackManager {
|
||||
SpawnerStack removeSpawner(Location location);
|
||||
|
||||
Collection<SpawnerStack> getStacks();
|
||||
|
||||
Collection<Data> getStacksData();
|
||||
}
|
||||
|
@ -1,4 +0,0 @@
|
||||
name: UltimateStackerAPI
|
||||
version: '${project.version}'
|
||||
main: com.craftaro.ultimatestacker.api.UltimateStackerAPI
|
||||
api-version: 1.18
|
5
pom.xml
5
pom.xml
@ -2,7 +2,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.craftaro</groupId>
|
||||
<artifactId>UltimateStackerParent</artifactId>
|
||||
<version>${revision}</version>
|
||||
<version>3.0.0-SNAPSHOT</version>
|
||||
|
||||
<packaging>pom</packaging>
|
||||
|
||||
@ -13,10 +13,9 @@
|
||||
</modules>
|
||||
|
||||
<properties>
|
||||
<revision>3.0.0-SNAPSHOT</revision>
|
||||
<java.version>1.8</java.version>
|
||||
<java.release>8</java.release>
|
||||
|
||||
<core.version>2.6.23-SNAPSHOT</core.version>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user