mirror of
https://github.com/Shiewk/SModeration.git
synced 2026-04-28 05:54:16 +02:00
Add reasons
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user