Allow async conversion and use a UUID service where possible

This commit is contained in:
turt2live
2014-08-31 18:45:58 -06:00
parent 7eb269fc8e
commit 57272da0cc
9 changed files with 157 additions and 25 deletions
@@ -1,25 +1,43 @@
package com.drtshock.playervaults.commands;
import com.drtshock.playervaults.PlayerVaults;
import com.drtshock.playervaults.converters.BackpackConverter;
import com.drtshock.playervaults.converters.Converter;
import com.drtshock.playervaults.util.Lang;
import com.drtshock.playervaults.vaultmanagement.VaultOperations;
import com.turt2live.uuid.CachingServiceProvider;
import com.turt2live.uuid.ServiceProvider;
import com.turt2live.uuid.turt2live.v2.ApiV2Service;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
public class ConvertCommand implements CommandExecutor {
private List<Converter> converters = new ArrayList<>();
private ServiceProvider uuidProvider;
public ConvertCommand() {
converters.add(new BackpackConverter());
CachingServiceProvider cachedUuidProvider = new CachingServiceProvider(new ApiV2Service());
Map<UUID, String> seed = new HashMap<>();
for (OfflinePlayer player : PlayerVaults.getInstance().getServer().getOfflinePlayers()) {
if (player.hasPlayedBefore()) {
seed.put(player.getUniqueId(), player.getName());
}
}
cachedUuidProvider.seedLoad(seed, 6 * 60 * 60); // 6 hour cache time
uuidProvider = cachedUuidProvider;
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
public boolean onCommand(final CommandSender sender, Command command, String label, String[] args) {
if (!sender.hasPermission("playervaults.convert")) {
sender.sendMessage(Lang.TITLE.toString() + Lang.NO_PERMS);
} else {
@@ -27,7 +45,7 @@ public class ConvertCommand implements CommandExecutor {
sender.sendMessage(Lang.TITLE + "/pvconvert <all | plugin name>");
} else {
String name = args[0];
List<Converter> applicableConverters = new ArrayList<>();
final List<Converter> applicableConverters = new ArrayList<>();
if (name.equalsIgnoreCase("all")) {
applicableConverters.addAll(converters);
} else {
@@ -41,13 +59,22 @@ public class ConvertCommand implements CommandExecutor {
if (applicableConverters.size() <= 0) {
sender.sendMessage(Lang.TITLE.toString() + Lang.CONVERT_PLUGIN_NOT_FOUND);
} else {
int converted = 0;
for (Converter converter : applicableConverters) {
if (converter.canConvert()) {
converted += converter.doConvert();
// Fork into background
sender.sendMessage(Lang.TITLE + Lang.CONVERT_BACKGROUND.toString());
PlayerVaults.getInstance().getServer().getScheduler().runTaskLaterAsynchronously(PlayerVaults.getInstance(), new Runnable() {
@Override
public void run() {
int converted = 0;
VaultOperations.setLocked(true);
for (Converter converter : applicableConverters) {
if (converter.canConvert()) {
converted += converter.run(sender, uuidProvider);
}
}
VaultOperations.setLocked(false);
sender.sendMessage(Lang.TITLE + Lang.CONVERT_COMPLETE.toString().replace("%converted", converted + ""));
}
}
sender.sendMessage(Lang.TITLE + Lang.CONVERT_COMPLETE.toString().replace("%converted", converted + ""));
}, 5); // This comment is to annoy evilmidget38
}
}
}