Skip to content

Commit

Permalink
Import of WolfWork branch + support for other importers
Browse files Browse the repository at this point in the history
  • Loading branch information
rlf committed Dec 25, 2014
1 parent d579062 commit 6a3e113
Show file tree
Hide file tree
Showing 15 changed files with 717 additions and 19 deletions.
Original file line number Diff line number Diff line change
@@ -1,67 +1,76 @@
package us.talabrek.ultimateskyblock;
package us.talabrek.ultimateskyblock.admin;

import org.bukkit.command.*;
import org.bukkit.entity.*;

import java.io.*;
import java.util.HashMap;
import java.util.Map;

import org.bukkit.*;
import us.talabrek.ultimateskyblock.Settings;
import us.talabrek.ultimateskyblock.island.IslandInfo;
import us.talabrek.ultimateskyblock.player.PlayerInfo;
import us.talabrek.ultimateskyblock.uSkyBlock;

public class DevCommand implements CommandExecutor {
private Map<String, Command> commandMap = new HashMap<>();

public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] split) {
final Player player;
if (split.length == 0) {
if (sender.hasPermission("usb.mod.protect") || sender.hasPermission("usb.mod.protectall") || sender.hasPermission("usb.mod.topten") || sender.hasPermission("usb.mod.orphan") || sender.hasPermission("usb.admin.delete") || sender.hasPermission("usb.admin.remove") || sender.hasPermission("usb.admin.register")) {
sender.sendMessage("[dev usage]");
sender.sendMessage("[usb usage]");
if (sender.hasPermission("usb.mod.protect")) {
sender.sendMessage(ChatColor.YELLOW + "/dev protect <player>:" + ChatColor.WHITE + " add protection to an island.");
sender.sendMessage(ChatColor.YELLOW + "/usb protect <player>:" + ChatColor.WHITE + " add protection to an island.");
}
if (sender.hasPermission("usb.admin.reload")) {
sender.sendMessage(ChatColor.YELLOW + "/dev reload:" + ChatColor.WHITE + " reload configuration from file.");
sender.sendMessage(ChatColor.YELLOW + "/usb reload:" + ChatColor.WHITE + " reload configuration from file.");
}
if (sender.hasPermission("usb.admin.import")) {
sender.sendMessage(ChatColor.YELLOW + "/usb import:" + ChatColor.WHITE + " try to import data from an old version.");
}
if (sender.hasPermission("usb.mod.protectall")) {
sender.sendMessage(ChatColor.YELLOW + "/dev protectall:" + ChatColor.WHITE + " add island protection to unprotected islands.");
sender.sendMessage(ChatColor.YELLOW + "/usb protectall:" + ChatColor.WHITE + " add island protection to unprotected islands.");
}
if (sender.hasPermission("usb.mod.topten")) {
sender.sendMessage(ChatColor.YELLOW + "/dev topten:" + ChatColor.WHITE + " manually update the top 10 list");
sender.sendMessage(ChatColor.YELLOW + "/usb topten:" + ChatColor.WHITE + " manually update the top 10 list");
}
if (sender.hasPermission("usb.mod.orphan")) {
sender.sendMessage(ChatColor.YELLOW + "/dev orphancount:" + ChatColor.WHITE + " unused island locations count");
sender.sendMessage(ChatColor.YELLOW + "/usb orphancount:" + ChatColor.WHITE + " unused island locations count");
}
if (sender.hasPermission("usb.mod.orphan")) {
sender.sendMessage(ChatColor.YELLOW + "/dev clearorphan:" + ChatColor.WHITE + " remove any unused island locations.");
sender.sendMessage(ChatColor.YELLOW + "/usb clearorphan:" + ChatColor.WHITE + " remove any unused island locations.");
}
if (sender.hasPermission("usb.mod.orphan")) {
sender.sendMessage(ChatColor.YELLOW + "/dev saveorphan:" + ChatColor.WHITE + " save the list of old (empty) island locations.");
sender.sendMessage(ChatColor.YELLOW + "/usb saveorphan:" + ChatColor.WHITE + " save the list of old (empty) island locations.");
}
if (sender.hasPermission("usb.admin.delete")) {
sender.sendMessage(ChatColor.YELLOW + "/dev delete <player>:" + ChatColor.WHITE + " delete an island (removes blocks).");
sender.sendMessage(ChatColor.YELLOW + "/usb delete <player>:" + ChatColor.WHITE + " delete an island (removes blocks).");
}
if (sender.hasPermission("usb.admin.remove")) {
sender.sendMessage(ChatColor.YELLOW + "/dev remove <player>:" + ChatColor.WHITE + " remove a player from an island.");
sender.sendMessage(ChatColor.YELLOW + "/usb remove <player>:" + ChatColor.WHITE + " remove a player from an island.");
}
if (sender.hasPermission("usb.admin.register")) {
sender.sendMessage(ChatColor.YELLOW + "/dev register <player>:" + ChatColor.WHITE + " set a player's island to your location");
sender.sendMessage(ChatColor.YELLOW + "/usb register <player>:" + ChatColor.WHITE + " set a player's island to your location");
}
if (sender.hasPermission("usb.mod.challenges")) {
sender.sendMessage(ChatColor.YELLOW + "/dev completechallenge <challengename> <player>:" + ChatColor.WHITE + " marks a challenge as complete");
sender.sendMessage(ChatColor.YELLOW + "/usb completechallenge <challengename> <player>:" + ChatColor.WHITE + " marks a challenge as complete");
}
if (sender.hasPermission("usb.mod.challenges")) {
sender.sendMessage(ChatColor.YELLOW + "/dev resetchallenge <challengename> <player>:" + ChatColor.WHITE + " marks a challenge as incomplete");
sender.sendMessage(ChatColor.YELLOW + "/usb resetchallenge <challengename> <player>:" + ChatColor.WHITE + " marks a challenge as incomplete");
}
if (sender.hasPermission("usb.mod.challenges")) {
sender.sendMessage(ChatColor.YELLOW + "/dev resetallchallenges <challengename>:" + ChatColor.WHITE + " resets all of the player's challenges");
sender.sendMessage(ChatColor.YELLOW + "/usb resetallchallenges <challengename>:" + ChatColor.WHITE + " resets all of the player's challenges");
}
if (sender.hasPermission("usb.admin.purge")) {
sender.sendMessage(ChatColor.YELLOW + "/dev purge [TimeInDays]:" + ChatColor.WHITE + " delete inactive islands older than [TimeInDays].");
sender.sendMessage(ChatColor.YELLOW + "/usb purge [TimeInDays]:" + ChatColor.WHITE + " delete inactive islands older than [TimeInDays].");
}
if (sender.hasPermission("usb.mod.party")) {
sender.sendMessage(ChatColor.YELLOW + "/dev buildpartylist:" + ChatColor.WHITE + " build a new party list (use this if parties are broken).");
sender.sendMessage(ChatColor.YELLOW + "/usb buildpartylist:" + ChatColor.WHITE + " build a new party list (use this if parties are broken).");
}
if (sender.hasPermission("usb.mod.party")) {
sender.sendMessage(ChatColor.YELLOW + "/dev info <player>:" + ChatColor.WHITE + " check the party information for the given player.");
sender.sendMessage(ChatColor.YELLOW + "/usb info <player>:" + ChatColor.WHITE + " check the party information for the given player.");
}
} else {
sender.sendMessage(ChatColor.RED + "You don't have permission to use this command.");
Expand Down Expand Up @@ -92,8 +101,10 @@ public boolean onCommand(final CommandSender sender, final Command command, fina
sender.sendMessage(ChatColor.RED + "A purge is already running, please wait for it to finish!");
return true;
}
sender.sendMessage(ChatColor.YELLOW + "Usage: /dev purge [TimeInDays]");
sender.sendMessage(ChatColor.YELLOW + "Usage: /usb purge [TimeInDays]");
return true;
} else if (split[0].equals("import") && sender.hasPermission("usb.admin.import")) {
uSkyBlock.getInstance().getPlayerImporter().importUSB(sender);
}
} else if (split.length == 2) {
if (split[0].equals("purge") && (sender.hasPermission("usb.admin.purge"))) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package us.talabrek.ultimateskyblock.imports;

import us.talabrek.ultimateskyblock.uSkyBlock;

import java.io.File;

/**
* Interface for importers.
*/
public interface USBImporter {
/**
* Imports the player into the existing data structure.
* @param plugin The USB plugin
* @param playerFile The file to import.
* @return <code>true</code> iff the import was successful.
*/
boolean importPlayer(uSkyBlock plugin, File playerFile);

/**
* Imports various files from the data-folder (i.e. orphans etc.).
* @param plugin The USB plugin
* @param configFolder The base-folder of the plugin
* @return <code>true</code> if anything was imported, false otherwise.
*/
int importOrphans(uSkyBlock plugin, File configFolder);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package us.talabrek.ultimateskyblock.imports.impl;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import us.talabrek.ultimateskyblock.imports.USBImporter;
import us.talabrek.ultimateskyblock.imports.wolfwork.WolfWorkUSBImporter;
import us.talabrek.ultimateskyblock.uSkyBlock;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ServiceLoader;
import java.util.logging.Level;

/**
* Tries all available importers on a file.
*/
public class PlayerImporterImpl {
private final uSkyBlock plugin;
private List<USBImporter> importers;

public PlayerImporterImpl(uSkyBlock plugin) {
this.plugin = plugin;
}

public boolean importPlayer(File playerFile) {
for (USBImporter importer : getImporters()) {
if (importer.importPlayer(plugin, playerFile)) {
return true;
}
}
return false;
}

private List<USBImporter> getImporters() {
if (importers == null) {
importers = new ArrayList<>();
importers.add(new WolfWorkUSBImporter());
ServiceLoader serviceLoader = ServiceLoader.load(USBImporter.class, getClass().getClassLoader());
for (Iterator<USBImporter> it = serviceLoader.iterator(); it.hasNext(); ) {
importers.add(it.next());
}
}
return importers;
}

public void importUSB(final CommandSender sender) {
Bukkit.getServer().getScheduler().runTaskAsynchronously(plugin, new Runnable() {
@Override
public void run() {
doImport(sender);
}
});
}

private void doImport(CommandSender sender) {
String msg = "Imported " + importOrphans(plugin, plugin.getDataFolder()) + " orphans";
sender.sendMessage(ChatColor.YELLOW + msg);
plugin.log(Level.INFO, msg);
int countSuccess = 0;
int countFailed = 0;
for (File playerFile : plugin.directoryPlayers.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name != null && !name.endsWith(".yml");
}
})) {
if (importPlayer(playerFile)) {
countSuccess++;
plugin.log(Level.INFO, "Successfully imported player-file " + playerFile);
if (!playerFile.delete()) {
playerFile.deleteOnExit();
}
} else {
countFailed++;
plugin.log(Level.WARNING, "Could not import player-file " + playerFile);
}
}
sender.sendMessage(ChatColor.YELLOW + "Converted " + countSuccess + "/" + (countSuccess+countFailed) + " players");
}

private int importOrphans(uSkyBlock plugin, File dataFolder) {
int count = 0;
for (USBImporter importer : getImporters()) {
count += importer.importOrphans(plugin, dataFolder);
}
return count;
}
}
Loading

0 comments on commit 6a3e113

Please sign in to comment.