/**
* SwornGuard - a bukkit plugin
* Copyright (C) 2012 - 2014 MineSworn and Affiliates
*
* 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 net.t7seven7t.swornguard;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
import net.dmulloy2.SwornAPI;
import net.dmulloy2.SwornPlugin;
import net.dmulloy2.commands.CmdHelp;
import net.dmulloy2.handlers.CommandHandler;
import net.dmulloy2.handlers.LogHandler;
import net.dmulloy2.handlers.PermissionHandler;
import net.dmulloy2.handlers.ResourceHandler;
import net.dmulloy2.types.Reloadable;
import net.t7seven7t.swornguard.commands.CmdAlt;
import net.t7seven7t.swornguard.commands.CmdBanInfo;
import net.t7seven7t.swornguard.commands.CmdFHistory;
import net.t7seven7t.swornguard.commands.CmdIP;
import net.t7seven7t.swornguard.commands.CmdInfo;
import net.t7seven7t.swornguard.commands.CmdLeaderboard;
import net.t7seven7t.swornguard.commands.CmdLegit;
import net.t7seven7t.swornguard.commands.CmdNote;
import net.t7seven7t.swornguard.commands.CmdRatio;
import net.t7seven7t.swornguard.commands.CmdReload;
import net.t7seven7t.swornguard.commands.CmdSInfo;
import net.t7seven7t.swornguard.commands.CmdShow;
import net.t7seven7t.swornguard.commands.CmdVersion;
import net.t7seven7t.swornguard.commands.jail.CmdCheck;
import net.t7seven7t.swornguard.commands.jail.CmdJail;
import net.t7seven7t.swornguard.commands.jail.CmdJailHelp;
import net.t7seven7t.swornguard.commands.jail.CmdReason;
import net.t7seven7t.swornguard.commands.jail.CmdSet;
import net.t7seven7t.swornguard.commands.jail.CmdStatus;
import net.t7seven7t.swornguard.commands.jail.CmdTime;
import net.t7seven7t.swornguard.commands.jail.CmdUnjail;
import net.t7seven7t.swornguard.commands.patrol.CmdAutoPatrol;
import net.t7seven7t.swornguard.commands.patrol.CmdCheatTeleport;
import net.t7seven7t.swornguard.commands.patrol.CmdPatrol;
import net.t7seven7t.swornguard.commands.patrol.CmdVanish;
import net.t7seven7t.swornguard.commands.patrol.CmdVanishList;
import net.t7seven7t.swornguard.commands.troll.CmdTrollBan;
import net.t7seven7t.swornguard.commands.troll.CmdTrollCheck;
import net.t7seven7t.swornguard.commands.troll.CmdTrollHell;
import net.t7seven7t.swornguard.commands.troll.CmdTrollMute;
import net.t7seven7t.swornguard.detectors.AutoClickerDetector;
import net.t7seven7t.swornguard.detectors.CombatLogDetector;
import net.t7seven7t.swornguard.detectors.CommandDetector;
import net.t7seven7t.swornguard.detectors.FactionBetrayalDetector;
import net.t7seven7t.swornguard.detectors.FlyDetector;
import net.t7seven7t.swornguard.detectors.SpamDetector;
import net.t7seven7t.swornguard.detectors.XrayDetector;
import net.t7seven7t.swornguard.handlers.AutoModerator;
import net.t7seven7t.swornguard.handlers.CheatHandler;
import net.t7seven7t.swornguard.handlers.JailHandler;
import net.t7seven7t.swornguard.handlers.LogFilterHandler;
import net.t7seven7t.swornguard.handlers.PatrolHandler;
import net.t7seven7t.swornguard.handlers.TrollHandler;
import net.t7seven7t.swornguard.integration.EssentialsHandler;
import net.t7seven7t.swornguard.io.PlayerDataCache;
import net.t7seven7t.swornguard.io.PlayerDataServiceProvider;
import net.t7seven7t.swornguard.listeners.BlockListener;
import net.t7seven7t.swornguard.listeners.ChatListener;
import net.t7seven7t.swornguard.listeners.EntityListener;
import net.t7seven7t.swornguard.listeners.FactionsListener;
import net.t7seven7t.swornguard.listeners.PlayerListener;
import net.t7seven7t.swornguard.listeners.ServerListener;
import net.t7seven7t.swornguard.types.Preconditions;
import net.t7seven7t.swornguard.types.ServerData;
import org.bukkit.event.Listener;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.ServicePriority;
import org.bukkit.scheduler.BukkitRunnable;
/**
* @author t7seven7t
*/
public class SwornGuard extends SwornPlugin {
private @Getter ResourceHandler resourceHandler;
private @Getter PlayerDataCache playerDataCache;
private @Getter Preconditions preconditions;
private @Getter TrollHandler trollHandler;
private @Getter ServerData serverData;
private @Getter CheatHandler cheatHandler;
private @Getter AutoModerator autoModerator;
private @Getter PatrolHandler patrolHandler;
private @Getter JailHandler jailHandler;
private @Getter LogFilterHandler logFilterHandler;
private @Getter AutoClickerDetector autoClickerDetector;
private @Getter CombatLogDetector combatLogDetector;
private @Getter CommandDetector commandDetector;
private @Getter FactionBetrayalDetector factionBetrayalDetector;
private @Getter FlyDetector flyDetector;
private @Getter XrayDetector xrayDetector;
private @Getter EssentialsHandler essentialsHandler;
private List<Listener> listeners;
@Override
public void onLoad() {
SwornAPI.checkRegistrations();
}
@Override
public void onEnable() {
long start = System.currentTimeMillis();
logHandler = new LogHandler(this);
saveDefaultConfig();
reloadConfig();
commandHandler = new CommandHandler(this);
permissionHandler = new PermissionHandler(this);
File messages = new File(getDataFolder(), "messages.properties");
if (messages.exists())
messages.delete();
resourceHandler = new ResourceHandler(this, this.getClassLoader());
playerDataCache = new PlayerDataCache(this);
getServer().getServicesManager().register(PlayerDataServiceProvider.class, playerDataCache, this, ServicePriority.Normal);
serverData = new ServerData(this);
preconditions = new Preconditions(this);
trollHandler = new TrollHandler(this);
cheatHandler = new CheatHandler(this);
autoModerator = new AutoModerator(this);
patrolHandler = new PatrolHandler(this);
jailHandler = new JailHandler(this);
commandDetector = new CommandDetector(this);
if (getConfig().getBoolean("autoclickerDetectorEnabled"))
autoClickerDetector = new AutoClickerDetector(this);
if (getConfig().getBoolean("combatLogDetectorEnabled"))
combatLogDetector = new CombatLogDetector(this);
if (getConfig().getBoolean("factionBetrayalDetectorEnabled"))
factionBetrayalDetector = new FactionBetrayalDetector(this);
if (getConfig().getBoolean("flyDetectorEnabled"))
flyDetector = new FlyDetector(this);
if (getConfig().getBoolean("spamDetectorEnabled"))
new SpamDetector.SpamOptions(this);
if (getConfig().getBoolean("xrayDetectorEnabled"))
xrayDetector = new XrayDetector(this);
logFilterHandler = new LogFilterHandler(this);
listeners = new ArrayList<Listener>();
registerListener(new BlockListener(this));
registerListener(new ChatListener(this));
registerListener(new EntityListener(this));
registerListener(new PlayerListener(this));
registerListener(new ServerListener(this));
setupIntegration();
if (getConfig().getBoolean("autosave.enabled", true)) {
int interval = 20 * 60 * getConfig().getInt("autosave.interval", 15);
new BukkitRunnable() {
@Override
public void run() {
playerDataCache.save();
playerDataCache.cleanupData();
}
}.runTaskTimerAsynchronously(this, interval, interval);
}
commandHandler.setCommandPrefix("sg");
commandHandler.registerPrefixedCommand(new CmdBanInfo(this));
commandHandler.registerPrefixedCommand(new CmdHelp(this));
commandHandler.registerPrefixedCommand(new CmdInfo(this));
commandHandler.registerPrefixedCommand(new CmdIP(this));
commandHandler.registerPrefixedCommand(new CmdLegit(this));
commandHandler.registerPrefixedCommand(new CmdNote(this));
commandHandler.registerPrefixedCommand(new CmdRatio(this));
commandHandler.registerPrefixedCommand(new CmdReload(this));
commandHandler.registerPrefixedCommand(new CmdShow(this));
commandHandler.registerPrefixedCommand(new CmdFHistory(this));
commandHandler.registerPrefixedCommand(new CmdSInfo(this));
commandHandler.registerPrefixedCommand(new CmdVersion(this));
commandHandler.registerCommand(new CmdAlt(this));
commandHandler.registerCommand(new CmdAutoPatrol(this));
commandHandler.registerCommand(new CmdCheatTeleport(this));
commandHandler.registerCommand(new CmdPatrol(this));
commandHandler.registerCommand(new CmdVanish(this));
commandHandler.registerCommand(new CmdVanishList(this));
commandHandler.registerCommand(new CmdLeaderboard(this));
commandHandler.registerCommand(new CmdCheck(this));
commandHandler.registerCommand(new CmdJail(this));
commandHandler.registerCommand(new CmdJailHelp(this));
commandHandler.registerCommand(new CmdReason(this));
commandHandler.registerCommand(new CmdSet(this));
commandHandler.registerCommand(new CmdStatus(this));
commandHandler.registerCommand(new CmdTime(this));
commandHandler.registerCommand(new CmdUnjail(this));
commandHandler.registerCommand(new CmdTrollBan(this));
commandHandler.registerCommand(new CmdTrollHell(this));
commandHandler.registerCommand(new CmdTrollMute(this));
commandHandler.registerCommand(new CmdTrollCheck(this));
logHandler.log("{0} has been enabled. Took {1} ms.", getDescription().getFullName(), System.currentTimeMillis() - start);
}
@Override
public void onDisable() {
long start = System.currentTimeMillis();
playerDataCache.save();
jailHandler.saveJail();
getServer().getScheduler().cancelTasks(this);
getServer().getServicesManager().unregisterAll(this);
logHandler.log("{0} has been disabled. Took {1} ms.", getDescription().getFullName(), System.currentTimeMillis() - start);
}
public void registerListener(Listener listener) {
listeners.add(listener);
getServer().getPluginManager().registerEvents(listener, this);
}
// ---- Integration
private void setupIntegration() {
// Factions listener
PluginManager pm = getServer().getPluginManager();
if (pm.isPluginEnabled("SwornNations") || pm.isPluginEnabled("Factions")) {
registerListener(new FactionsListener(this));
}
try {
// Essentials integration
essentialsHandler = new EssentialsHandler(this);
} catch (Throwable ex) { }
}
public boolean isEssentialsEnabled() {
return essentialsHandler != null && essentialsHandler.isEnabled();
}
@Override
public void reload() {
// Config
reloadConfig();
// Handler(s)
logFilterHandler.reload();
// Listeners
for (Listener listener : listeners) {
if (listener instanceof Reloadable) {
((Reloadable) listener).reload();
}
}
}
public String getMessage(String string) {
return resourceHandler.getMessage(string);
}
}