1
mirror of https://github.com/Shiewk/SModeration.git synced 2026-04-28 05:54:16 +02:00

Add reasons

This commit is contained in:
Shy
2024-06-08 12:12:32 +02:00
parent c17f421694
commit 3ff874e244
3 changed files with 51 additions and 19 deletions
@@ -46,10 +46,12 @@ public class MuteCommand implements CommandExecutor, TabCompleter {
return true; return true;
} }
long duration = 0; long duration = 0;
int p = 1;
for (int i = 1 /* start with index 1 to avoid player name */; i < args.length; i++) { for (int i = 1 /* start with index 1 to avoid player name */; i < args.length; i++) {
String arg = args[i]; String arg = args[i];
long parsedDuration = TimeUtil.parseDurationMillisSafely(arg); long parsedDuration = TimeUtil.parseDurationMillisSafely(arg);
if (parsedDuration == -1){ if (parsedDuration == -1){
p = i;
break; break;
} else { } else {
duration += parsedDuration; duration += parsedDuration;
@@ -59,7 +61,14 @@ public class MuteCommand implements CommandExecutor, TabCompleter {
sender.sendMessage(Component.text("Please provide a valid duration.").color(NamedTextColor.RED)); sender.sendMessage(Component.text("Please provide a valid duration.").color(NamedTextColor.RED));
return false; return false;
} }
final Punishment punishment = Punishment.mute(System.currentTimeMillis(), System.currentTimeMillis() + duration, senderUUID, uuid); StringBuilder reason = new StringBuilder();
for (int i = p; i < args.length; i++) {
if (!reason.isEmpty()){
reason.append(" ");
}
reason.append(args[i]);
}
final Punishment punishment = Punishment.mute(System.currentTimeMillis(), System.currentTimeMillis() + duration, senderUUID, uuid, reason.isEmpty() ? Punishment.DEFAULT_REASON : reason.toString());
Punishment.issue(punishment, SModeration.container); Punishment.issue(punishment, SModeration.container);
return true; return true;
} }
@@ -18,44 +18,54 @@ public class Punishment {
public static final NamedTextColor PRIMARY_COLOR = NamedTextColor.RED; public static final NamedTextColor PRIMARY_COLOR = NamedTextColor.RED;
public static final NamedTextColor SECONDARY_COLOR = NamedTextColor.GOLD; public static final NamedTextColor SECONDARY_COLOR = NamedTextColor.GOLD;
public static final String DEFAULT_REASON = "No reason provided.";
public final PunishmentType type; public final PunishmentType type;
public final long time; public final long time;
public final long until; public final long until;
public final UUID by; public final UUID by;
public final UUID to; public final UUID to;
public final String reason;
protected Punishment(PunishmentType type, long time, long until, UUID by, UUID to) { protected Punishment(PunishmentType type, long time, long until, UUID by, UUID to, String reason) {
this.type = type; this.type = type;
this.time = time; this.time = time;
this.until = until; this.until = until;
this.by = by; this.by = by;
this.to = to; this.to = to;
this.reason = reason;
} }
public static Punishment mute(long time, long until, UUID by, UUID to){ public static Punishment mute(long time, long until, UUID by, UUID to, String reason){
return new Punishment(PunishmentType.MUTE, time, until, by, to); return new Punishment(PunishmentType.MUTE, time, until, by, to, reason);
} }
public static Punishment ban(long time, long until, UUID by, UUID to){ public static Punishment ban(long time, long until, UUID by, UUID to, String reason){
return new Punishment(PunishmentType.BAN, time, until, by, to); return new Punishment(PunishmentType.BAN, time, until, by, to, reason);
} }
public static Punishment kick(long time, UUID by, UUID to){ public static Punishment kick(long time, UUID by, UUID to, String reason){
return new Punishment(PunishmentType.KICK, time, time, by, to); return new Punishment(PunishmentType.KICK, time, time, by, to, reason);
} }
public static final int BUFFER_LENGTH = 52; private static final int BUFFER_LENGTH = 56;
public byte[] toBytes(){ public byte[] toBytes(){
ByteBuffer buffer = ByteBuffer.allocate(BUFFER_LENGTH); final byte[] reasonBytes = reason.getBytes();
ByteBuffer buffer = ByteBuffer.allocate(BUFFER_LENGTH + reasonBytes.length);
buffer.putInt(0, type.ordinal()); buffer.putInt(0, type.ordinal());
buffer.putLong(4, time); buffer.putLong(4, time);
buffer.putLong(12, until); buffer.putLong(12, until);
buffer.put(20, ByteUtil.uuidToBytes(by)); buffer.put(20, ByteUtil.uuidToBytes(by));
buffer.put(36, ByteUtil.uuidToBytes(to)); buffer.put(36, ByteUtil.uuidToBytes(to));
buffer.putInt(40, reason.length());
buffer.put(44, reasonBytes);
return buffer.array(); return buffer.array();
} }
/**
* @deprecated behaves weirdly, does not support punishment reasons
*/
@Deprecated(forRemoval = true)
public static @NotNull Punishment fromBytes(byte[] bytes){ public static @NotNull Punishment fromBytes(byte[] bytes){
if (bytes.length != BUFFER_LENGTH){ if (bytes.length != BUFFER_LENGTH){
throw new IllegalArgumentException("the array has to be %s in length".formatted(BUFFER_LENGTH)); throw new IllegalArgumentException("the array has to be %s in length".formatted(BUFFER_LENGTH));
@@ -76,7 +86,7 @@ public class Punishment {
System.arraycopy(bytes, 36, toBytes, 0, 16); System.arraycopy(bytes, 36, toBytes, 0, 16);
final UUID by = ByteUtil.bytesToUuid(byBytes); final UUID by = ByteUtil.bytesToUuid(byBytes);
final UUID to = ByteUtil.bytesToUuid(toBytes); final UUID to = ByteUtil.bytesToUuid(toBytes);
return new Punishment(ptype, time, until, by, to); return new Punishment(ptype, time, until, by, to, "");
} }
@Override @Override
@@ -87,6 +97,7 @@ public class Punishment {
", until=" + until + ", until=" + until +
", by=" + by + ", by=" + by +
", to=" + to + ", to=" + to +
", reason=" + reason +
'}'; '}';
} }
@@ -108,22 +119,25 @@ public class Punishment {
.append(Component.text(PlayerUtil.offlinePlayerName(this.by)).color(SECONDARY_COLOR)) .append(Component.text(PlayerUtil.offlinePlayerName(this.by)).color(SECONDARY_COLOR))
.append(Component.text(" for ")) .append(Component.text(" for "))
.append(Component.text(TimeUtil.formatTimeLong(this.until - this.time)).color(SECONDARY_COLOR)) .append(Component.text(TimeUtil.formatTimeLong(this.until - this.time)).color(SECONDARY_COLOR))
.append(Component.text("."))); .append(Component.text(".\nReason: "))
.append(Component.text(reason).color(SECONDARY_COLOR)));
} }
case KICK -> { case KICK -> {
return Component.text(toName).color(SECONDARY_COLOR).append( return Component.text(toName).color(SECONDARY_COLOR).append(
Component.text(" has been kicked by ").color(PRIMARY_COLOR) Component.text(" has been kicked by ").color(PRIMARY_COLOR)
.append(Component.text(PlayerUtil.offlinePlayerName(this.by)).color(SECONDARY_COLOR)) .append(Component.text(PlayerUtil.offlinePlayerName(this.by)).color(SECONDARY_COLOR))
.append(Component.text(".")) .append(Component.text(".\nReason: "))
.append(Component.text(reason).color(SECONDARY_COLOR))
.color(PRIMARY_COLOR)); .color(PRIMARY_COLOR));
} }
case BAN -> { case BAN -> {
return Component.text(toName).color(SECONDARY_COLOR).append( return Component.text(toName).color(SECONDARY_COLOR).append(
Component.text(" has been kicked by ").color(PRIMARY_COLOR) Component.text(" has been banned by ").color(PRIMARY_COLOR)
.append(Component.text(PlayerUtil.offlinePlayerName(this.by)).color(SECONDARY_COLOR)) .append(Component.text(PlayerUtil.offlinePlayerName(this.by)).color(SECONDARY_COLOR))
.append(Component.text(" for ")) .append(Component.text(" for "))
.append(Component.text(TimeUtil.formatTimeLong(this.until - this.time)).color(SECONDARY_COLOR)) .append(Component.text(TimeUtil.formatTimeLong(this.until - this.time)).color(SECONDARY_COLOR))
.append(Component.text(".")) .append(Component.text(".\nReason: "))
.append(Component.text(reason).color(SECONDARY_COLOR))
.color(PRIMARY_COLOR)); .color(PRIMARY_COLOR));
} }
default -> throw new IllegalStateException("Unknown punishment type " + type); default -> throw new IllegalStateException("Unknown punishment type " + type);
@@ -149,12 +163,13 @@ public class Punishment {
} }
public Component playerMessage(){ public Component playerMessage(){
switch (type) { switch (type) {
case MUTE -> { case MUTE -> {
return Component.text("You have been muted by ") return Component.text("You have been muted by ")
.append(Component.text(PlayerUtil.offlinePlayerName(this.by)).color(SECONDARY_COLOR)) .append(Component.text(PlayerUtil.offlinePlayerName(this.by)).color(SECONDARY_COLOR))
.append(Component.text(".\nYour mute expires in ")) .append(Component.text(".\nReason: "))
.append(Component.text(reason).color(SECONDARY_COLOR))
.append(Component.text("\nYour mute expires in "))
.append(Component.text(TimeUtil.formatTimeLong(this.until - System.currentTimeMillis())).color(SECONDARY_COLOR)) .append(Component.text(TimeUtil.formatTimeLong(this.until - System.currentTimeMillis())).color(SECONDARY_COLOR))
.append(Component.text(".")) .append(Component.text("."))
.color(PRIMARY_COLOR); .color(PRIMARY_COLOR);
@@ -162,13 +177,16 @@ public class Punishment {
case KICK -> { case KICK -> {
return Component.text("You have been kicked by ") return Component.text("You have been kicked by ")
.append(Component.text(PlayerUtil.offlinePlayerName(this.by)).color(SECONDARY_COLOR)) .append(Component.text(PlayerUtil.offlinePlayerName(this.by)).color(SECONDARY_COLOR))
.append(Component.text(".")) .append(Component.text(".\nReason: "))
.append(Component.text(reason).color(SECONDARY_COLOR))
.color(PRIMARY_COLOR); .color(PRIMARY_COLOR);
} }
case BAN -> { case BAN -> {
return Component.text("You have been banned from this server by ") return Component.text("You have been banned from this server by ")
.append(Component.text(PlayerUtil.offlinePlayerName(this.by)).color(SECONDARY_COLOR)) .append(Component.text(PlayerUtil.offlinePlayerName(this.by)).color(SECONDARY_COLOR))
.append(Component.text(".\nYour ban expires in ")) .append(Component.text(".\nReason: "))
.append(Component.text(reason).color(SECONDARY_COLOR))
.append(Component.text("\nYour ban expires in "))
.append(Component.text(TimeUtil.formatTimeLong(this.until - System.currentTimeMillis())).color(SECONDARY_COLOR)) .append(Component.text(TimeUtil.formatTimeLong(this.until - System.currentTimeMillis())).color(SECONDARY_COLOR))
.append(Component.text(".")) .append(Component.text("."))
.color(PRIMARY_COLOR); .color(PRIMARY_COLOR);
@@ -5,6 +5,7 @@ public abstract class TimeUtil {
public static String formatTimeLong(long millis){ public static String formatTimeLong(long millis){
long seconds = millis / 1000; long seconds = millis / 1000;
millis -= seconds * 1000;
long minutes = seconds / 60; long minutes = seconds / 60;
seconds -= minutes * 60; seconds -= minutes * 60;
@@ -75,6 +76,10 @@ public abstract class TimeUtil {
builder.append("%s seconds".formatted(seconds)); builder.append("%s seconds".formatted(seconds));
} }
if (builder.isEmpty()){
builder.append("%s ms".formatted(millis));
}
return builder.toString(); return builder.toString();
} }