package op;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitScheduler;
public class startop extends JavaPlugin {
List<String> legalOps = new ArrayList<String>(); //Лист с легальными опами
FileConfiguration config;
@Override
public void onEnable()
{
this.saveDefaultConfig();
this.config = this.getConfig();
this.getLogger().info("[OP-Password-Safe] Plugin is enabled!");
BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
scheduler.scheduleSyncRepeatingTask(this, new Runnable()
{
public void run()
{
for(Player player : Bukkit.getOnlinePlayers())
{
if(!player.isOp())
continue;
if(!isLegalOp(player))
{
player.sendMessage(ChatColor.RED + "Illegal op detected!");
player.setOp(false);
legalOps.remove(player);
}
}
}
}, 0L, 60L);
}
@Override
public void onDisable()
{
this.getLogger().info("[OP-Password-Safe] Plugin is disabled!");
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String command, String[] args)
{
//Player plr = (Player) sender; //Да мне срать, пускай и консоль юзает пароль и самоопается >:D
//^Exception при написанни комманд в консоли
//Говнофикс:
if(!(sender instanceof Player))
{
sender.sendMessage("This command avalible only for players");
return true;
}
Player plr = (Player)sender;
switch (command)
{
case "ops_reload":
if (plr.hasPermission("ops.reload"))
{
this.reloadConfig();
this.config = this.getConfig();
plr.sendMessage(ChatColor.translateAlternateColorCodes('&', this.config.getString("messages.pluginReloaded")));
return true;
}
else
{
plr.sendMessage(ChatColor.translateAlternateColorCodes('&', this.config.getString("messages.noPerms")));
return false;
}
case "op":
if (plr.hasPermission("ops.op"))
{
this.doitCommand(plr, args, true);
return true;
}
else
{
plr.sendMessage(ChatColor.translateAlternateColorCodes('&', this.config.getString("messages.noPerms")));
return false;
}
case "deop":
if (plr.hasPermission("ops.deop"))
{
this.doitCommand(plr, args, false);
return true;
} else
{
plr.sendMessage(ChatColor.translateAlternateColorCodes('&', this.config.getString("messages.noPerms")));
return false;
}
case "oplist"://Список опов
if (plr.hasPermission("ops.oplist"))
{
showOplist((Player)sender);
return true;
} else
{
plr.sendMessage(ChatColor.translateAlternateColorCodes('&', this.config.getString("messages.noPerms")));
return false;
}
}
return false;
}
public void doitCommand(Player player, String[] args, boolean setOp)
{
if (args.length == 1)
{
if (args[0].equals(this.config.getString(setOp ? "password.op" : "password.deop")))
{
player.setOp(setOp);
player.sendMessage(setOp ? tl("messages.opped") : tl("messages.deopped"));
legalOP(player, setOp);
}
else
{
player.sendMessage(tl("messages.noPerms"));
}
}
else if (args.length == 2)
{
Player other = this.getServer().getPlayer(args[1]);
if (args[0].equals(this.config.getString(setOp ? "password.op" : "password.deop")))
{
if (other != null)
{
other.setOp(setOp);
other.sendMessage(setOp ? tl("messages.opped") : tl("messages.deopped"));
player.sendMessage(setOp ? tl("messages.playerOpped").replace("%p", other.getName()) : tl("messages.playerDeopped").replace("%p", other.getName()));
legalOP(player, setOp);
}
else
{
player.sendMessage(tl("messages.playerOffline"));
}
}
else
{
player.sendMessage(tl("messages.noPerms"));
}
}
else
{
player.sendMessage(setOp ? tl("messages.opUse") : tl("messages.deopUse"));
}
}
private String tl(String string)
{
return ChatColor.translateAlternateColorCodes('&', this.config.getString(string));
}
//Изменяет спиосок ЛЕГАЛЬНЫХ опов, и синхронизирует его с конфигом
private void legalOP(Player player, boolean setOP)
{
if(setOP)
legalOps.add(player.getName());
else
if(legalOps.contains(player.getName()))
legalOps.remove(player.getName());
config.set("legalOps", legalOps);
saveConfig();
}
private boolean isLegalOp(Player player)
{
boolean contains = legalOps.contains(player.getName());
return contains;
}
private void showOplist(Player player)
{
for (String name : legalOps)
{
player.sendMessage(name);
}
}
}