SteamWar/BungeeCore
Archiviert
13
2

Ban System Rework #150

Manuell gemergt
Lixfel hat 38 Commits von ban-rework nach master 2021-01-30 08:42:35 +01:00 zusammengeführt
7 geänderte Dateien mit 50 neuen und 31 gelöschten Zeilen
Nur Änderungen aus Commit e76c79c8d8 werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -28,27 +28,36 @@ import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.text.ChoiceFormat;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.function.Function;
public class Message {
private Message(){}
public static TextComponent parseToComponent(String message, boolean prefixed, CommandSender sender, Object... params){
return new TextComponent(TextComponent.fromLegacyText(parse(message, prefixed, sender, params)));
public static TextComponent parseToComponent(String message, boolean prefixed, CommandSender sender, int[] useFormatter, Object... params){
Veraltet
Review

Ich würde mir da wenn wünschen (weil das eine API-Funktion ist), dass es die alte Funktion weiterhin gibt und dazu eine neue mit den neuen Aufrufparametern (damit das System nicht umständlich für Sonderfälle ist). Und dass dann entsprechend die alte Funktion verwendet wird, soweit der Formatter nicht benötigt wird.

Ich würde mir da wenn wünschen (weil das eine API-Funktion ist), dass es die alte Funktion weiterhin gibt und dazu eine neue mit den neuen Aufrufparametern (damit das System nicht umständlich für Sonderfälle ist). Und dass dann entsprechend die alte Funktion verwendet wird, soweit der Formatter nicht benötigt wird.
return new TextComponent(TextComponent.fromLegacyText(parse(message, prefixed, sender, useFormatter, params)));
}
public static String parsePrefixed(String message, CommandSender sender, int[] useFormatter, Object... params){
return parse(message, true, sender, useFormatter, params);
}
public static String parsePrefixed(String message, CommandSender sender, Object... params){
return parse(message, true, sender, params);
return parse(message, true, sender, new int[0], params);
}
public static String parse(String message, CommandSender sender, int[] useFormatter, Object... params){
return parse(message, false, sender, useFormatter, params);
}
public static String parse(String message, CommandSender sender, Object... params){
return parse(message, false, sender, params);
return parse(message, false, sender, new int[0], params);
}
private static String parse(String message, boolean prefixed, CommandSender sender,Object... params){
private static String parse(String message, boolean prefixed, CommandSender sender, int[] useFormatter, Object... params){
Locale locale;
if(sender instanceof ProxiedPlayer)
locale = ((ProxiedPlayer)sender).getLocale();
@ -61,7 +70,11 @@ public class Message {
pattern = resourceBundle.getObject("PREFIX") + " ";
pattern += (String)resourceBundle.getObject(message);
return new MessageFormat(pattern, locale).format(params);
MessageFormat format = new MessageFormat(pattern, locale);
for (int i : useFormatter) {
params[i] = new MessageFormat((String) resourceBundle.getObject((String) params[i]), locale).format(params);
}
return format.format(params);
}
public static void send(String message, CommandSender sender, Object... params){
@ -80,6 +93,10 @@ public class Message {
send(message, false, sender, type, null, null, params);
}
public static void sendPrefixless(String message, CommandSender sender, ChatMessageType type, int[] useFormatter, Object... params) {
Veraltet
Review

Hier genauso

Hier genauso
send(message, false, sender, type, null, null, useFormatter, params);
}
public static void send(String message, CommandSender sender, String onHover, ClickEvent onClick, Object... params){
send(message, true, sender, ChatMessageType.SYSTEM, onHover, onClick, params);
}
@ -88,10 +105,10 @@ public class Message {
send(message, false, sender, ChatMessageType.SYSTEM, onHover, onClick, params);
}
public static void send(String message, boolean prefixed, CommandSender sender, ChatMessageType type, String onHover, ClickEvent onClick, Object... params){
public static void send(String message, boolean prefixed, CommandSender sender, ChatMessageType type, String onHover, ClickEvent onClick, int[] useFormatter, Object... params){
Veraltet
Review

Hier auch.

Hier auch.
if(type == ChatMessageType.CHAT && sender instanceof ProxiedPlayer && ((ProxiedPlayer)sender).getChatMode() != ProxiedPlayer.ChatMode.SHOWN)
return;
TextComponent msg = parseToComponent(message, prefixed, sender, params);
TextComponent msg = parseToComponent(message, prefixed, sender, useFormatter, params);
if(onHover != null)
msg.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.fromLegacyText(onHover)));
if(onClick != null)
@ -102,9 +119,13 @@ public class Message {
sender.sendMessage(msg);
}
public static void send(String message, boolean prefixed, CommandSender sender, ChatMessageType type, String onHover, ClickEvent onClick, Object... params){
send(message, prefixed, sender, type, onHover, onClick, new int[0], params);
}
public static void broadcast(String message, String onHover, ClickEvent onClick, Object... params){
for(ProxiedPlayer player : ProxyServer.getInstance().getPlayers())
send(message, player, parse(onHover, false, player), onClick, params);
send(message, player, parse(onHover, false, player, new int[0]), onClick, params);
}
public static void broadcast(String message, Object... params){
@ -120,18 +141,18 @@ public class Message {
}
}
public static void team(String message, Function<ProxiedPlayer, Object>... params){
team(message, ChatMessageType.SYSTEM, params);
public static void team(String message, Object... params){
team(message, ChatMessageType.SYSTEM, new int[0], params);
}
public static void team(String message, ChatMessageType type, Function<ProxiedPlayer, Object>... params){
public static void team(String message, int[] useChoice, Object... params){
team(message, ChatMessageType.SYSTEM, useChoice, params);
}
public static void team(String message, ChatMessageType type, int[] useFormatter, Object... params){
Veraltet
Review

Arrrg.

Arrrg.
for(ProxiedPlayer player : ProxyServer.getInstance().getPlayers()){
if(player.getGroups().contains(ConnectionListener.TEAM_GROUP)) {
Object[] objects = new Object[params.length];
for (int i = 0; i < params.length; i++) {
objects[i] = params[i].apply(player);
}
sendPrefixless(message, player, type, objects);
sendPrefixless(message, player, type, useFormatter, params);
}
}
}

Datei anzeigen

@ -27,7 +27,6 @@ import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.format.DateTimeFormatter;
import java.util.Date;
public class BanCommand extends BasicCommand {
@ -57,8 +56,7 @@ public class BanCommand extends BasicCommand {
}
String msg = banReason.toString();
target.ban(banTime, msg, SteamwarUser.get(sender.getName()).getId(), args[1].equalsIgnoreCase("perma"));
Veraltet
Review

Wenn du das ganze Team benachrichtigst, brauchst du nicht mehr den Spieler persönlich zu benachrichtigen.

Wenn du das ganze Team benachrichtigst, brauchst du nicht mehr den Spieler persönlich zu benachrichtigen.
Message.team("BAN_TEAM_BANNED", target.getUserName(), sender.getName(),
(args[1].equalsIgnoreCase("perma")?Message.parse("BAN_PERMA", sender):Message.parse("BAN_UNTIL", sender) + banTime.toLocalDateTime().format(DateTimeFormatter.ofPattern(Message.parse("TIMEFORMAT", sender)))), msg);
Message.team("BAN_TEAM_BANNED", new int[]{2}, target.getUserName(), sender.getName(), (args[1].equalsIgnoreCase("perma")?"BAN_PERMA":"BAN_UNTIL"), msg, banTime);
Veraltet
Review

In internen Messages musst du nicht die Person colorcoden.

In internen Messages musst du nicht die Person colorcoden.
Veraltet
Review

Ok, das gefällt mir doch nicht so ganz mit dem IntArray etc. Evtl. wäre es eleganter, man macht da etwas a la new Message(...equals() ? "BAN_PERMA": "BAN_UNTIL") und wenn das object eine Message ist, (welche sich einfach nur zu merken Braucht, welchen String sie hat, ggf. auch noch parameter) und dann diese Message parst und den String entsprechend einfügt.

Ok, das gefällt mir doch nicht so ganz mit dem IntArray etc. Evtl. wäre es eleganter, man macht da etwas a la new Message(...equals() ? "BAN_PERMA": "BAN_UNTIL") und wenn das object eine Message ist, (welche sich einfach nur zu merken Braucht, welchen String sie hat, ggf. auch noch parameter) und dann diese Message parst und den String entsprechend einfügt.
}
Veraltet
Review

Bitte erst die Aktion ausführen, dann die Aktion verkünden (im Fehlerfall kein Fehlannouncement).

Bitte erst die Aktion ausführen, dann die Aktion verkünden (im Fehlerfall kein Fehlannouncement).
public static Timestamp parseTime(CommandSender sender, String arg){

Datei anzeigen

@ -24,7 +24,6 @@ import de.steamwar.bungeecore.sql.SteamwarUser;
import net.md_5.bungee.api.CommandSender;
import java.sql.Timestamp;
import java.time.format.DateTimeFormatter;
public class MuteCommand extends BasicCommand {
@ -53,7 +52,6 @@ public class MuteCommand extends BasicCommand {
}
String msg = muteReason.toString();
target.mute(muteTime, msg, SteamwarUser.get(sender.getName()).getId(), args[1].equalsIgnoreCase("perma"));
Message.team("MUTE_TEAM_MUTED", player -> target.getUserName(), player -> sender.getName(),
player -> (args[1].equalsIgnoreCase("perma")?Message.parse("BAN_PERMA", player):Message.parse("BAN_UNTIL", player) + muteTime.toLocalDateTime().format(DateTimeFormatter.ofPattern(Message.parse("TIMEFORMAT", player)))), player -> msg);
Message.team("MUTE_TEAM_MUTED", target.getUserName(), new int[]{2}, sender.getName(), (args[1].equalsIgnoreCase("perma")?"BAN_PERMA":"BAN_UNTIL"), msg, muteTime);
Veraltet
Review

Hier genauso.

Hier genauso.
}
Veraltet
Review

Hier genauso.

Hier genauso.
}

Datei anzeigen

@ -20,6 +20,7 @@
package de.steamwar.bungeecore.commands;
import de.steamwar.bungeecore.BungeeCore;
import de.steamwar.bungeecore.Message;
import de.steamwar.bungeecore.sql.Punishment;
import de.steamwar.bungeecore.sql.SteamwarUser;
import de.steamwar.bungeecore.sql.Team;
@ -28,6 +29,7 @@ import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.text.DecimalFormat;
import java.time.format.DateTimeFormatter;
public class WhoisCommand extends BasicCommand {
public WhoisCommand(){
@ -74,7 +76,7 @@ public class WhoisCommand extends BasicCommand {
BungeeCore.send(player, "§7Strafen: ");
for (Punishment punishment : Punishment.getAllPunishmentsOfPlayer(user.getId())) {
Veraltet
Review

Wenn wir die Mute & Bannsachen schon Multilingual haben, sollten wir auch das Multilingual machen. Um das Timestamp-Formatting müsste sich dann glaube ich auch das ML-Framework kümmern.

Wenn wir die Mute & Bannsachen schon Multilingual haben, sollten wir auch das Multilingual machen. Um das Timestamp-Formatting müsste sich dann glaube ich auch das ML-Framework kümmern.
Veraltet
Review

Dafür wurden wir dann ein Cache wo wir die Sprache speichern könnten, weil sonst müsste man dies von dem gemacht, der den Spieler bannt

Dafür wurden wir dann ein Cache wo wir die Sprache speichern könnten, weil sonst müsste man dies von dem gemacht, der den Spieler bannt
Veraltet
Review

Hier in dem Fall ist das Ziel klar player. Und player hat eine Sprache. Den Cache bräuchten wir wenn für den BanListener, aber nicht hier. Daher kann das schon mit umgezogen werden.

Hier in dem Fall ist das Ziel klar player. Und player hat eine Sprache. Den Cache bräuchten wir wenn für den BanListener, aber nicht hier. Daher kann das schon mit umgezogen werden.
BungeeCore.send(player, "§7" + SteamwarUser.get(punishment.getPunisher()).getUserName() + "§8» §f§l" + punishment.getType().name() + ": §e"
Veraltet
Review

Da kannste aber auch mal aufs Multilinguale-System zurückgreifen

Da kannste aber auch mal aufs Multilinguale-System zurückgreifen
+ punishment.getStartTime().toLocalDateTime().format(BungeeCore.DATE_FORMAT) + " - " + (punishment.isPerma()?"Perma":punishment.getEndTime().toLocalDateTime().format(BungeeCore.DATE_FORMAT)) + " §c" + punishment.getReason());
+ punishment.getStartTime().toLocalDateTime().format(DateTimeFormatter.ofPattern(Message.parse("TIMEFORMAT", player))) + " - " + (punishment.isPerma()?"Perma":punishment.getEndTime().toLocalDateTime().format(DateTimeFormatter.ofPattern(Message.parse("TIMEFORMAT", player)))) + " §c" + punishment.getReason());
}
}
}

Datei anzeigen

@ -70,7 +70,7 @@ public class BanListener extends BasicListener {
for(BannedUserIPs banned : ips) {
SteamwarUser bannedUser = SteamwarUser.get(banned.getUserID());
potentialBan.append(Message.parse("BAN_AVOIDING_LIST", target, bannedUser.getUserName(),
banned.getTimestamp().toLocalDateTime().format(BungeeCore.DATE_FORMAT)));
banned.getTimestamp().toLocalDateTime().format(DateTimeFormatter.ofPattern(Message.parse("TIMEFORMAT", target)))));
}
TextComponent msg = new TextComponent(potentialBan.toString());

Datei anzeigen

@ -134,11 +134,11 @@ public class Punishment {
this.endTime = newUpdate;
Veraltet
Review

Schreib doch nur name(), dann kannst du beim Type-Getten auch einfach valueOf() machen.

Schreib doch nur name(), dann kannst du beim Type-Getten auch einfach valueOf() machen.
}
public String getBantime(Timestamp endTime, boolean perma, ProxiedPlayer player) {
public String getBantime(Timestamp endTime, boolean perma) {
if(perma)
Veraltet
Review

Siehe toDb()

Siehe toDb()
return Message.parse("BAN_PERMA", player);
return "Permanent";
else
return endTime.toLocalDateTime().format(DateTimeFormatter.ofPattern(Message.parse("TIMEFORMAT", player)));
return endTime.toLocalDateTime().format(DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm"));
}
public enum PunishmentType {

Datei anzeigen

@ -96,7 +96,7 @@ USAGE_IGNORE=§8/§7ignore §8[§eSpieler§8]
#Various commands
ALERT=§f{0}
BAN_TEAM_BANNED=§c {0} wurde von {1} {2} gebannt. §f§lGrund: §f{3}
BAN_TEAM_BANNED=§c{0} wurde von {1} {2} gebannt. §f§lGrund: §f{3}
BANNED_MESSAGE_PERMA=§cDu bist permanent gebannt. §r§lGrund§r: §c{0}
BANNED_MESSAGE_UNTIL=Du bist bis zum {0} gebannt. §r§lGrund§r: §c{1}
MUTE_TEAM_MUTED=§c {0} wurde von {1} {2} gemuted. §f§lGrund: §f{3}
@ -105,7 +105,7 @@ MUTED_MESSAGE_UNTIL=Du bist bis zum {0} gemuted. §r§lGrund§r: §c{1}
BAN_CHANGED={0} verändert von {1} von {2} auf {3} wegen {4}
BAN_INVALID_TIME=§cUngültige Zeitangabe.
BAN_PERMA=Permanent
BAN_UNTIL=bis zum
BAN_UNTIL=bis zum {4}
BAN_AVOIDING_ALERT=§cMögliche Bannumgehung durch §r{0}§c: §c
BAN_AVOIDING_LIST={0} §e{1} §c
Veraltet
Review

Da brauchen wir kein spezielles Präfix. Und so schön du dir das gedacht hast: Die eckigen Klammern machens irgendwie wieder hässlich. ;) (Persönliche Meinung)

Da brauchen wir kein spezielles Präfix. Und so schön du dir das gedacht hast: Die eckigen Klammern machens irgendwie wieder hässlich. ;) (Persönliche Meinung)
BAN_AVOIDING_BAN_HOVER=§cBanne Spieler wegen Bannumgehung