Allow async conversion and use a UUID service where possible
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user