Now using Bukkit's tagged logging

This commit is contained in:
zml2008 2012-02-11 11:51:57 -08:00
parent 57ed91cd28
commit c14d25f860
22 changed files with 96 additions and 286 deletions

View File

@ -41,10 +41,6 @@
* @author sk89q
*/
public abstract class Blacklist {
/**
* Logger.
*/
private static final Logger logger = Logger.getLogger("Minecraft.WorldGuard");
/**
* List of entries by block ID.
@ -67,8 +63,11 @@ public abstract class Blacklist {
private boolean useAsWhitelist;
public Blacklist(Boolean useAsWhitelist) {
private final Logger logger;
public Blacklist(Boolean useAsWhitelist, Logger logger) {
this.useAsWhitelist = useAsWhitelist;
this.logger = logger;
}
/**
@ -178,7 +177,7 @@ public void load(File file) throws IOException {
} catch (NumberFormatException e) {
id = getItemID(item.trim());
if (id == 0) {
logger.log(Level.WARNING, "WorldGuard: Unknown block name: "
logger.log(Level.WARNING, "Unknown block name: "
+ item);
break;
}

View File

@ -37,17 +37,15 @@
* @author sk89q
*/
public class ConsoleLoggerHandler implements BlacklistLoggerHandler {
/**
* Logger.
*/
private static final Logger logger = Logger.getLogger("Minecraft.WorldGuard");
private String worldName;
private final Logger logger;
public ConsoleLoggerHandler(String worldName)
{
this.worldName = worldName;
public ConsoleLoggerHandler(String worldName, Logger logger) {
this.worldName = worldName;
this.logger = logger;
}
/**
@ -59,55 +57,55 @@ public void logEvent(BlacklistEvent event, String comment) {
// Block break
if (event instanceof BlockBreakBlacklistEvent) {
BlockBreakBlacklistEvent evt = (BlockBreakBlacklistEvent)event;
logger.log(Level.INFO, "WorldGuard: [" + worldName + "] " + event.getPlayer().getName()
logger.log(Level.INFO, "[" + worldName + "] " + event.getPlayer().getName()
+ " tried to break " + getFriendlyItemName(evt.getType())
+ (comment != null ? " (" + comment + ")" : ""));
// Block place
} else if (event instanceof BlockPlaceBlacklistEvent) {
BlockPlaceBlacklistEvent evt = (BlockPlaceBlacklistEvent)event;
logger.log(Level.INFO, "WorldGuard: [" + worldName + "] " + event.getPlayer().getName()
logger.log(Level.INFO, "[" + worldName + "] " + event.getPlayer().getName()
+ " tried to place " + getFriendlyItemName(evt.getType())
+ (comment != null ? " (" + comment + ")" : ""));
// Block interact
} else if (event instanceof BlockInteractBlacklistEvent) {
BlockInteractBlacklistEvent evt = (BlockInteractBlacklistEvent)event;
logger.log(Level.INFO, "WorldGuard: [" + worldName + "] " + event.getPlayer().getName()
logger.log(Level.INFO, "[" + worldName + "] " + event.getPlayer().getName()
+ " tried to interact with " + getFriendlyItemName(evt.getType())
+ (comment != null ? " (" + comment + ")" : ""));
// Destroy with
} else if (event instanceof DestroyWithBlacklistEvent) {
DestroyWithBlacklistEvent evt = (DestroyWithBlacklistEvent)event;
logger.log(Level.INFO, "WorldGuard: [" + worldName + "] " + event.getPlayer().getName()
logger.log(Level.INFO, "[" + worldName + "] " + event.getPlayer().getName()
+ " tried to destroy with " + getFriendlyItemName(evt.getType())
+ (comment != null ? " (" + comment + ")" : ""));
// Acquire
} else if (event instanceof ItemAcquireBlacklistEvent) {
ItemAcquireBlacklistEvent evt = (ItemAcquireBlacklistEvent)event;
logger.log(Level.INFO, "WorldGuard: [" + worldName + "] " + event.getPlayer().getName()
logger.log(Level.INFO, "[" + worldName + "] " + event.getPlayer().getName()
+ " tried to acquire " + getFriendlyItemName(evt.getType())
+ (comment != null ? " (" + comment + ")" : ""));
// Drop
} else if (event instanceof ItemDropBlacklistEvent) {
ItemDropBlacklistEvent evt = (ItemDropBlacklistEvent)event;
logger.log(Level.INFO, "WorldGuard: [" + worldName + "] " + event.getPlayer().getName()
logger.log(Level.INFO, "[" + worldName + "] " + event.getPlayer().getName()
+ " tried to drop " + getFriendlyItemName(evt.getType())
+ (comment != null ? " (" + comment + ")" : ""));
// Use
} else if (event instanceof ItemUseBlacklistEvent) {
ItemUseBlacklistEvent evt = (ItemUseBlacklistEvent)event;
logger.log(Level.INFO, "WorldGuard: [" + worldName + "] " + event.getPlayer().getName()
logger.log(Level.INFO, "[" + worldName + "] " + event.getPlayer().getName()
+ " tried to use " + getFriendlyItemName(evt.getType())
+ (comment != null ? " (" + comment + ")" : ""));
// Unknown
} else {
logger.log(Level.INFO, "WorldGuard: [" + worldName + "] " + event.getPlayer().getName()
logger.log(Level.INFO, "[" + worldName + "] " + event.getPlayer().getName()
+ " caught unknown event: " + event.getClass().getCanonicalName());
}
}

View File

@ -42,35 +42,33 @@
* @author sk89q
*/
public class DatabaseLoggerHandler implements BlacklistLoggerHandler {
/**
* Logger.
*/
private static final Logger logger = Logger.getLogger("Minecraft.WorldGuard");
/**
* DSN.
*/
private String dsn;
private final String dsn;
/**
* Username.
*/
private String user;
private final String user;
/**
* Password.
*/
private String pass;
private final String pass;
/**
* Table.
*/
private String table;
private final String table;
/**
* World name.
*/
private String worldName;
private final String worldName;
/**
* Database connection.
*/
private Connection conn;
private final Logger logger;
/**
* Construct the object.
@ -81,12 +79,13 @@ public class DatabaseLoggerHandler implements BlacklistLoggerHandler {
* @param table
* @param worldName
*/
public DatabaseLoggerHandler(String dsn, String user, String pass, String table, String worldName) {
public DatabaseLoggerHandler(String dsn, String user, String pass, String table, String worldName, Logger logger) {
this.dsn = dsn;
this.user = user;
this.pass = pass;
this.table = table;
this.worldName = worldName;
this.logger = logger;
}
/**
@ -106,10 +105,8 @@ private Connection getConnection() throws SQLException {
* Log an event to the database.
*
* @param event
* @param name
* @param x
* @param y
* @param z
* @param player
* @param pos
* @param item
* @param comment
*/

View File

@ -52,10 +52,6 @@
* @author sk89q
*/
public class FileLoggerHandler implements BlacklistLoggerHandler {
/**
* Logger.
*/
private static final Logger logger = Logger.getLogger("Minecraft.WorldGuard");
/**
* Regex for patterns in the path.
*/
@ -83,6 +79,8 @@ public class FileLoggerHandler implements BlacklistLoggerHandler {
*/
private TreeMap<String,FileLoggerWriter> writers =
new TreeMap<String,FileLoggerWriter>();
private final Logger logger;
/**
* Construct the object.
@ -90,9 +88,10 @@ public class FileLoggerHandler implements BlacklistLoggerHandler {
* @param pathPattern
* @param worldName
*/
public FileLoggerHandler(String pathPattern, String worldName) {
public FileLoggerHandler(String pathPattern, String worldName, Logger logger) {
this.pathPattern = pathPattern;
this.worldName = worldName;
this.logger = logger;
}
/**
@ -102,13 +101,14 @@ public FileLoggerHandler(String pathPattern, String worldName) {
* @param cacheSize
* @param worldName
*/
public FileLoggerHandler(String pathPattern, int cacheSize, String worldName) {
public FileLoggerHandler(String pathPattern, int cacheSize, String worldName, Logger logger) {
if (cacheSize < 1) {
throw new IllegalArgumentException("Cache size cannot be less than 1");
}
this.pathPattern = pathPattern;
this.cacheSize = cacheSize;
this.worldName = worldName;
this.logger = logger;
}
/**

View File

@ -25,7 +25,7 @@ public class BukkitBlacklist extends Blacklist {
private WorldGuardPlugin plugin;
public BukkitBlacklist(Boolean useAsWhitelist, WorldGuardPlugin plugin) {
super(useAsWhitelist);
super(useAsWhitelist, plugin.getLogger());
this.plugin = plugin;
}

View File

@ -129,7 +129,7 @@ public void load() {
try {
config.load();
} catch (IOException e) {
WorldGuardPlugin.logger.severe("Error reading configuration for global config: ");
plugin.getLogger().severe("Error reading configuration for global config: ");
e.printStackTrace();
}
@ -160,7 +160,7 @@ public void load() {
}
if (!config.save()) {
WorldGuardPlugin.logger.severe("Error saving configuration!");
plugin.getLogger().severe("Error saving configuration!");
}
}

View File

@ -40,10 +40,6 @@
* @author sk89q
*/
public class LegacyWorldGuardMigration {
/**
* Logger for messages.
*/
protected static final Logger logger = Logger.getLogger("Minecraft.WorldGuard");
/**
* Port over the blacklist.
@ -59,7 +55,7 @@ public static void migrateBlacklist(WorldGuardPlugin plugin) {
File newFile = new File(plugin.getDataFolder(), newPath);
if (!newFile.exists() && oldFile.exists()) {
logger.warning("WorldGuard: WorldGuard will now update your blacklist "
plugin.getLogger().warning("WorldGuard will now update your blacklist "
+ "from an older version of WorldGuard.");
// Need to make root directories
@ -69,9 +65,9 @@ public static void migrateBlacklist(WorldGuardPlugin plugin) {
oldFile.renameTo(new File(plugin.getDataFolder(),
"blacklist.txt.old"));
} else {
logger.warning("WorldGuard: blacklist.txt has been converted " +
plugin.getLogger().warning("blacklist.txt has been converted " +
"for the main world at " + newPath + "");
logger.warning("WorldGuard: Your other worlds currently have no " +
plugin.getLogger().warning("Your other worlds currently have no " +
"blacklist defined!");
}
@ -88,7 +84,7 @@ public static void migrateRegions(WorldGuardPlugin plugin) {
File oldDatabase = new File(plugin.getDataFolder(), "regions.txt");
if (!oldDatabase.exists()) return;
logger.info("WorldGuard: The regions database has changed in 5.x. "
plugin.getLogger().info("The regions database has changed in 5.x. "
+ "Your old regions database will be converted to the new format "
+ "and set as your primary world's database.");
@ -96,7 +92,7 @@ public static void migrateRegions(WorldGuardPlugin plugin) {
RegionManager mgr = plugin.getGlobalRegionManager().get(w);
// First load up the old database using the CSV loader
CSVDatabase db = new CSVDatabase(oldDatabase);
CSVDatabase db = new CSVDatabase(oldDatabase, plugin.getLogger());
db.load();
// Then save the new database
@ -105,9 +101,9 @@ public static void migrateRegions(WorldGuardPlugin plugin) {
oldDatabase.renameTo(new File(plugin.getDataFolder(), "regions.txt.old"));
logger.info("WorldGuard: Regions database converted!");
plugin.getLogger().info("Regions database converted!");
} catch (ProtectionDatabaseException e) {
logger.warning("WorldGuard: Failed to load regions: "
plugin.getLogger().warning("Failed to load regions: "
+ e.getMessage());
}
}

View File

@ -64,9 +64,6 @@ public class WorldConfiguration {
"# Remove the {} and add your own entries.\r\n" +
"#\r\n";
private static final Logger logger = Logger
.getLogger("Minecraft.WorldGuard");
private WorldGuardPlugin plugin;
private String worldName;
@ -177,7 +174,7 @@ public WorldConfiguration(WorldGuardPlugin plugin, String worldName, YAMLProcess
config = new YAMLProcessor(this.configFile, true, YAMLFormat.EXTENDED);
loadConfiguration();
logger.info("WorldGuard: Loaded configuration for world '" + worldName + '"');
plugin.getLogger().info("Loaded configuration for world '" + worldName + '"');
}
private boolean getBoolean(String node, boolean def) {
@ -279,7 +276,7 @@ private void loadConfiguration() {
try {
config.load();
} catch (IOException e) {
WorldGuardPlugin.logger.severe("Error reading configuration for world " + worldName + ": ");
plugin.getLogger().severe("Error reading configuration for world " + worldName + ": ");
e.printStackTrace();
}
@ -384,7 +381,7 @@ private void loadConfiguration() {
CreatureType creature = CreatureType.fromName(creatureName);
if (creature == null) {
logger.warning("WorldGuard: Unknown mob type '" + creatureName + "'");
plugin.getLogger().warning("Unknown mob type '" + creatureName + "'");
} else {
blockCreatureSpawn.add(creature);
}
@ -424,52 +421,52 @@ private void loadConfiguration() {
this.blacklist = null;
} else {
this.blacklist = blist;
logger.log(Level.INFO, "WorldGuard: Blacklist loaded.");
plugin.getLogger().log(Level.INFO, "Blacklist loaded.");
BlacklistLogger blacklistLogger = blist.getLogger();
if (logDatabase) {
blacklistLogger.addHandler(new DatabaseLoggerHandler(dsn, user, pass, table, worldName));
blacklistLogger.addHandler(new DatabaseLoggerHandler(dsn, user, pass, table, worldName, plugin.getLogger()));
}
if (logConsole) {
blacklistLogger.addHandler(new ConsoleLoggerHandler(worldName));
blacklistLogger.addHandler(new ConsoleLoggerHandler(worldName, plugin.getLogger()));
}
if (logFile) {
FileLoggerHandler handler =
new FileLoggerHandler(logFilePattern, logFileCacheSize, worldName);
new FileLoggerHandler(logFilePattern, logFileCacheSize, worldName, plugin.getLogger());
blacklistLogger.addHandler(handler);
}
}
} catch (FileNotFoundException e) {
logger.log(Level.WARNING, "WorldGuard blacklist does not exist.");
plugin.getLogger().log(Level.WARNING, "WorldGuard blacklist does not exist.");
} catch (IOException e) {
logger.log(Level.WARNING, "Could not load WorldGuard blacklist: "
plugin.getLogger().log(Level.WARNING, "Could not load WorldGuard blacklist: "
+ e.getMessage());
}
// Print an overview of settings
if (getBoolean("summary-on-start", true)) {
logger.log(Level.INFO, blockTNTExplosions
? "WorldGuard: (" + worldName + ") TNT ignition is blocked."
: "WorldGuard: (" + worldName + ") TNT ignition is PERMITTED.");
logger.log(Level.INFO, blockLighter
? "WorldGuard: (" + worldName + ") Lighters are blocked."
: "WorldGuard: (" + worldName + ") Lighters are PERMITTED.");
logger.log(Level.INFO, preventLavaFire
? "WorldGuard: (" + worldName + ") Lava fire is blocked."
: "WorldGuard: (" + worldName + ") Lava fire is PERMITTED.");
plugin.getLogger().log(Level.INFO, blockTNTExplosions
? "(" + worldName + ") TNT ignition is blocked."
: "(" + worldName + ") TNT ignition is PERMITTED.");
plugin.getLogger().log(Level.INFO, blockLighter
? "(" + worldName + ") Lighters are blocked."
: "(" + worldName + ") Lighters are PERMITTED.");
plugin.getLogger().log(Level.INFO, preventLavaFire
? "(" + worldName + ") Lava fire is blocked."
: "(" + worldName + ") Lava fire is PERMITTED.");
if (disableFireSpread) {
logger.log(Level.INFO, "WorldGuard: (" + worldName + ") All fire spread is disabled.");
plugin.getLogger().log(Level.INFO, "(" + worldName + ") All fire spread is disabled.");
} else {
if (disableFireSpreadBlocks.size() > 0) {
logger.log(Level.INFO, "WorldGuard: (" + worldName
plugin.getLogger().log(Level.INFO, "(" + worldName
+ ") Fire spread is limited to "
+ disableFireSpreadBlocks.size() + " block types.");
} else {
logger.log(Level.INFO, "WorldGuard: (" + worldName
plugin.getLogger().log(Level.INFO, "(" + worldName
+ ") Fire spread is UNRESTRICTED.");
}
}

View File

@ -65,11 +65,6 @@
* @author sk89q
*/
public class WorldGuardBlockListener implements Listener {
/**
* Logger for messages.
*/
@SuppressWarnings("unused")
private static final Logger logger = Logger.getLogger("Minecraft.WorldGuard");
private WorldGuardPlugin plugin;

View File

@ -79,11 +79,6 @@
* @author sk89q
*/
public class WorldGuardEntityListener implements Listener {
/**
* Logger for messages.
*/
@SuppressWarnings("unused")
private static final Logger logger = Logger.getLogger("Minecraft.WorldGuard");
private WorldGuardPlugin plugin;

View File

@ -75,11 +75,6 @@
*/
public class WorldGuardPlayerListener implements Listener {
/**
* Logger for messages.
*/
private static final Logger logger = Logger.getLogger("Minecraft.WorldGuard");
private WorldGuardPlugin plugin;
/**
@ -252,7 +247,7 @@ public void onPlayerJoin(PlayerJoinEvent event) {
}
if (removed > 10) {
logger.info("WG Halt-Act: " + removed + " entities (>10) auto-removed from "
plugin.getLogger().info("Halt-Act: " + removed + " entities (>10) auto-removed from "
+ player.getWorld().toString());
}
}

View File

@ -33,9 +33,9 @@
import java.util.logging.Logger;
import java.util.zip.ZipEntry;
import com.sk89q.bukkit.util.CommandsManagerRegistration;
import com.sk89q.minecraft.util.commands.*;
import com.sk89q.wepif.PermissionsResolverManager;
import com.sk89q.worldguard.util.CommandRegistration;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.World;
@ -62,10 +62,6 @@
* @author sk89q
*/
public class WorldGuardPlugin extends JavaPlugin {
/**
* Logger for messages.
*/
static final Logger logger = Logger.getLogger("Minecraft.WorldGuard");
/**
* Manager for commands. This automatically handles nested commands,
@ -116,7 +112,7 @@ public void onEnable() {
commands.setInjector(new SimpleInjector(this));
// Register command classes
final CommandRegistration reg = new CommandRegistration(this, commands);
final CommandsManagerRegistration reg = new CommandsManagerRegistration(this, commands);
reg.register(ToggleCommands.class);
reg.register(ProtectionCommands.class);
@ -185,8 +181,6 @@ public void run() {
}
}
}
logger.info("WorldGuard " + this.getDescription().getVersion() + " enabled.");
}
/**
@ -196,8 +190,6 @@ public void onDisable() {
globalRegionManager.unload();
configuration.unload();
this.getServer().getScheduler().cancelTasks(this);
logger.info("WorldGuard " + getDescription().getVersion() + " disabled.");
}
/**
@ -693,7 +685,7 @@ public void createDefaultConfiguration(File actual,
if (copy == null) throw new FileNotFoundException();
input = file.getInputStream(copy);
} catch (IOException e) {
logger.severe(getDescription().getName() + ": Unable to read default configuration: " + defaultName);
getLogger().severe("Unable to read default configuration: " + defaultName);
}
if (input != null) {
@ -707,7 +699,7 @@ public void createDefaultConfiguration(File actual,
output.write(buf, 0, length);
}
logger.info("WorldGuard: Default configuration file written: "
getLogger().info("Default configuration file written: "
+ actual.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();

View File

@ -28,12 +28,6 @@
public class WorldGuardVehicleListener implements Listener {
/**
* Logger for messages.
*/
@SuppressWarnings("unused")
private static final Logger logger = Logger.getLogger("Minecraft.WorldGuard");
private WorldGuardPlugin plugin;
/**

View File

@ -36,12 +36,6 @@
public class WorldGuardWeatherListener implements Listener {
/**
* Logger for messages.
*/
@SuppressWarnings("unused")
private static final Logger logger = Logger.getLogger("Minecraft.WorldGuard");
/**
* Plugin.
*/

View File

@ -16,11 +16,6 @@
public class WorldGuardWorldListener implements Listener {
/**
* Logger for messages.
*/
private static final Logger logger = Logger.getLogger("Minecraft.WorldGuard");
private WorldGuardPlugin plugin;
/**
@ -57,7 +52,7 @@ public void onChunkLoad(ChunkLoadEvent event) {
}
if (removed > 50) {
logger.info("WG Halt-Act: " + removed + " entities (>50) auto-removed from "
plugin.getLogger().info("Halt-Act: " + removed + " entities (>50) auto-removed from "
+ event.getChunk().toString());
}
}

View File

@ -51,8 +51,6 @@
*/
public class GlobalRegionManager {
private static final Logger logger = Logger.getLogger("Minecraft.WorldGuard");
/**
* Reference to the plugin.
*/
@ -141,12 +139,12 @@ public RegionManager load(World world) {
try {
if (!config.useSqlDatabase) {
file = getPath(name);
database = new YAMLDatabase(file);
database = new YAMLDatabase(file, plugin.getLogger());
// Store the last modification date so we can track changes
lastModified.put(name, file.lastModified());
} else {
database = new MySQLDatabase(config, name);
database = new MySQLDatabase(config, name, plugin.getLogger());
}
// Create a manager
@ -155,22 +153,22 @@ public RegionManager load(World world) {
managers.put(name, manager);
manager.load();
logger.info("WorldGuard: " + manager.getRegions().size()
plugin.getLogger().info(manager.getRegions().size()
+ " regions loaded for '" + name + "'");
return manager;
} catch (ProtectionDatabaseException e) {
String logStr = "WorldGuard: Failed to load regions from ";
String logStr = "Failed to load regions from ";
if (config.useSqlDatabase) {
logStr += "SQL Database <" + config.sqlDsn + "> ";
} else {
logStr += "file \"" + file + "\" ";
}
logger.info(logStr + " : " + e.getMessage());
plugin.getLogger().info(logStr + " : " + e.getMessage());
e.printStackTrace();
} catch (Exception e) {
logger.info("WorldGuard: Error loading regions for world \""
plugin.getLogger().info("Error loading regions for world \""
+ name + "\": " + e.toString() + "\n\t" + e.getMessage());
e.printStackTrace();
}

View File

@ -48,12 +48,12 @@
* @author sk89q
*/
public class CSVDatabase extends AbstractProtectionDatabase {
private static Logger logger = Logger.getLogger("Minecraft.WorldGuard");
private final Logger logger;
/**
* References the CSV file.
*/
private File file;
private final File file;
/**
* Holds the list of regions.
*/
@ -65,8 +65,9 @@ public class CSVDatabase extends AbstractProtectionDatabase {
*
* @param file
*/
public CSVDatabase(File file) {
public CSVDatabase(File file, Logger logger) {
this.file = file;
this.logger = logger;
}
/**

View File

@ -48,8 +48,7 @@
import com.sk89q.worldguard.protection.regions.ProtectedRegion.CircularInheritanceException;
public class MySQLDatabase extends AbstractProtectionDatabase {
private static Logger logger = Logger.getLogger("Minecraft.WorldGuard");
private final Logger logger;
private Map<String, ProtectedRegion> regions;
@ -58,15 +57,16 @@ public class MySQLDatabase extends AbstractProtectionDatabase {
private Map<String, ProtectedRegion> globalRegions;
private Map<ProtectedRegion, String> parentSets;
private ConfigurationManager config;
private final ConfigurationManager config;
private Connection conn;
private String world;
private int worldDbId = -1; // The database will never have an id of -1;
public MySQLDatabase(ConfigurationManager config, String world) throws ProtectionDatabaseException {
public MySQLDatabase(ConfigurationManager config, String world, Logger logger) throws ProtectionDatabaseException {
this.config = config;
this.world = world;
this.logger = logger;
try {
connect();
@ -264,6 +264,7 @@ private void loadGlobal() {
Throwable t = ex.getCause();
while (t != null) {
logger.warning("\t\tCause: " + t.getMessage());
t = t.getCause();
}
}
@ -336,6 +337,7 @@ private void loadCuboid() {
Throwable t = ex.getCause();
while (t != null) {
logger.warning("\t\tCause: " + t.getMessage());
t = t.getCause();
}
}
@ -409,6 +411,7 @@ private void loadPoly2d() {
Throwable t = ex.getCause();
while (t != null) {
logger.warning("\t\tCause: " + t.getMessage());
t = t.getCause();
}
}

View File

@ -47,12 +47,12 @@
public class YAMLDatabase extends AbstractProtectionDatabase {
private static Logger logger = Logger.getLogger("Minecraft.WorldGuard");
private YAMLProcessor config;
private Map<String, ProtectedRegion> regions;
private final Logger logger;
public YAMLDatabase(File file) throws ProtectionDatabaseException, FileNotFoundException {
public YAMLDatabase(File file, Logger logger) throws ProtectionDatabaseException, FileNotFoundException {
this.logger = logger;
if (!file.exists()) { // shouldn't be necessary, but check anyways
try {
file.createNewFile();

View File

@ -72,7 +72,7 @@ protected Set<String> getWorldsFromOld() {
protected Map<String, ProtectedRegion> getRegionsForWorldFromOld(String world) throws MigrationException {
ProtectionDatabase oldDatabase;
try {
oldDatabase = new MySQLDatabase(plugin.getGlobalStateManager(), world);
oldDatabase = new MySQLDatabase(plugin.getGlobalStateManager(), world, plugin.getLogger());
oldDatabase.load();
} catch (ProtectionDatabaseException e) {
throw new MigrationException((Exception) e);
@ -87,7 +87,7 @@ protected ProtectionDatabase getNewWorldStorage(String world) throws MigrationEx
File file = new File(plugin.getDataFolder(),
"worlds" + File.separator + world + File.separator + "regions.yml");
return new YAMLDatabase(file);
return new YAMLDatabase(file, plugin.getLogger());
} catch (FileNotFoundException e) {
throw new MigrationException((Exception) e);
} catch (ProtectionDatabaseException e) {

View File

@ -63,7 +63,7 @@ protected Set<String> getWorldsFromOld() {
protected Map<String, ProtectedRegion> getRegionsForWorldFromOld(String world) throws MigrationException {
ProtectionDatabase oldDatabase;
try {
oldDatabase = new YAMLDatabase(this.regionYamlFiles.get(world));
oldDatabase = new YAMLDatabase(this.regionYamlFiles.get(world), plugin.getLogger());
oldDatabase.load();
} catch (FileNotFoundException e) {
throw new MigrationException((Exception) e);
@ -77,7 +77,7 @@ protected Map<String, ProtectedRegion> getRegionsForWorldFromOld(String world) t
@Override
protected ProtectionDatabase getNewWorldStorage(String world) throws MigrationException {
try {
return new MySQLDatabase(plugin.getGlobalStateManager(), world);
return new MySQLDatabase(plugin.getGlobalStateManager(), world, plugin.getLogger());
} catch (ProtectionDatabaseException e) {
throw new MigrationException((Exception) e);
}

View File

@ -1,139 +0,0 @@
/*
* WorldGuard
* Copyright (C) 2011 sk89q <http://www.sk89q.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.sk89q.worldguard.util;
import com.sk89q.minecraft.util.commands.Command;
import com.sk89q.minecraft.util.commands.CommandsManager;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandMap;
import org.bukkit.command.CommandSender;
import org.bukkit.command.SimpleCommandMap;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.plugin.Plugin;
import java.util.*;
/**
* A helper class for dynamic command registration, including support for fallback methods.
*/
public class CommandRegistration {
private final Plugin plugin;
private final CommandsManager<?> commands;
private CommandMap fallbackCommands;
public CommandRegistration(Plugin plugin, CommandsManager<?> commands) {
this.plugin = plugin;
this.commands = commands;
}
public boolean register(Class<?> clazz) {
List<Command> registered = commands.registerAndReturn(clazz);
CommandMap commandMap = getCommandMap();
if (registered == null || commandMap == null) {
return false;
}
for (Command command : registered) {
commandMap.register(plugin.getDescription().getName(), new DynamicPluginCommand(command, plugin));
}
return true;
}
private CommandMap getCommandMap() {
CommandMap commandMap = ReflectionUtil.getField(plugin.getServer().getPluginManager(), "commandMap");
if (commandMap == null) {
if (fallbackCommands != null) {
commandMap = fallbackCommands;
} else {
Bukkit.getServer().getLogger().warning(plugin.getDescription().getName() +
": Could not retrieve server CommandMap! Please report to http://redmine.sk89q.com");
fallbackCommands = commandMap = new SimpleCommandMap(Bukkit.getServer());
Bukkit.getServer().getPluginManager().registerEvents(new FallbackRegistrationListener(fallbackCommands), plugin);
}
}
return commandMap;
}
public boolean unregisterCommands() {
CommandMap commandMap = getCommandMap();
List<String> toRemove = new ArrayList<String>();
Map<String, org.bukkit.command.Command> knownCommands = ReflectionUtil.getField(commandMap, "knownCommands");
Set<String> aliases = ReflectionUtil.getField(commandMap, "aliases");
if (knownCommands == null || aliases == null) {
return false;
}
for (Iterator<org.bukkit.command.Command> i = knownCommands.values().iterator(); i.hasNext();) {
org.bukkit.command.Command cmd = i.next();
if (cmd instanceof DynamicPluginCommand && ((DynamicPluginCommand) cmd).getPlugin().equals(plugin)) {
i.remove();
for (String alias : cmd.getAliases()) {
org.bukkit.command.Command aliasCmd = knownCommands.get(alias);
if (cmd.equals(aliasCmd)) {
aliases.remove(alias);
toRemove.add(alias);
}
}
}
}
for (String string : toRemove) {
knownCommands.remove(string);
}
return true;
}
public static class DynamicPluginCommand extends org.bukkit.command.Command {
protected final Plugin plugin;
public DynamicPluginCommand(Command command, Plugin plugin) {
super(command.aliases()[0], command.desc(), command.usage(), Arrays.asList(command.aliases()));
this.plugin = plugin;
}
@Override
public boolean execute(CommandSender sender, String label, String[] args) {
return plugin.onCommand(sender, this, label, args);
}
public Plugin getPlugin() {
return plugin;
}
}
public static class FallbackRegistrationListener implements Listener {
private final CommandMap commandRegistration;
public FallbackRegistrationListener(CommandMap commandRegistration) {
this.commandRegistration = commandRegistration;
}
@EventHandler
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
if (event.isCancelled()) {
return;
}
if (commandRegistration.dispatch(event.getPlayer(), event.getMessage())) {
event.setCancelled(true);
}
}
}
}