mirror of
https://github.com/songoda/UltimateStacker.git
synced 2024-09-28 22:47:49 +02:00
Merge branch 'development'
This commit is contained in:
commit
a787c3e13f
2
pom.xml
2
pom.xml
@ -2,7 +2,7 @@
|
|||||||
<groupId>com.songoda</groupId>
|
<groupId>com.songoda</groupId>
|
||||||
<artifactId>UltimateStacker</artifactId>
|
<artifactId>UltimateStacker</artifactId>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<version>2.0.4</version>
|
<version>2.0.5</version>
|
||||||
<build>
|
<build>
|
||||||
<defaultGoal>clean install</defaultGoal>
|
<defaultGoal>clean install</defaultGoal>
|
||||||
<finalName>UltimateStacker-${project.version}</finalName>
|
<finalName>UltimateStacker-${project.version}</finalName>
|
||||||
|
@ -14,7 +14,13 @@ import com.songoda.core.gui.GuiManager;
|
|||||||
import com.songoda.core.hooks.HologramManager;
|
import com.songoda.core.hooks.HologramManager;
|
||||||
import com.songoda.core.hooks.WorldGuardHook;
|
import com.songoda.core.hooks.WorldGuardHook;
|
||||||
import com.songoda.core.utils.TextUtils;
|
import com.songoda.core.utils.TextUtils;
|
||||||
import com.songoda.ultimatestacker.commands.*;
|
import com.songoda.ultimatestacker.commands.CommandConvert;
|
||||||
|
import com.songoda.ultimatestacker.commands.CommandGiveSpawner;
|
||||||
|
import com.songoda.ultimatestacker.commands.CommandLootables;
|
||||||
|
import com.songoda.ultimatestacker.commands.CommandReload;
|
||||||
|
import com.songoda.ultimatestacker.commands.CommandRemoveAll;
|
||||||
|
import com.songoda.ultimatestacker.commands.CommandSettings;
|
||||||
|
import com.songoda.ultimatestacker.commands.CommandSpawn;
|
||||||
import com.songoda.ultimatestacker.database.DataManager;
|
import com.songoda.ultimatestacker.database.DataManager;
|
||||||
import com.songoda.ultimatestacker.database.migrations._1_InitialMigration;
|
import com.songoda.ultimatestacker.database.migrations._1_InitialMigration;
|
||||||
import com.songoda.ultimatestacker.database.migrations._2_EntityStacks;
|
import com.songoda.ultimatestacker.database.migrations._2_EntityStacks;
|
||||||
@ -34,14 +40,10 @@ import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
|||||||
import com.songoda.ultimatestacker.stackable.entity.EntityStackManager;
|
import com.songoda.ultimatestacker.stackable.entity.EntityStackManager;
|
||||||
import com.songoda.ultimatestacker.stackable.spawner.SpawnerStack;
|
import com.songoda.ultimatestacker.stackable.spawner.SpawnerStack;
|
||||||
import com.songoda.ultimatestacker.stackable.spawner.SpawnerStackManager;
|
import com.songoda.ultimatestacker.stackable.spawner.SpawnerStackManager;
|
||||||
import com.songoda.ultimatestacker.storage.Storage;
|
|
||||||
import com.songoda.ultimatestacker.storage.StorageRow;
|
|
||||||
import com.songoda.ultimatestacker.storage.types.StorageYaml;
|
|
||||||
import com.songoda.ultimatestacker.tasks.StackingTask;
|
import com.songoda.ultimatestacker.tasks.StackingTask;
|
||||||
import com.songoda.ultimatestacker.utils.Methods;
|
import com.songoda.ultimatestacker.utils.Methods;
|
||||||
import org.apache.commons.lang.WordUtils;
|
import org.apache.commons.lang.WordUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Item;
|
import org.bukkit.entity.Item;
|
||||||
@ -50,8 +52,11 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import org.bukkit.metadata.FixedMetadataValue;
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
|
|
||||||
import java.io.File;
|
import java.util.ArrayList;
|
||||||
import java.util.*;
|
import java.util.Arrays;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public class UltimateStacker extends SongodaPlugin {
|
public class UltimateStacker extends SongodaPlugin {
|
||||||
|
|
||||||
@ -110,13 +115,13 @@ public class UltimateStacker extends SongodaPlugin {
|
|||||||
// Setup plugin commands
|
// Setup plugin commands
|
||||||
this.commandManager = new CommandManager(this);
|
this.commandManager = new CommandManager(this);
|
||||||
this.commandManager.addMainCommand("us")
|
this.commandManager.addMainCommand("us")
|
||||||
.addSubCommands(new CommandSettings(guiManager),
|
.addSubCommands(new CommandSettings(this, guiManager),
|
||||||
new CommandRemoveAll(),
|
new CommandRemoveAll(this),
|
||||||
new CommandReload(),
|
new CommandReload(this),
|
||||||
new CommandGiveSpawner(),
|
new CommandGiveSpawner(this),
|
||||||
new CommandSpawn(),
|
new CommandSpawn(this),
|
||||||
new CommandLootables(),
|
new CommandLootables(this),
|
||||||
new CommandConvert(guiManager)
|
new CommandConvert( guiManager)
|
||||||
);
|
);
|
||||||
|
|
||||||
this.lootablesManager = new LootablesManager();
|
this.lootablesManager = new LootablesManager();
|
||||||
@ -215,31 +220,6 @@ public class UltimateStacker extends SongodaPlugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDataLoad() {
|
public void onDataLoad() {
|
||||||
// Legacy Data
|
|
||||||
File folder = getDataFolder();
|
|
||||||
File dataFile = new File(folder, "data.yml");
|
|
||||||
|
|
||||||
if (dataFile.exists()) {
|
|
||||||
Storage storage = new StorageYaml(this);
|
|
||||||
if (storage.containsGroup("spawners")) {
|
|
||||||
for (StorageRow row : storage.getRowsByGroup("spawners")) {
|
|
||||||
try {
|
|
||||||
Location location = Methods.unserializeLocation(row.getKey());
|
|
||||||
|
|
||||||
SpawnerStack stack = new SpawnerStack(
|
|
||||||
location,
|
|
||||||
row.get("amount").asInt());
|
|
||||||
|
|
||||||
getDataManager().createSpawner(stack);
|
|
||||||
} catch (Exception e) {
|
|
||||||
console.sendMessage("Failed to load spawner.");
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dataFile.delete();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load current data.
|
// Load current data.
|
||||||
final boolean useSpawnerHolo = Settings.SPAWNER_HOLOGRAMS.getBoolean();
|
final boolean useSpawnerHolo = Settings.SPAWNER_HOLOGRAMS.getBoolean();
|
||||||
this.dataManager.getSpawners((spawners) -> {
|
this.dataManager.getSpawners((spawners) -> {
|
||||||
@ -258,7 +238,7 @@ public class UltimateStacker extends SongodaPlugin {
|
|||||||
entityStackManager.addStacks(entities.values());
|
entityStackManager.addStacks(entities.values());
|
||||||
entityStackManager.tryAndLoadColdEntities();
|
entityStackManager.tryAndLoadColdEntities();
|
||||||
this.stackingTask = new StackingTask(this);
|
this.stackingTask = new StackingTask(this);
|
||||||
getServer().getPluginManager().registerEvents(new ChunkListeners(this), this);
|
getServer().getPluginManager().registerEvents(new ChunkListeners(entityStackManager), this);
|
||||||
});
|
});
|
||||||
final boolean useBlockHolo = Settings.SPAWNER_HOLOGRAMS.getBoolean();
|
final boolean useBlockHolo = Settings.SPAWNER_HOLOGRAMS.getBoolean();
|
||||||
this.dataManager.getBlocks((blocks) -> {
|
this.dataManager.getBlocks((blocks) -> {
|
||||||
|
@ -2,7 +2,6 @@ package com.songoda.ultimatestacker.commands;
|
|||||||
|
|
||||||
import com.songoda.core.commands.AbstractCommand;
|
import com.songoda.core.commands.AbstractCommand;
|
||||||
import com.songoda.core.gui.GuiManager;
|
import com.songoda.core.gui.GuiManager;
|
||||||
import com.songoda.ultimatestacker.UltimateStacker;
|
|
||||||
import com.songoda.ultimatestacker.gui.GUIConvert;
|
import com.songoda.ultimatestacker.gui.GUIConvert;
|
||||||
import com.songoda.ultimatestacker.utils.Methods;
|
import com.songoda.ultimatestacker.utils.Methods;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -13,13 +12,11 @@ import java.util.List;
|
|||||||
|
|
||||||
public class CommandConvert extends AbstractCommand {
|
public class CommandConvert extends AbstractCommand {
|
||||||
|
|
||||||
UltimateStacker instance;
|
private final GuiManager guiManager;
|
||||||
GuiManager guiManager;
|
|
||||||
|
|
||||||
public CommandConvert(GuiManager guiManager) {
|
public CommandConvert(GuiManager guiManager) {
|
||||||
super(true, "convert");
|
super(CommandType.PLAYER_ONLY, "convert");
|
||||||
this.guiManager = guiManager;
|
this.guiManager = guiManager;
|
||||||
instance = UltimateStacker.getInstance();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -16,18 +16,18 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
public class CommandGiveSpawner extends AbstractCommand {
|
public class CommandGiveSpawner extends AbstractCommand {
|
||||||
|
|
||||||
UltimateStacker instance;
|
private final UltimateStacker plugin;
|
||||||
|
|
||||||
public CommandGiveSpawner() {
|
public CommandGiveSpawner(UltimateStacker plugin) {
|
||||||
super(false, "givespawner");
|
super(CommandType.CONSOLE_OK, "givespawner");
|
||||||
instance = UltimateStacker.getInstance();
|
this.plugin = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ReturnType runCommand(CommandSender sender, String... args) {
|
protected ReturnType runCommand(CommandSender sender, String... args) {
|
||||||
if (args.length < 2) return ReturnType.SYNTAX_ERROR;
|
if (args.length < 2) return ReturnType.SYNTAX_ERROR;
|
||||||
|
|
||||||
if (Bukkit.getPlayer(args[0]) == null && !args[0].trim().toLowerCase().equals("all")) {
|
if (Bukkit.getPlayer(args[0]) == null && !args[0].trim().equalsIgnoreCase("all")) {
|
||||||
sender.sendMessage(args[0] + " is not a player...");
|
sender.sendMessage(args[0] + " is not a player...");
|
||||||
return ReturnType.SYNTAX_ERROR;
|
return ReturnType.SYNTAX_ERROR;
|
||||||
}
|
}
|
||||||
@ -41,7 +41,7 @@ public class CommandGiveSpawner extends AbstractCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (type == null) {
|
if (type == null) {
|
||||||
instance.getLocale().newMessage("&7The entity StackType &6" + args[1] + " &7does not exist. Try one of these:").sendPrefixedMessage(sender);
|
plugin.getLocale().newMessage("&7The entity StackType &6" + args[1] + " &7does not exist. Try one of these:").sendPrefixedMessage(sender);
|
||||||
StringBuilder list = new StringBuilder();
|
StringBuilder list = new StringBuilder();
|
||||||
|
|
||||||
for (EntityType types : EntityType.values()) {
|
for (EntityType types : EntityType.values()) {
|
||||||
@ -53,16 +53,16 @@ public class CommandGiveSpawner extends AbstractCommand {
|
|||||||
|
|
||||||
int amt = args.length == 3 ? Integer.parseInt(args[2]) : 1;
|
int amt = args.length == 3 ? Integer.parseInt(args[2]) : 1;
|
||||||
ItemStack itemStack = Methods.getSpawnerItem(type, amt);
|
ItemStack itemStack = Methods.getSpawnerItem(type, amt);
|
||||||
if (!args[0].trim().toLowerCase().equals("all")) {
|
if (!args[0].trim().equalsIgnoreCase("all")) {
|
||||||
Player player = Bukkit.getOfflinePlayer(args[0]).getPlayer();
|
Player player = Bukkit.getOfflinePlayer(args[0]).getPlayer();
|
||||||
player.getInventory().addItem(itemStack);
|
player.getInventory().addItem(itemStack);
|
||||||
instance.getLocale().getMessage("command.give.success")
|
plugin.getLocale().getMessage("command.give.success")
|
||||||
.processPlaceholder("type", Methods.compileSpawnerName(type, amt))
|
.processPlaceholder("type", Methods.compileSpawnerName(type, amt))
|
||||||
.sendPrefixedMessage(player);
|
.sendPrefixedMessage(player);
|
||||||
} else {
|
} else {
|
||||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
player.getInventory().addItem(itemStack);
|
player.getInventory().addItem(itemStack);
|
||||||
instance.getLocale().getMessage("command.give.success")
|
plugin.getLocale().getMessage("command.give.success")
|
||||||
.processPlaceholder("type", Methods.compileSpawnerName(type, amt))
|
.processPlaceholder("type", Methods.compileSpawnerName(type, amt))
|
||||||
.sendPrefixedMessage(player);
|
.sendPrefixedMessage(player);
|
||||||
}
|
}
|
||||||
|
@ -10,17 +10,17 @@ import java.util.List;
|
|||||||
|
|
||||||
public class CommandLootables extends AbstractCommand {
|
public class CommandLootables extends AbstractCommand {
|
||||||
|
|
||||||
UltimateStacker instance;
|
private final UltimateStacker plugin;
|
||||||
|
|
||||||
public CommandLootables() {
|
public CommandLootables(UltimateStacker plugin) {
|
||||||
super(true, "lootables");
|
super(CommandType.PLAYER_ONLY, "lootables");
|
||||||
instance = UltimateStacker.getInstance();
|
this.plugin = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ReturnType runCommand(CommandSender sender, String... args) {
|
protected ReturnType runCommand(CommandSender sender, String... args) {
|
||||||
Player p = (Player) sender;
|
Player p = (Player) sender;
|
||||||
instance.getGuiManager().showGUI(p, new GuiEditor(instance.getLootablesManager().getLootManager()));
|
plugin.getGuiManager().showGUI(p, new GuiEditor(plugin.getLootablesManager().getLootManager()));
|
||||||
return ReturnType.SUCCESS;
|
return ReturnType.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,17 +8,17 @@ import java.util.List;
|
|||||||
|
|
||||||
public class CommandReload extends AbstractCommand {
|
public class CommandReload extends AbstractCommand {
|
||||||
|
|
||||||
UltimateStacker instance;
|
private final UltimateStacker plugin;
|
||||||
|
|
||||||
public CommandReload() {
|
public CommandReload(UltimateStacker plugin) {
|
||||||
super(false, "reload");
|
super(CommandType.CONSOLE_OK, "reload");
|
||||||
instance = UltimateStacker.getInstance();
|
this.plugin = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ReturnType runCommand(CommandSender sender, String... args) {
|
protected ReturnType runCommand(CommandSender sender, String... args) {
|
||||||
instance.reloadConfig();
|
plugin.reloadConfig();
|
||||||
instance.getLocale().getMessage("&7Configuration and Language files reloaded.").sendPrefixedMessage(sender);
|
plugin.getLocale().getMessage("&7Configuration and Language files reloaded.").sendPrefixedMessage(sender);
|
||||||
return ReturnType.SUCCESS;
|
return ReturnType.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,11 +19,11 @@ import java.util.List;
|
|||||||
|
|
||||||
public class CommandRemoveAll extends AbstractCommand {
|
public class CommandRemoveAll extends AbstractCommand {
|
||||||
|
|
||||||
UltimateStacker instance;
|
private final UltimateStacker plugin;
|
||||||
|
|
||||||
public CommandRemoveAll() {
|
public CommandRemoveAll(UltimateStacker plugin) {
|
||||||
super(false, "removeall");
|
super(CommandType.CONSOLE_OK, "removeall");
|
||||||
instance = UltimateStacker.getInstance();
|
this.plugin = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -40,7 +40,7 @@ public class CommandRemoveAll extends AbstractCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int amountRemoved = 0;
|
int amountRemoved = 0;
|
||||||
EntityStackManager stackManager = instance.getEntityStackManager();
|
EntityStackManager stackManager = plugin.getEntityStackManager();
|
||||||
for (World world : Bukkit.getWorlds()) {
|
for (World world : Bukkit.getWorlds()) {
|
||||||
for (Entity entityO : world.getEntities()) {
|
for (Entity entityO : world.getEntities()) {
|
||||||
if (entityO instanceof Player || !(entityO instanceof LivingEntity)) continue;
|
if (entityO instanceof Player || !(entityO instanceof LivingEntity)) continue;
|
||||||
@ -61,10 +61,10 @@ public class CommandRemoveAll extends AbstractCommand {
|
|||||||
if (type.equalsIgnoreCase("items") && amountRemoved == 1) type = "Item";
|
if (type.equalsIgnoreCase("items") && amountRemoved == 1) type = "Item";
|
||||||
|
|
||||||
if (amountRemoved == 0) {
|
if (amountRemoved == 0) {
|
||||||
instance.getLocale().newMessage("&7No" + (all ? " " : " stacked ")
|
plugin.getLocale().newMessage("&7No" + (all ? " " : " stacked ")
|
||||||
+ type + " exist that could be removed.").sendPrefixedMessage(sender);
|
+ type + " exist that could be removed.").sendPrefixedMessage(sender);
|
||||||
} else {
|
} else {
|
||||||
instance.getLocale().newMessage("&7Removed &6" + amountRemoved + (all ? " " : " stacked ")
|
plugin.getLocale().newMessage("&7Removed &6" + amountRemoved + (all ? " " : " stacked ")
|
||||||
+ Methods.formatText(type.toLowerCase(), true) + " &7Successfully.").sendPrefixedMessage(sender);
|
+ Methods.formatText(type.toLowerCase(), true) + " &7Successfully.").sendPrefixedMessage(sender);
|
||||||
}
|
}
|
||||||
return ReturnType.SUCCESS;
|
return ReturnType.SUCCESS;
|
||||||
|
@ -12,18 +12,18 @@ import java.util.List;
|
|||||||
|
|
||||||
public class CommandSettings extends AbstractCommand {
|
public class CommandSettings extends AbstractCommand {
|
||||||
|
|
||||||
UltimateStacker instance;
|
private final UltimateStacker plugin;
|
||||||
GuiManager guiManager;
|
private final GuiManager guiManager;
|
||||||
|
|
||||||
public CommandSettings(GuiManager guiManager) {
|
public CommandSettings(UltimateStacker plugin, GuiManager guiManager) {
|
||||||
super(CommandType.PLAYER_ONLY, "Settings");
|
super(CommandType.PLAYER_ONLY, "Settings");
|
||||||
this.guiManager = guiManager;
|
this.guiManager = guiManager;
|
||||||
instance = UltimateStacker.getInstance();
|
this.plugin = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ReturnType runCommand(CommandSender sender, String... args) {
|
protected ReturnType runCommand(CommandSender sender, String... args) {
|
||||||
guiManager.showGUI((Player) sender, new PluginConfigGui(instance));
|
guiManager.showGUI((Player) sender, new PluginConfigGui(plugin));
|
||||||
return ReturnType.SUCCESS;
|
return ReturnType.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,11 +22,11 @@ import java.util.stream.Collectors;
|
|||||||
*/
|
*/
|
||||||
public class CommandSpawn extends AbstractCommand {
|
public class CommandSpawn extends AbstractCommand {
|
||||||
|
|
||||||
UltimateStacker instance;
|
private final UltimateStacker plugin;
|
||||||
|
|
||||||
public CommandSpawn() {
|
public CommandSpawn(UltimateStacker plugin) {
|
||||||
super(true, "spawn");
|
super(CommandType.PLAYER_ONLY, "spawn");
|
||||||
instance = UltimateStacker.getInstance();
|
this.plugin = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -44,7 +44,7 @@ public class CommandSpawn extends AbstractCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (type == null) {
|
if (type == null) {
|
||||||
instance.getLocale().newMessage("&7The entity &6" + args[0] + " &7does not exist. Try one of these:").sendPrefixedMessage(sender);
|
plugin.getLocale().newMessage("&7The entity &6" + args[0] + " &7does not exist. Try one of these:").sendPrefixedMessage(sender);
|
||||||
StringBuilder list = new StringBuilder();
|
StringBuilder list = new StringBuilder();
|
||||||
|
|
||||||
for (EntityType types : EntityType.values()) {
|
for (EntityType types : EntityType.values()) {
|
||||||
@ -54,10 +54,10 @@ public class CommandSpawn extends AbstractCommand {
|
|||||||
sender.sendMessage(Methods.formatText("&6" + list));
|
sender.sendMessage(Methods.formatText("&6" + list));
|
||||||
} else {
|
} else {
|
||||||
LivingEntity entity = (LivingEntity)player.getWorld().spawnEntity(player.getTargetBlock((Set<Material>)null, 200).getLocation(), type);
|
LivingEntity entity = (LivingEntity)player.getWorld().spawnEntity(player.getTargetBlock((Set<Material>)null, 200).getLocation(), type);
|
||||||
EntityStack stack = instance.getEntityStackManager().addStack(entity);
|
EntityStack stack = plugin.getEntityStackManager().addStack(entity);
|
||||||
stack.createDuplicates(((Methods.isInt(args[1])) ? Integer.parseInt(args[1]) : 1) - 1);
|
stack.createDuplicates(((Methods.isInt(args[1])) ? Integer.parseInt(args[1]) : 1) - 1);
|
||||||
stack.updateStack();
|
stack.updateStack();
|
||||||
instance.getStackingTask().attemptSplit(stack, entity);
|
plugin.getStackingTask().attemptSplit(stack, entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ReturnType.SUCCESS;
|
return ReturnType.SUCCESS;
|
||||||
|
@ -16,7 +16,11 @@ import org.bukkit.plugin.Plugin;
|
|||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.Statement;
|
import java.sql.Statement;
|
||||||
import java.util.*;
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
public class DataManager extends DataManagerAbstract {
|
public class DataManager extends DataManagerAbstract {
|
||||||
|
@ -11,7 +11,7 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
public class GUIConvertWhat extends Gui {
|
public class GUIConvertWhat extends Gui {
|
||||||
|
|
||||||
private Convert convertFrom = null;
|
private Convert convertFrom;
|
||||||
|
|
||||||
private boolean entities = true;
|
private boolean entities = true;
|
||||||
private boolean spawners = true;
|
private boolean spawners = true;
|
||||||
@ -41,17 +41,17 @@ public class GUIConvertWhat extends Gui {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void toggleEntities() {
|
private void toggleEntities() {
|
||||||
entities = !entities;
|
entities = !entities;
|
||||||
this.updateItem(0, ChatColor.GRAY + "Stacked Entities", entities ? ChatColor.GREEN + "Yes" : ChatColor.RED + "No");
|
this.updateItem(0, ChatColor.GRAY + "Stacked Entities", entities ? ChatColor.GREEN + "Yes" : ChatColor.RED + "No");
|
||||||
}
|
}
|
||||||
|
|
||||||
void toggleSpawners() {
|
private void toggleSpawners() {
|
||||||
spawners = !spawners;
|
spawners = !spawners;
|
||||||
this.updateItem(1, ChatColor.GRAY + "Stacked Spawners", spawners ? ChatColor.GREEN + "Yes" : ChatColor.RED + "No");
|
this.updateItem(1, ChatColor.GRAY + "Stacked Spawners", spawners ? ChatColor.GREEN + "Yes" : ChatColor.RED + "No");
|
||||||
}
|
}
|
||||||
|
|
||||||
void run(Player player) {
|
private void run(Player player) {
|
||||||
if (entities) {
|
if (entities) {
|
||||||
convertFrom.convertEntities();
|
convertFrom.convertEntities();
|
||||||
UltimateStacker.getInstance().getEntityStackManager().tryAndLoadColdEntities();
|
UltimateStacker.getInstance().getEntityStackManager().tryAndLoadColdEntities();
|
||||||
|
@ -4,8 +4,8 @@ import com.gamingmesh.jobs.Jobs;
|
|||||||
import com.gamingmesh.jobs.actions.EntityActionInfo;
|
import com.gamingmesh.jobs.actions.EntityActionInfo;
|
||||||
import com.gamingmesh.jobs.container.ActionType;
|
import com.gamingmesh.jobs.container.ActionType;
|
||||||
import com.gamingmesh.jobs.container.JobsPlayer;
|
import com.gamingmesh.jobs.container.JobsPlayer;
|
||||||
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
|
||||||
import com.songoda.ultimatestacker.hook.StackerHook;
|
import com.songoda.ultimatestacker.hook.StackerHook;
|
||||||
|
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
@ -10,21 +10,21 @@ import org.bukkit.metadata.FixedMetadataValue;
|
|||||||
|
|
||||||
public class BreedListeners implements Listener {
|
public class BreedListeners implements Listener {
|
||||||
|
|
||||||
private final UltimateStacker instance;
|
private final UltimateStacker plugin;
|
||||||
|
|
||||||
public BreedListeners(UltimateStacker instance) {
|
public BreedListeners(UltimateStacker plugin) {
|
||||||
this.instance = instance;
|
this.plugin = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
public void onBread(EntityBreedEvent event) {
|
public void onBread(EntityBreedEvent event) {
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> {
|
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
|
||||||
event.getFather().removeMetadata("breedCooldown", instance);
|
event.getFather().removeMetadata("breedCooldown", plugin);
|
||||||
event.getMother().removeMetadata("breedCooldown", instance);
|
event.getMother().removeMetadata("breedCooldown", plugin);
|
||||||
}, 5 * 20 * 60);
|
}, 5 * 20 * 60);
|
||||||
event.getFather().setMetadata("breedCooldown", new FixedMetadataValue(instance, true));
|
event.getFather().setMetadata("breedCooldown", new FixedMetadataValue(plugin, true));
|
||||||
event.getFather().removeMetadata("inLove", instance);
|
event.getFather().removeMetadata("inLove", plugin);
|
||||||
event.getMother().setMetadata("breedCooldown", new FixedMetadataValue(instance, true));
|
event.getMother().setMetadata("breedCooldown", new FixedMetadataValue(plugin, true));
|
||||||
event.getMother().removeMetadata("inLove", instance);
|
event.getMother().removeMetadata("inLove", plugin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.songoda.ultimatestacker.listeners;
|
package com.songoda.ultimatestacker.listeners;
|
||||||
|
|
||||||
import com.songoda.ultimatestacker.UltimateStacker;
|
|
||||||
import com.songoda.ultimatestacker.stackable.entity.EntityStackManager;
|
import com.songoda.ultimatestacker.stackable.entity.EntityStackManager;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
@ -14,8 +13,8 @@ public class ChunkListeners implements Listener {
|
|||||||
|
|
||||||
private final EntityStackManager entityStackManager;
|
private final EntityStackManager entityStackManager;
|
||||||
|
|
||||||
public ChunkListeners(UltimateStacker plugin) {
|
public ChunkListeners(EntityStackManager entityStackManager) {
|
||||||
this.entityStackManager = plugin.getEntityStackManager();
|
this.entityStackManager = entityStackManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
@ -9,17 +9,17 @@ import org.bukkit.event.Listener;
|
|||||||
|
|
||||||
public class ClearLagListeners implements Listener {
|
public class ClearLagListeners implements Listener {
|
||||||
|
|
||||||
private final UltimateStacker instance;
|
private final UltimateStacker plugin;
|
||||||
|
|
||||||
public ClearLagListeners(UltimateStacker instance) {
|
public ClearLagListeners(UltimateStacker plugin) {
|
||||||
this.instance = instance;
|
this.plugin = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onClearLaggTask(EntityRemoveEvent event) {
|
public void onClearLaggTask(EntityRemoveEvent event) {
|
||||||
for (Entity entity : event.getWorld().getEntities()) {
|
for (Entity entity : event.getWorld().getEntities()) {
|
||||||
if (entity instanceof LivingEntity && instance.getEntityStackManager().isStackedAndLoaded((LivingEntity)entity)) {
|
if (entity instanceof LivingEntity && plugin.getEntityStackManager().isStackedAndLoaded((LivingEntity)entity)) {
|
||||||
instance.getEntityStackManager().removeStack(entity);
|
plugin.getEntityStackManager().removeStack(entity);
|
||||||
event.addEntity(entity);
|
event.addEntity(entity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,8 +5,8 @@ import com.songoda.core.compatibility.ServerVersion;
|
|||||||
import com.songoda.lootables.loot.Drop;
|
import com.songoda.lootables.loot.Drop;
|
||||||
import com.songoda.lootables.loot.DropUtils;
|
import com.songoda.lootables.loot.DropUtils;
|
||||||
import com.songoda.ultimatestacker.UltimateStacker;
|
import com.songoda.ultimatestacker.UltimateStacker;
|
||||||
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
|
||||||
import com.songoda.ultimatestacker.settings.Settings;
|
import com.songoda.ultimatestacker.settings.Settings;
|
||||||
|
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
||||||
import org.bukkit.GameRule;
|
import org.bukkit.GameRule;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
@ -29,12 +29,12 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
public class DeathListeners implements Listener {
|
public class DeathListeners implements Listener {
|
||||||
|
|
||||||
private final UltimateStacker instance;
|
private final UltimateStacker plugin;
|
||||||
private Random random;
|
private final Random random;
|
||||||
|
|
||||||
public DeathListeners(UltimateStacker instance) {
|
public DeathListeners(UltimateStacker plugin) {
|
||||||
this.instance = instance;
|
this.plugin = plugin;
|
||||||
random = new Random();
|
this.random = new Random();
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
@ -43,7 +43,7 @@ public class DeathListeners implements Listener {
|
|||||||
|| event.getEntityType() == EntityType.ARMOR_STAND) return;
|
|| event.getEntityType() == EntityType.ARMOR_STAND) return;
|
||||||
|
|
||||||
boolean custom = Settings.CUSTOM_DROPS.getBoolean();
|
boolean custom = Settings.CUSTOM_DROPS.getBoolean();
|
||||||
List<Drop> drops = custom ? instance.getLootablesManager().getDrops(event.getEntity())
|
List<Drop> drops = custom ? plugin.getLootablesManager().getDrops(event.getEntity())
|
||||||
: event.getDrops().stream().map(Drop::new).collect(Collectors.toList());
|
: event.getDrops().stream().map(Drop::new).collect(Collectors.toList());
|
||||||
|
|
||||||
if (custom) {
|
if (custom) {
|
||||||
@ -57,8 +57,8 @@ public class DeathListeners implements Listener {
|
|||||||
&& !event.getEntity().getWorld().getGameRuleValue(GameRule.DO_MOB_LOOT))
|
&& !event.getEntity().getWorld().getGameRuleValue(GameRule.DO_MOB_LOOT))
|
||||||
drops.clear();
|
drops.clear();
|
||||||
|
|
||||||
if (instance.getEntityStackManager().isStackedAndLoaded(event.getEntity()))
|
if (plugin.getEntityStackManager().isStackedAndLoaded(event.getEntity()))
|
||||||
instance.getEntityStackManager().getStack(event.getEntity())
|
plugin.getEntityStackManager().getStack(event.getEntity())
|
||||||
.onDeath(event.getEntity(), drops, custom, event.getDroppedExp(), event);
|
.onDeath(event.getEntity(), drops, custom, event.getDroppedExp(), event);
|
||||||
else
|
else
|
||||||
DropUtils.processStackedDrop(event.getEntity(), drops, event);
|
DropUtils.processStackedDrop(event.getEntity(), drops, event);
|
||||||
@ -70,15 +70,14 @@ public class DeathListeners implements Listener {
|
|||||||
items.add(entity.getEquipment().getItemInHand());
|
items.add(entity.getEquipment().getItemInHand());
|
||||||
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9))
|
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9))
|
||||||
items.add(entity.getEquipment().getItemInOffHand());
|
items.add(entity.getEquipment().getItemInOffHand());
|
||||||
for (ItemStack item : items) {
|
for (ItemStack item : items)
|
||||||
if (item.getType() == material)
|
if (item.getType() == material)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11)
|
||||||
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11) && entity instanceof ChestedHorse) {
|
&& entity instanceof ChestedHorse
|
||||||
if (((ChestedHorse) entity).getInventory().contains(material))
|
&& ((ChestedHorse) entity).getInventory().contains(material))
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
|
|
||||||
switch (material.name()) {
|
switch (material.name()) {
|
||||||
case "SADDLE":
|
case "SADDLE":
|
||||||
@ -118,8 +117,8 @@ public class DeathListeners implements Listener {
|
|||||||
|
|
||||||
if (!(event.getEntity() instanceof LivingEntity)) return;
|
if (!(event.getEntity() instanceof LivingEntity)) return;
|
||||||
LivingEntity entity = (LivingEntity) event.getEntity();
|
LivingEntity entity = (LivingEntity) event.getEntity();
|
||||||
if (!instance.getEntityStackManager().isStackedAndLoaded(entity)) return;
|
if (!plugin.getEntityStackManager().isStackedAndLoaded(entity)) return;
|
||||||
EntityStack stack = instance.getEntityStackManager().getStack(entity);
|
EntityStack stack = plugin.getEntityStackManager().getStack(entity);
|
||||||
|
|
||||||
if (Settings.KILL_WHOLE_STACK_ON_DEATH.getBoolean() && Settings.REALISTIC_DAMAGE.getBoolean()) {
|
if (Settings.KILL_WHOLE_STACK_ON_DEATH.getBoolean() && Settings.REALISTIC_DAMAGE.getBoolean()) {
|
||||||
Player player = (Player) event.getDamager();
|
Player player = (Player) event.getDamager();
|
||||||
|
@ -13,7 +13,12 @@ import org.bukkit.Material;
|
|||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.CreatureSpawner;
|
import org.bukkit.block.CreatureSpawner;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.entity.*;
|
import org.bukkit.entity.Creeper;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.entity.TNTPrimed;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
@ -3,9 +3,9 @@ package com.songoda.ultimatestacker.listeners;
|
|||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.ServerVersion;
|
import com.songoda.core.compatibility.ServerVersion;
|
||||||
import com.songoda.ultimatestacker.UltimateStacker;
|
import com.songoda.ultimatestacker.UltimateStacker;
|
||||||
|
import com.songoda.ultimatestacker.settings.Settings;
|
||||||
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
||||||
import com.songoda.ultimatestacker.stackable.entity.Split;
|
import com.songoda.ultimatestacker.stackable.entity.Split;
|
||||||
import com.songoda.ultimatestacker.settings.Settings;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.Ageable;
|
import org.bukkit.entity.Ageable;
|
||||||
@ -125,8 +125,9 @@ public class InteractListeners implements Listener {
|
|||||||
return type == Material.HAY_BLOCK;
|
return type == Material.HAY_BLOCK;
|
||||||
case "TURTLE":
|
case "TURTLE":
|
||||||
return type == Material.SEAGRASS;
|
return type == Material.SEAGRASS;
|
||||||
}
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,13 +3,17 @@ package com.songoda.ultimatestacker.listeners;
|
|||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.ServerVersion;
|
import com.songoda.core.compatibility.ServerVersion;
|
||||||
import com.songoda.ultimatestacker.UltimateStacker;
|
import com.songoda.ultimatestacker.UltimateStacker;
|
||||||
|
import com.songoda.ultimatestacker.settings.Settings;
|
||||||
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
||||||
import com.songoda.ultimatestacker.stackable.entity.EntityStackManager;
|
import com.songoda.ultimatestacker.stackable.entity.EntityStackManager;
|
||||||
import com.songoda.ultimatestacker.stackable.entity.Split;
|
import com.songoda.ultimatestacker.stackable.entity.Split;
|
||||||
import com.songoda.ultimatestacker.settings.Settings;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.*;
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.entity.MushroomCow;
|
||||||
|
import org.bukkit.entity.Sheep;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
@ -20,7 +24,7 @@ import java.util.Random;
|
|||||||
|
|
||||||
public class ShearListeners implements Listener {
|
public class ShearListeners implements Listener {
|
||||||
|
|
||||||
private UltimateStacker plugin;
|
private final UltimateStacker plugin;
|
||||||
|
|
||||||
public ShearListeners(UltimateStacker plugin) {
|
public ShearListeners(UltimateStacker plugin) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
package com.songoda.ultimatestacker.listeners;
|
package com.songoda.ultimatestacker.listeners;
|
||||||
|
|
||||||
import com.songoda.ultimatestacker.UltimateStacker;
|
import com.songoda.ultimatestacker.UltimateStacker;
|
||||||
|
import com.songoda.ultimatestacker.settings.Settings;
|
||||||
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
||||||
import com.songoda.ultimatestacker.stackable.entity.EntityStackManager;
|
import com.songoda.ultimatestacker.stackable.entity.EntityStackManager;
|
||||||
import com.songoda.ultimatestacker.stackable.entity.Split;
|
import com.songoda.ultimatestacker.stackable.entity.Split;
|
||||||
import com.songoda.ultimatestacker.settings.Settings;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.*;
|
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
@ -13,7 +13,7 @@ import org.bukkit.event.entity.SheepDyeWoolEvent;
|
|||||||
|
|
||||||
public class SheepDyeListeners implements Listener {
|
public class SheepDyeListeners implements Listener {
|
||||||
|
|
||||||
private UltimateStacker plugin;
|
private final UltimateStacker plugin;
|
||||||
|
|
||||||
public SheepDyeListeners(UltimateStacker plugin) {
|
public SheepDyeListeners(UltimateStacker plugin) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
|
@ -3,12 +3,12 @@ package com.songoda.ultimatestacker.listeners;
|
|||||||
import com.songoda.core.compatibility.ServerVersion;
|
import com.songoda.core.compatibility.ServerVersion;
|
||||||
import com.songoda.core.nms.NmsManager;
|
import com.songoda.core.nms.NmsManager;
|
||||||
import com.songoda.ultimatestacker.UltimateStacker;
|
import com.songoda.ultimatestacker.UltimateStacker;
|
||||||
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
|
||||||
import com.songoda.ultimatestacker.settings.Settings;
|
import com.songoda.ultimatestacker.settings.Settings;
|
||||||
|
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
||||||
import com.songoda.ultimatestacker.stackable.spawner.SpawnerStack;
|
import com.songoda.ultimatestacker.stackable.spawner.SpawnerStack;
|
||||||
import com.songoda.ultimatestacker.stackable.spawner.SpawnerStackManager;
|
import com.songoda.ultimatestacker.stackable.spawner.SpawnerStackManager;
|
||||||
import com.songoda.ultimatestacker.utils.Methods;
|
import com.songoda.ultimatestacker.utils.Methods;
|
||||||
import com.songoda.ultimatestacker.utils.Reflection;
|
import com.songoda.ultimatestacker.utils.ReflectionUtil;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
@ -92,7 +92,7 @@ public class SpawnerListeners implements Listener {
|
|||||||
.replace("MOOSHROOM", "MUSHROOM_COW")
|
.replace("MOOSHROOM", "MUSHROOM_COW")
|
||||||
.replace("ZOMBIE_PIGMAN", "PIG_ZOMBIE"));
|
.replace("ZOMBIE_PIGMAN", "PIG_ZOMBIE"));
|
||||||
else if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_12)) {
|
else if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_12)) {
|
||||||
String str = Reflection.getNBTTagCompound(Reflection.getNMSItemStack(event.getItem())).toString();
|
String str = ReflectionUtil.getNBTTagCompound(ReflectionUtil.getNMSItemStack(event.getItem())).toString();
|
||||||
if (str.contains("minecraft:"))
|
if (str.contains("minecraft:"))
|
||||||
entityType = EntityType.fromName(str.substring(str.indexOf("minecraft:") + 10, str.indexOf("\"}")));
|
entityType = EntityType.fromName(str.substring(str.indexOf("minecraft:") + 10, str.indexOf("\"}")));
|
||||||
else
|
else
|
||||||
|
@ -11,7 +11,7 @@ import org.bukkit.event.entity.EntityTameEvent;
|
|||||||
|
|
||||||
public class TameListeners implements Listener {
|
public class TameListeners implements Listener {
|
||||||
|
|
||||||
private UltimateStacker plugin;
|
private final UltimateStacker plugin;
|
||||||
|
|
||||||
public TameListeners(UltimateStacker plugin) {
|
public TameListeners(UltimateStacker plugin) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
|
@ -14,6 +14,7 @@ import org.bukkit.event.entity.EntityPickupItemEvent;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class ItemCurrentListener implements Listener {
|
public class ItemCurrentListener implements Listener {
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
public void onPickup(EntityPickupItemEvent event) {
|
public void onPickup(EntityPickupItemEvent event) {
|
||||||
if (!Settings.STACK_ITEMS.getBoolean() || event.getItem() instanceof Arrow) return;
|
if (!Settings.STACK_ITEMS.getBoolean() || event.getItem() instanceof Arrow) return;
|
||||||
|
@ -19,10 +19,10 @@ import java.util.List;
|
|||||||
|
|
||||||
public class ItemListeners implements Listener {
|
public class ItemListeners implements Listener {
|
||||||
|
|
||||||
private final UltimateStacker instance;
|
private final UltimateStacker plugin;
|
||||||
|
|
||||||
public ItemListeners(UltimateStacker instance) {
|
public ItemListeners(UltimateStacker plugin) {
|
||||||
this.instance = instance;
|
this.plugin = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@ -39,7 +39,7 @@ public class ItemListeners implements Listener {
|
|||||||
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
|
||||||
int specific = instance.getItemFile().getInt("Items." + itemStack.getType().name() + ".Max Stack Size");
|
int specific = plugin.getItemFile().getInt("Items." + itemStack.getType().name() + ".Max Stack Size");
|
||||||
int max;
|
int max;
|
||||||
|
|
||||||
if (UltimateStacker.isMaterialBlacklisted(itemStack))
|
if (UltimateStacker.isMaterialBlacklisted(itemStack))
|
||||||
|
@ -4,11 +4,21 @@ import com.songoda.core.compatibility.CompatibleMaterial;
|
|||||||
import com.songoda.core.compatibility.ServerVersion;
|
import com.songoda.core.compatibility.ServerVersion;
|
||||||
import com.songoda.lootables.Lootables;
|
import com.songoda.lootables.Lootables;
|
||||||
import com.songoda.lootables.Modify;
|
import com.songoda.lootables.Modify;
|
||||||
import com.songoda.lootables.loot.*;
|
import com.songoda.lootables.loot.Drop;
|
||||||
|
import com.songoda.lootables.loot.Loot;
|
||||||
|
import com.songoda.lootables.loot.LootBuilder;
|
||||||
|
import com.songoda.lootables.loot.LootManager;
|
||||||
|
import com.songoda.lootables.loot.Lootable;
|
||||||
import com.songoda.ultimatestacker.UltimateStacker;
|
import com.songoda.ultimatestacker.UltimateStacker;
|
||||||
import com.songoda.ultimatestacker.settings.Settings;
|
import com.songoda.ultimatestacker.settings.Settings;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.entity.*;
|
import org.bukkit.entity.Ageable;
|
||||||
|
import org.bukkit.entity.Creeper;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.entity.Projectile;
|
||||||
|
import org.bukkit.entity.Sheep;
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -5,7 +5,6 @@ import com.songoda.core.configuration.ConfigSetting;
|
|||||||
import com.songoda.ultimatestacker.UltimateStacker;
|
import com.songoda.ultimatestacker.UltimateStacker;
|
||||||
import com.songoda.ultimatestacker.stackable.entity.Check;
|
import com.songoda.ultimatestacker.stackable.entity.Check;
|
||||||
import com.songoda.ultimatestacker.stackable.entity.Split;
|
import com.songoda.ultimatestacker.stackable.entity.Split;
|
||||||
import jdk.nashorn.internal.ir.LiteralNode;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
@ -4,8 +4,8 @@ import com.songoda.core.compatibility.CompatibleMaterial;
|
|||||||
import com.songoda.ultimatestacker.UltimateStacker;
|
import com.songoda.ultimatestacker.UltimateStacker;
|
||||||
import com.songoda.ultimatestacker.settings.Settings;
|
import com.songoda.ultimatestacker.settings.Settings;
|
||||||
import com.songoda.ultimatestacker.stackable.Hologramable;
|
import com.songoda.ultimatestacker.stackable.Hologramable;
|
||||||
import com.songoda.ultimatestacker.utils.Stackable;
|
|
||||||
import com.songoda.ultimatestacker.utils.Methods;
|
import com.songoda.ultimatestacker.utils.Methods;
|
||||||
|
import com.songoda.ultimatestacker.utils.Stackable;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package com.songoda.ultimatestacker.stackable.block;
|
package com.songoda.ultimatestacker.stackable.block;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.ultimatestacker.stackable.spawner.SpawnerStack;
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
|
|
||||||
|
@ -8,7 +8,11 @@ import org.bukkit.Location;
|
|||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.Deque;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.UUID;
|
||||||
import java.util.concurrent.ConcurrentLinkedDeque;
|
import java.util.concurrent.ConcurrentLinkedDeque;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@ -16,7 +16,6 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
|
|
||||||
|
@ -9,7 +9,11 @@ import org.bukkit.World;
|
|||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
public class EntityStackManager {
|
public class EntityStackManager {
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ import com.songoda.ultimatestacker.UltimateStacker;
|
|||||||
import com.songoda.ultimatestacker.settings.Settings;
|
import com.songoda.ultimatestacker.settings.Settings;
|
||||||
import com.songoda.ultimatestacker.stackable.Hologramable;
|
import com.songoda.ultimatestacker.stackable.Hologramable;
|
||||||
import com.songoda.ultimatestacker.utils.Methods;
|
import com.songoda.ultimatestacker.utils.Methods;
|
||||||
import com.songoda.ultimatestacker.utils.Reflection;
|
import com.songoda.ultimatestacker.utils.ReflectionUtil;
|
||||||
import com.songoda.ultimatestacker.utils.Stackable;
|
import com.songoda.ultimatestacker.utils.Stackable;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -56,7 +56,7 @@ public class SpawnerStack implements Stackable, Hologramable {
|
|||||||
creatureSpawner.setMaxNearbyEntities(maxNearby);
|
creatureSpawner.setMaxNearbyEntities(maxNearby);
|
||||||
creatureSpawner.setSpawnCount(count);
|
creatureSpawner.setSpawnCount(count);
|
||||||
} else {
|
} else {
|
||||||
Reflection.updateSpawner(creatureSpawner, count, maxNearby);
|
ReflectionUtil.updateSpawner(creatureSpawner, count, maxNearby);
|
||||||
}
|
}
|
||||||
creatureSpawner.update();
|
creatureSpawner.update();
|
||||||
}, 1L);
|
}, 1L);
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
package com.songoda.ultimatestacker.storage;
|
|
||||||
|
|
||||||
import com.songoda.core.configuration.Config;
|
|
||||||
import com.songoda.ultimatestacker.UltimateStacker;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public abstract class Storage {
|
|
||||||
|
|
||||||
protected final UltimateStacker instance;
|
|
||||||
protected final Config dataFile;
|
|
||||||
|
|
||||||
public Storage(UltimateStacker instance) {
|
|
||||||
this.instance = instance;
|
|
||||||
this.dataFile = new Config(instance, "data.yml");
|
|
||||||
this.dataFile.setHeader("UltimateStacker Data File");
|
|
||||||
this.dataFile.setAutosave(true).setAutosaveInterval(120);
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract boolean containsGroup(String group);
|
|
||||||
|
|
||||||
public abstract List<StorageRow> getRowsByGroup(String group);
|
|
||||||
|
|
||||||
public abstract void prepareSaveItem(String group, StorageItem... items);
|
|
||||||
|
|
||||||
public void updateData(UltimateStacker instance) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract void doSave();
|
|
||||||
|
|
||||||
public abstract void save();
|
|
||||||
|
|
||||||
public abstract void makeBackup();
|
|
||||||
|
|
||||||
public abstract void closeConnection();
|
|
||||||
|
|
||||||
}
|
|
@ -1,75 +0,0 @@
|
|||||||
package com.songoda.ultimatestacker.storage;
|
|
||||||
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class StorageItem {
|
|
||||||
|
|
||||||
private final Object object;
|
|
||||||
private String key = null;
|
|
||||||
|
|
||||||
public StorageItem(Object object) {
|
|
||||||
this.object = object;
|
|
||||||
}
|
|
||||||
|
|
||||||
public StorageItem(String key, Object object) {
|
|
||||||
this.key = key;
|
|
||||||
this.object = object;
|
|
||||||
}
|
|
||||||
|
|
||||||
public StorageItem(String key, List<Material> material) {
|
|
||||||
String object = "";
|
|
||||||
for (Material m : material) {
|
|
||||||
object += m.name() + ";";
|
|
||||||
}
|
|
||||||
this.key = key;
|
|
||||||
this.object = object;
|
|
||||||
}
|
|
||||||
|
|
||||||
public StorageItem(String key, Map<EntityType, Integer> entityKills) {
|
|
||||||
String object = "";
|
|
||||||
for (Map.Entry<EntityType, Integer> entry : entityKills.entrySet()) {
|
|
||||||
object += entry.getKey().name() + ":" + entry.getValue() + ";";
|
|
||||||
}
|
|
||||||
this.key = key;
|
|
||||||
this.object = object;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getKey() {
|
|
||||||
return key;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String asString() {
|
|
||||||
if (object == null) return null;
|
|
||||||
return (String) object;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean asBoolean() {
|
|
||||||
if (object == null) return false;
|
|
||||||
return (boolean) object;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int asInt() {
|
|
||||||
if (object == null) return 0;
|
|
||||||
return (int) object;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object asObject() {
|
|
||||||
return object;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Material> asMaterialList() {
|
|
||||||
List<Material> list = new ArrayList<>();
|
|
||||||
if (object == null) return list;
|
|
||||||
String[] stack = ((String) object).split(";");
|
|
||||||
for (String item : stack) {
|
|
||||||
if (item.equals("")) continue;
|
|
||||||
list.add(Material.valueOf(item));
|
|
||||||
}
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,29 +0,0 @@
|
|||||||
package com.songoda.ultimatestacker.storage;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class StorageRow {
|
|
||||||
|
|
||||||
private final String key;
|
|
||||||
|
|
||||||
private final Map<String, StorageItem> items;
|
|
||||||
|
|
||||||
public StorageRow(String key, Map<String, StorageItem> items) {
|
|
||||||
this.key = key;
|
|
||||||
this.items = items;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getKey() {
|
|
||||||
return key;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<String, StorageItem> getItems() {
|
|
||||||
return Collections.unmodifiableMap(items);
|
|
||||||
}
|
|
||||||
|
|
||||||
public StorageItem get(String key) {
|
|
||||||
if (!items.containsKey(key) || items.get(key).asObject().toString().equals("")) return new StorageItem(null);
|
|
||||||
return items.get(key);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,195 +0,0 @@
|
|||||||
package com.songoda.ultimatestacker.storage.types;
|
|
||||||
|
|
||||||
import com.songoda.ultimatestacker.UltimateStacker;
|
|
||||||
import com.songoda.ultimatestacker.storage.Storage;
|
|
||||||
import com.songoda.ultimatestacker.storage.StorageItem;
|
|
||||||
import com.songoda.ultimatestacker.storage.StorageRow;
|
|
||||||
import com.songoda.ultimatestacker.utils.MySQLDatabase;
|
|
||||||
|
|
||||||
import java.sql.DatabaseMetaData;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.sql.Statement;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class StorageMysql extends Storage {
|
|
||||||
|
|
||||||
private static Map<String, StorageItem[]> toSave = new HashMap<>();
|
|
||||||
private static Map<String, StorageItem[]> lastSave = null;
|
|
||||||
private MySQLDatabase database;
|
|
||||||
|
|
||||||
public StorageMysql(UltimateStacker instance) {
|
|
||||||
super(instance);
|
|
||||||
this.database = new MySQLDatabase(instance);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean containsGroup(String group) {
|
|
||||||
try {
|
|
||||||
DatabaseMetaData dbm = database.getConnection().getMetaData();
|
|
||||||
ResultSet rs = dbm.getTables(null, null, instance.getConfig().getString("Database.Prefix") + group, null);
|
|
||||||
if (rs.next()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<StorageRow> getRowsByGroup(String group) {
|
|
||||||
List<StorageRow> rows = new ArrayList<>();
|
|
||||||
try {
|
|
||||||
ResultSet set = database.getConnection().createStatement().executeQuery(String.format("SELECT * FROM `" + instance.getConfig().getString("Database.Prefix") + "%s`", group));
|
|
||||||
while (set.next()) {
|
|
||||||
Map<String, StorageItem> items = new HashMap<>();
|
|
||||||
|
|
||||||
String key = set.getString(1);
|
|
||||||
for (int i = 2; i <= set.getMetaData().getColumnCount(); i++) {
|
|
||||||
if (set.getObject(i) == null || set.getObject(i) == "") continue;
|
|
||||||
StorageItem item = new StorageItem(set.getObject(i));
|
|
||||||
items.put(set.getMetaData().getColumnName(i), item);
|
|
||||||
}
|
|
||||||
StorageRow row = new StorageRow(key, items);
|
|
||||||
rows.add(row);
|
|
||||||
}
|
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return rows;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void prepareSaveItem(String group, StorageItem... items) {
|
|
||||||
toSave.put(group + "]" + items[0].asObject().toString(), items);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void doSave() {
|
|
||||||
this.updateData(instance);
|
|
||||||
|
|
||||||
if (lastSave == null)
|
|
||||||
lastSave = new HashMap<>(toSave);
|
|
||||||
|
|
||||||
if (toSave.isEmpty()) return;
|
|
||||||
Map<String, StorageItem[]> nextSave = new HashMap<>(toSave);
|
|
||||||
|
|
||||||
this.makeBackup();
|
|
||||||
this.save();
|
|
||||||
|
|
||||||
toSave.clear();
|
|
||||||
lastSave.clear();
|
|
||||||
lastSave.putAll(nextSave);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void save() {
|
|
||||||
try {
|
|
||||||
Statement stmt = database.getConnection().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
|
|
||||||
|
|
||||||
last:
|
|
||||||
for (Map.Entry<String, StorageItem[]> last : lastSave.entrySet()) {
|
|
||||||
String lastKey = last.getKey().split("]")[0];
|
|
||||||
String lastValue = last.getValue()[0].asObject().toString();
|
|
||||||
|
|
||||||
for (Map.Entry<String, StorageItem[]> to : toSave.entrySet()) {
|
|
||||||
String toKey = to.getKey().split("]")[0];
|
|
||||||
if (!toKey.equals(lastKey)
|
|
||||||
|| !to.getValue()[0].asObject().equals(lastValue)
|
|
||||||
|| to.getValue().length != last.getValue().length)
|
|
||||||
continue;
|
|
||||||
toSave.remove(to.getKey());
|
|
||||||
for (int i = 0; i < to.getValue().length; i ++) {
|
|
||||||
if (!to.getValue()[i].asObject().toString()
|
|
||||||
.equals(last.getValue()[i].asObject().toString())) {
|
|
||||||
//Update
|
|
||||||
StorageItem[] items = to.getValue();
|
|
||||||
StringBuilder sql = new StringBuilder(String.format("UPDATE `" + instance.getConfig().getString("Database.Prefix") + "%s`", toKey));
|
|
||||||
|
|
||||||
sql.append(" SET");
|
|
||||||
|
|
||||||
for (StorageItem item : items) {
|
|
||||||
if (item == null || item.asObject() == null) continue;
|
|
||||||
String key = item.getKey().split("]")[0];
|
|
||||||
sql.append(String.format("`%s` = '%s', ", key, item.asObject().toString()));
|
|
||||||
}
|
|
||||||
|
|
||||||
sql = new StringBuilder(sql.substring(0, sql.length() - 2));
|
|
||||||
|
|
||||||
sql.append(String.format(" WHERE `%s`='%s'", last.getValue()[0].getKey(), last.getValue()[0].asObject().toString()));
|
|
||||||
|
|
||||||
stmt.addBatch(sql.toString());
|
|
||||||
|
|
||||||
continue last;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Already up to date.
|
|
||||||
|
|
||||||
continue last;
|
|
||||||
}
|
|
||||||
//Was not found delete.
|
|
||||||
StringBuilder sql = new StringBuilder(String.format("DELETE FROM `" + instance.getConfig().getString("Database.Prefix") + "%s`", lastKey));
|
|
||||||
sql.append(String.format(" WHERE `%s`='%s'", last.getValue()[0].getKey(), last.getValue()[0].asObject().toString()));
|
|
||||||
stmt.addBatch(sql.toString());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Map.Entry<String, StorageItem[]> to : toSave.entrySet()) {
|
|
||||||
String toKey = to.getKey().split("]")[0];
|
|
||||||
//Add
|
|
||||||
StorageItem[] items = to.getValue();
|
|
||||||
StringBuilder sql = new StringBuilder(String.format("INSERT INTO `" + instance.getConfig().getString("Database.Prefix") + "%s`", toKey));
|
|
||||||
|
|
||||||
sql.append(" (");
|
|
||||||
|
|
||||||
for (StorageItem item : items) {
|
|
||||||
if (item == null || item.asObject() == null) continue;
|
|
||||||
String key = item.getKey().split("]")[0];
|
|
||||||
sql.append(String.format("`%s`, ", key));
|
|
||||||
}
|
|
||||||
|
|
||||||
sql = new StringBuilder(sql.substring(0, sql.length() - 2));
|
|
||||||
|
|
||||||
sql.append(") VALUES (");
|
|
||||||
|
|
||||||
for (StorageItem item : items) {
|
|
||||||
if (item == null || item.asObject() == null) continue;
|
|
||||||
sql.append(String.format("'%s', ", item.asObject().toString()));
|
|
||||||
}
|
|
||||||
|
|
||||||
sql = new StringBuilder(sql.substring(0, sql.length() - 2));
|
|
||||||
|
|
||||||
sql.append(");");
|
|
||||||
|
|
||||||
stmt.addBatch(sql.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
stmt.executeBatch();
|
|
||||||
|
|
||||||
toSave.clear();
|
|
||||||
|
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void makeBackup() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void closeConnection() {
|
|
||||||
try {
|
|
||||||
database.getConnection().close();
|
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,157 +0,0 @@
|
|||||||
package com.songoda.ultimatestacker.storage.types;
|
|
||||||
|
|
||||||
import com.songoda.ultimatestacker.UltimateStacker;
|
|
||||||
import com.songoda.ultimatestacker.storage.Storage;
|
|
||||||
import com.songoda.ultimatestacker.storage.StorageItem;
|
|
||||||
import com.songoda.ultimatestacker.storage.StorageRow;
|
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
|
||||||
import org.bukkit.configuration.MemorySection;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.util.ArrayDeque;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Deque;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
public class StorageYaml extends Storage {
|
|
||||||
|
|
||||||
private static final Map<String, Object> toSave = new HashMap<>();
|
|
||||||
private static Map<String, Object> lastSave = null;
|
|
||||||
|
|
||||||
public StorageYaml(UltimateStacker instance) {
|
|
||||||
super(instance);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean containsGroup(String group) {
|
|
||||||
return dataFile.contains("data." + group);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<StorageRow> getRowsByGroup(String group) {
|
|
||||||
List<StorageRow> rows = new ArrayList<>();
|
|
||||||
ConfigurationSection currentSection = dataFile.getConfigurationSection("data." + group);
|
|
||||||
for (String key : currentSection.getKeys(false)) {
|
|
||||||
|
|
||||||
Map<String, StorageItem> items = new HashMap<>();
|
|
||||||
ConfigurationSection currentSection2 = dataFile.getConfigurationSection("data." + group + "." + key);
|
|
||||||
for (String key2 : currentSection2.getKeys(false)) {
|
|
||||||
String path = "data." + group + "." + key + "." + key2;
|
|
||||||
items.put(key2, new StorageItem(dataFile.get(path) instanceof MemorySection
|
|
||||||
? convertToInLineList(path) : dataFile.get(path)));
|
|
||||||
}
|
|
||||||
if (items.isEmpty()) continue;
|
|
||||||
StorageRow row = new StorageRow(key, items);
|
|
||||||
rows.add(row);
|
|
||||||
}
|
|
||||||
return rows;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String convertToInLineList(String path) {
|
|
||||||
StringBuilder converted = new StringBuilder();
|
|
||||||
for (String key : dataFile.getConfigurationSection(path).getKeys(false)) {
|
|
||||||
converted.append(key).append(":").append(dataFile.getInt(path + "." + key)).append(";");
|
|
||||||
}
|
|
||||||
return converted.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void prepareSaveItem(String group, StorageItem... items) {
|
|
||||||
for (StorageItem item : items) {
|
|
||||||
if (item == null || item.asObject() == null) continue;
|
|
||||||
toSave.put("data." + group + "." + items[0].asString() + "." + item.getKey(), item.asObject());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void doSave() {
|
|
||||||
this.updateData(instance);
|
|
||||||
|
|
||||||
if (lastSave == null)
|
|
||||||
lastSave = new HashMap<>(toSave);
|
|
||||||
|
|
||||||
if (toSave.isEmpty()) return;
|
|
||||||
Map<String, Object> nextSave = new HashMap<>(toSave);
|
|
||||||
|
|
||||||
this.makeBackup();
|
|
||||||
this.save();
|
|
||||||
|
|
||||||
toSave.clear();
|
|
||||||
lastSave.clear();
|
|
||||||
lastSave.putAll(nextSave);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void save() {
|
|
||||||
try {
|
|
||||||
for (Map.Entry<String, Object> entry : lastSave.entrySet()) {
|
|
||||||
if (toSave.containsKey(entry.getKey())) {
|
|
||||||
Object newValue = toSave.get(entry.getKey());
|
|
||||||
if (!entry.getValue().equals(newValue)) {
|
|
||||||
dataFile.set(entry.getKey(), newValue);
|
|
||||||
}
|
|
||||||
toSave.remove(entry.getKey());
|
|
||||||
} else {
|
|
||||||
dataFile.set(entry.getKey(), null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Map.Entry<String, Object> entry : toSave.entrySet()) {
|
|
||||||
dataFile.set(entry.getKey(), entry.getValue());
|
|
||||||
}
|
|
||||||
|
|
||||||
dataFile.save();
|
|
||||||
} catch (NullPointerException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void makeBackup() {
|
|
||||||
File data = new File(instance.getDataFolder(), "data.yml");
|
|
||||||
File dataClone = new File(instance.getDataFolder(), "data-backup-" + System.currentTimeMillis() + ".yml");
|
|
||||||
try {
|
|
||||||
copyFile(data, dataClone);
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
Deque<File> backups = new ArrayDeque<>();
|
|
||||||
for (File file : Objects.requireNonNull(instance.getDataFolder().listFiles())) {
|
|
||||||
if (file.getName().toLowerCase().contains("data-backup")) {
|
|
||||||
backups.add(file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (backups.size() > 3) {
|
|
||||||
backups.getFirst().delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void closeConnection() {
|
|
||||||
dataFile.saveChanges();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void copyFile(File source, File dest) throws IOException {
|
|
||||||
InputStream is = null;
|
|
||||||
OutputStream os = null;
|
|
||||||
try {
|
|
||||||
is = new FileInputStream(source);
|
|
||||||
os = new FileOutputStream(dest);
|
|
||||||
byte[] buffer = new byte[1024];
|
|
||||||
int length;
|
|
||||||
while ((length = is.read(buffer)) > 0) {
|
|
||||||
os.write(buffer, 0, length);
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
is.close();
|
|
||||||
os.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -19,7 +19,15 @@ import org.bukkit.entity.*;
|
|||||||
import org.bukkit.inventory.EntityEquipment;
|
import org.bukkit.inventory.EntityEquipment;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
public class StackingTask extends BukkitRunnable {
|
public class StackingTask extends BukkitRunnable {
|
||||||
|
|
||||||
@ -345,12 +353,17 @@ public class StackingTask extends BukkitRunnable {
|
|||||||
List<LivingEntity> entities = new ArrayList<>();
|
List<LivingEntity> entities = new ArrayList<>();
|
||||||
for (CachedChunk chunk : getNearbyChunks(location, radius, singleChunk)) {
|
for (CachedChunk chunk : getNearbyChunks(location, radius, singleChunk)) {
|
||||||
if (chunk == null) continue;
|
if (chunk == null) continue;
|
||||||
Entity[] entityArray;
|
Entity[] entityArray = new Entity[0];
|
||||||
if (cachedChunks.containsKey(chunk)) {
|
if (cachedChunks.containsKey(chunk)) {
|
||||||
entityArray = cachedChunks.get(chunk);
|
entityArray = cachedChunks.get(chunk);
|
||||||
} else {
|
} else {
|
||||||
|
try {
|
||||||
entityArray = chunk.getEntities();
|
entityArray = chunk.getEntities();
|
||||||
cachedChunks.put(chunk, entityArray);
|
cachedChunks.put(chunk, entityArray);
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
// Sometimes accessing this method asynchronously throws an error. This is super rare and
|
||||||
|
// as such doesn't really affect the plugin so we're just going to ignore this failure.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (entityArray == null) continue;
|
if (entityArray == null) continue;
|
||||||
for (Entity e : entityArray) {
|
for (Entity e : entityArray) {
|
||||||
|
@ -6,21 +6,26 @@ import com.songoda.core.nms.nbt.NBTItem;
|
|||||||
import com.songoda.core.utils.TextUtils;
|
import com.songoda.core.utils.TextUtils;
|
||||||
import com.songoda.ultimatestacker.UltimateStacker;
|
import com.songoda.ultimatestacker.UltimateStacker;
|
||||||
import com.songoda.ultimatestacker.settings.Settings;
|
import com.songoda.ultimatestacker.settings.Settings;
|
||||||
import org.bukkit.*;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.GameMode;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.CreatureSpawner;
|
import org.bukkit.block.CreatureSpawner;
|
||||||
import org.bukkit.entity.*;
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.Item;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.BlockStateMeta;
|
import org.bukkit.inventory.meta.BlockStateMeta;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
|
||||||
|
|
||||||
public class Methods {
|
public class Methods {
|
||||||
|
|
||||||
|
@ -7,7 +7,8 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
public class Reflection {
|
public class ReflectionUtil {
|
||||||
|
|
||||||
private static Class<?> clazzCraftCreatureSpawner, clazzTileEntityMobSpawner = null;
|
private static Class<?> clazzCraftCreatureSpawner, clazzTileEntityMobSpawner = null;
|
||||||
private static Method methodGetTileEntity, methodGetSpawner;
|
private static Method methodGetTileEntity, methodGetSpawner;
|
||||||
private static Field fieldSpawnount, fieldMaxNearbyEntities, fieldSpawner;
|
private static Field fieldSpawnount, fieldMaxNearbyEntities, fieldSpawner;
|
||||||
@ -68,12 +69,11 @@ public class Reflection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Object getNMSItemStack(ItemStack item) {
|
public static Object getNMSItemStack(ItemStack item) {
|
||||||
@SuppressWarnings("rawtypes")
|
Class<?> cis = getCraftItemStack();
|
||||||
Class cis = getCraftItemStack();
|
java.lang.reflect.Method methodAsNMSCopy;
|
||||||
java.lang.reflect.Method method;
|
|
||||||
try {
|
try {
|
||||||
method = cis.getMethod("asNMSCopy", ItemStack.class);
|
methodAsNMSCopy = cis.getMethod("asNMSCopy", ItemStack.class);
|
||||||
Object answer = method.invoke(cis, item);
|
Object answer = methodAsNMSCopy.invoke(cis, item);
|
||||||
return answer;
|
return answer;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// TODO Auto-generated catch block
|
// TODO Auto-generated catch block
|
||||||
@ -82,15 +82,12 @@ public class Reflection {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings({"unchecked"})
|
|
||||||
public static Object getNBTTagCompound(Object nmsitem) {
|
public static Object getNBTTagCompound(Object nmsitem) {
|
||||||
@SuppressWarnings("rawtypes")
|
Class<?> c = nmsitem.getClass();
|
||||||
Class c = nmsitem.getClass();
|
java.lang.reflect.Method methodGetTag;
|
||||||
java.lang.reflect.Method method;
|
|
||||||
try {
|
try {
|
||||||
method = c.getMethod("getTag");
|
methodGetTag = c.getMethod("getTag");
|
||||||
Object answer = method.invoke(nmsitem);
|
return methodGetTag.invoke(nmsitem);
|
||||||
return answer;
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// TODO Auto-generated catch block
|
// TODO Auto-generated catch block
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -98,14 +95,10 @@ public class Reflection {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
public static Class<?> getCraftItemStack() {
|
||||||
public static Class getCraftItemStack() {
|
|
||||||
String version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
|
String version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
|
||||||
try {
|
try {
|
||||||
Class c = Class.forName("org.bukkit.craftbukkit." + version + ".inventory.CraftItemStack");
|
return Class.forName("org.bukkit.craftbukkit." + version + ".inventory.CraftItemStack");
|
||||||
//Constructor<?> cons = c.getConstructor(ItemStack.class);
|
|
||||||
//return cons.newInstance(item);
|
|
||||||
return c;
|
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
System.out.println("Error in ItemNBTAPI! (Outdated plugin?)");
|
System.out.println("Error in ItemNBTAPI! (Outdated plugin?)");
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
Loading…
Reference in New Issue
Block a user