Add banip and unbanip commands, fix minor issues
This commit is contained in:
parent
4fd4cc81f9
commit
3f4a9f6f36
8 changed files with 868 additions and 7 deletions
|
|
@ -33,6 +33,10 @@ public class Ban implements CommandExecutor {
|
|||
}
|
||||
|
||||
private boolean banCommand(Player p, String[] args) {
|
||||
if(!p.hasPermission("banhammer.ban")) {
|
||||
p.sendMessage(TextUtils.colorString(addPrefix(plugin.translations.getString("command.ban.noPermission"))));
|
||||
return false;
|
||||
}
|
||||
if(args.length==0) p.sendMessage(TextUtils.colorString(addPrefix(plugin.translations.getString("command.ban.usage"))));
|
||||
else if(args.length>=1) {
|
||||
Player target = Bukkit.getPlayer(args[0]);
|
||||
|
|
@ -89,6 +93,22 @@ public class Ban implements CommandExecutor {
|
|||
|
||||
if(Objects.equals(duration, "-1") || Objects.equals(duration, "perm")) banEndDate = null;
|
||||
|
||||
try {
|
||||
Connection conn = plugin.db.getConnection();
|
||||
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM player_bans WHERE player_name = ? AND scope = ?");
|
||||
stmt.setString(1, args[0]);
|
||||
stmt.setString(2, scope);
|
||||
ResultSet rs = stmt.executeQuery();
|
||||
if(rs.next()){
|
||||
p.sendMessage(TextUtils.colorString(addPrefix(plugin.translations.getString("command.ban.alreadyBannedInScopeError"))));
|
||||
return false;
|
||||
}
|
||||
} catch (SQLException e){
|
||||
plugin.getLogger().severe(e.toString());
|
||||
p.sendMessage(TextUtils.colorString(addPrefix(plugin.translations.getString("command.ban.unexpectedError"))));
|
||||
return false;
|
||||
}
|
||||
|
||||
PlayerBan b = banPlayer(args[0], targetUuid, reason, scope, banEndDate, p.getName(), p.getUniqueId());
|
||||
|
||||
if(b != null) {
|
||||
|
|
@ -97,7 +117,8 @@ public class Ban implements CommandExecutor {
|
|||
if(target.isOnline())
|
||||
if(Objects.equals(plugin.config.getString("serverID"), scope) || Objects.equals(scope, "*")) target.kick(TextUtils.colorString(TextUtils.resolvePlaceholders(plugin.translations.getString("banKickMessage.playerBanPerm"), b)));
|
||||
p.sendMessage(TextUtils.colorString(resolveBanMessagePlaceholders(addPrefix(plugin.translations.getString("command.ban.successfulBanMessagePerm")), args[0], scope, reason, p.getName())));
|
||||
Bukkit.broadcast(TextUtils.colorString(resolveBanMessagePlaceholders(plugin.translations.getString("command.ban.banPublicAnnouncementPerm"), args[0], scope, reason, p.getName())));
|
||||
String bcMess = plugin.translations.getString("command.ban.banPublicAnnouncementPerm");
|
||||
if(bcMess!=null) Bukkit.broadcast(TextUtils.colorString(resolveBanMessagePlaceholders(bcMess, args[0], scope, reason, p.getName())));
|
||||
}
|
||||
else {
|
||||
long timeLeft = banEndDate.getTime() - new Timestamp(System.currentTimeMillis()).getTime();
|
||||
|
|
@ -114,7 +135,8 @@ public class Ban implements CommandExecutor {
|
|||
if(target.isOnline())
|
||||
if(Objects.equals(plugin.config.getString("serverID"), scope) || Objects.equals(scope, "*")) target.kick(TextUtils.colorString(TextUtils.resolvePlaceholders(plugin.translations.getString("banKickMessage.playerBanTemp"), b)));
|
||||
p.sendMessage(TextUtils.colorString(resolveBanMessagePlaceholders(addPrefix(plugin.translations.getString("command.ban.successfulBanMessageTemp")), args[0], scope, reason, p.getName(), parsedBanDuration)));
|
||||
Bukkit.broadcast(TextUtils.colorString(resolveBanMessagePlaceholders(plugin.translations.getString("command.ban.banPublicAnnouncementTemp"), args[0], scope, reason, p.getName(), parsedBanDuration)));
|
||||
String bcMess = plugin.translations.getString("command.ban.banPublicAnnouncementTemp");
|
||||
if(bcMess!=null) Bukkit.broadcast(TextUtils.colorString(resolveBanMessagePlaceholders(bcMess, args[0], scope, reason, p.getName(), parsedBanDuration)));
|
||||
|
||||
}
|
||||
return true;
|
||||
|
|
@ -129,7 +151,117 @@ public class Ban implements CommandExecutor {
|
|||
return false;
|
||||
}
|
||||
private boolean banCommand(String[] args) {
|
||||
if(args.length==0) plugin.getServer().getConsoleSender().sendMessage(TextUtils.colorString(addPrefix(plugin.translations.getString("command.ban.usage"))));
|
||||
if(args.length==0) Bukkit.getConsoleSender().sendMessage(TextUtils.colorString(addPrefix(plugin.translations.getString("command.ban.usage"))));
|
||||
else if(args.length>=1) {
|
||||
Player target = Bukkit.getPlayer(args[0]);
|
||||
UUID targetUuid = Bukkit.getOfflinePlayer(args[0]).getUniqueId();
|
||||
Timestamp banEndDate=null;
|
||||
String scope = "*", reason = plugin.translations.getString("default.reason"), duration="-1";
|
||||
if(target!=null)
|
||||
if(target.isOnline()) targetUuid=target.getUniqueId();
|
||||
|
||||
if(args.length>=2) scope=args[1];
|
||||
if(args.length>=3) {
|
||||
duration=args[2];
|
||||
String regex = "^(perm)|(-1)|\\d+:(s|m|h|d)$";
|
||||
String regexOnlyNum = "^\\d+$";
|
||||
if(!(duration.matches(regex) || duration.matches(regexOnlyNum))) {
|
||||
Bukkit.getConsoleSender().sendMessage(TextUtils.colorString(addPrefix(plugin.translations.getString("command.ban.durationFormatError"))));
|
||||
return false;
|
||||
}
|
||||
char type = plugin.config.getString("defaultDurationType").charAt(0);
|
||||
Integer time=0;
|
||||
boolean chk = false;
|
||||
for(int i = 0; i < duration.length(); i++){
|
||||
if(duration.charAt(i)==':'){
|
||||
chk = true;
|
||||
time = Integer.parseInt(duration.substring(0, i));
|
||||
if(i+1 < duration.length()) type = duration.charAt(i+1);
|
||||
}
|
||||
}
|
||||
if(!chk) time = Integer.parseInt(duration);
|
||||
switch (type){
|
||||
case 'd':
|
||||
banEndDate = new Timestamp(System.currentTimeMillis()+ TimeUnit.DAYS.toMillis(time));
|
||||
break;
|
||||
case 'h':
|
||||
banEndDate = new Timestamp(System.currentTimeMillis()+TimeUnit.HOURS.toMillis(time));
|
||||
break;
|
||||
case 'm':
|
||||
banEndDate = new Timestamp(System.currentTimeMillis()+TimeUnit.MINUTES.toMillis(time));
|
||||
break;
|
||||
case 's':
|
||||
banEndDate = new Timestamp(System.currentTimeMillis()+TimeUnit.SECONDS.toMillis(time));
|
||||
break;
|
||||
default:
|
||||
Bukkit.getConsoleSender().sendMessage(TextUtils.colorString(addPrefix(plugin.translations.getString("command.ban.durationFormatError"))));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
StringBuilder newReason = new StringBuilder();
|
||||
for(int i = 3; i < args.length; i++){
|
||||
newReason.append(args[i]).append(" ");
|
||||
}
|
||||
if(!newReason.isEmpty()) reason=newReason.toString();
|
||||
|
||||
if(Objects.equals(duration, "-1") || Objects.equals(duration, "perm")) banEndDate = null;
|
||||
|
||||
try {
|
||||
Connection conn = plugin.db.getConnection();
|
||||
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM player_bans WHERE player_name = ? AND scope = ?");
|
||||
stmt.setString(1, args[0]);
|
||||
stmt.setString(2, scope);
|
||||
ResultSet rs = stmt.executeQuery();
|
||||
if(rs.next()){
|
||||
Bukkit.getConsoleSender().sendMessage(TextUtils.colorString(addPrefix(plugin.translations.getString("command.ban.alreadyBannedInScopeError"))));
|
||||
return false;
|
||||
}
|
||||
} catch (SQLException e){
|
||||
plugin.getLogger().severe(e.toString());
|
||||
Bukkit.getConsoleSender().sendMessage(TextUtils.colorString(addPrefix(plugin.translations.getString("command.ban.unexpectedError"))));
|
||||
return false;
|
||||
}
|
||||
|
||||
PlayerBan b = banPlayer(args[0], targetUuid, reason, scope, banEndDate, "CONSOLE", null);
|
||||
|
||||
if(b != null) {
|
||||
if(banEndDate == null) {
|
||||
if(target!=null)
|
||||
if(target.isOnline())
|
||||
if(Objects.equals(plugin.config.getString("serverID"), scope) || Objects.equals(scope, "*")) target.kick(TextUtils.colorString(TextUtils.resolvePlaceholders(plugin.translations.getString("banKickMessage.playerBanPerm"), b)));
|
||||
Bukkit.getConsoleSender().sendMessage(TextUtils.colorString(resolveBanMessagePlaceholders(addPrefix(plugin.translations.getString("command.ban.successfulBanMessagePerm")), args[0], scope, reason, "CONSOLE")));
|
||||
String bcMess = plugin.translations.getString("command.ban.banPublicAnnouncementPerm");
|
||||
if(bcMess!=null) Bukkit.broadcast(TextUtils.colorString(resolveBanMessagePlaceholders(bcMess, args[0], scope, reason, "CONSOLE")));
|
||||
}
|
||||
else {
|
||||
long timeLeft = banEndDate.getTime() - new Timestamp(System.currentTimeMillis()).getTime();
|
||||
long timeLeftDays = TimeUnit.MILLISECONDS.toDays(timeLeft);
|
||||
timeLeft-=TimeUnit.DAYS.toMillis(timeLeftDays);
|
||||
long timeLeftHours = TimeUnit.MILLISECONDS.toHours(timeLeft);
|
||||
timeLeft-=TimeUnit.HOURS.toMillis(timeLeftHours);
|
||||
long timeLeftMinutes = TimeUnit.MILLISECONDS.toMinutes(timeLeft);
|
||||
timeLeft-=TimeUnit.MINUTES.toMillis(timeLeftMinutes);
|
||||
long timeLeftSeconds = TimeUnit.MILLISECONDS.toSeconds(timeLeft);
|
||||
String parsedBanDuration = TextUtils.parsePolishDate(timeLeftDays, timeLeftHours, timeLeftMinutes, timeLeftSeconds);
|
||||
|
||||
if(target!=null)
|
||||
if(target.isOnline())
|
||||
if(Objects.equals(plugin.config.getString("serverID"), scope) || Objects.equals(scope, "*")) target.kick(TextUtils.colorString(TextUtils.resolvePlaceholders(plugin.translations.getString("banKickMessage.playerBanTemp"), b)));
|
||||
Bukkit.getConsoleSender().sendMessage(TextUtils.colorString(resolveBanMessagePlaceholders(addPrefix(plugin.translations.getString("command.ban.successfulBanMessageTemp")), args[0], scope, reason, "CONSOLE", parsedBanDuration)));
|
||||
String bcMess = plugin.translations.getString("command.ban.banPublicAnnouncementTemp");
|
||||
if(bcMess!=null) Bukkit.broadcast(TextUtils.colorString(resolveBanMessagePlaceholders(bcMess, args[0], scope, reason, "CONSOLE", parsedBanDuration)));
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
plugin.getLogger().severe("BanHammer: Something went wrong while user used ban command... Maybe DB or Technician has skill issue???");
|
||||
Bukkit.getConsoleSender().sendMessage(TextUtils.colorString(addPrefix(plugin.translations.getString("command.ban.unexpectedError"))));
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue