package ru.vlad0sminer.skybans.commands;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import ru.tehkode.permissions.PermissionManager;
import ru.tehkode.permissions.PermissionUser;
import ru.tehkode.permissions.bukkit.PermissionsEx;
import ru.vlad0sminer.skybans.system.FluentHashMap;
import ru.vlad0sminer.skybans.SkyBans;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import static ru.vlad0sminer.skybans.SkyBans.*;
public class CommandBan implements CommandExecutor, Listener {
private static String banMessage = "";
public SkyBans plugin;
private String argsNicknameTarget;
private String senderName;
private int senderPriority;
private CommandSender senderPlayer;
private int port = Bukkit.getServer().getPort();
public CommandBan(SkyBans plugin) {
this.plugin = plugin;
}
@SuppressWarnings("deprecation")
@Override
public boolean onCommand(CommandSender sender, Command cmd, String s, String[] args) {
String checkGroupTarget;
String checkGroupPlayer;
this.senderName = sender.getName();
this.senderPlayer = sender;
if (!sender.hasPermission(banPerm)) {
sender.sendMessage(plugin.pasteMessage("permission_denied", FluentHashMap.of("prefix", "prefix")));
} else {
if (!sender.hasPermission(adminBanPerm) && (!sender.isOp()) && (sender.hasPermission(banPerm))) {
if (args.length > 0) {
for (int i = 1; i < args.length; i++) {
banMessage = String.format("%s%s ", banMessage, args[i]);
}
if (banMessage.equals("")) {
banMessage = plugin.getLocaleConfig().getString("unknown_reason");
}
if (args[0] != null) {
this.argsNicknameTarget = args[0];
Player target = Bukkit.getPlayerExact(args[0]);
PermissionManager manager = PermissionsEx.getPermissionManager();
PermissionUser user = manager.getUser(sender.getName());
List<Integer> targetGroupPriority = new ArrayList<>();
try {
PermissionUser userTarget = manager.getUser(target);
@SuppressWarnings("deprecation") String[] targetArrayGroups = userTarget.getGroupsNames();
for (String targetGroup : targetArrayGroups) {
checkGroupTarget = targetGroup;
try {
targetGroupPriority.add(Integer.parseInt(plugin.getPriorities()
.getString("groups." + checkGroupTarget + ".priority")));
targetGroupPriority.add(Integer.parseInt(plugin.getPlayerPriorities()
.getString("players." + argsNicknameTarget + ".priority")));
} catch (Exception ignored) {
}
targetGroupPriorityMax = Collections.max(targetGroupPriority);
}
} catch (NullPointerException ignored) {
}
@SuppressWarnings("deprecation") String[] playerArrayGroups = user.getGroupsNames();
List<Integer> playerGroupPriorities = new ArrayList<>();
List<Integer> playerGroupLimits = new ArrayList<>();
for (String playerGroup : playerArrayGroups) {
checkGroupPlayer = playerGroup;
try {
playerGroupPriorities.add(Integer.parseInt(plugin.getPriorities()
.getString("groups." + checkGroupPlayer + ".priority")));
playerGroupLimits.add(Integer.parseInt(plugin.getPriorities()
.getString("groups." + checkGroupPlayer + ".limit")));
playerGroupLimits.add(Integer.parseInt(plugin.getPlayerPriorities()
.getString("players." + sender.getName() + ".limit")));
} catch (Exception ignored) {
}
}
playerPrioritiesFile = plugin.getPlayerPriorities()
.getInt("players." + sender.getName() + ".priority");
maxPlayerGroupPriority = Collections.max(playerGroupPriorities);
maxPlayerGroupLimit = Collections.max(playerGroupLimits);
if ((target != null) && (target != sender)) {
if (maxPlayerGroupPriority < playerPrioritiesFile) {
maxPlayerGroupPriority = playerPrioritiesFile;
}
if (maxPlayerGroupPriority > targetGroupPriorityMax) {
target.kickPlayer(plugin.pasteMessage("tempban", FluentHashMap
.of("player", sender.getName())
.with("reason", banMessage)
.with("expires", String.valueOf(maxPlayerGroupLimit))
.with("prefix", "prefix")
.with("time", "time")
.with("ban_date", plugin.formatForDateNow.format(plugin.updateTimeNow()))));
this.senderPriority = maxPlayerGroupPriority;
setTempBanPlayer();
try {
plugin.statement.execute("INSERT INTO `" + plugin.dbName + "`.`reasons` "
+ "(`nickname`, `reason_ban`, `banned_by`, `port`)"
+ " VALUES ('" + target.getName()
+ "', '" + banMessage + "', '" + sender.getName()
+ "', '" + Bukkit.getServer().getPort() + "');");
} catch (SQLException e) {
e.printStackTrace();
}
sender.sendMessage(plugin.pasteMessage("ban", FluentHashMap
.of("player", target.getName())
.with("ban_message", banMessage)
.with("prefix", "prefix")));
} else {
sender.sendMessage(plugin.pasteMessage("your_priority", FluentHashMap
.of("player", String.valueOf(maxPlayerGroupPriority))
.with("target", String.valueOf(targetGroupPriorityMax))
.with("prefix", "prefix")
.with("prefix_2", "prefix")));
}
} else
sender.sendMessage(plugin.pasteMessage("player_not_found", FluentHashMap.of("prefix", "prefix")));
}
}
} else {
if ((args.length > 0) && (args[0] != null)) {
if (sender instanceof ConsoleCommandSender) {
this.senderPriority = 999999999;
} else {
this.senderPriority = 9999999;
}
for (int i = 1; i < args.length; i++) {
banMessage = String.format("%s%s ", banMessage, args[i]);
}
if (banMessage.equals("")) {
banMessage = plugin.getLocaleConfig().getString("unknown_reason");
}
this.senderPlayer = sender;
this.argsNicknameTarget = args[0];
try {
Player target = Bukkit.getPlayerExact(args[0]);
if(target!=sender){
target.sendTitle("Вы получили глобальный бан", "Вас отключило от сервера...");
target.sendMessage("Вы получили глобальный бан \nВас отключило от сервера...\nЧерез несколько секунд Вы окончательно вылетите.");
target.kickPlayer(plugin.pasteMessage("permanent_ban", FluentHashMap
.of("player", senderName)
.with("reason", banMessage)
.with("never", "never")
.with("prefix", "prefix")
.with("ban_date", plugin.formatForDateNow.format(plugin.updateTimeNow()))));
setBanPlayer();
sender.sendMessage(plugin.pasteMessage("ban", FluentHashMap
.of("player", target.getName())
.with("ban_message", banMessage)
.with("prefix", "prefix")));
} else {
sender.sendMessage(plugin.pasteMessage("yourself", FluentHashMap.of("prefix", "prefix")));
}
} catch (NullPointerException e){
setBanPlayer();
sender.sendMessage(plugin.pasteMessage("ban", FluentHashMap
.of("player", argsNicknameTarget)
.with("ban_message", banMessage)
.with("prefix", "prefix")));
sender.sendMessage(plugin.pasteMessage("player_not_online", FluentHashMap.of("prefix", "prefix")));
}
}
}
banMessage = "";
}
return args.length != 0;
}
private void setBanPlayer() {
int global = 0;
if (senderPlayer.hasPermission(adminTempBanPerm)) {
global = 1;
}
try {
plugin.statement.execute("INSERT INTO `" + plugin.dbName + "`.`bans` " +
"(`nickname`, `ban_priority`, `banned_by`, `reason`, `banned_time`, `permanent`, `global`, `port`)" +
" VALUES ('" + argsNicknameTarget + "','" + senderPriority + "', '" + senderName + "','" + banMessage + "','"
+ plugin.formatForDateNow.format(new Date()) + "', '" + 1 + "', '" + global + "', '" + port + "');");
} catch (SQLException e) {
try {
plugin.statement.execute("UPDATE `" + plugin.dbName + "`.`bans` SET" + "`ban_priority` = '" + senderPriority + "', `banned_by` = '" + senderName
+ "', `reason` = '" + banMessage + "', `banned_time` = '" + plugin.formatForDateNow.format(new Date())
+ "', `permanent` = '" + 1 + "'" + ", `global` = '" + global + "', `port` = '" + port + "' " + "WHERE (`nickname` = '" + argsNicknameTarget + "');");
} catch (SQLException ex) {
e.printStackTrace();
}
}
int banTimes = 1;
int bannedTimes = 1;
try {
String sql = "SELECT * FROM " + plugin.dbName + ".history" + " WHERE nickname = '" + senderName + "'";
ResultSet set = plugin.statement.executeQuery(sql);
while (set.next()) {
banTimes = 1 + set.getInt(3);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
try {
String sql = "SELECT * FROM " + plugin.dbName + ".history" + " WHERE nickname = '" + argsNicknameTarget + "'";
ResultSet set = plugin.statement.executeQuery(sql);
while (set.next()) {
bannedTimes = 1 + set.getInt(8);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
try {
plugin.statement.execute("INSERT INTO `" + plugin.dbName + "`.`history` "
+ "(`nickname`, `bans`)" + " VALUES ('" + senderName + "', '" + banTimes + "');");
} catch (SQLException e) {
try {
plugin.statement.execute("UPDATE `" + plugin.dbName + "`.`history` SET"
+ "`bans` = '" + banTimes + "' WHERE (`nickname` = '" + senderName + "');");
} catch (SQLException ex) {
ex.printStackTrace();
}
}
try {
plugin.statement.execute("INSERT INTO `" + plugin.dbName + "`.`history` "
+ "(`nickname`, `banned_times`)" + " VALUES ('" + argsNicknameTarget + "', '" + bannedTimes + "');");
} catch (SQLException e) {
try {
plugin.statement.execute("UPDATE `" + plugin.dbName + "`.`history` SET"
+ " `banned_times` = '" + bannedTimes + "' WHERE (`nickname` = '" + argsNicknameTarget + "');");
} catch (SQLException ex) {
ex.printStackTrace();
}
}
Bukkit.broadcast(plugin.pasteMessage("player_ban_target", FluentHashMap
.of("prefix", "prefix")
.with("player", senderName)
.with("target", argsNicknameTarget)
.with("reason", banMessage)), defaultPerm);
}
private void setTempBanPlayer() {
int global = 0;
if (senderPlayer.hasPermission(adminTempBanPerm)) {
global = 1;
}
try {
plugin.statement.execute("INSERT INTO `" + plugin.dbName + "`.`bans` " +
"(`nickname`, `ban_priority`, `banned_by`, `reason`, `banned_time`, `permanent`, `ban_time`, `ban_date_on_milliseconds`, `global`, `port`)" +
" VALUES ('" + argsNicknameTarget
+ "','" + senderPriority + "', '" + senderName
+ "','" + banMessage + "','" + plugin.formatForDateNow.format(new Date()) + "', '" + 0 + "', '"
+ maxPlayerGroupLimit + "', '" + plugin.updateTimeNow() + "', '" + global + "', '" + port + "');");
} catch (SQLException e) {
try {
plugin.statement.execute("UPDATE `" + plugin.dbName + "`.`bans` SET" + "`ban_priority` = '" + senderPriority + "', `banned_by` = '" + senderName
+ "', `reason` = '" + banMessage + "', `banned_time` = '" + plugin.formatForDateNow.format(new Date())
+ "', `permanent` = '" + 0 + "', `ban_time` = '" + maxPlayerGroupLimit + "', `ban_date_on_milliseconds` = '" + plugin.updateTimeNow()
+ "'" + ", `global` = '" + global + "', `port` = '" + port + "' " + "WHERE (`nickname` = '" + argsNicknameTarget + "');");
} catch (SQLException ex) {
e.printStackTrace();
}
}
int bans = 1;
int tempBannedTimes = 1;
int bannedTimes = 1;
try {
String sql = "SELECT * FROM " + plugin.dbName + ".history" + " WHERE nickname = '" + senderName + "'";
ResultSet set = plugin.statement.executeQuery(sql);
while (set.next()) {
bans = 1 + set.getInt(3);
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
String sql = "SELECT * FROM " + plugin.dbName + ".history" + " WHERE nickname = '" + argsNicknameTarget + "'";
ResultSet set = plugin.statement.executeQuery(sql);
while (set.next()) {
tempBannedTimes = 1 + set.getInt(12);
bannedTimes = 1 + set.getInt(8);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
try {
plugin.statement.execute("INSERT INTO `" + plugin.dbName + "`.`history` "
+ "(`nickname`, `bans`)" + " VALUES ('" + senderName + "', '" + bans + "');");
} catch (SQLException e) {
try {
plugin.statement.execute("UPDATE `" + plugin.dbName + "`.`history` SET"
+ "`bans` = '" + bans + "' WHERE (`nickname` = '" + senderName + "');");
} catch (SQLException ex) {
ex.printStackTrace();
}
}
if (senderPriority < 9999999) {
try {
plugin.statement.execute("INSERT INTO `" + plugin.dbName + "`.`history` "
+ "(`nickname`, `tempbanned_times`)" + " VALUES ('" + argsNicknameTarget + "', '" + tempBannedTimes + "');");
} catch (SQLException e) {
try {
plugin.statement.execute("UPDATE `" + plugin.dbName + "`.`history` SET"
+ " `tempbanned_times` = '" + tempBannedTimes + "' WHERE (`nickname` = '" + argsNicknameTarget + "');");
} catch (SQLException ex) {
ex.printStackTrace();
}
}
} else {
try {
plugin.statement.execute("INSERT INTO `" + plugin.dbName + "`.`history` "
+ "(`nickname`, `banned_times`)" + " VALUES ('" + argsNicknameTarget + "', '" + bannedTimes + "');");
} catch (SQLException e) {
try {
plugin.statement.execute("UPDATE `" + plugin.dbName + "`.`history` SET"
+ " `banned_times` = '" + bannedTimes + "' WHERE (`nickname` = '" + argsNicknameTarget + "');");
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
Bukkit.broadcast(plugin.pasteMessage("player_ban_target", FluentHashMap
.of("prefix", "prefix")
.with("player", senderName)
.with("target", argsNicknameTarget)
.with("reason", banMessage)), defaultPerm);
Bukkit.broadcast(plugin.pasteMessage("tempban_broadcast", FluentHashMap
.of("prefix", "prefix")
.with("player", senderName)
.with("target", argsNicknameTarget)
.with("ban_time", String.valueOf(maxPlayerGroupLimit))
.with("reason", banMessage)), adminBanPerm);
}
}