mirror of
https://github.com/Shiewk/SModeration.git
synced 2026-04-28 05:54:16 +02:00
(1.7.0) Add a config option that prevents players from running certain commands when they are muted
This commit is contained in:
@@ -12,9 +12,13 @@ import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
|
||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||
import org.bukkit.event.world.WorldSaveEvent;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static de.shiewk.smoderation.paper.SModerationPaper.CHAT_PREFIX;
|
||||
import static net.kyori.adventure.text.Component.translatable;
|
||||
|
||||
public class PunishmentListener implements Listener {
|
||||
|
||||
@@ -45,6 +49,29 @@ public class PunishmentListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
||||
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event){
|
||||
Player player = event.getPlayer();
|
||||
final Punishment mute = SModerationPaper.container.find(p ->
|
||||
p.type == PunishmentType.MUTE
|
||||
&& p.to.equals(player.getUniqueId())
|
||||
&& p.isActive());
|
||||
|
||||
if (mute != null) { // Player is muted
|
||||
List<String> forbiddenCommands = SModerationPaper.config().getStringList("muted-forbidden-commands");
|
||||
final String message = event.getMessage();
|
||||
if (forbiddenCommands.stream().anyMatch(str ->
|
||||
message.toLowerCase().startsWith("/"+str.toLowerCase()+" ")
|
||||
|| message.toLowerCase().startsWith(str.toLowerCase()+" ")
|
||||
)){
|
||||
Bukkit.getConsoleSender().sendMessage(player.getName() + " tried to run forbidden command while muted");
|
||||
player.sendMessage(CHAT_PREFIX.append(translatable("smod.punishment.playerMessage.mute.chat")));
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onPunishmentIssue(PunishmentIssueEvent event){
|
||||
final Punishment punishment = event.getPunishment();
|
||||
|
||||
@@ -61,8 +61,8 @@ public class SocialSpyListener implements Listener {
|
||||
List<String> socialSpyCommands = SModerationPaper.config().getStringList("socialspy-commands");
|
||||
final String message = event.getMessage();
|
||||
if (socialSpyCommands.stream().anyMatch(str ->
|
||||
message.startsWith("/"+str+" ")
|
||||
|| message.startsWith(str+" ")
|
||||
message.toLowerCase().startsWith("/"+str.toLowerCase()+" ")
|
||||
|| message.toLowerCase().startsWith(str.toLowerCase()+" ")
|
||||
)){
|
||||
SocialSpyListener.command(event.getPlayer(), message);
|
||||
}
|
||||
|
||||
@@ -9,4 +9,17 @@ socialspy-commands:
|
||||
- minecraft:msg
|
||||
- minecraft:teammsg
|
||||
- minecraft:tm
|
||||
force-reason: false
|
||||
force-reason: false
|
||||
muted-forbidden-commands:
|
||||
- w
|
||||
- tell
|
||||
- msg
|
||||
- teammsg
|
||||
- tm
|
||||
- me
|
||||
- minecraft:w
|
||||
- minecraft:tell
|
||||
- minecraft:msg
|
||||
- minecraft:teammsg
|
||||
- minecraft:tm
|
||||
- minecraft:me
|
||||
@@ -1,59 +1,96 @@
|
||||
{
|
||||
"smod.command.ban.fail.tooShort": "You can't ban an offline player for less than 1ms.",
|
||||
"smod.command.ban.fail.self": "You can't ban yourself.",
|
||||
"smod.command.ban.fail.protect": "This player can't be banned.",
|
||||
"smod.command.ban.fail.forceReason": "Please provide a reason.",
|
||||
"smod.argument.duration.fail.invalid": "Invalid duration '<arg:0>'",
|
||||
"smod.argument.duration.fail.pattern": "Please provide a valid duration, e.g. '1d6h30min'",
|
||||
"smod.argument.offlinePlayer.fail.notCached": "That player is not cached.",
|
||||
"smod.argument.uuid.fail.notCached": "That player is not cached. Try providing an UUID instead.",
|
||||
"smod.chatInput.remainingTime": "<gray><arg:0> seconds",
|
||||
"smod.command.ban.fail.forceReason": "Please provide a reason.",
|
||||
"smod.command.ban.fail.protect": "This player can't be banned.",
|
||||
"smod.command.ban.fail.self": "You can't ban yourself.",
|
||||
"smod.command.ban.fail.tooShort": "You can't ban an offline player for less than 1ms.",
|
||||
"smod.command.ecsee.opening": "<prefix>Opening ender chest of <secondary><arg:0></secondary>.",
|
||||
"smod.command.fail.invalidPlayer": "Please provide a valid player.",
|
||||
"smod.command.fail.players": "Only players can execute this command.",
|
||||
"smod.command.fail.playersConsole": "Only players and the console can execute this command.",
|
||||
"smod.command.invsee.fail.self": "You can't open your own inventory.",
|
||||
"smod.command.invsee.opening": "<prefix>Opening inventory of <secondary><arg:0></secondary>.",
|
||||
"smod.command.kick.fail.forceReason": "Please provide a reason.",
|
||||
"smod.command.kick.fail.self": "You can't kick yourself.",
|
||||
"smod.command.kick.fail.protect": "This player can't be kicked.",
|
||||
"smod.command.modlogs.heading": "<prefix>Player <secondary><arg:0> <gray>(<arg:1>)",
|
||||
"smod.command.modlogs.none": "<primary>- is not currently muted or banned.",
|
||||
"smod.command.modlogs.mute": "<primary>- is muted until <secondary><arg:0></secondary> <gray>(in <arg:1>)</gray>. Reason: <secondary><arg:2>",
|
||||
"smod.command.kick.fail.self": "You can't kick yourself.",
|
||||
"smod.command.modlogs.ban": "<primary>- is banned until <secondary><arg:0></secondary> <gray>(in <arg:1>)</gray>. Reason: <secondary><arg:2>",
|
||||
"smod.command.modlogs.heading": "<prefix>Player <secondary><arg:0> <gray>(<arg:1>)",
|
||||
"smod.command.modlogs.mute": "<primary>- is muted until <secondary><arg:0></secondary> <gray>(in <arg:1>)</gray>. Reason: <secondary><arg:2>",
|
||||
"smod.command.modlogs.none": "<primary>- is not currently muted or banned.",
|
||||
"smod.command.mute.fail.forceReason": "Please provide a reason.",
|
||||
"smod.command.mute.fail.self": "You can't mute yourself.",
|
||||
"smod.command.mute.fail.protect": "This player can't be muted.",
|
||||
"smod.command.mute.fail.self": "You can't mute yourself.",
|
||||
"smod.command.offlinetp.fail.unknown": "This player's location is unknown.",
|
||||
"smod.command.offlinetp.teleporting": "<prefix>Teleporting you to <secondary><arg:0></secondary>.",
|
||||
"smod.command.socialspy.enabled": "<prefix>SocialSpy <green>enabled</green>.",
|
||||
"smod.command.socialspy.disabled": "<prefix>SocialSpy <red>disabled</red>.",
|
||||
"smod.command.socialspy.enabled": "<prefix>SocialSpy <green>enabled</green>.",
|
||||
"smod.command.unban.fail.notBanned": "That player is not banned.",
|
||||
"smod.command.unmute.fail.notMuted": "That player is not muted.",
|
||||
"smod.command.vanish.fail.noPlayersFound": "No player was found.",
|
||||
"smod.command.vanish.broadcast.on": "<prefix><secondary><arg:0></secondary> vanished.",
|
||||
"smod.command.vanish.broadcast.off": "<prefix><secondary><arg:0></secondary> re-appeared.",
|
||||
"smod.command.vanish.toggle.on": "<prefix>You are now vanished.",
|
||||
"smod.command.vanish.toggle.off": "<prefix>You are no longer vanished.",
|
||||
"smod.command.vanish.list.none": "<prefix>No players are currently vanished.",
|
||||
"smod.command.vanish.broadcast.on": "<prefix><secondary><arg:0></secondary> vanished.",
|
||||
"smod.command.vanish.fail.noPlayersFound": "No player was found.",
|
||||
"smod.command.vanish.list": "<prefix>The following players are currently vanished: <arg:0>",
|
||||
"smod.chatInput.remainingTime": "<gray><arg:0> seconds",
|
||||
"smod.confirm.yes": "<green>Yes",
|
||||
"smod.command.vanish.list.none": "<prefix>No players are currently vanished.",
|
||||
"smod.command.vanish.toggle.off": "<prefix>You are no longer vanished.",
|
||||
"smod.command.vanish.toggle.on": "<prefix>You are now vanished.",
|
||||
"smod.confirm.no": "<red>No",
|
||||
"smod.socialspy.command": "<primary>[<secondary>SocialSpy</secondary>] <arg:0>: <secondary><arg:1>",
|
||||
"smod.vanish.stillEnabled": "<bold><prefix>You are still vanished!",
|
||||
"smod.punishment.undo.mute": "<primary><secondary><arg:0></secondary> was unmuted by <secondary><arg:1></secondary>.",
|
||||
"smod.punishment.undo.ban": "<primary><secondary><arg:0></secondary> was unbanned by <secondary><arg:1></secondary>.",
|
||||
"smod.punishment.broadcast.mute": "<primary><secondary><arg:0></secondary> was muted by <secondary><arg:1></secondary> for <secondary><arg:2></secondary>.<newline>Reason: <secondary><arg:3>",
|
||||
"smod.confirm.yes": "<green>Yes",
|
||||
"smod.menu": "SMod Menu",
|
||||
"smod.menu.filter": "Filter: <arg:0>",
|
||||
"smod.menu.filter.active": "Active punishments",
|
||||
"smod.menu.filter.all": "All punishments",
|
||||
"smod.menu.filter.expired": "Expired punishments",
|
||||
"smod.menu.filter.switch": "\u00BB Click to switch filter",
|
||||
"smod.menu.info.click": "\u00BB Click to undo punishment",
|
||||
"smod.menu.info.duration": "<secondary>Duration: <primary><arg:0>",
|
||||
"smod.menu.info.expiry.future": "<secondary>Expires: <primary>In <arg:0>",
|
||||
"smod.menu.info.expiry.past": "<secondary>Expired: <primary><arg:0> ago",
|
||||
"smod.menu.info.player": "<secondary>Player: <primary><arg:0>",
|
||||
"smod.menu.info.punishedBy": "<secondary>Punished by: <primary><arg:0>",
|
||||
"smod.menu.info.reason": "<secondary>Reason: <primary><arg:0>",
|
||||
"smod.menu.info.timestamp": "<secondary>Timestamp: <primary><arg:0>",
|
||||
"smod.menu.info.undone": "<red>Undone by: <gold><arg:0>",
|
||||
"smod.menu.search": "Search",
|
||||
"smod.menu.search.current": "Current search query: <arg:0>",
|
||||
"smod.menu.search.new": "\u00BB Click to enter new search query",
|
||||
"smod.menu.search.none": "None",
|
||||
"smod.menu.search.query": "Enter your search query in the chat",
|
||||
"smod.menu.search.remove": "\u00BB Right click to remove search query",
|
||||
"smod.menu.sort": "Sort by: <arg:0>",
|
||||
"smod.menu.sort.expiry": "Expiry time",
|
||||
"smod.menu.sort.moderatorName": "Moderator name",
|
||||
"smod.menu.sort.playerName": "Player name",
|
||||
"smod.menu.sort.switch": "\u00BB Click to switch sorting option",
|
||||
"smod.menu.sort.time": "Time issued",
|
||||
"smod.menu.type": "Type: <arg:0>",
|
||||
"smod.menu.type.all": "All",
|
||||
"smod.menu.type.switch": "» Click to switch type",
|
||||
"smod.menu.undoConfirmation": "Are you sure that you want to undo this punishment?",
|
||||
"smod.punishment.broadcast.ban": "<primary><secondary><arg:0></secondary> was banned by <secondary><arg:1></secondary> for <secondary><arg:2></secondary>.<newline>Reason: <secondary><arg:3>",
|
||||
"smod.punishment.broadcast.kick": "<primary><secondary><arg:0></secondary> was kicked by <secondary><arg:1></secondary>.<newline>Reason: <secondary><arg:3>",
|
||||
"smod.punishment.playerMessage.mute": "<primary>You have been muted by <secondary><arg:0></secondary>.<newline>Reason: <secondary><arg:1></secondary><newline>Your mute expires in <secondary><arg:2></secondary>.",
|
||||
"smod.punishment.broadcast.mute": "<primary><secondary><arg:0></secondary> was muted by <secondary><arg:1></secondary> for <secondary><arg:2></secondary>.<newline>Reason: <secondary><arg:3>",
|
||||
"smod.punishment.name.ban": "Ban",
|
||||
"smod.punishment.name.kick": "Kick",
|
||||
"smod.punishment.name.mute": "Mute",
|
||||
"smod.punishment.playerMessage.ban": "<primary>You have been banned from this server by <secondary><arg:0></secondary>.<newline>Reason: <secondary><arg:1></secondary><newline>Your ban expires in <secondary><arg:2></secondary>.",
|
||||
"smod.punishment.playerMessage.kick": "<primary>You have been kicked by <secondary><arg:0></secondary>.<newline>Reason: <secondary><arg:1>",
|
||||
"smod.punishment.name.mute": "Mute",
|
||||
"smod.punishment.name.kick": "Kick",
|
||||
"smod.punishment.name.ban": "Ban",
|
||||
"smod.command.fail.players": "Only players can execute this command.",
|
||||
"smod.command.fail.playersConsole": "Only players and the console can execute this command.",
|
||||
"smod.command.fail.invalidPlayer": "Please provide a valid player.",
|
||||
"smod.punishment.playerMessage.mute": "<primary>You have been muted by <secondary><arg:0></secondary>.<newline>Reason: <secondary><arg:1></secondary><newline>Your mute expires in <secondary><arg:2></secondary>.",
|
||||
"smod.punishment.playerMessage.mute.chat": "<primary>You can't run this command while you are muted.",
|
||||
"smod.punishment.undo.ban": "<primary><secondary><arg:0></secondary> was unbanned by <secondary><arg:1></secondary>.",
|
||||
"smod.punishment.undo.mute": "<primary><secondary><arg:0></secondary> was unmuted by <secondary><arg:1></secondary>.",
|
||||
"smod.socialspy.command": "<primary>[<secondary>SocialSpy</secondary>] <arg:0>: <secondary><arg:1>",
|
||||
"smod.time.days": "<arg:0> days",
|
||||
"smod.time.hours": "<arg:0> hours",
|
||||
"smod.time.milliseconds": "<arg:0> milliseconds",
|
||||
"smod.time.minutes": "<arg:0> minutes",
|
||||
"smod.time.month.0": "January",
|
||||
"smod.time.month.1": "February",
|
||||
"smod.time.month.10": "November",
|
||||
"smod.time.month.11": "December",
|
||||
"smod.time.month.2": "March",
|
||||
"smod.time.month.3": "April",
|
||||
"smod.time.month.4": "May",
|
||||
@@ -62,46 +99,10 @@
|
||||
"smod.time.month.7": "August",
|
||||
"smod.time.month.8": "September",
|
||||
"smod.time.month.9": "October",
|
||||
"smod.time.month.10": "November",
|
||||
"smod.time.month.11": "December",
|
||||
"smod.time.timestamp": "<arg:2> <arg:1> <arg:0> <arg:3>:<arg:4>:<arg:5> <arg:6>",
|
||||
"smod.time.years": "<arg:0> years",
|
||||
"smod.time.months": "<arg:0> months",
|
||||
"smod.time.weeks": "<arg:0> weeks",
|
||||
"smod.time.days": "<arg:0> days",
|
||||
"smod.time.hours": "<arg:0> hours",
|
||||
"smod.time.minutes": "<arg:0> minutes",
|
||||
"smod.time.seconds": "<arg:0> seconds",
|
||||
"smod.time.milliseconds": "<arg:0> milliseconds",
|
||||
"smod.menu.undoConfirmation": "Are you sure that you want to undo this punishment?",
|
||||
"smod.menu.filter.active": "Active punishments",
|
||||
"smod.menu.filter.expired": "Expired punishments",
|
||||
"smod.menu.filter.all": "All punishments",
|
||||
"smod.menu.sort.expiry": "Expiry time",
|
||||
"smod.menu.sort.time": "Time issued",
|
||||
"smod.menu.sort.playerName": "Player name",
|
||||
"smod.menu.sort.moderatorName": "Moderator name",
|
||||
"smod.menu": "SMod Menu",
|
||||
"smod.menu.search.query": "Enter your search query in the chat",
|
||||
"smod.menu.filter": "Filter: <arg:0>",
|
||||
"smod.menu.filter.switch": "\u00BB Click to switch filter",
|
||||
"smod.menu.type": "Type: <arg:0>",
|
||||
"smod.menu.type.all": "All",
|
||||
"smod.menu.type.switch": "» Click to switch type",
|
||||
"smod.menu.sort": "Sort by: <arg:0>",
|
||||
"smod.menu.sort.switch": "\u00BB Click to switch sorting option",
|
||||
"smod.menu.search": "Search",
|
||||
"smod.menu.search.current": "Current search query: <arg:0>",
|
||||
"smod.menu.search.none": "None",
|
||||
"smod.menu.search.new": "\u00BB Click to enter new search query",
|
||||
"smod.menu.search.remove": "\u00BB Right click to remove search query",
|
||||
"smod.menu.info.player": "<secondary>Player: <primary><arg:0>",
|
||||
"smod.menu.info.punishedBy": "<secondary>Punished by: <primary><arg:0>",
|
||||
"smod.menu.info.timestamp": "<secondary>Timestamp: <primary><arg:0>",
|
||||
"smod.menu.info.duration": "<secondary>Duration: <primary><arg:0>",
|
||||
"smod.menu.info.expiry.future": "<secondary>Expires: <primary>In <arg:0>",
|
||||
"smod.menu.info.expiry.past": "<secondary>Expired: <primary><arg:0> ago",
|
||||
"smod.menu.info.reason": "<secondary>Reason: <primary><arg:0>",
|
||||
"smod.menu.info.undone": "<red>Undone by: <gold><arg:0>",
|
||||
"smod.menu.info.click": "\u00BB Click to undo punishment"
|
||||
"smod.time.timestamp": "<arg:2> <arg:1> <arg:0> <arg:3>:<arg:4>:<arg:5> <arg:6>",
|
||||
"smod.time.weeks": "<arg:0> weeks",
|
||||
"smod.time.years": "<arg:0> years",
|
||||
"smod.vanish.stillEnabled": "<bold><prefix>You are still vanished!"
|
||||
}
|
||||
Reference in New Issue
Block a user