/* * PermissionsEx - Permissions plugin for Bukkit * Copyright (C) 2011 t3hk0d3 http://www.tehkode.ru * * 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 2 * 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package pex.permissions.bukkit; import java.io.File; import java.util.logging.Level; import java.util.logging.Logger; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; import net.minecraft.command.ServerCommandManager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.server.MinecraftServer; import net.minecraft.util.ChatMessageComponent; import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.common.Configuration; import pex.permissions.CommandHandler; import pex.permissions.IPermissions; import pex.permissions.PermissionBackend; import pex.permissions.PermissionGroup; import pex.permissions.PermissionManager; import pex.permissions.PermissionUser; import pex.permissions.backends.FileBackend; import pex.permissions.backends.SQLBackend; import pex.permissions.bukkit.commands.GroupCommands; import pex.permissions.bukkit.commands.PromotionCommands; import pex.permissions.bukkit.commands.UserCommands; import pex.permissions.bukkit.commands.UtilityCommands; import pex.permissions.bukkit.commands.WorldCommands; import pex.permissions.commands.CommandsManager; import pex.permissions.exceptions.PermissionsNotAvailable; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.IPlayerTracker; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.event.FMLServerStartedEvent; import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.registry.GameRegistry; @Mod(modid = "PermissionsEx", name = "PermissionsEx", version = "1.5.0.0") @NetworkMod(clientSideRequired = false, serverSideRequired = true) public class PermissionsEx implements IPermissions { @Mod.Instance("PermissionsEx") public static PermissionsEx instance; protected static final Logger logger = Logger.getLogger("PermissionsEx"); protected PermissionManager permissionsManager; protected CommandsManager commandsManager; protected Configuration config; protected File configFile; // protected BukkitPermissions superms; public PermissionsEx() { logger.setParent(FMLLog.getLogger()); PermissionBackend.registerBackendAlias("sql", SQLBackend.class); PermissionBackend.registerBackendAlias("file", FileBackend.class); logger.log(Level.INFO, "[PermissionsEx] PermissionEx plugin initialized."); } @EventHandler public void onLoad(FMLPreInitializationEvent ev) { configFile = ev.getSuggestedConfigurationFile(); config = new Configuration(configFile); commandsManager = new CommandsManager(this); permissionsManager = new PermissionManager(config); config.save(); } @EventHandler public void modsLoaded(FMLServerStartedEvent var1) { ServerCommandManager mgr = (ServerCommandManager) MinecraftServer.getServer().getCommandManager(); mgr.registerCommand(new CommandHandler()); onEnable(); } public void onEnable() { if (permissionsManager == null) { permissionsManager = new PermissionManager(config); config.save(); } // Register commands commandsManager.register(new UserCommands()); commandsManager.register(new GroupCommands()); commandsManager.register(new PromotionCommands()); commandsManager.register(new WorldCommands()); commandsManager.register(new UtilityCommands()); // Register Player permissions cleaner PlayerEventsListener cleaner = new PlayerEventsListener(); cleaner.logLastPlayerLogin = config.get("permissions", "log-players", cleaner.logLastPlayerLogin).getBoolean(cleaner.logLastPlayerLogin); GameRegistry.registerPlayerTracker(cleaner); // register service // this.getServer().getServicesManager().register(PermissionManager.class, // this.permissionsManager, this, ServicePriority.Normal); /* * ConfigurationSection dinnerpermsConfig = * this.config.getConfigurationSection("permissions.superperms"); * * if (dinnerpermsConfig == null) { dinnerpermsConfig = * this.config.createSection("permissions.superperms"); } * * this.superms = new BukkitPermissions(this, dinnerpermsConfig); * * this.superms.updateAllPlayers(); */ config.save(); // Start timed permissions cleaner timer permissionsManager.initTimer(); logger.log(Level.INFO, "[PermissionsEx] enabled"); } public void onDisable() { if (permissionsManager != null) { permissionsManager.end(); } // this.getServer().getServicesManager().unregister(PermissionManager.class, // this.permissionsManager); logger.log(Level.INFO, "[PermissionsEx] disabled successfully."); } public boolean onCommand(ICommandSender sender, CommandBase command, String commandLabel, String[] args) { if (args.length > 0) { return commandsManager.execute(sender, command, args); } else { if (sender instanceof EntityPlayer) { sendChatToPlayer(sender, "[" + EnumChatFormatting.RED + "PermissionsEx" + EnumChatFormatting.WHITE + "]"); return !permissionsManager.has((EntityPlayer) sender, "permissions.manage"); } else { sendChatToPlayer(sender, "[PermissionsEx]"); return false; } } } public Configuration getConfig() { return config; } public static PermissionsEx getPlugin() { return instance; } public static boolean isAvailable() { PermissionsEx plugin = getPlugin(); return plugin instanceof PermissionsEx && plugin.permissionsManager != null; } public static PermissionManager getPermissionManager() { if (!isAvailable()) { throw new PermissionsNotAvailable(); } return getPlugin().permissionsManager; } @Override public PermissionUser getUser(EntityPlayer player) { return getPermissionManager().getUser(player); } @Override public PermissionUser getUser(String name) { return getPermissionManager().getUser(name); } @Override public PermissionGroup getGroup(String name) { return getPermissionManager().getGroup(name); } @Override public boolean has(EntityPlayer player, String permission) { return permissionsManager.has(player, permission); } @Override public boolean has(EntityPlayer player, String permission, String world) { return permissionsManager.has(player, permission, world); } @Override public boolean has(String player, String permission, String world) { return permissionsManager.has(player, permission, world); } @Override public String prefix(String player, String world) { return permissionsManager.getUser(player).getPrefix(world); } @Override public String suffix(String player, String world) { return permissionsManager.getUser(player).getSuffix(world); } public class PlayerEventsListener implements IPlayerTracker { protected boolean logLastPlayerLogin = false; @Override public void onPlayerLogin(EntityPlayer event) { if (!logLastPlayerLogin) { return; } PermissionUser user = getPermissionManager().getUser(event); user.setOption("last-login-time", Long.toString(System.currentTimeMillis() / 1000L)); // user.setOption("last-login-ip", // event.getPlayer().getAddress().getAddress().getHostAddress()); // // somehow this won't work } @Override public void onPlayerLogout(EntityPlayer event) { if (logLastPlayerLogin) { getPermissionManager().getUser(event).setOption("last-logout-time", Long.toString(System.currentTimeMillis() / 1000L)); } getPermissionManager().resetUser(event.username); } @Override public void onPlayerChangedDimension(EntityPlayer player) { } @Override public void onPlayerRespawn(EntityPlayer player) { } } public static void sendChatToPlayer(EntityPlayer entity, String msg) { entity.sendChatToPlayer(ChatMessageComponent.createFromText(msg)); } public static void sendChatToPlayer(ICommandSender sender, String msg) { sender.sendChatToPlayer(ChatMessageComponent.createFromText(msg)); } }