mirror of
https://github.com/songoda/UltimateStacker.git
synced 2024-09-27 14:12:59 +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>
|
||||
<artifactId>UltimateStacker</artifactId>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<version>2.0.4</version>
|
||||
<version>2.0.5</version>
|
||||
<build>
|
||||
<defaultGoal>clean install</defaultGoal>
|
||||
<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.WorldGuardHook;
|
||||
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.migrations._1_InitialMigration;
|
||||
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.spawner.SpawnerStack;
|
||||
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.utils.Methods;
|
||||
import org.apache.commons.lang.WordUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Item;
|
||||
@ -50,8 +52,11 @@ import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.metadata.FixedMetadataValue;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class UltimateStacker extends SongodaPlugin {
|
||||
|
||||
@ -110,13 +115,13 @@ public class UltimateStacker extends SongodaPlugin {
|
||||
// Setup plugin commands
|
||||
this.commandManager = new CommandManager(this);
|
||||
this.commandManager.addMainCommand("us")
|
||||
.addSubCommands(new CommandSettings(guiManager),
|
||||
new CommandRemoveAll(),
|
||||
new CommandReload(),
|
||||
new CommandGiveSpawner(),
|
||||
new CommandSpawn(),
|
||||
new CommandLootables(),
|
||||
new CommandConvert(guiManager)
|
||||
.addSubCommands(new CommandSettings(this, guiManager),
|
||||
new CommandRemoveAll(this),
|
||||
new CommandReload(this),
|
||||
new CommandGiveSpawner(this),
|
||||
new CommandSpawn(this),
|
||||
new CommandLootables(this),
|
||||
new CommandConvert( guiManager)
|
||||
);
|
||||
|
||||
this.lootablesManager = new LootablesManager();
|
||||
@ -215,31 +220,6 @@ public class UltimateStacker extends SongodaPlugin {
|
||||
|
||||
@Override
|
||||
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.
|
||||
final boolean useSpawnerHolo = Settings.SPAWNER_HOLOGRAMS.getBoolean();
|
||||
this.dataManager.getSpawners((spawners) -> {
|
||||
@ -258,7 +238,7 @@ public class UltimateStacker extends SongodaPlugin {
|
||||
entityStackManager.addStacks(entities.values());
|
||||
entityStackManager.tryAndLoadColdEntities();
|
||||
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();
|
||||
this.dataManager.getBlocks((blocks) -> {
|
||||
|
@ -2,7 +2,6 @@ package com.songoda.ultimatestacker.commands;
|
||||
|
||||
import com.songoda.core.commands.AbstractCommand;
|
||||
import com.songoda.core.gui.GuiManager;
|
||||
import com.songoda.ultimatestacker.UltimateStacker;
|
||||
import com.songoda.ultimatestacker.gui.GUIConvert;
|
||||
import com.songoda.ultimatestacker.utils.Methods;
|
||||
import org.bukkit.Bukkit;
|
||||
@ -13,13 +12,11 @@ import java.util.List;
|
||||
|
||||
public class CommandConvert extends AbstractCommand {
|
||||
|
||||
UltimateStacker instance;
|
||||
GuiManager guiManager;
|
||||
private final GuiManager guiManager;
|
||||
|
||||
public CommandConvert(GuiManager guiManager) {
|
||||
super(true, "convert");
|
||||
super(CommandType.PLAYER_ONLY, "convert");
|
||||
this.guiManager = guiManager;
|
||||
instance = UltimateStacker.getInstance();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -16,18 +16,18 @@ import java.util.stream.Collectors;
|
||||
|
||||
public class CommandGiveSpawner extends AbstractCommand {
|
||||
|
||||
UltimateStacker instance;
|
||||
private final UltimateStacker plugin;
|
||||
|
||||
public CommandGiveSpawner() {
|
||||
super(false, "givespawner");
|
||||
instance = UltimateStacker.getInstance();
|
||||
public CommandGiveSpawner(UltimateStacker plugin) {
|
||||
super(CommandType.CONSOLE_OK, "givespawner");
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ReturnType runCommand(CommandSender sender, String... args) {
|
||||
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...");
|
||||
return ReturnType.SYNTAX_ERROR;
|
||||
}
|
||||
@ -41,7 +41,7 @@ public class CommandGiveSpawner extends AbstractCommand {
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
for (EntityType types : EntityType.values()) {
|
||||
@ -53,16 +53,16 @@ public class CommandGiveSpawner extends AbstractCommand {
|
||||
|
||||
int amt = args.length == 3 ? Integer.parseInt(args[2]) : 1;
|
||||
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.getInventory().addItem(itemStack);
|
||||
instance.getLocale().getMessage("command.give.success")
|
||||
plugin.getLocale().getMessage("command.give.success")
|
||||
.processPlaceholder("type", Methods.compileSpawnerName(type, amt))
|
||||
.sendPrefixedMessage(player);
|
||||
} else {
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
player.getInventory().addItem(itemStack);
|
||||
instance.getLocale().getMessage("command.give.success")
|
||||
plugin.getLocale().getMessage("command.give.success")
|
||||
.processPlaceholder("type", Methods.compileSpawnerName(type, amt))
|
||||
.sendPrefixedMessage(player);
|
||||
}
|
||||
|
@ -10,17 +10,17 @@ import java.util.List;
|
||||
|
||||
public class CommandLootables extends AbstractCommand {
|
||||
|
||||
UltimateStacker instance;
|
||||
private final UltimateStacker plugin;
|
||||
|
||||
public CommandLootables() {
|
||||
super(true, "lootables");
|
||||
instance = UltimateStacker.getInstance();
|
||||
public CommandLootables(UltimateStacker plugin) {
|
||||
super(CommandType.PLAYER_ONLY, "lootables");
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ReturnType runCommand(CommandSender sender, String... args) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -8,17 +8,17 @@ import java.util.List;
|
||||
|
||||
public class CommandReload extends AbstractCommand {
|
||||
|
||||
UltimateStacker instance;
|
||||
private final UltimateStacker plugin;
|
||||
|
||||
public CommandReload() {
|
||||
super(false, "reload");
|
||||
instance = UltimateStacker.getInstance();
|
||||
public CommandReload(UltimateStacker plugin) {
|
||||
super(CommandType.CONSOLE_OK, "reload");
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ReturnType runCommand(CommandSender sender, String... args) {
|
||||
instance.reloadConfig();
|
||||
instance.getLocale().getMessage("&7Configuration and Language files reloaded.").sendPrefixedMessage(sender);
|
||||
plugin.reloadConfig();
|
||||
plugin.getLocale().getMessage("&7Configuration and Language files reloaded.").sendPrefixedMessage(sender);
|
||||
return ReturnType.SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -19,11 +19,11 @@ import java.util.List;
|
||||
|
||||
public class CommandRemoveAll extends AbstractCommand {
|
||||
|
||||
UltimateStacker instance;
|
||||
private final UltimateStacker plugin;
|
||||
|
||||
public CommandRemoveAll() {
|
||||
super(false, "removeall");
|
||||
instance = UltimateStacker.getInstance();
|
||||
public CommandRemoveAll(UltimateStacker plugin) {
|
||||
super(CommandType.CONSOLE_OK, "removeall");
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -40,7 +40,7 @@ public class CommandRemoveAll extends AbstractCommand {
|
||||
}
|
||||
|
||||
int amountRemoved = 0;
|
||||
EntityStackManager stackManager = instance.getEntityStackManager();
|
||||
EntityStackManager stackManager = plugin.getEntityStackManager();
|
||||
for (World world : Bukkit.getWorlds()) {
|
||||
for (Entity entityO : world.getEntities()) {
|
||||
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 (amountRemoved == 0) {
|
||||
instance.getLocale().newMessage("&7No" + (all ? " " : " stacked ")
|
||||
plugin.getLocale().newMessage("&7No" + (all ? " " : " stacked ")
|
||||
+ type + " exist that could be removed.").sendPrefixedMessage(sender);
|
||||
} 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);
|
||||
}
|
||||
return ReturnType.SUCCESS;
|
||||
|
@ -12,18 +12,18 @@ import java.util.List;
|
||||
|
||||
public class CommandSettings extends AbstractCommand {
|
||||
|
||||
UltimateStacker instance;
|
||||
GuiManager guiManager;
|
||||
private final UltimateStacker plugin;
|
||||
private final GuiManager guiManager;
|
||||
|
||||
public CommandSettings(GuiManager guiManager) {
|
||||
public CommandSettings(UltimateStacker plugin, GuiManager guiManager) {
|
||||
super(CommandType.PLAYER_ONLY, "Settings");
|
||||
this.guiManager = guiManager;
|
||||
instance = UltimateStacker.getInstance();
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ReturnType runCommand(CommandSender sender, String... args) {
|
||||
guiManager.showGUI((Player) sender, new PluginConfigGui(instance));
|
||||
guiManager.showGUI((Player) sender, new PluginConfigGui(plugin));
|
||||
return ReturnType.SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -22,11 +22,11 @@ import java.util.stream.Collectors;
|
||||
*/
|
||||
public class CommandSpawn extends AbstractCommand {
|
||||
|
||||
UltimateStacker instance;
|
||||
private final UltimateStacker plugin;
|
||||
|
||||
public CommandSpawn() {
|
||||
super(true, "spawn");
|
||||
instance = UltimateStacker.getInstance();
|
||||
public CommandSpawn(UltimateStacker plugin) {
|
||||
super(CommandType.PLAYER_ONLY, "spawn");
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -44,7 +44,7 @@ public class CommandSpawn extends AbstractCommand {
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
for (EntityType types : EntityType.values()) {
|
||||
@ -54,10 +54,10 @@ public class CommandSpawn extends AbstractCommand {
|
||||
sender.sendMessage(Methods.formatText("&6" + list));
|
||||
} else {
|
||||
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.updateStack();
|
||||
instance.getStackingTask().attemptSplit(stack, entity);
|
||||
plugin.getStackingTask().attemptSplit(stack, entity);
|
||||
}
|
||||
|
||||
return ReturnType.SUCCESS;
|
||||
|
@ -16,7 +16,11 @@ import org.bukkit.plugin.Plugin;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
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;
|
||||
|
||||
public class DataManager extends DataManagerAbstract {
|
||||
|
@ -11,7 +11,7 @@ import org.bukkit.entity.Player;
|
||||
|
||||
public class GUIConvertWhat extends Gui {
|
||||
|
||||
private Convert convertFrom = null;
|
||||
private Convert convertFrom;
|
||||
|
||||
private boolean entities = true;
|
||||
private boolean spawners = true;
|
||||
@ -41,17 +41,17 @@ public class GUIConvertWhat extends Gui {
|
||||
|
||||
}
|
||||
|
||||
void toggleEntities() {
|
||||
private void toggleEntities() {
|
||||
entities = !entities;
|
||||
this.updateItem(0, ChatColor.GRAY + "Stacked Entities", entities ? ChatColor.GREEN + "Yes" : ChatColor.RED + "No");
|
||||
}
|
||||
|
||||
void toggleSpawners() {
|
||||
private void toggleSpawners() {
|
||||
spawners = !spawners;
|
||||
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) {
|
||||
convertFrom.convertEntities();
|
||||
UltimateStacker.getInstance().getEntityStackManager().tryAndLoadColdEntities();
|
||||
|
@ -4,8 +4,8 @@ import com.gamingmesh.jobs.Jobs;
|
||||
import com.gamingmesh.jobs.actions.EntityActionInfo;
|
||||
import com.gamingmesh.jobs.container.ActionType;
|
||||
import com.gamingmesh.jobs.container.JobsPlayer;
|
||||
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
||||
import com.songoda.ultimatestacker.hook.StackerHook;
|
||||
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
@ -10,21 +10,21 @@ import org.bukkit.metadata.FixedMetadataValue;
|
||||
|
||||
public class BreedListeners implements Listener {
|
||||
|
||||
private final UltimateStacker instance;
|
||||
private final UltimateStacker plugin;
|
||||
|
||||
public BreedListeners(UltimateStacker instance) {
|
||||
this.instance = instance;
|
||||
public BreedListeners(UltimateStacker plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
public void onBread(EntityBreedEvent event) {
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> {
|
||||
event.getFather().removeMetadata("breedCooldown", instance);
|
||||
event.getMother().removeMetadata("breedCooldown", instance);
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
|
||||
event.getFather().removeMetadata("breedCooldown", plugin);
|
||||
event.getMother().removeMetadata("breedCooldown", plugin);
|
||||
}, 5 * 20 * 60);
|
||||
event.getFather().setMetadata("breedCooldown", new FixedMetadataValue(instance, true));
|
||||
event.getFather().removeMetadata("inLove", instance);
|
||||
event.getMother().setMetadata("breedCooldown", new FixedMetadataValue(instance, true));
|
||||
event.getMother().removeMetadata("inLove", instance);
|
||||
event.getFather().setMetadata("breedCooldown", new FixedMetadataValue(plugin, true));
|
||||
event.getFather().removeMetadata("inLove", plugin);
|
||||
event.getMother().setMetadata("breedCooldown", new FixedMetadataValue(plugin, true));
|
||||
event.getMother().removeMetadata("inLove", plugin);
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.songoda.ultimatestacker.listeners;
|
||||
|
||||
import com.songoda.ultimatestacker.UltimateStacker;
|
||||
import com.songoda.ultimatestacker.stackable.entity.EntityStackManager;
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.entity.Entity;
|
||||
@ -14,8 +13,8 @@ public class ChunkListeners implements Listener {
|
||||
|
||||
private final EntityStackManager entityStackManager;
|
||||
|
||||
public ChunkListeners(UltimateStacker plugin) {
|
||||
this.entityStackManager = plugin.getEntityStackManager();
|
||||
public ChunkListeners(EntityStackManager entityStackManager) {
|
||||
this.entityStackManager = entityStackManager;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
|
@ -9,17 +9,17 @@ import org.bukkit.event.Listener;
|
||||
|
||||
public class ClearLagListeners implements Listener {
|
||||
|
||||
private final UltimateStacker instance;
|
||||
private final UltimateStacker plugin;
|
||||
|
||||
public ClearLagListeners(UltimateStacker instance) {
|
||||
this.instance = instance;
|
||||
public ClearLagListeners(UltimateStacker plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onClearLaggTask(EntityRemoveEvent event) {
|
||||
for (Entity entity : event.getWorld().getEntities()) {
|
||||
if (entity instanceof LivingEntity && instance.getEntityStackManager().isStackedAndLoaded((LivingEntity)entity)) {
|
||||
instance.getEntityStackManager().removeStack(entity);
|
||||
if (entity instanceof LivingEntity && plugin.getEntityStackManager().isStackedAndLoaded((LivingEntity)entity)) {
|
||||
plugin.getEntityStackManager().removeStack(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.DropUtils;
|
||||
import com.songoda.ultimatestacker.UltimateStacker;
|
||||
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
||||
import com.songoda.ultimatestacker.settings.Settings;
|
||||
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
||||
import org.bukkit.GameRule;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
@ -29,12 +29,12 @@ import java.util.stream.Collectors;
|
||||
|
||||
public class DeathListeners implements Listener {
|
||||
|
||||
private final UltimateStacker instance;
|
||||
private Random random;
|
||||
private final UltimateStacker plugin;
|
||||
private final Random random;
|
||||
|
||||
public DeathListeners(UltimateStacker instance) {
|
||||
this.instance = instance;
|
||||
random = new Random();
|
||||
public DeathListeners(UltimateStacker plugin) {
|
||||
this.plugin = plugin;
|
||||
this.random = new Random();
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
@ -43,7 +43,7 @@ public class DeathListeners implements Listener {
|
||||
|| event.getEntityType() == EntityType.ARMOR_STAND) return;
|
||||
|
||||
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());
|
||||
|
||||
if (custom) {
|
||||
@ -57,8 +57,8 @@ public class DeathListeners implements Listener {
|
||||
&& !event.getEntity().getWorld().getGameRuleValue(GameRule.DO_MOB_LOOT))
|
||||
drops.clear();
|
||||
|
||||
if (instance.getEntityStackManager().isStackedAndLoaded(event.getEntity()))
|
||||
instance.getEntityStackManager().getStack(event.getEntity())
|
||||
if (plugin.getEntityStackManager().isStackedAndLoaded(event.getEntity()))
|
||||
plugin.getEntityStackManager().getStack(event.getEntity())
|
||||
.onDeath(event.getEntity(), drops, custom, event.getDroppedExp(), event);
|
||||
else
|
||||
DropUtils.processStackedDrop(event.getEntity(), drops, event);
|
||||
@ -70,15 +70,14 @@ public class DeathListeners implements Listener {
|
||||
items.add(entity.getEquipment().getItemInHand());
|
||||
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9))
|
||||
items.add(entity.getEquipment().getItemInOffHand());
|
||||
for (ItemStack item : items) {
|
||||
for (ItemStack item : items)
|
||||
if (item.getType() == material)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11) && entity instanceof ChestedHorse) {
|
||||
if (((ChestedHorse) entity).getInventory().contains(material))
|
||||
return true;
|
||||
}
|
||||
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11)
|
||||
&& entity instanceof ChestedHorse
|
||||
&& ((ChestedHorse) entity).getInventory().contains(material))
|
||||
return true;
|
||||
|
||||
switch (material.name()) {
|
||||
case "SADDLE":
|
||||
@ -118,8 +117,8 @@ public class DeathListeners implements Listener {
|
||||
|
||||
if (!(event.getEntity() instanceof LivingEntity)) return;
|
||||
LivingEntity entity = (LivingEntity) event.getEntity();
|
||||
if (!instance.getEntityStackManager().isStackedAndLoaded(entity)) return;
|
||||
EntityStack stack = instance.getEntityStackManager().getStack(entity);
|
||||
if (!plugin.getEntityStackManager().isStackedAndLoaded(entity)) return;
|
||||
EntityStack stack = plugin.getEntityStackManager().getStack(entity);
|
||||
|
||||
if (Settings.KILL_WHOLE_STACK_ON_DEATH.getBoolean() && Settings.REALISTIC_DAMAGE.getBoolean()) {
|
||||
Player player = (Player) event.getDamager();
|
||||
|
@ -13,7 +13,12 @@ import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.CreatureSpawner;
|
||||
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.EventPriority;
|
||||
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.ServerVersion;
|
||||
import com.songoda.ultimatestacker.UltimateStacker;
|
||||
import com.songoda.ultimatestacker.settings.Settings;
|
||||
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
||||
import com.songoda.ultimatestacker.stackable.entity.Split;
|
||||
import com.songoda.ultimatestacker.settings.Settings;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Ageable;
|
||||
@ -125,8 +125,9 @@ public class InteractListeners implements Listener {
|
||||
return type == Material.HAY_BLOCK;
|
||||
case "TURTLE":
|
||||
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.ServerVersion;
|
||||
import com.songoda.ultimatestacker.UltimateStacker;
|
||||
import com.songoda.ultimatestacker.settings.Settings;
|
||||
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
||||
import com.songoda.ultimatestacker.stackable.entity.EntityStackManager;
|
||||
import com.songoda.ultimatestacker.stackable.entity.Split;
|
||||
import com.songoda.ultimatestacker.settings.Settings;
|
||||
import org.bukkit.Material;
|
||||
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.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
@ -20,7 +24,7 @@ import java.util.Random;
|
||||
|
||||
public class ShearListeners implements Listener {
|
||||
|
||||
private UltimateStacker plugin;
|
||||
private final UltimateStacker plugin;
|
||||
|
||||
public ShearListeners(UltimateStacker plugin) {
|
||||
this.plugin = plugin;
|
||||
|
@ -1,11 +1,11 @@
|
||||
package com.songoda.ultimatestacker.listeners;
|
||||
|
||||
import com.songoda.ultimatestacker.UltimateStacker;
|
||||
import com.songoda.ultimatestacker.settings.Settings;
|
||||
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
||||
import com.songoda.ultimatestacker.stackable.entity.EntityStackManager;
|
||||
import com.songoda.ultimatestacker.stackable.entity.Split;
|
||||
import com.songoda.ultimatestacker.settings.Settings;
|
||||
import org.bukkit.entity.*;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
@ -13,7 +13,7 @@ import org.bukkit.event.entity.SheepDyeWoolEvent;
|
||||
|
||||
public class SheepDyeListeners implements Listener {
|
||||
|
||||
private UltimateStacker plugin;
|
||||
private final UltimateStacker plugin;
|
||||
|
||||
public SheepDyeListeners(UltimateStacker plugin) {
|
||||
this.plugin = plugin;
|
||||
|
@ -3,12 +3,12 @@ package com.songoda.ultimatestacker.listeners;
|
||||
import com.songoda.core.compatibility.ServerVersion;
|
||||
import com.songoda.core.nms.NmsManager;
|
||||
import com.songoda.ultimatestacker.UltimateStacker;
|
||||
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
|
||||
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.SpawnerStackManager;
|
||||
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.Material;
|
||||
import org.bukkit.block.Block;
|
||||
@ -92,7 +92,7 @@ public class SpawnerListeners implements Listener {
|
||||
.replace("MOOSHROOM", "MUSHROOM_COW")
|
||||
.replace("ZOMBIE_PIGMAN", "PIG_ZOMBIE"));
|
||||
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:"))
|
||||
entityType = EntityType.fromName(str.substring(str.indexOf("minecraft:") + 10, str.indexOf("\"}")));
|
||||
else
|
||||
|
@ -11,7 +11,7 @@ import org.bukkit.event.entity.EntityTameEvent;
|
||||
|
||||
public class TameListeners implements Listener {
|
||||
|
||||
private UltimateStacker plugin;
|
||||
private final UltimateStacker plugin;
|
||||
|
||||
public TameListeners(UltimateStacker plugin) {
|
||||
this.plugin = plugin;
|
||||
|
@ -14,6 +14,7 @@ import org.bukkit.event.entity.EntityPickupItemEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class ItemCurrentListener implements Listener {
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
public void onPickup(EntityPickupItemEvent event) {
|
||||
if (!Settings.STACK_ITEMS.getBoolean() || event.getItem() instanceof Arrow) return;
|
||||
|
@ -19,10 +19,10 @@ import java.util.List;
|
||||
|
||||
public class ItemListeners implements Listener {
|
||||
|
||||
private final UltimateStacker instance;
|
||||
private final UltimateStacker plugin;
|
||||
|
||||
public ItemListeners(UltimateStacker instance) {
|
||||
this.instance = instance;
|
||||
public ItemListeners(UltimateStacker plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@ -39,7 +39,7 @@ public class ItemListeners implements Listener {
|
||||
|
||||
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;
|
||||
|
||||
if (UltimateStacker.isMaterialBlacklisted(itemStack))
|
||||
|
@ -4,11 +4,21 @@ import com.songoda.core.compatibility.CompatibleMaterial;
|
||||
import com.songoda.core.compatibility.ServerVersion;
|
||||
import com.songoda.lootables.Lootables;
|
||||
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.settings.Settings;
|
||||
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 java.io.File;
|
||||
|
@ -5,7 +5,6 @@ import com.songoda.core.configuration.ConfigSetting;
|
||||
import com.songoda.ultimatestacker.UltimateStacker;
|
||||
import com.songoda.ultimatestacker.stackable.entity.Check;
|
||||
import com.songoda.ultimatestacker.stackable.entity.Split;
|
||||
import jdk.nashorn.internal.ir.LiteralNode;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
|
@ -4,8 +4,8 @@ import com.songoda.core.compatibility.CompatibleMaterial;
|
||||
import com.songoda.ultimatestacker.UltimateStacker;
|
||||
import com.songoda.ultimatestacker.settings.Settings;
|
||||
import com.songoda.ultimatestacker.stackable.Hologramable;
|
||||
import com.songoda.ultimatestacker.utils.Stackable;
|
||||
import com.songoda.ultimatestacker.utils.Methods;
|
||||
import com.songoda.ultimatestacker.utils.Stackable;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
|
||||
|
@ -1,7 +1,6 @@
|
||||
package com.songoda.ultimatestacker.stackable.block;
|
||||
|
||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||
import com.songoda.ultimatestacker.stackable.spawner.SpawnerStack;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
|
||||
|
@ -8,7 +8,11 @@ import org.bukkit.Location;
|
||||
import org.bukkit.entity.Entity;
|
||||
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.stream.Collectors;
|
||||
|
||||
|
@ -16,7 +16,6 @@ import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
|
@ -9,7 +9,11 @@ import org.bukkit.World;
|
||||
import org.bukkit.entity.Entity;
|
||||
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 {
|
||||
|
||||
|
@ -6,7 +6,7 @@ import com.songoda.ultimatestacker.UltimateStacker;
|
||||
import com.songoda.ultimatestacker.settings.Settings;
|
||||
import com.songoda.ultimatestacker.stackable.Hologramable;
|
||||
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 org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
@ -56,7 +56,7 @@ public class SpawnerStack implements Stackable, Hologramable {
|
||||
creatureSpawner.setMaxNearbyEntities(maxNearby);
|
||||
creatureSpawner.setSpawnCount(count);
|
||||
} else {
|
||||
Reflection.updateSpawner(creatureSpawner, count, maxNearby);
|
||||
ReflectionUtil.updateSpawner(creatureSpawner, count, maxNearby);
|
||||
}
|
||||
creatureSpawner.update();
|
||||
}, 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.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 {
|
||||
|
||||
@ -345,12 +353,17 @@ public class StackingTask extends BukkitRunnable {
|
||||
List<LivingEntity> entities = new ArrayList<>();
|
||||
for (CachedChunk chunk : getNearbyChunks(location, radius, singleChunk)) {
|
||||
if (chunk == null) continue;
|
||||
Entity[] entityArray;
|
||||
Entity[] entityArray = new Entity[0];
|
||||
if (cachedChunks.containsKey(chunk)) {
|
||||
entityArray = cachedChunks.get(chunk);
|
||||
} else {
|
||||
entityArray = chunk.getEntities();
|
||||
cachedChunks.put(chunk, entityArray);
|
||||
try {
|
||||
entityArray = chunk.getEntities();
|
||||
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;
|
||||
for (Entity e : entityArray) {
|
||||
|
@ -6,21 +6,26 @@ import com.songoda.core.nms.nbt.NBTItem;
|
||||
import com.songoda.core.utils.TextUtils;
|
||||
import com.songoda.ultimatestacker.UltimateStacker;
|
||||
import com.songoda.ultimatestacker.settings.Settings;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.Bukkit;
|
||||
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.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.ItemStack;
|
||||
import org.bukkit.inventory.meta.BlockStateMeta;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
public class Methods {
|
||||
|
||||
|
@ -7,7 +7,8 @@ import org.bukkit.inventory.ItemStack;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
public class Reflection {
|
||||
public class ReflectionUtil {
|
||||
|
||||
private static Class<?> clazzCraftCreatureSpawner, clazzTileEntityMobSpawner = null;
|
||||
private static Method methodGetTileEntity, methodGetSpawner;
|
||||
private static Field fieldSpawnount, fieldMaxNearbyEntities, fieldSpawner;
|
||||
@ -68,12 +69,11 @@ public class Reflection {
|
||||
}
|
||||
|
||||
public static Object getNMSItemStack(ItemStack item) {
|
||||
@SuppressWarnings("rawtypes")
|
||||
Class cis = getCraftItemStack();
|
||||
java.lang.reflect.Method method;
|
||||
Class<?> cis = getCraftItemStack();
|
||||
java.lang.reflect.Method methodAsNMSCopy;
|
||||
try {
|
||||
method = cis.getMethod("asNMSCopy", ItemStack.class);
|
||||
Object answer = method.invoke(cis, item);
|
||||
methodAsNMSCopy = cis.getMethod("asNMSCopy", ItemStack.class);
|
||||
Object answer = methodAsNMSCopy.invoke(cis, item);
|
||||
return answer;
|
||||
} catch (Exception e) {
|
||||
// TODO Auto-generated catch block
|
||||
@ -82,15 +82,12 @@ public class Reflection {
|
||||
return null;
|
||||
}
|
||||
|
||||
@SuppressWarnings({"unchecked"})
|
||||
public static Object getNBTTagCompound(Object nmsitem) {
|
||||
@SuppressWarnings("rawtypes")
|
||||
Class c = nmsitem.getClass();
|
||||
java.lang.reflect.Method method;
|
||||
Class<?> c = nmsitem.getClass();
|
||||
java.lang.reflect.Method methodGetTag;
|
||||
try {
|
||||
method = c.getMethod("getTag");
|
||||
Object answer = method.invoke(nmsitem);
|
||||
return answer;
|
||||
methodGetTag = c.getMethod("getTag");
|
||||
return methodGetTag.invoke(nmsitem);
|
||||
} catch (Exception e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
@ -98,14 +95,10 @@ public class Reflection {
|
||||
return null;
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
public static Class getCraftItemStack() {
|
||||
public static Class<?> getCraftItemStack() {
|
||||
String version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
|
||||
try {
|
||||
Class c = Class.forName("org.bukkit.craftbukkit." + version + ".inventory.CraftItemStack");
|
||||
//Constructor<?> cons = c.getConstructor(ItemStack.class);
|
||||
//return cons.newInstance(item);
|
||||
return c;
|
||||
return Class.forName("org.bukkit.craftbukkit." + version + ".inventory.CraftItemStack");
|
||||
} catch (Exception ex) {
|
||||
System.out.println("Error in ItemNBTAPI! (Outdated plugin?)");
|
||||
ex.printStackTrace();
|
Loading…
Reference in New Issue
Block a user