mirror of
https://github.com/Shiewk/SModeration.git
synced 2026-04-28 05:54:16 +02:00
SocialSpy command and permissions
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package de.shiewk.smoderation;
|
||||
|
||||
import de.shiewk.smoderation.command.*;
|
||||
import de.shiewk.smoderation.config.SModerationConfig;
|
||||
import de.shiewk.smoderation.input.ChatInputListener;
|
||||
import de.shiewk.smoderation.listener.*;
|
||||
import de.shiewk.smoderation.storage.PunishmentContainer;
|
||||
@@ -26,6 +27,7 @@ public final class SModeration extends JavaPlugin {
|
||||
public static final PunishmentContainer container = new PunishmentContainer();
|
||||
public static ComponentLogger LOGGER = null;
|
||||
public static SModeration PLUGIN = null;
|
||||
public static SModerationConfig CONFIG = null;
|
||||
public static File SAVE_FILE = null;
|
||||
|
||||
public static final TextColor PRIMARY_COLOR = TextColor.color(212, 0, 255);
|
||||
@@ -38,6 +40,7 @@ public final class SModeration extends JavaPlugin {
|
||||
public void onLoad() {
|
||||
LOGGER = getComponentLogger();
|
||||
PLUGIN = this;
|
||||
CONFIG = new SModerationConfig(this.getConfig(), this);
|
||||
SAVE_FILE = new File(this.getDataFolder().getAbsolutePath() + "/container.gz");
|
||||
}
|
||||
|
||||
@@ -49,6 +52,7 @@ public final class SModeration extends JavaPlugin {
|
||||
getPluginManager().registerEvents(new EnderchestSeeListener(), this);
|
||||
getPluginManager().registerEvents(new VanishListener(), this);
|
||||
getPluginManager().registerEvents(new ChatInputListener(), this);
|
||||
getPluginManager().registerEvents(new SocialSpyListener(), this);
|
||||
|
||||
registerCommand("mute", new MuteCommand());
|
||||
registerCommand("ban", new BanCommand());
|
||||
@@ -60,6 +64,7 @@ public final class SModeration extends JavaPlugin {
|
||||
registerCommand("invsee", new InvseeCommand());
|
||||
registerCommand("enderchestsee", new EnderchestSeeCommand());
|
||||
registerCommand("vanish", new VanishCommand());
|
||||
registerCommand("socialspy", new SocialSpyCommand());
|
||||
|
||||
container.load(SAVE_FILE);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package de.shiewk.smoderation.command;
|
||||
|
||||
import de.shiewk.smoderation.listener.SocialSpyListener;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static de.shiewk.smoderation.SModeration.CHAT_PREFIX;
|
||||
import static net.kyori.adventure.text.Component.text;
|
||||
|
||||
public class SocialSpyCommand implements TabExecutor {
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
final boolean enabled = SocialSpyListener.toggle(sender);
|
||||
sender.sendMessage(CHAT_PREFIX.append(text("SocialSpy ").append(
|
||||
enabled ?
|
||||
text("enabled").color(NamedTextColor.GREEN) :
|
||||
text("disabled").color(NamedTextColor.RED)
|
||||
).append(text("."))));
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
return List.of();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package de.shiewk.smoderation.config;
|
||||
|
||||
import de.shiewk.smoderation.SModeration;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class SModerationConfig {
|
||||
|
||||
private final FileConfiguration config;
|
||||
private final SModeration plugin;
|
||||
|
||||
public SModerationConfig(FileConfiguration config, SModeration plugin) {
|
||||
this.config = config;
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
public List<String> getSocialSpyCommands(List<String> default_){
|
||||
final String path = "socialspy-commands";
|
||||
if (!config.contains(path)){
|
||||
config.set(path, default_);
|
||||
plugin.saveConfig();
|
||||
}
|
||||
return config.getStringList(path);
|
||||
}
|
||||
|
||||
public FileConfiguration getConfig() {
|
||||
return config;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
package de.shiewk.smoderation.listener;
|
||||
|
||||
import de.shiewk.smoderation.SModeration;
|
||||
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.persistence.PersistentDataContainer;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static de.shiewk.smoderation.SModeration.PRIMARY_COLOR;
|
||||
import static de.shiewk.smoderation.SModeration.SECONDARY_COLOR;
|
||||
import static net.kyori.adventure.text.Component.text;
|
||||
|
||||
public class SocialSpyListener implements Listener {
|
||||
|
||||
private static final List<String> defaultCommands = List.of(
|
||||
"w",
|
||||
"tell",
|
||||
"msg",
|
||||
"teammsg",
|
||||
"tm",
|
||||
"minecraft:w",
|
||||
"minecraft:tell",
|
||||
"minecraft:msg",
|
||||
"minecraft:teammsg",
|
||||
"minecraft:tm"
|
||||
);
|
||||
|
||||
private static final NamespacedKey SAVE_KEY = new NamespacedKey("smoderation", "socialspy");
|
||||
private static final ObjectArrayList<CommandSender> targets = new ObjectArrayList<>();
|
||||
|
||||
public static boolean toggle(CommandSender sender) {
|
||||
boolean enabledNow = isEnabled(sender);
|
||||
if (enabledNow){
|
||||
targets.remove(sender);
|
||||
if (sender instanceof Player player){
|
||||
player.getPersistentDataContainer().set(SAVE_KEY, PersistentDataType.BOOLEAN, false);
|
||||
}
|
||||
return false;
|
||||
} else {
|
||||
targets.add(sender);
|
||||
if (sender instanceof Player player){
|
||||
player.getPersistentDataContainer().set(SAVE_KEY, PersistentDataType.BOOLEAN, true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler public void onPlayerJoin(PlayerJoinEvent event){
|
||||
final PersistentDataContainer pdc = event.getPlayer().getPersistentDataContainer();
|
||||
if (Boolean.TRUE.equals(pdc.get(SAVE_KEY, PersistentDataType.BOOLEAN))){
|
||||
targets.add(event.getPlayer());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler public void onPlayerQuit(PlayerQuitEvent event){
|
||||
targets.remove(event.getPlayer());
|
||||
}
|
||||
|
||||
public static boolean isEnabled(CommandSender sender){
|
||||
return targets.contains(sender);
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.NORMAL)
|
||||
public void onPlayerSendCommand(PlayerCommandPreprocessEvent event){
|
||||
List<String> ssCommands = SModeration.CONFIG.getSocialSpyCommands(defaultCommands);
|
||||
final String message = event.getMessage();
|
||||
if (ssCommands.stream().anyMatch(str ->
|
||||
message.startsWith("/"+str+" ")
|
||||
|| message.startsWith(str+" ")
|
||||
)){
|
||||
SocialSpyListener.command(event.getPlayer(), message);
|
||||
}
|
||||
}
|
||||
|
||||
public static void command(Player player, String command){
|
||||
for (CommandSender target : targets) {
|
||||
target.sendMessage(text("[SocialSpy] ")
|
||||
.append(player.displayName().colorIfAbsent(SECONDARY_COLOR))
|
||||
.append(text(": " + command).color(SECONDARY_COLOR))
|
||||
.color(PRIMARY_COLOR));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -75,8 +75,20 @@ commands:
|
||||
usage: "§cUsage: /vanish list or /vanish toggle <player>"
|
||||
aliases:
|
||||
- smvanish
|
||||
- smodvanish
|
||||
- v
|
||||
- smv
|
||||
permission: smod.vanish
|
||||
description: Toggles vanish mode which prevents other players from seeing you're online
|
||||
socialspy:
|
||||
usage: "§cUsage: /socialspy"
|
||||
description: Enables socialspy mode (you can see private messages of other players)
|
||||
permission: smod.socialspy
|
||||
aliases:
|
||||
- smodsocialspy
|
||||
- smsocialspy
|
||||
- smss
|
||||
- ss
|
||||
permissions:
|
||||
smod.mute:
|
||||
default: op
|
||||
@@ -137,4 +149,7 @@ permissions:
|
||||
description: Allows the player to use /vanish
|
||||
smod.vanish.see:
|
||||
default: op
|
||||
description: Allows the player to see vanished players
|
||||
description: Allows the player to see vanished players
|
||||
smod.socialspy:
|
||||
default: op
|
||||
description: Allows the player to enable SocialSpy
|
||||
Reference in New Issue
Block a user