JsonSerializable needs fixing

This commit is contained in:
obvWolf
2024-01-17 01:32:23 -06:00
parent 8f13e018ee
commit fa379eacbe
30 changed files with 494 additions and 647 deletions

48
build.sh Executable file
View File

@@ -0,0 +1,48 @@
#!/bin/bash
# Run Gradle build
./gradlew build
# Check if the build was successful
if [ $? -eq 0 ]; then
echo "Gradle build successful."
# SFTP upload
SFTP_HOST="192.168.1.199"
SFTP_USER="trouper"
SFTP_PASSWORD="Trouper12()1"
SFTP_REMOTE_DIR="/home/trouper/docker/data/plugins/"
# Create a temporary file with a unique name
TEMP_FILE=$(mktemp)
# Specify the local file to upload
LOCAL_FILE="/run/media/trouper/'1TB drive'/IJ/IdeaProjects/Sentinel/build/libs/Sentinel-0.2.2.jar"
# Write the SFTP commands to the temporary file
echo "put $LOCAL_FILE $SFTP_REMOTE_DIR" > "$TEMP_FILE"
echo "bye" >> "$TEMP_FILE"
# Use sftp non-interactively with the specified commands
sftp -oStrictHostKeyChecking=no -oBatchMode=no -b "$TEMP_FILE" "$SFTP_USER@$SFTP_HOST" <<EOF
$SFTP_PASSWORD
EOF
# Remove the temporary file
rm -f "$TEMP_FILE"
# SSH command to reload the plugin on the host
SSH_COMMANDS=(
"pm reload Sentinel"
"execute at @a run playsound minecraft:entity.experience_orb.pickup master @a \~ \~ \~ 100 1 1"
"tellraw @a '\"'[Server] Reload Complete, Upload Successful.'\"'"
)
for cmd in "${SSH_COMMANDS[@]}"; do
ssh -oStrictHostKeyChecking=no -oBatchMode=no "$SFTP_USER@$SFTP_HOST" "docker exec docker-mc-1 mc-send-to-console $cmd"
done
echo "Plugin reloaded."
else
echo "Gradle build failed."
fi

View File

@@ -4,14 +4,12 @@ import io.github.itzispyder.pdk.PDK;
import io.github.thetrouper.sentinel.auth.Auth; import io.github.thetrouper.sentinel.auth.Auth;
import io.github.thetrouper.sentinel.cmds.*; import io.github.thetrouper.sentinel.cmds.*;
import io.github.thetrouper.sentinel.events.*; import io.github.thetrouper.sentinel.events.*;
import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.config.*;
import io.github.thetrouper.sentinel.server.config.LanguageFile;
import io.github.thetrouper.sentinel.server.config.MainConfig;
import io.github.thetrouper.sentinel.server.functions.AntiSpam; import io.github.thetrouper.sentinel.server.functions.AntiSpam;
import io.github.thetrouper.sentinel.server.functions.Authenticator; import io.github.thetrouper.sentinel.server.functions.Authenticator;
import io.github.thetrouper.sentinel.server.functions.ProfanityFilter; import io.github.thetrouper.sentinel.server.functions.ProfanityFilter;
import io.github.thetrouper.sentinel.server.functions.Telemetry; import io.github.thetrouper.sentinel.server.functions.Telemetry;
import io.github.thetrouper.sentinel.server.util.JsonSerializable; import io.github.itzispyder.pdk.utils.misc.JsonSerializable;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
@@ -23,8 +21,18 @@ import java.util.logging.Logger;
public final class Sentinel extends JavaPlugin { public final class Sentinel extends JavaPlugin {
private static Sentinel instance; private static Sentinel instance;
public static LanguageFile dict; public static LanguageFile dict;
private static File cfgfile = new File("plugins/Sentinel/main-config.json"); private static final File cfgfile = new File("plugins/Sentinel/main-config.json");
private static final File nbtcfg = new File("plugins/Sentinel/nbt-config.json");
private static final File strctcfg = new File("plugins/Sentinel/strict.json");
private static final File swrcfg = new File("plugins/Sentinel/swears.json");
private static final File fpcfg = new File("plugins/Sentinel/false-positives.json");
private static final File advcfg = new File("plugins/Sentinel/advanced-config.json");
public static MainConfig mainConfig = JsonSerializable.load(cfgfile, MainConfig.class, new MainConfig()); public static MainConfig mainConfig = JsonSerializable.load(cfgfile, MainConfig.class, new MainConfig());
public static FPConfig fpConfig = JsonSerializable.load(fpcfg, FPConfig.class, new FPConfig());
public static SwearsConfig swearConfig = JsonSerializable.load(swrcfg, SwearsConfig.class, new SwearsConfig());
public static StrictConfig strictConfig = JsonSerializable.load(strctcfg, StrictConfig.class, new StrictConfig());
public static NBTConfig nbtConfig = JsonSerializable.load(nbtcfg, NBTConfig.class, new NBTConfig());
public static AdvancedConfig advConfig = JsonSerializable.load(advcfg, AdvancedConfig.class, new AdvancedConfig());
public static final PluginManager manager = Bukkit.getPluginManager(); public static final PluginManager manager = Bukkit.getPluginManager();
public static String prefix = ""; public static String prefix = "";
public static String key = ""; public static String key = "";
@@ -45,7 +53,7 @@ public final class Sentinel extends JavaPlugin {
log.info("Initializing Server ID..."); log.info("Initializing Server ID...");
String serverID = Authenticator.getServerID(); String serverID = Authenticator.getServerID();
identifier = serverID; identifier = serverID;
log.info("Pre-load finished!\n]====---- Requesting Authentication (" + dict.get("example-message") + ") ----====[ \n- License Key: " + key + " \n- Server ID: " + serverID); log.info("Pre-load finished!\n]====---- Requesting Authentication (" + dict.get("if-you-see-this-lang-is-broken") + ") ----====[ \n- License Key: " + key + " \n- Server ID: " + serverID);
String authStatus = "ERROR"; String authStatus = "ERROR";
String authstatus = "ERROR"; String authstatus = "ERROR";
try { try {
@@ -138,14 +146,21 @@ public final class Sentinel extends JavaPlugin {
} }
public void loadConfig() { public void loadConfig() {
// Init // Init
mainConfig = JsonSerializable.load(cfgfile,MainConfig.class,new MainConfig());
advConfig = JsonSerializable.load(advcfg,AdvancedConfig.class,new AdvancedConfig());
fpConfig = JsonSerializable.load(fpcfg,FPConfig.class,new FPConfig());
strictConfig = JsonSerializable.load(strctcfg,StrictConfig.class,new StrictConfig());
swearConfig = JsonSerializable.load(swrcfg,SwearsConfig.class,new SwearsConfig());
nbtConfig = JsonSerializable.load(nbtcfg,NBTConfig.class,new NBTConfig());
log.info("Loading Dictionary (" + MainConfig.Plugin.lang + ")..."); log.info("Loading Dictionary (" + MainConfig.Plugin.lang + ")...");
dict = JsonSerializable.load(LanguageFile.PATH,LanguageFile.class,new LanguageFile()); dict = JsonSerializable.load(LanguageFile.PATH,LanguageFile.class,new LanguageFile());
log.info("Verifying Config..."); log.info("Verifying Config...");
getConfig().options().copyDefaults(); //getConfig().options().copyDefaults();
saveDefaultConfig(); //saveDefaultConfig();
} }
/** /**

View File

@@ -6,8 +6,7 @@ import io.github.itzispyder.pdk.commands.CustomCommand;
import io.github.itzispyder.pdk.commands.Permission; import io.github.itzispyder.pdk.commands.Permission;
import io.github.itzispyder.pdk.commands.completions.CompletionBuilder; import io.github.itzispyder.pdk.commands.completions.CompletionBuilder;
import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.Sentinel;
import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.config.MainConfig;
import io.github.thetrouper.sentinel.server.functions.AntiSpam;
import io.github.thetrouper.sentinel.server.functions.ProfanityFilter; import io.github.thetrouper.sentinel.server.functions.ProfanityFilter;
import io.github.thetrouper.sentinel.server.util.Text; import io.github.thetrouper.sentinel.server.util.Text;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@@ -44,7 +43,7 @@ public class SentinelCommand implements CustomCommand {
players.add(p); players.add(p);
String msg = args.getAll(1).toString().trim(); String msg = args.getAll(1).toString().trim();
AsyncPlayerChatEvent e = new AsyncPlayerChatEvent(true, p, msg, players); AsyncPlayerChatEvent e = new AsyncPlayerChatEvent(true, p, msg, players);
AntiSpam.handleAntiSpam(e); io.github.thetrouper.sentinel.server.functions.AntiSpam.handleAntiSpam(e);
} }
case "lang" -> { case "lang" -> {
p.sendMessage(Sentinel.dict.get("exmaple-message")); p.sendMessage(Sentinel.dict.get("exmaple-message"));
@@ -61,7 +60,7 @@ public class SentinelCommand implements CustomCommand {
p.sendMessage(Text.prefix("Invalid Player!")); p.sendMessage(Text.prefix("Invalid Player!"));
return; return;
} }
p.sendMessage(Text.prefix("Heat of " + target.getName() + ": &8(&c" + AntiSpam.heatMap.get(target) + "&7/&4" + Config.punishHeat + "&8)")); p.sendMessage(Text.prefix("Heat of " + target.getName() + ": &8(&c" + io.github.thetrouper.sentinel.server.functions.AntiSpam.heatMap.get(target) + "&7/&4" + MainConfig.Chat.AntiSpam.punishHeat + "&8)"));
} }
} }
} }

View File

@@ -1,15 +1,15 @@
package io.github.thetrouper.sentinel.data; package io.github.thetrouper.sentinel.data;
import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.config.MainConfig;
import java.awt.*; import java.awt.*;
public enum FAT { public enum FAT {
BLOCK_SWEAR("Sentinel Profanity Filter",null,"swear-block-warn", "swear-block-notification", null,null), BLOCK_SWEAR("Sentinel Profanity Filter",null,"swear-block-warn", "swear-block-notification", null,null),
BLOCK_SPAM("Sentinel Anti-Spam", null, "spam-block-warn", "spam-notification",null,null), BLOCK_SPAM("Sentinel Anti-Spam", null, "spam-block-warn", "spam-notification",null,null),
SWEAR("Sentinel Anti-Swear Log","Anti-Swear", "profanity-mute-warn", "profanity-mute-notification", Config.swearPunishCommand, Color.orange), SWEAR("Sentinel Anti-Swear Log","Anti-Swear", "profanity-mute-warn", "profanity-mute-notification", MainConfig.Chat.AntiSwear.swearPunishCommand, Color.orange),
SLUR("Sentinel Anti-Slur Log", "Anti-Slur", "slur-mute-warn", "slur-mute-notification", Config.strictPunishCommand, Color.red), SLUR("Sentinel Anti-Slur Log", "Anti-Slur", "slur-mute-warn", "slur-mute-notification", MainConfig.Chat.AntiSwear.strictPunishCommand, Color.red),
SPAM("Sentinel Anti-Spam Log", "Anti-Spam", "spam-mute-warn", "spam-mute-notification", Config.spamPunishCommand, Color.pink); SPAM("Sentinel Anti-Spam Log", "Anti-Spam", "spam-mute-warn", "spam-mute-notification", MainConfig.Chat.AntiSpam.spamPunishCommand, Color.pink);
private final String title; private final String title;
private final String name; private final String name;

View File

@@ -4,7 +4,7 @@ import io.github.itzispyder.pdk.events.CustomListener;
import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.Sentinel;
import io.github.thetrouper.sentinel.data.ActionType; import io.github.thetrouper.sentinel.data.ActionType;
import io.github.thetrouper.sentinel.server.Action; import io.github.thetrouper.sentinel.server.Action;
import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.config.MainConfig;
import io.github.thetrouper.sentinel.server.util.ServerUtils; import io.github.thetrouper.sentinel.server.util.ServerUtils;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
@@ -16,9 +16,9 @@ public class CMDBlockPlace implements CustomListener {
@EventHandler @EventHandler
private void onCMDBlockPlace(BlockPlaceEvent e) { private void onCMDBlockPlace(BlockPlaceEvent e) {
ServerUtils.sendDebugMessage("CommandBlockPlace: Detected block place"); ServerUtils.sendDebugMessage("CommandBlockPlace: Detected block place");
if (!Config.preventCmdBlockPlace) return; if (!MainConfig.Plugin.preventCmdBlockPlace) return;
ServerUtils.sendDebugMessage("CommandBlockPlace: Enabled"); ServerUtils.sendDebugMessage("CommandBlockPlace: Enabled");
if (Config.cmdBlockOpCheck && !e.getPlayer().isOp()) return; if (MainConfig.Plugin.cmdBlockOpCheck && !e.getPlayer().isOp()) return;
ServerUtils.sendDebugMessage("CommandBlockPlace: Player is operator"); ServerUtils.sendDebugMessage("CommandBlockPlace: Player is operator");
Block b = e.getBlockPlaced(); Block b = e.getBlockPlaced();
if (b.getType() == Material.COMMAND_BLOCK || b.getType() == Material.CHAIN_COMMAND_BLOCK || b.getType() == Material.REPEATING_COMMAND_BLOCK ) { if (b.getType() == Material.COMMAND_BLOCK || b.getType() == Material.CHAIN_COMMAND_BLOCK || b.getType() == Material.REPEATING_COMMAND_BLOCK ) {
@@ -33,8 +33,8 @@ public class CMDBlockPlace implements CustomListener {
.setBlock(b) .setBlock(b)
.setPlayer(p) .setPlayer(p)
.setDenied(true) .setDenied(true)
.setPunished(Config.cmdBlockPunish) .setPunished(MainConfig.Plugin.cmdBlockPunish)
.setnotifyDiscord(Config.logCmdBlocks) .setnotifyDiscord(MainConfig.Plugin.logCmdBlocks)
.setNotifyTrusted(true) .setNotifyTrusted(true)
.setNotifyConsole(true) .setNotifyConsole(true)
.execute(); .execute();

View File

@@ -4,7 +4,7 @@ import io.github.itzispyder.pdk.events.CustomListener;
import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.Sentinel;
import io.github.thetrouper.sentinel.data.ActionType; import io.github.thetrouper.sentinel.data.ActionType;
import io.github.thetrouper.sentinel.server.Action; import io.github.thetrouper.sentinel.server.Action;
import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.config.MainConfig;
import io.github.thetrouper.sentinel.server.util.ServerUtils; import io.github.thetrouper.sentinel.server.util.ServerUtils;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
@@ -19,9 +19,9 @@ public class CMDBlockUse implements CustomListener {
@EventHandler @EventHandler
private void onCMDBlockUse(PlayerInteractEvent e) { private void onCMDBlockUse(PlayerInteractEvent e) {
ServerUtils.sendDebugMessage("CommandBlockUse: Detected Interaction"); ServerUtils.sendDebugMessage("CommandBlockUse: Detected Interaction");
if (!Config.preventCmdBlockUse) return; if (!MainConfig.Plugin.preventCmdBlockUse) return;
ServerUtils.sendDebugMessage("CommandBlockUse: Enabled"); ServerUtils.sendDebugMessage("CommandBlockUse: Enabled");
if (Config.cmdBlockOpCheck && !e.getPlayer().isOp()) return; if (MainConfig.Plugin.cmdBlockOpCheck && !e.getPlayer().isOp()) return;
ServerUtils.sendDebugMessage("CommandBlockUse: Player is op"); ServerUtils.sendDebugMessage("CommandBlockUse: Player is op");
if (e.getClickedBlock() == null) return; if (e.getClickedBlock() == null) return;
ServerUtils.sendDebugMessage("CommandBlockUse: Block isn't null"); ServerUtils.sendDebugMessage("CommandBlockUse: Block isn't null");
@@ -38,9 +38,9 @@ public class CMDBlockUse implements CustomListener {
.setBlock(b) .setBlock(b)
.setPlayer(p) .setPlayer(p)
.setDenied(true) .setDenied(true)
.setPunished(Config.cmdBlockPunish) .setPunished(MainConfig.Plugin.cmdBlockPunish)
.setDeoped(Config.deop) .setDeoped(MainConfig.Plugin.deop)
.setnotifyDiscord(Config.logCmdBlocks) .setnotifyDiscord(MainConfig.Plugin.logCmdBlocks)
.setNotifyTrusted(true) .setNotifyTrusted(true)
.setNotifyConsole(true) .setNotifyConsole(true)
.execute(); .execute();
@@ -52,9 +52,9 @@ public class CMDBlockUse implements CustomListener {
ServerUtils.sendDebugMessage("CommandBlockChange: Detected change block"); ServerUtils.sendDebugMessage("CommandBlockChange: Detected change block");
if (!(e.getEntity() instanceof Player p)) return; if (!(e.getEntity() instanceof Player p)) return;
ServerUtils.sendDebugMessage("CommandBlockChange: Changer is a player"); ServerUtils.sendDebugMessage("CommandBlockChange: Changer is a player");
if (!Config.preventCmdBlockUse) return; if (!MainConfig.Plugin.preventCmdBlockUse) return;
ServerUtils.sendDebugMessage("CommandBlockChange: Enabled"); ServerUtils.sendDebugMessage("CommandBlockChange: Enabled");
if (Config.cmdBlockOpCheck && !p.isOp()) return; if (MainConfig.Plugin.cmdBlockOpCheck && !p.isOp()) return;
ServerUtils.sendDebugMessage("CommandBlockChange: Player is op"); ServerUtils.sendDebugMessage("CommandBlockChange: Player is op");
Block b = e.getBlock(); Block b = e.getBlock();
if (b.getType() == Material.COMMAND_BLOCK || b.getType() == Material.REPEATING_COMMAND_BLOCK || b.getType() == Material.CHAIN_COMMAND_BLOCK) { if (b.getType() == Material.COMMAND_BLOCK || b.getType() == Material.REPEATING_COMMAND_BLOCK || b.getType() == Material.CHAIN_COMMAND_BLOCK) {
@@ -71,9 +71,9 @@ public class CMDBlockUse implements CustomListener {
.setCommand(cb.getCommand()) .setCommand(cb.getCommand())
.setPlayer(p) .setPlayer(p)
.setDenied(true) .setDenied(true)
.setPunished(Config.cmdBlockPunish) .setPunished(MainConfig.Plugin.cmdBlockPunish)
.setDeoped(Config.deop) .setDeoped(MainConfig.Plugin.deop)
.setnotifyDiscord(Config.logCmdBlocks) .setnotifyDiscord(MainConfig.Plugin.logCmdBlocks)
.setNotifyTrusted(true) .setNotifyTrusted(true)
.setNotifyConsole(true) .setNotifyConsole(true)
.execute(); .execute();

View File

@@ -4,7 +4,7 @@ import io.github.itzispyder.pdk.events.CustomListener;
import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.Sentinel;
import io.github.thetrouper.sentinel.data.ActionType; import io.github.thetrouper.sentinel.data.ActionType;
import io.github.thetrouper.sentinel.server.Action; import io.github.thetrouper.sentinel.server.Action;
import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.config.MainConfig;
import io.github.thetrouper.sentinel.server.util.ServerUtils; import io.github.thetrouper.sentinel.server.util.ServerUtils;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -16,9 +16,9 @@ public class CMDMinecartPlace implements CustomListener {
@EventHandler @EventHandler
private void onCMDMinecartPlace(PlayerInteractEvent e) { private void onCMDMinecartPlace(PlayerInteractEvent e) {
ServerUtils.sendDebugMessage("MinecartCommandPlace: Detected interaction"); ServerUtils.sendDebugMessage("MinecartCommandPlace: Detected interaction");
if (Config.preventCmdCartPlace) { if (MainConfig.Plugin.preventCmdCartPlace) {
ServerUtils.sendDebugMessage("MinecartCommandPlace: Enabled"); ServerUtils.sendDebugMessage("MinecartCommandPlace: Enabled");
if (Config.cmdBlockOpCheck && !e.getPlayer().isOp()) return; if (MainConfig.Plugin.cmdBlockOpCheck && !e.getPlayer().isOp()) return;
ServerUtils.sendDebugMessage("MinecartCommandPlace: Player is op"); ServerUtils.sendDebugMessage("MinecartCommandPlace: Player is op");
if (e.getItem() == null) return; if (e.getItem() == null) return;
ServerUtils.sendDebugMessage("MinecartCommandPlace: Item isn't null"); ServerUtils.sendDebugMessage("MinecartCommandPlace: Item isn't null");
@@ -38,12 +38,12 @@ public class CMDMinecartPlace implements CustomListener {
.setEvent(e) .setEvent(e)
.setPlayer(p) .setPlayer(p)
.setBlock(e.getClickedBlock()) .setBlock(e.getClickedBlock())
.setDenied(Config.preventCmdCartPlace) .setDenied(MainConfig.Plugin.preventCmdCartPlace)
.setPunished(Config.cmdBlockPunish) .setPunished(MainConfig.Plugin.cmdBlockPunish)
.setDeoped(Config.deop) .setDeoped(MainConfig.Plugin.deop)
.setNotifyConsole(true) .setNotifyConsole(true)
.setNotifyTrusted(true) .setNotifyTrusted(true)
.setnotifyDiscord(Config.logCmdBlocks) .setnotifyDiscord(MainConfig.Plugin.logCmdBlocks)
.execute(); .execute();
} }
} }

View File

@@ -4,7 +4,7 @@ import io.github.itzispyder.pdk.events.CustomListener;
import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.Sentinel;
import io.github.thetrouper.sentinel.data.ActionType; import io.github.thetrouper.sentinel.data.ActionType;
import io.github.thetrouper.sentinel.server.Action; import io.github.thetrouper.sentinel.server.Action;
import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.config.MainConfig;
import io.github.thetrouper.sentinel.server.util.ServerUtils; import io.github.thetrouper.sentinel.server.util.ServerUtils;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -15,9 +15,9 @@ public class CMDMinecartUse implements CustomListener {
@EventHandler @EventHandler
private void onCMDBlockMinecartUse(PlayerInteractEntityEvent e) { private void onCMDBlockMinecartUse(PlayerInteractEntityEvent e) {
ServerUtils.sendDebugMessage("MinecartCommandUse: Detected Interaction with entity"); ServerUtils.sendDebugMessage("MinecartCommandUse: Detected Interaction with entity");
if (!Config.preventCmdCartUse) return; if (!MainConfig.Plugin.preventCmdCartUse) return;
ServerUtils.sendDebugMessage("MinecartCommandUse: Enabled"); ServerUtils.sendDebugMessage("MinecartCommandUse: Enabled");
if (Config.cmdBlockOpCheck && !e.getPlayer().isOp()) return; if (MainConfig.Plugin.cmdBlockOpCheck && !e.getPlayer().isOp()) return;
ServerUtils.sendDebugMessage("MinecartCommandUse: Player op"); ServerUtils.sendDebugMessage("MinecartCommandUse: Player op");
if (e.getRightClicked().getType() == EntityType.MINECART_COMMAND) { if (e.getRightClicked().getType() == EntityType.MINECART_COMMAND) {
ServerUtils.sendDebugMessage("MinecartCommandUse: Entity is minecart command"); ServerUtils.sendDebugMessage("MinecartCommandUse: Entity is minecart command");
@@ -30,8 +30,8 @@ public class CMDMinecartUse implements CustomListener {
.setEvent(e) .setEvent(e)
.setPlayer(p) .setPlayer(p)
.setDenied(true) .setDenied(true)
.setPunished(Config.cmdBlockPunish) .setPunished(MainConfig.Plugin.cmdBlockPunish)
.setnotifyDiscord(Config.logCmdBlocks) .setnotifyDiscord(MainConfig.Plugin.logCmdBlocks)
.setNotifyTrusted(true) .setNotifyTrusted(true)
.setNotifyConsole(true) .setNotifyConsole(true)
.execute(); .execute();

View File

@@ -2,7 +2,6 @@ package io.github.thetrouper.sentinel.events;
import io.github.itzispyder.pdk.events.CustomListener; import io.github.itzispyder.pdk.events.CustomListener;
import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.Sentinel;
import io.github.thetrouper.sentinel.server.config.Config;
import io.github.thetrouper.sentinel.server.config.MainConfig; import io.github.thetrouper.sentinel.server.config.MainConfig;
import io.github.thetrouper.sentinel.server.functions.AntiSpam; import io.github.thetrouper.sentinel.server.functions.AntiSpam;
import io.github.thetrouper.sentinel.server.functions.AntiUnicode; import io.github.thetrouper.sentinel.server.functions.AntiUnicode;
@@ -26,14 +25,14 @@ public class ChatEvent implements CustomListener {
} }
if (!Sentinel.isTrusted(e.getPlayer()) || !e.getPlayer().hasPermission("sentinel.chat.antiswear.bypass")) { if (!Sentinel.isTrusted(e.getPlayer()) || !e.getPlayer().hasPermission("sentinel.chat.antiswear.bypass")) {
ServerUtils.sendDebugMessage("ChatEvent: Permission bypass failed, checking for swears"); ServerUtils.sendDebugMessage("ChatEvent: Permission bypass failed, checking for swears");
if (Config.antiSwearEnabled) { if (MainConfig.Chat.AntiSwear.antiSwearEnabled) {
ServerUtils.sendDebugMessage(("ChatEvent: Enabled, Continuing swear check!")); ServerUtils.sendDebugMessage(("ChatEvent: Enabled, Continuing swear check!"));
ProfanityFilter.handleProfanityFilter(e); ProfanityFilter.handleProfanityFilter(e);
} }
} }
if (!Sentinel.isTrusted(e.getPlayer()) || !e.getPlayer().hasPermission("sentinel.chat.antispam.bypass")) { if (!Sentinel.isTrusted(e.getPlayer()) || !e.getPlayer().hasPermission("sentinel.chat.antispam.bypass")) {
ServerUtils.sendDebugMessage(("ChatEvent: Permission bypass failed, checking for spam")); ServerUtils.sendDebugMessage(("ChatEvent: Permission bypass failed, checking for spam"));
if (Config.antiSpamEnabled) { if (MainConfig.Chat.AntiSpam.antiSpamEnabled) {
ServerUtils.sendDebugMessage(("ChatEvent: Enabled, Continuing spam check!")); ServerUtils.sendDebugMessage(("ChatEvent: Enabled, Continuing spam check!"));
AntiSpam.handleAntiSpam(e); AntiSpam.handleAntiSpam(e);
} }

View File

@@ -4,7 +4,7 @@ import io.github.itzispyder.pdk.events.CustomListener;
import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.Sentinel;
import io.github.thetrouper.sentinel.data.ActionType; import io.github.thetrouper.sentinel.data.ActionType;
import io.github.thetrouper.sentinel.server.Action; import io.github.thetrouper.sentinel.server.Action;
import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.config.MainConfig;
import io.github.thetrouper.sentinel.server.util.ServerUtils; import io.github.thetrouper.sentinel.server.util.ServerUtils;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@@ -29,15 +29,15 @@ public class CommandEvent implements CustomListener {
.setPlayer(p) .setPlayer(p)
.setCommand(fullcommand) .setCommand(fullcommand)
.setDenied(true) .setDenied(true)
.setDeoped(Config.deop) .setDeoped(MainConfig.Plugin.deop)
.setPunished(Config.commandPunish) .setPunished(MainConfig.Plugin.commandPunish)
.setnotifyDiscord(Config.logDangerous) .setnotifyDiscord(MainConfig.Plugin.logDangerous)
.setNotifyConsole(true) .setNotifyConsole(true)
.setNotifyTrusted(true) .setNotifyTrusted(true)
.execute(); .execute();
} }
} }
if (Config.blockSpecific) { if (MainConfig.Plugin.blockSpecific) {
ServerUtils.sendDebugMessage("CommandEvent: Checking command for specific"); ServerUtils.sendDebugMessage("CommandEvent: Checking command for specific");
if (command.contains(":")) { if (command.contains(":")) {
ServerUtils.sendDebugMessage("CommandEvent: Failed check"); ServerUtils.sendDebugMessage("CommandEvent: Failed check");
@@ -50,9 +50,9 @@ public class CommandEvent implements CustomListener {
.setPlayer(p) .setPlayer(p)
.setCommand(command) .setCommand(command)
.setDenied(true) .setDenied(true)
.setDeoped(Config.deop) .setDeoped(MainConfig.Plugin.deop)
.setPunished(Config.specificPunish) .setPunished(MainConfig.Plugin.specificPunish)
.setnotifyDiscord(Config.logSpecific) .setnotifyDiscord(MainConfig.Plugin.logSpecific)
.setNotifyConsole(true) .setNotifyConsole(true)
.setNotifyTrusted(true) .setNotifyTrusted(true)
.execute(); .execute();

View File

@@ -4,7 +4,8 @@ import io.github.itzispyder.pdk.events.CustomListener;
import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.Sentinel;
import io.github.thetrouper.sentinel.data.ActionType; import io.github.thetrouper.sentinel.data.ActionType;
import io.github.thetrouper.sentinel.server.Action; import io.github.thetrouper.sentinel.server.Action;
import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.config.MainConfig;
import io.github.thetrouper.sentinel.server.config.NBTConfig;
import io.github.thetrouper.sentinel.server.util.ServerUtils; import io.github.thetrouper.sentinel.server.util.ServerUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
@@ -25,7 +26,7 @@ public class NBTEvents implements CustomListener {
@EventHandler @EventHandler
private void onNBTPull(InventoryCreativeEvent e) { private void onNBTPull(InventoryCreativeEvent e) {
ServerUtils.sendDebugMessage("NBT: Detected creative mode action"); ServerUtils.sendDebugMessage("NBT: Detected creative mode action");
if (!Config.preventNBT) return; if (!MainConfig.Plugin.preventNBT) return;
ServerUtils.sendDebugMessage("NBT: Enabled"); ServerUtils.sendDebugMessage("NBT: Enabled");
if (!(e.getWhoClicked() instanceof Player p)) return; if (!(e.getWhoClicked() instanceof Player p)) return;
ServerUtils.sendDebugMessage("NBT: Clicker is a player"); ServerUtils.sendDebugMessage("NBT: Clicker is a player");
@@ -45,13 +46,13 @@ public class NBTEvents implements CustomListener {
.setAction(ActionType.NBT) .setAction(ActionType.NBT)
.setPlayer(Bukkit.getPlayer(e.getWhoClicked().getName())) .setPlayer(Bukkit.getPlayer(e.getWhoClicked().getName()))
.setItem(e.getCursor()) .setItem(e.getCursor())
.setDenied(Config.preventNBT) .setDenied(MainConfig.Plugin.preventNBT)
.setDeoped(Config.deop) .setDeoped(MainConfig.Plugin.deop)
.setPunished(Config.nbtPunish) .setPunished(MainConfig.Plugin.nbtPunish)
.setRevertGM(Config.preventNBT) .setRevertGM(MainConfig.Plugin.preventNBT)
.setNotifyConsole(true) .setNotifyConsole(true)
.setNotifyTrusted(true) .setNotifyTrusted(true)
.setnotifyDiscord(Config.logNBT) .setnotifyDiscord(MainConfig.Plugin.logNBT)
.execute(); .execute();
} }
} }
@@ -118,19 +119,19 @@ public class NBTEvents implements CustomListener {
return false; return false;
} }
} }
if (!Config.allowName && meta.hasDisplayName()) { if (!NBTConfig.allowName && meta.hasDisplayName()) {
ServerUtils.sendDebugMessage("NBT: No pass N"); ServerUtils.sendDebugMessage("NBT: No pass N");
return false; return false;
} }
if (!Config.allowLore && meta.hasLore()) { if (!NBTConfig.allowLore && meta.hasLore()) {
ServerUtils.sendDebugMessage("NBT: No Pass L "); ServerUtils.sendDebugMessage("NBT: No Pass L ");
return false; return false;
} }
if (!Config.allowAttributes && meta.hasAttributeModifiers()) { if (!NBTConfig.allowAttributes && meta.hasAttributeModifiers()) {
ServerUtils.sendDebugMessage("NBT: No pass A"); ServerUtils.sendDebugMessage("NBT: No pass A");
return false; return false;
} }
if (Config.globalMaxEnchant != 0 && hasIllegalEnchants(i)) { if (NBTConfig.globalMaxEnchant != 0 && hasIllegalEnchants(i)) {
ServerUtils.sendDebugMessage("NBT: No pass E"); ServerUtils.sendDebugMessage("NBT: No pass E");
return false; return false;
} }
@@ -155,174 +156,174 @@ public class NBTEvents implements CustomListener {
final ItemMeta meta = i.getItemMeta(); final ItemMeta meta = i.getItemMeta();
final Map<Enchantment, Integer> enchantments = meta.getEnchants(); final Map<Enchantment, Integer> enchantments = meta.getEnchants();
for (Integer value : enchantments.values()) { for (Integer value : enchantments.values()) {
if (value > Config.globalMaxEnchant) { if (value > NBTConfig.globalMaxEnchant) {
return true; return true;
} }
} }
// ALL // ALL
if (meta.hasEnchant(Enchantment.MENDING)) { if (meta.hasEnchant(Enchantment.MENDING)) {
final int level = meta.getEnchantLevel(Enchantment.MENDING); final int level = meta.getEnchantLevel(Enchantment.MENDING);
return level > Config.maxMending || level > Config.globalMaxEnchant; return level > NBTConfig.maxMending || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.DURABILITY)) { if (meta.hasEnchant(Enchantment.DURABILITY)) {
final int level = meta.getEnchantLevel(Enchantment.DURABILITY); final int level = meta.getEnchantLevel(Enchantment.DURABILITY);
return level > Config.maxUnbreaking || level > Config.globalMaxEnchant; return level > NBTConfig.maxUnbreaking || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.VANISHING_CURSE)) { if (meta.hasEnchant(Enchantment.VANISHING_CURSE)) {
final int level = meta.getEnchantLevel(Enchantment.VANISHING_CURSE); final int level = meta.getEnchantLevel(Enchantment.VANISHING_CURSE);
return level > Config.maxVanishing || level > Config.globalMaxEnchant; return level > NBTConfig.maxVanishing || level > NBTConfig.globalMaxEnchant;
} }
// ARMOR // ARMOR
if (meta.hasEnchant(Enchantment.BINDING_CURSE)) { if (meta.hasEnchant(Enchantment.BINDING_CURSE)) {
final int level = meta.getEnchantLevel(Enchantment.BINDING_CURSE); final int level = meta.getEnchantLevel(Enchantment.BINDING_CURSE);
return level > Config.maxCurseOfBinding || level > Config.globalMaxEnchant; return level > NBTConfig.maxCurseOfBinding || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.WATER_WORKER)) { if (meta.hasEnchant(Enchantment.WATER_WORKER)) {
final int level = meta.getEnchantLevel(Enchantment.WATER_WORKER); final int level = meta.getEnchantLevel(Enchantment.WATER_WORKER);
return level > Config.maxAquaAffinity || level > Config.globalMaxEnchant; return level > NBTConfig.maxAquaAffinity || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.PROTECTION_ENVIRONMENTAL)) { if (meta.hasEnchant(Enchantment.PROTECTION_ENVIRONMENTAL)) {
final int level = meta.getEnchantLevel(Enchantment.PROTECTION_ENVIRONMENTAL); final int level = meta.getEnchantLevel(Enchantment.PROTECTION_ENVIRONMENTAL);
return level > Config.maxProtection || level > Config.globalMaxEnchant; return level > NBTConfig.maxProtection || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.PROTECTION_EXPLOSIONS)) { if (meta.hasEnchant(Enchantment.PROTECTION_EXPLOSIONS)) {
final int level = meta.getEnchantLevel(Enchantment.PROTECTION_EXPLOSIONS); final int level = meta.getEnchantLevel(Enchantment.PROTECTION_EXPLOSIONS);
return level > Config.maxBlastProtection || level > Config.globalMaxEnchant; return level > NBTConfig.maxBlastProtection || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.DEPTH_STRIDER)) { if (meta.hasEnchant(Enchantment.DEPTH_STRIDER)) {
final int level = meta.getEnchantLevel(Enchantment.DEPTH_STRIDER); final int level = meta.getEnchantLevel(Enchantment.DEPTH_STRIDER);
return level > Config.maxDepthStrider || level > Config.globalMaxEnchant; return level > NBTConfig.maxDepthStrider || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.PROTECTION_FALL)) { if (meta.hasEnchant(Enchantment.PROTECTION_FALL)) {
final int level = meta.getEnchantLevel(Enchantment.PROTECTION_FALL); final int level = meta.getEnchantLevel(Enchantment.PROTECTION_FALL);
return level > Config.maxFeatherFalling || level > Config.globalMaxEnchant; return level > NBTConfig.maxFeatherFalling || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.PROTECTION_FIRE)) { if (meta.hasEnchant(Enchantment.PROTECTION_FIRE)) {
final int level = meta.getEnchantLevel(Enchantment.PROTECTION_FIRE); final int level = meta.getEnchantLevel(Enchantment.PROTECTION_FIRE);
return level > Config.maxFireProtection || level > Config.globalMaxEnchant; return level > NBTConfig.maxFireProtection || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.FROST_WALKER)) { if (meta.hasEnchant(Enchantment.FROST_WALKER)) {
final int level = meta.getEnchantLevel(Enchantment.FROST_WALKER); final int level = meta.getEnchantLevel(Enchantment.FROST_WALKER);
return level > Config.maxFrostWalker || level > Config.globalMaxEnchant; return level > NBTConfig.maxFrostWalker || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.PROTECTION_PROJECTILE)) { if (meta.hasEnchant(Enchantment.PROTECTION_PROJECTILE)) {
final int level = meta.getEnchantLevel(Enchantment.PROTECTION_PROJECTILE); final int level = meta.getEnchantLevel(Enchantment.PROTECTION_PROJECTILE);
return level > Config.maxProjectileProtection || level > Config.globalMaxEnchant; return level > NBTConfig.maxProjectileProtection || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.OXYGEN)) { if (meta.hasEnchant(Enchantment.OXYGEN)) {
final int level = meta.getEnchantLevel(Enchantment.OXYGEN); final int level = meta.getEnchantLevel(Enchantment.OXYGEN);
return level > Config.maxRespiration || level > Config.globalMaxEnchant; return level > NBTConfig.maxRespiration || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.SOUL_SPEED)) { if (meta.hasEnchant(Enchantment.SOUL_SPEED)) {
final int level = meta.getEnchantLevel(Enchantment.SOUL_SPEED); final int level = meta.getEnchantLevel(Enchantment.SOUL_SPEED);
return level > Config.maxSoulSpeed || level > Config.globalMaxEnchant; return level > NBTConfig.maxSoulSpeed || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.THORNS)) { if (meta.hasEnchant(Enchantment.THORNS)) {
final int level = meta.getEnchantLevel(Enchantment.THORNS); final int level = meta.getEnchantLevel(Enchantment.THORNS);
return level > Config.maxThorns || level > Config.globalMaxEnchant; return level > NBTConfig.maxThorns || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.SWEEPING_EDGE)) { if (meta.hasEnchant(Enchantment.SWEEPING_EDGE)) {
final int level = meta.getEnchantLevel(Enchantment.SWEEPING_EDGE); final int level = meta.getEnchantLevel(Enchantment.SWEEPING_EDGE);
return level > Config.maxSweepingEdge || level > Config.globalMaxEnchant; return level > NBTConfig.maxSweepingEdge || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.FROST_WALKER)) { if (meta.hasEnchant(Enchantment.FROST_WALKER)) {
final int level = meta.getEnchantLevel(Enchantment.FROST_WALKER); final int level = meta.getEnchantLevel(Enchantment.FROST_WALKER);
return level > Config.maxFrostWalker || level > Config.globalMaxEnchant; return level > NBTConfig.maxFrostWalker || level > NBTConfig.globalMaxEnchant;
} }
// MELEE WEAPONS // MELEE WEAPONS
if (meta.hasEnchant(Enchantment.DAMAGE_ARTHROPODS)) { if (meta.hasEnchant(Enchantment.DAMAGE_ARTHROPODS)) {
final int level = meta.getEnchantLevel(Enchantment.DAMAGE_ARTHROPODS); final int level = meta.getEnchantLevel(Enchantment.DAMAGE_ARTHROPODS);
return level > Config.maxBaneOfArthropods || level > Config.globalMaxEnchant; return level > NBTConfig.maxBaneOfArthropods || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.FIRE_ASPECT)) { if (meta.hasEnchant(Enchantment.FIRE_ASPECT)) {
final int level = meta.getEnchantLevel(Enchantment.FIRE_ASPECT); final int level = meta.getEnchantLevel(Enchantment.FIRE_ASPECT);
return level > Config.maxFireAspect || level > Config.globalMaxEnchant; return level > NBTConfig.maxFireAspect || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.LOOT_BONUS_MOBS)) { if (meta.hasEnchant(Enchantment.LOOT_BONUS_MOBS)) {
final int level = meta.getEnchantLevel(Enchantment.LOOT_BONUS_MOBS); final int level = meta.getEnchantLevel(Enchantment.LOOT_BONUS_MOBS);
return level > Config.maxLooting || level > Config.globalMaxEnchant; return level > NBTConfig.maxLooting || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.IMPALING)) { if (meta.hasEnchant(Enchantment.IMPALING)) {
final int level = meta.getEnchantLevel(Enchantment.IMPALING); final int level = meta.getEnchantLevel(Enchantment.IMPALING);
return level > Config.maxImpaling || level > Config.globalMaxEnchant; return level > NBTConfig.maxImpaling || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.KNOCKBACK)) { if (meta.hasEnchant(Enchantment.KNOCKBACK)) {
final int level = meta.getEnchantLevel(Enchantment.KNOCKBACK); final int level = meta.getEnchantLevel(Enchantment.KNOCKBACK);
return level > Config.maxKnockback || level > Config.globalMaxEnchant; return level > NBTConfig.maxKnockback || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.DAMAGE_ALL)) { if (meta.hasEnchant(Enchantment.DAMAGE_ALL)) {
final int level = meta.getEnchantLevel(Enchantment.DAMAGE_ALL); final int level = meta.getEnchantLevel(Enchantment.DAMAGE_ALL);
return level > Config.maxSharpness || level > Config.globalMaxEnchant; return level > NBTConfig.maxSharpness || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.DAMAGE_UNDEAD)) { if (meta.hasEnchant(Enchantment.DAMAGE_UNDEAD)) {
final int level = meta.getEnchantLevel(Enchantment.DAMAGE_UNDEAD); final int level = meta.getEnchantLevel(Enchantment.DAMAGE_UNDEAD);
return level > Config.maxSmite || level > Config.globalMaxEnchant; return level > NBTConfig.maxSmite || level > NBTConfig.globalMaxEnchant;
} }
// RANGED WEAPONS // RANGED WEAPONS
if (meta.hasEnchant(Enchantment.CHANNELING)) { if (meta.hasEnchant(Enchantment.CHANNELING)) {
final int level = meta.getEnchantLevel(Enchantment.CHANNELING); final int level = meta.getEnchantLevel(Enchantment.CHANNELING);
return level > Config.maxChanneling || level > Config.globalMaxEnchant; return level > NBTConfig.maxChanneling || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.ARROW_FIRE)) { if (meta.hasEnchant(Enchantment.ARROW_FIRE)) {
final int level = meta.getEnchantLevel(Enchantment.ARROW_FIRE); final int level = meta.getEnchantLevel(Enchantment.ARROW_FIRE);
return level > Config.maxFlame || level > Config.globalMaxEnchant; return level > NBTConfig.maxFlame || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.ARROW_INFINITE)) { if (meta.hasEnchant(Enchantment.ARROW_INFINITE)) {
final int level = meta.getEnchantLevel(Enchantment.ARROW_INFINITE); final int level = meta.getEnchantLevel(Enchantment.ARROW_INFINITE);
return level > Config.maxInfinity || level > Config.globalMaxEnchant; return level > NBTConfig.maxInfinity || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.LOYALTY)) { if (meta.hasEnchant(Enchantment.LOYALTY)) {
final int level = meta.getEnchantLevel(Enchantment.LOYALTY); final int level = meta.getEnchantLevel(Enchantment.LOYALTY);
return level > Config.maxLoyalty || level > Config.globalMaxEnchant; return level > NBTConfig.maxLoyalty || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.RIPTIDE)) { if (meta.hasEnchant(Enchantment.RIPTIDE)) {
final int level = meta.getEnchantLevel(Enchantment.RIPTIDE); final int level = meta.getEnchantLevel(Enchantment.RIPTIDE);
return level > Config.maxRiptide || level > Config.globalMaxEnchant; return level > NBTConfig.maxRiptide || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.MULTISHOT)) { if (meta.hasEnchant(Enchantment.MULTISHOT)) {
final int level = meta.getEnchantLevel(Enchantment.MULTISHOT); final int level = meta.getEnchantLevel(Enchantment.MULTISHOT);
return level > Config.maxMultishot || level > Config.globalMaxEnchant; return level > NBTConfig.maxMultishot || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.PIERCING)) { if (meta.hasEnchant(Enchantment.PIERCING)) {
final int level = meta.getEnchantLevel(Enchantment.PIERCING); final int level = meta.getEnchantLevel(Enchantment.PIERCING);
return level > Config.maxPiercing || level > Config.globalMaxEnchant; return level > NBTConfig.maxPiercing || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.ARROW_DAMAGE)) { if (meta.hasEnchant(Enchantment.ARROW_DAMAGE)) {
final int level = meta.getEnchantLevel(Enchantment.ARROW_DAMAGE); final int level = meta.getEnchantLevel(Enchantment.ARROW_DAMAGE);
return level > Config.maxPower || level > Config.globalMaxEnchant; return level > NBTConfig.maxPower || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.ARROW_KNOCKBACK)) { if (meta.hasEnchant(Enchantment.ARROW_KNOCKBACK)) {
final int level = meta.getEnchantLevel(Enchantment.ARROW_KNOCKBACK); final int level = meta.getEnchantLevel(Enchantment.ARROW_KNOCKBACK);
return level > Config.maxPunch || level > Config.globalMaxEnchant; return level > NBTConfig.maxPunch || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.QUICK_CHARGE)) { if (meta.hasEnchant(Enchantment.QUICK_CHARGE)) {
final int level = meta.getEnchantLevel(Enchantment.QUICK_CHARGE); final int level = meta.getEnchantLevel(Enchantment.QUICK_CHARGE);
return level > Config.maxQuickCharge || level > Config.globalMaxEnchant; return level > NBTConfig.maxQuickCharge || level > NBTConfig.globalMaxEnchant;
} }
// TOOLS // TOOLS
if (meta.hasEnchant(Enchantment.DIG_SPEED)) { if (meta.hasEnchant(Enchantment.DIG_SPEED)) {
final int level = meta.getEnchantLevel(Enchantment.DIG_SPEED); final int level = meta.getEnchantLevel(Enchantment.DIG_SPEED);
return level > Config.maxEfficiency || level > Config.globalMaxEnchant; return level > NBTConfig.maxEfficiency || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.LOOT_BONUS_BLOCKS)) { if (meta.hasEnchant(Enchantment.LOOT_BONUS_BLOCKS)) {
final int level = meta.getEnchantLevel(Enchantment.LOOT_BONUS_BLOCKS); final int level = meta.getEnchantLevel(Enchantment.LOOT_BONUS_BLOCKS);
return level > Config.maxFortune || level > Config.globalMaxEnchant; return level > NBTConfig.maxFortune || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.LUCK)) { if (meta.hasEnchant(Enchantment.LUCK)) {
final int level = meta.getEnchantLevel(Enchantment.LUCK); final int level = meta.getEnchantLevel(Enchantment.LUCK);
return level > Config.maxLuckOfTheSea || level > Config.globalMaxEnchant; return level > NBTConfig.maxLuckOfTheSea || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.LURE)) { if (meta.hasEnchant(Enchantment.LURE)) {
final int level = meta.getEnchantLevel(Enchantment.LURE); final int level = meta.getEnchantLevel(Enchantment.LURE);
return level > Config.maxLure || level > Config.globalMaxEnchant; return level > NBTConfig.maxLure || level > NBTConfig.globalMaxEnchant;
} }
if (meta.hasEnchant(Enchantment.SILK_TOUCH)) { if (meta.hasEnchant(Enchantment.SILK_TOUCH)) {
final int level = meta.getEnchantLevel(Enchantment.SILK_TOUCH); final int level = meta.getEnchantLevel(Enchantment.SILK_TOUCH);
return level > Config.maxSilkTouch || level > Config.globalMaxEnchant; return level > NBTConfig.maxSilkTouch || level > NBTConfig.globalMaxEnchant;
} }
} }
return false; return false;

View File

@@ -5,7 +5,7 @@ import io.github.thetrouper.sentinel.Sentinel;
import io.github.thetrouper.sentinel.data.ActionType; import io.github.thetrouper.sentinel.data.ActionType;
import io.github.thetrouper.sentinel.data.Emojis; import io.github.thetrouper.sentinel.data.Emojis;
import io.github.thetrouper.sentinel.discord.DiscordWebhook; import io.github.thetrouper.sentinel.discord.DiscordWebhook;
import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.config.MainConfig;
import io.github.thetrouper.sentinel.server.util.FileUtils; import io.github.thetrouper.sentinel.server.util.FileUtils;
import io.github.thetrouper.sentinel.server.util.ServerUtils; import io.github.thetrouper.sentinel.server.util.ServerUtils;
import io.github.thetrouper.sentinel.server.util.Text; import io.github.thetrouper.sentinel.server.util.Text;
@@ -102,7 +102,7 @@ public class Action {
String itemLog = (item != null) ? FileUtils.createNBTLog(item.getItemMeta().getAsString()) : ""; String itemLog = (item != null) ? FileUtils.createNBTLog(item.getItemMeta().getAsString()) : "";
String commandLog = (loggedCommand != null) ? FileUtils.createCommandLog(loggedCommand) : ""; String commandLog = (loggedCommand != null) ? FileUtils.createCommandLog(loggedCommand) : "";
final List<String> punishCommands = Config.getPunishCommands(); final List<String> punishCommands = MainConfig.Plugin.punishCommands;
if (denied) { if (denied) {
event.setCancelled(true); event.setCancelled(true);
@@ -159,7 +159,7 @@ public class Action {
} }
if (notifyDiscord) { if (notifyDiscord) {
DiscordWebhook webhook = new DiscordWebhook(Config.webhook); DiscordWebhook webhook = new DiscordWebhook(MainConfig.Plugin.webhook);
webhook.setAvatarUrl("https://r2.e-z.host/d440b58a-ba90-4839-8df6-8bba298cf817/3lwit5nt.png"); webhook.setAvatarUrl("https://r2.e-z.host/d440b58a-ba90-4839-8df6-8bba298cf817/3lwit5nt.png");
webhook.setUsername("Sentinel Anti-Nuke | Logs"); webhook.setUsername("Sentinel Anti-Nuke | Logs");
String description = (player != null) ? Emojis.rightSort + " **Player:** " + player.getName() + " " + Emojis.member + "\n" : ""; String description = (player != null) ? Emojis.rightSort + " **Player:** " + player.getName() + " " + Emojis.member + "\n" : "";

View File

@@ -4,7 +4,7 @@ import io.github.thetrouper.sentinel.Sentinel;
import io.github.thetrouper.sentinel.data.Emojis; import io.github.thetrouper.sentinel.data.Emojis;
import io.github.thetrouper.sentinel.data.FAT; import io.github.thetrouper.sentinel.data.FAT;
import io.github.thetrouper.sentinel.discord.DiscordWebhook; import io.github.thetrouper.sentinel.discord.DiscordWebhook;
import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.config.MainConfig;
import io.github.thetrouper.sentinel.server.functions.ReportFalsePositives; import io.github.thetrouper.sentinel.server.functions.ReportFalsePositives;
import io.github.thetrouper.sentinel.server.util.ServerUtils; import io.github.thetrouper.sentinel.server.util.ServerUtils;
import io.github.thetrouper.sentinel.server.util.Text; import io.github.thetrouper.sentinel.server.util.Text;
@@ -43,7 +43,7 @@ public class FilterAction {
String notiftext = Sentinel.dict.get(type.getNotifTranslationKey()); String notiftext = Sentinel.dict.get(type.getNotifTranslationKey());
notif.setText(Text.prefix((type != FAT.SPAM && type != FAT.BLOCK_SPAM ? notiftext.formatted(offender.getName(), scoreMap.get(offender), Config.punishScore) : notiftext.formatted(offender.getName(),heatMap.get(offender),Config.punishHeat)))); notif.setText(Text.prefix((type != FAT.SPAM && type != FAT.BLOCK_SPAM ? notiftext.formatted(offender.getName(), scoreMap.get(offender), MainConfig.Chat.AntiSwear.punishScore) : notiftext.formatted(offender.getName(),heatMap.get(offender),MainConfig.Chat.AntiSpam.punishHeat))));
ServerUtils.forEachStaff(staffmember -> { ServerUtils.forEachStaff(staffmember -> {
staffmember.spigot().sendMessage(notif); staffmember.spigot().sendMessage(notif);
@@ -53,16 +53,16 @@ public class FilterAction {
ServerUtils.sendCommand(type.getExecutedCommand().replace("%player%", offender.getName())); ServerUtils.sendCommand(type.getExecutedCommand().replace("%player%", offender.getName()));
} }
if (type == FAT.SWEAR && Config.logSwear) { if (type == FAT.SWEAR && MainConfig.Chat.AntiSwear.logSwears) {
sendDiscordLog(offender,e,type); sendDiscordLog(offender,e,type);
sendConsoleLog(offender,e,type); sendConsoleLog(offender,e,type);
} }
if (type == FAT.SLUR && Config.logSwear) { if (type == FAT.SLUR && MainConfig.Chat.AntiSwear.logSwears) {
sendDiscordLog(offender,e,type); sendDiscordLog(offender,e,type);
sendConsoleLog(offender,e,type); sendConsoleLog(offender,e,type);
} }
if (type == FAT.SPAM && Config.logSpam) { if (type == FAT.SPAM && MainConfig.Chat.AntiSpam.logSpam) {
sendDiscordLog(offender,e,type); sendDiscordLog(offender,e,type);
sendConsoleLog(offender,e,type); sendConsoleLog(offender,e,type);
} }
@@ -70,7 +70,7 @@ public class FilterAction {
public static void sendConsoleLog(Player offender, AsyncPlayerChatEvent e, FAT type) { public static void sendConsoleLog(Player offender, AsyncPlayerChatEvent e, FAT type) {
String log = "]=-" + type.getTitle() + "-=[\n" + String log = "]=-" + type.getTitle() + "-=[\n" +
"Player: " + offender.getName() + "Player: " + offender.getName() +
(type != FAT.BLOCK_SPAM && type != FAT.SPAM ? "> Score: `" + scoreMap.get(offender) + "/" + Config.punishScore : "> Heat: `" + heatMap.get(offender) + "/" + Config.punishHeat) + "\n" + (type != FAT.BLOCK_SPAM && type != FAT.SPAM ? "> Score: `" + scoreMap.get(offender) + "/" + MainConfig.Chat.AntiSwear.punishScore : "> Heat: `" + heatMap.get(offender) + "/" + MainConfig.Chat.AntiSpam.punishHeat) + "\n" +
"> UUID: " + offender.getUniqueId() + "\n" + "> UUID: " + offender.getUniqueId() + "\n" +
(type != FAT.BLOCK_SPAM && type != FAT.SPAM ? "Message: " + e.getMessage() : "Previous: " + lastMessageMap.get(offender)) + "\n" + (type != FAT.BLOCK_SPAM && type != FAT.SPAM ? "Message: " + e.getMessage() : "Previous: " + lastMessageMap.get(offender)) + "\n" +
(type != FAT.BLOCK_SPAM && type != FAT.SPAM ? "Reduced: " + fullSimplify(e.getMessage()) : "Current: " + e.getMessage()) + "\n" + (type != FAT.BLOCK_SPAM && type != FAT.SPAM ? "Reduced: " + fullSimplify(e.getMessage()) : "Current: " + e.getMessage()) + "\n" +
@@ -83,7 +83,7 @@ public class FilterAction {
String title = offender.getName() + " has triggered the " + type.getName() + "!"; String title = offender.getName() + " has triggered the " + type.getName() + "!";
String executed = type.getExecutedCommand() != null ? type.getExecutedCommand() : "Nothing, its a standard flag. You shouldn't be seeing this, please report it."; String executed = type.getExecutedCommand() != null ? type.getExecutedCommand() : "Nothing, its a standard flag. You shouldn't be seeing this, please report it.";
DiscordWebhook webhook = new DiscordWebhook(Config.webhook); DiscordWebhook webhook = new DiscordWebhook(MainConfig.Plugin.webhook);
webhook.setAvatarUrl("https://r2.e-z.host/d440b58a-ba90-4839-8df6-8bba298cf817/3lwit5nt.png"); webhook.setAvatarUrl("https://r2.e-z.host/d440b58a-ba90-4839-8df6-8bba298cf817/3lwit5nt.png");
webhook.setUsername("Sentinel Anti-Nuke | Logs"); webhook.setUsername("Sentinel Anti-Nuke | Logs");
@@ -92,7 +92,7 @@ public class FilterAction {
.setTitle(title) .setTitle(title)
.setDescription( .setDescription(
Emojis.rightSort + "Player: " + offender.getName() + " " + Emojis.target + "\\n" + Emojis.rightSort + "Player: " + offender.getName() + " " + Emojis.target + "\\n" +
Emojis.space + Emojis.arrowRight + (type != FAT.BLOCK_SPAM ? "Score: `" + scoreMap.get(offender) + "/" + Config.punishScore : "Heat: `" + heatMap.get(offender) + "/" + Config.punishHeat) + "`\\n" + Emojis.space + Emojis.arrowRight + (type != FAT.BLOCK_SPAM ? "Score: `" + scoreMap.get(offender) + "/" + MainConfig.Chat.AntiSwear.punishScore : "Heat: `" + heatMap.get(offender) + "/" + MainConfig.Chat.AntiSpam.punishHeat) + "`\\n" +
Emojis.space + Emojis.arrowRight + "UUID: `" + offender.getUniqueId() + "`\\n" + Emojis.space + Emojis.arrowRight + "UUID: `" + offender.getUniqueId() + "`\\n" +
Emojis.rightSort + "Executed: " + executed + " " + Emojis.mute + "\\n" Emojis.rightSort + "Executed: " + executed + " " + Emojis.mute + "\\n"
) )

View File

@@ -32,7 +32,7 @@ public class AdvancedConfig implements JsonSerializable<AdvancedConfig> {
put("v", "u"); put("v", "u");
}}; }};
public static String falsePosRegex = ""; public static String falsePosRegex = "";
public static String swearRegex; public static String swearRegex = "";
public static String strictRegex; public static String strictRegex = "";
public static String urlRegex = "^(https?://)?([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+\\.[a-zA-Z]{2,}(/\\S*)?$\n"; public static String urlRegex = "^(https?://)?([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+\\.[a-zA-Z]{2,}(/\\S*)?$\n";
} }

View File

@@ -1,281 +0,0 @@
/**
* This file is for tutorial purposes made by ImproperIssues. Distribute if you want :)
*/
package io.github.thetrouper.sentinel.server.config;
import io.github.thetrouper.sentinel.Sentinel;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Config loader
*/
public abstract class Config {
private static final FileConfiguration mainConfig = Sentinel.getInstance().getConfig();
private static final FileConfiguration nbtConfig = getConfig("nbt-config.yml");
private static final FileConfiguration falsePositives = getConfig("false-positives.yml");
private static final FileConfiguration strictWords = getConfig("strict.yml");
private static final FileConfiguration swearWords = getConfig("swears.yml");
public static List<String> getPunishCommands() {
return punishCommands;
}
/**
* Config plugin section
*/
public class Plugin {
public static String getPrefix() {
return mainConfig.getString("config.plugin.prefix");
}
}
public static String webhook;
public static String lang;
public static List<String> trustedPlayers;
public static boolean blockSpecific;
public static boolean preventNBT;
public static boolean preventCmdBlockPlace;
public static boolean preventCmdBlockUse;
public static boolean preventCmdBlockChange;
public static boolean preventCmdCartPlace;
public static boolean preventCmdCartUse;
public static boolean cmdBlockOpCheck;
public static List<String> dangerous;
public static boolean logDangerous;
public static boolean logCmdBlocks;
public static boolean logNBT;
public static boolean logSpecific;
public static List<String> logged;
public static boolean deop;
public static boolean nbtPunish;
public static boolean cmdBlockPunish;
public static boolean commandPunish;
public static boolean specificPunish;
public static List<String> punishCommands;
public static boolean reopCommand;
// NBT
public static boolean allowName;
public static boolean allowLore;
public static boolean allowAttributes;
public static int globalMaxEnchant;
public static int maxMending;
public static int maxUnbreaking;
public static int maxVanishing;
public static int maxAquaAffinity;
public static int maxBlastProtection;
public static int maxCurseOfBinding;
public static int maxDepthStrider;
public static int maxFeatherFalling;
public static int maxFireProtection;
public static int maxFrostWalker;
public static int maxProjectileProtection;
public static int maxProtection;
public static int maxRespiration;
public static int maxSoulSpeed;
public static int maxThorns;
public static int maxSwiftSneak;
public static int maxBaneOfArthropods;
public static int maxEfficiency;
public static int maxFireAspect;
public static int maxLooting;
public static int maxImpaling;
public static int maxKnockback;
public static int maxSharpness;
public static int maxSmite;
public static int maxSweepingEdge;
public static int maxChanneling;
public static int maxFlame;
public static int maxInfinity;
public static int maxLoyalty;
public static int maxRiptide;
public static int maxMultishot;
public static int maxPiercing;
public static int maxPower;
public static int maxPunch;
public static int maxQuickCharge;
public static int maxFortune;
public static int maxLuckOfTheSea;
public static int maxLure;
public static int maxSilkTouch;
// Chat Filter Setup & AntiSpam
public static boolean antiUnicode;
public static boolean antiSpamEnabled;
public static int defaultGain;
public static int lowGain;
public static int mediumGain;
public static int highGain;
public static int heatDecay;
public static int blockHeat;
public static int punishHeat;
public static boolean clearChat;
public static String chatClearCommand;
public static String spamPunishCommand;
public static boolean logSpam;
public static boolean antiSwearEnabled;
public static int lowScore;
public static int mediumLowScore;
public static int mediumScore;
public static int mediumHighScore;
public static int highScore;
public static int scoreDecay;
public static int punishScore;
public static boolean strictInstaPunish;
public static String swearPunishCommand;
public static String strictPunishCommand;
public static boolean logSwear;
public static List<String> swearWhitelist;
public static List<String> swearBlacklist;
public static List<String> slurs;
public static Map<String, String> leetPatterns;
public static FileConfiguration getConfig(String fileName) {
File configFile = new File(Sentinel.getInstance().getDataFolder(), fileName);
if (!configFile.exists()) {
Sentinel.getInstance().saveResource(fileName, false);
}
return YamlConfiguration.loadConfiguration(configFile);
}
public static void loadConfiguration() {
Sentinel.prefix = mainConfig.getString("config.plugin.prefix");
Sentinel.key = mainConfig.getString("config.plugin.key");
lang = mainConfig.getString("config.plugin.lang");
webhook = mainConfig.getString("config.plugin.webhook");
trustedPlayers = mainConfig.getStringList("config.plugin.trusted");
blockSpecific = mainConfig.getBoolean("config.plugin.block-specific");
preventNBT = mainConfig.getBoolean("config.plugin.prevent-nbt");
preventCmdBlockPlace = mainConfig.getBoolean("config.plugin.prevent-cmdblock-place");
preventCmdBlockUse = mainConfig.getBoolean("config.plugin.prevent-cmdblock-use");
preventCmdBlockChange = mainConfig.getBoolean("config.plugin.prevent-cmdblock-change");
preventCmdCartPlace = mainConfig.getBoolean("config.plugin.prevent-cmdcart-place");
preventCmdCartUse = mainConfig.getBoolean("config.plugin.prevent-cmdcart-use");
cmdBlockOpCheck = mainConfig.getBoolean("config.plugin.cmdblock-op-check");
dangerous = mainConfig.getStringList("config.plugin.dangerous");
logDangerous = mainConfig.getBoolean("config.plugin.log-dangerous");
logCmdBlocks = mainConfig.getBoolean("config.plugin.log-cmdblocks");
logNBT = mainConfig.getBoolean("config.plugin.log-nbt");
logSpecific = mainConfig.getBoolean("config.plugin.log-specific");
logged = mainConfig.getStringList("config.plugin.logged");
deop = mainConfig.getBoolean("config.plugin.deop");
nbtPunish = mainConfig.getBoolean("config.plugin.nbt-punish");
cmdBlockPunish = mainConfig.getBoolean("config.plugin.cmdblock-punish");
commandPunish = mainConfig.getBoolean("config.plugin.command-punish");
specificPunish = mainConfig.getBoolean("config.plugin.specific-punish");
punishCommands = mainConfig.getStringList("config.plugin.punish-commands");
reopCommand = mainConfig.getBoolean("config.plugin.reop-command");
// NBT
allowName = nbtConfig.getBoolean("nbt.allow-name");
allowLore = nbtConfig.getBoolean("nbt.allow-lore");
allowAttributes = nbtConfig.getBoolean("nbt.allow-attributes");
globalMaxEnchant = nbtConfig.getInt("nbt.global-max-enchant");
// ALL
maxMending = nbtConfig.getInt("nbt.max-mending");
maxUnbreaking = nbtConfig.getInt("nbt.max-unbreaking");
maxVanishing = nbtConfig.getInt("nbt.max-vanishing");
// ARMOR
maxAquaAffinity = nbtConfig.getInt("nbt.max-aqua-affinity");
maxBlastProtection = nbtConfig.getInt("nbt.max-blast-protection");
maxCurseOfBinding = nbtConfig.getInt("nbt.max-curse-of-binding");
maxDepthStrider = nbtConfig.getInt("nbt.max-depth-strider");
maxFeatherFalling = nbtConfig.getInt("nbt.max-feather-falling");
maxFireProtection = nbtConfig.getInt("nbt.max-fire-protection");
maxFrostWalker = nbtConfig.getInt("nbt.max-frost-walker");
maxProjectileProtection = nbtConfig.getInt("nbt.max-projectile-protection");
maxProtection = nbtConfig.getInt("nbt.max-protection");
maxRespiration = nbtConfig.getInt("nbt.max-respiration");
maxSoulSpeed = nbtConfig.getInt("nbt.max-soul-speed");
maxThorns = nbtConfig.getInt("nbt.max-thorns");
maxSwiftSneak = nbtConfig.getInt("nbt.max-swift-sneak");
// MELEE WEAPONS
maxBaneOfArthropods = nbtConfig.getInt("nbt.max-bane-of-arthropods");
maxEfficiency = nbtConfig.getInt("nbt.max-efficiency");
maxFireAspect = nbtConfig.getInt("nbt.max-fire-aspect");
maxLooting = nbtConfig.getInt("nbt.max-looting");
maxImpaling = nbtConfig.getInt("nbt.max-impaling");
maxKnockback = nbtConfig.getInt("nbt.max-knockback");
maxSharpness = nbtConfig.getInt("nbt.max-sharpness");
maxSmite = nbtConfig.getInt("nbt.max-smite");
maxSweepingEdge = nbtConfig.getInt("nbt.max-sweeping-edge");
// RANGED WEAPONS
maxChanneling = nbtConfig.getInt("nbt.max-channeling");
maxFlame = nbtConfig.getInt("nbt.max-flame");
maxInfinity = nbtConfig.getInt("nbt.max-infinity");
maxLoyalty = nbtConfig.getInt("nbt.max-loyalty");
maxRiptide = nbtConfig.getInt("nbt.max-riptide");
maxMultishot = nbtConfig.getInt("nbt.max-multishot");
maxPiercing = nbtConfig.getInt("nbt.max-piercing");
maxPower = nbtConfig.getInt("nbt.max-power");
maxPunch = nbtConfig.getInt("nbt.max-punch");
maxQuickCharge = nbtConfig.getInt("nbt.max-quick-charge");
// TOOLS
maxEfficiency = nbtConfig.getInt("nbt.max-efficiency");
maxFortune = nbtConfig.getInt("nbt.max-fortune");
maxLuckOfTheSea = nbtConfig.getInt("nbt.max-luck-of-the-sea");
maxLure = nbtConfig.getInt("nbt.max-lure");
maxSilkTouch = nbtConfig.getInt("nbt.max-silk-touch");
// Chat Filter Setup & AntiSpam
antiUnicode = mainConfig.getBoolean("config.chat.anti-unicode");
antiSpamEnabled = mainConfig.getBoolean("config.chat.anti-spam.enabled");
defaultGain = mainConfig.getInt("config.chat.anti-spam.default-gain");
lowGain = mainConfig.getInt("config.chat.anti-spam.low-gain");
mediumGain = mainConfig.getInt("config.chat.anti-spam.medium-gain");
highGain = mainConfig.getInt("config.chat.anti-spam.high-gain");
heatDecay = mainConfig.getInt("config.chat.anti-spam.heat-decay");
blockHeat = mainConfig.getInt("config.chat.anti-spam.block-heat");
punishHeat = mainConfig.getInt("config.chat.anti-spam.punish-heat");
clearChat = mainConfig.getBoolean("config.chat.anti-spam.clear-chat");
chatClearCommand = mainConfig.getString("config.chat.anti-spam.chat-clear-command");
spamPunishCommand = mainConfig.getString("config.chat.anti-spam.punish-command");
logSpam = mainConfig.getBoolean("config.chat.anti-spam.log-spam");
antiSwearEnabled = mainConfig.getBoolean("config.chat.anti-swear.enabled");
lowScore = mainConfig.getInt("config.chat.anti-swear.low-score");
mediumLowScore = mainConfig.getInt("config.chat.anti-swear.medium-low-score");
mediumScore = mainConfig.getInt("config.chat.anti-swear.medium-score");
mediumHighScore = mainConfig.getInt("config.chat.anti-swear.medium-high-score");
highScore = mainConfig.getInt("config.chat.anti-swear.high-score");
scoreDecay = mainConfig.getInt("config.chat.anti-swear.score-decay");
punishScore = mainConfig.getInt("config.chat.anti-swear.punish-score");
strictInstaPunish = mainConfig.getBoolean("config.chat.anti-swear.strict-insta-punish");
swearPunishCommand = mainConfig.getString("config.chat.anti-swear.punish-command");
strictPunishCommand = mainConfig.getString("config.chat.anti-swear.strict-command");
logSwear = mainConfig.getBoolean("config.chat.anti-swear.log-swear");
swearWhitelist = falsePositives.getStringList("false-positives");
swearBlacklist = swearWords.getStringList("blacklisted");
slurs = strictWords.getStringList("strict");
leetPatterns = loadLeetPatterns();
logSwear = mainConfig.getBoolean("config.chat.anti-swear.log-swear");
}
private static Map<String, String> loadLeetPatterns() {
Map<String, String> dictionary = new HashMap<>();
ConfigurationSection section = mainConfig.getConfigurationSection("config.chat.anti-swear.leet-patterns");
if (section != null) {
for (String key : section.getKeys(false)) {
dictionary.put(key, section.getString(key));
}
}
return dictionary;
}
}

View File

@@ -3,6 +3,8 @@ package io.github.thetrouper.sentinel.server.config;
import io.github.itzispyder.pdk.utils.misc.JsonSerializable; import io.github.itzispyder.pdk.utils.misc.JsonSerializable;
import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
public class FPConfig implements JsonSerializable<FPConfig> { public class FPConfig implements JsonSerializable<FPConfig> {
@@ -12,5 +14,60 @@ public class FPConfig implements JsonSerializable<FPConfig> {
return new File("plugins/Sentinel/false-positives.json"); return new File("plugins/Sentinel/false-positives.json");
} }
public static List<String> swearWhitelist; public static List<String> swearWhitelist = new ArrayList<>(Arrays.asList(
"but then",
"was scamming",
"an alt",
"can also",
"analysis",
"analytics",
"arsenal",
"assassin",
"as saying",
"assert",
"assign",
"assimil",
"assist",
"associat",
"assum",
"assur",
"basement",
"bass",
"cass",
"butter",
"canvass",
"cocktail",
"cumber",
"document",
"evaluate",
"exclusive",
"expensive",
"explain",
"expression",
"grape",
"grass",
"harass",
"hotwater",
"identit",
"kassa",
"kassi",
"lass",
"leafage",
"libshitz",
"magnacumlaude",
"mass",
"mocha",
"pass",
"phoebe",
"phoenix",
"push it",
"sassy",
"saturday",
"scrap",
"serfage",
"sexist",
"shoe",
"stitch",
"therapist"
));
} }

View File

@@ -1,15 +0,0 @@
package io.github.thetrouper.sentinel.server.config;
import io.github.itzispyder.pdk.utils.misc.JsonSerializable;
import java.io.File;
public class Lang implements JsonSerializable<Lang> {
@Override
public File getFile() {
return new File("plugins/Sentinel/lang/" + Config.lang);
}
}

View File

@@ -1,14 +1,14 @@
package io.github.thetrouper.sentinel.server.config; package io.github.thetrouper.sentinel.server.config;
import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.Sentinel;
import io.github.thetrouper.sentinel.server.util.JsonSerializable; import io.github.itzispyder.pdk.utils.misc.JsonSerializable;
import java.io.File; import java.io.File;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
public class LanguageFile implements JsonSerializable<LanguageFile> { public class LanguageFile implements JsonSerializable<LanguageFile> {
public static final File PATH = new File(Sentinel.getInstance().getDataFolder(), "/lang/" + Config.lang); public static final File PATH = new File(Sentinel.getInstance().getDataFolder(), "/lang/" + MainConfig.Plugin.lang);
private final Map<String,String> dictionary = new HashMap<>(); private final Map<String,String> dictionary = new HashMap<>();
public LanguageFile() {} public LanguageFile() {}

View File

@@ -1,10 +1,10 @@
package io.github.thetrouper.sentinel.server.config; package io.github.thetrouper.sentinel.server.config;
import io.github.thetrouper.sentinel.server.util.JsonSerializable; import io.github.itzispyder.pdk.utils.misc.JsonSerializable;
import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
public class MainConfig implements JsonSerializable<MainConfig> { public class MainConfig implements JsonSerializable<MainConfig> {
@@ -15,62 +15,82 @@ public class MainConfig implements JsonSerializable<MainConfig> {
public static class Plugin { public static class Plugin {
public static String prefix = "§d§lSentinel §8» §7"; public static String prefix = "§d§lSentinel §8» §7";
public static String webhook; public static String webhook = "https://discord.com/api/webhooks/id/token";
public static String lang; public static String lang = "en-us.json";
public static List<String> trustedPlayers; public static List<String> trustedPlayers = new ArrayList<>() {{
public static boolean blockSpecific; add("049460f7-21cb-42f5-8059-d42752bf406f");
public static boolean preventNBT; }};
public static boolean preventCmdBlockPlace; public static boolean blockSpecific = true;
public static boolean preventCmdBlockUse; public static boolean preventNBT = true;
public static boolean preventCmdBlockChange; public static boolean preventCmdBlockPlace = true;
public static boolean preventCmdCartPlace; public static boolean preventCmdBlockUse = true;
public static boolean preventCmdCartUse; public static boolean preventCmdBlockChange = true;
public static boolean cmdBlockOpCheck; public static boolean preventCmdCartPlace = true;
public static List<String> dangerous; public static boolean preventCmdCartUse = true;
public static boolean logDangerous; public static boolean cmdBlockOpCheck = true;
public static boolean logCmdBlocks; public static List<String> dangerous = new ArrayList<>() {{
public static boolean logNBT; add("op");
public static boolean logSpecific; add("deop");
public static List<String> logged; add("stop");
public static boolean deop; add("restart");
public static boolean nbtPunish; add("execute");
public static boolean cmdBlockPunish; add("sudo");
public static boolean commandPunish; add("esudo");
public static boolean specificPunish; add("fill");
public static List<String> punishCommands; add("setblock");
public static boolean reopCommand; add("data");
add("whitelist");
}};
public static boolean logDangerous = true;
public static boolean logCmdBlocks = true;
public static boolean logNBT = true;
public static boolean logSpecific = false;
public static List<String> logged = new ArrayList<>() {{
add("give");
add("item");
}};
public static boolean deop = true;
public static boolean nbtPunish = false;
public static boolean cmdBlockPunish = false;
public static boolean commandPunish = false;
public static boolean specificPunish = false;
public static List<String> punishCommands = new ArrayList<>() {{
add("smite %player%");
add("ban %player% ]=- Sentinel -=[ You have been banned for attempting a dangerous action. If you believe this to be a mistake, please contact the server owner.");
}};
public static boolean reopCommand = false;
} }
public static class Chat { public static class Chat {
public static boolean antiUnicode; public static boolean antiUnicode = true;
public static class antiSpam { public static class AntiSpam {
public static boolean antiSpamEnabled; public static boolean antiSpamEnabled = true;
public static int defaultGain; public static int defaultGain = 1;
public static int lowGain; public static int lowGain = 2;
public static int mediumGain; public static int mediumGain = 4;
public static int highGain; public static int highGain = 6;
public static int heatDecay; public static int heatDecay = 1;
public static int blockHeat; public static int blockHeat = 10;
public static int punishHeat; public static int punishHeat = 25;
public static boolean clearChat; public static boolean clearChat = true;
public static String chatClearCommand; public static String chatClearCommand = "cc";
public static String spamPunishCommand; public static String spamPunishCommand = "mute %player% 1m Please refrain from spamming!";
public static boolean logSpam; public static boolean logSpam = true;
} }
public static class antiSwear { public static class AntiSwear {
public static boolean antiSwearEnabled; public static boolean antiSwearEnabled = true;
public static int lowScore; public static int lowScore = 0;
public static int mediumLowScore; public static int mediumLowScore = 1;
public static int mediumScore; public static int mediumScore = 3;
public static int mediumHighScore; public static int mediumHighScore = 5;
public static int highScore; public static int highScore = 7;
public static int scoreDecay; public static int scoreDecay = 3;
public static int punishScore; public static int punishScore = 20;
public static boolean strictInstaPunish; public static boolean strictInstaPunish = true;
public static String swearPunishCommand; public static String swearPunishCommand = "mute %player% 15m Do not attempt to bypass the Profanity Filter";
public static String strictPunishCommand; public static String strictPunishCommand = "mute %player% 1h Discriminatory speech is not tolerated on this server!";
public static boolean logSwears; public static boolean logSwears = true;
} }
} }

View File

@@ -13,47 +13,47 @@ public class NBTConfig implements JsonSerializable<NBTConfig> {
return new File("plugins/Sentinel/NBTConfig.json"); return new File("plugins/Sentinel/NBTConfig.json");
} }
public static boolean allowName; public static boolean allowName = true;
public static boolean allowLore; public static boolean allowLore = true;
public static boolean allowAttributes; public static boolean allowAttributes = false;
public static int globalMaxEnchant; public static int globalMaxEnchant = 5;
public static int maxMending; public static int maxMending = 1;
public static int maxUnbreaking; public static int maxUnbreaking = 3;
public static int maxVanishing; public static int maxVanishing = 1;
public static int maxAquaAffinity; public static int maxAquaAffinity = 1;
public static int maxBlastProtection; public static int maxBlastProtection = 4;
public static int maxCurseOfBinding; public static int maxCurseOfBinding = 1;
public static int maxDepthStrider; public static int maxDepthStrider = 3;
public static int maxFeatherFalling; public static int maxFeatherFalling = 4;
public static int maxFireProtection; public static int maxFireProtection = 4;
public static int maxFrostWalker; public static int maxFrostWalker = 2;
public static int maxProjectileProtection; public static int maxProjectileProtection = 4;
public static int maxProtection; public static int maxProtection = 4;
public static int maxRespiration; public static int maxRespiration = 3;
public static int maxSoulSpeed; public static int maxSoulSpeed = 3;
public static int maxThorns; public static int maxThorns = 3;
public static int maxSwiftSneak; public static int maxSwiftSneak = 3;
public static int maxBaneOfArthropods; public static int maxBaneOfArthropods = 5;
public static int maxEfficiency; public static int maxEfficiency = 5;
public static int maxFireAspect; public static int maxFireAspect = 2;
public static int maxLooting; public static int maxLooting = 3;
public static int maxImpaling; public static int maxImpaling = 5;
public static int maxKnockback; public static int maxKnockback = 2;
public static int maxSharpness; public static int maxSharpness = 5;
public static int maxSmite; public static int maxSmite = 5;
public static int maxSweepingEdge; public static int maxSweepingEdge = 3;
public static int maxChanneling; public static int maxChanneling = 1;
public static int maxFlame; public static int maxFlame = 1;
public static int maxInfinity; public static int maxInfinity = 1;
public static int maxLoyalty; public static int maxLoyalty = 3;
public static int maxRiptide; public static int maxRiptide = 3;
public static int maxMultishot; public static int maxMultishot = 1;
public static int maxPiercing; public static int maxPiercing = 4;
public static int maxPower; public static int maxPower = 5;
public static int maxPunch; public static int maxPunch = 2;
public static int maxQuickCharge; public static int maxQuickCharge = 3;
public static int maxFortune; public static int maxFortune = 3;
public static int maxLuckOfTheSea; public static int maxLuckOfTheSea = 3;
public static int maxLure; public static int maxLure = 3;
public static int maxSilkTouch; public static int maxSilkTouch = 1;
} }

View File

@@ -3,6 +3,7 @@ package io.github.thetrouper.sentinel.server.config;
import io.github.itzispyder.pdk.utils.misc.JsonSerializable; import io.github.itzispyder.pdk.utils.misc.JsonSerializable;
import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public class StrictConfig implements JsonSerializable<StrictConfig> { public class StrictConfig implements JsonSerializable<StrictConfig> {
@@ -11,5 +12,14 @@ public class StrictConfig implements JsonSerializable<StrictConfig> {
return new File("plugins/Sentinel/strict.json"); return new File("plugins/Sentinel/strict.json");
} }
public static List<String> strict; public static List<String> strict = new ArrayList<>() {{
add("nigg");
add("niger");
add("nlgg");
add("nlger");
add("njgg");
add("tranny");
add("fag");
add("beaner");
}};
} }

View File

@@ -3,6 +3,7 @@ package io.github.thetrouper.sentinel.server.config;
import io.github.itzispyder.pdk.utils.misc.JsonSerializable; import io.github.itzispyder.pdk.utils.misc.JsonSerializable;
import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public class SwearsConfig implements JsonSerializable<SwearsConfig> { public class SwearsConfig implements JsonSerializable<SwearsConfig> {
@@ -11,5 +12,84 @@ public class SwearsConfig implements JsonSerializable<SwearsConfig> {
return new File("plugins/Sentinel/swears.json"); return new File("plugins/Sentinel/swears.json");
} }
public static List<String> swears; public static List<String> swears = new ArrayList<>() {{
add("anal");
add("anus");
add("arse");
add("ass");
add("ballsack");
add("balls");
add("bastard");
add("bitch");
add("btch");
add("biatch");
add("blowjob");
add("bollock");
add("bollok");
add("boner");
add("boob");
add("bugger");
add("butt");
add("choad");
add("clitoris");
add("cock");
add("coon");
add("crap");
add("cum");
add("cunt");
add("dick");
add("dildo");
add("douchebag");
add("dyke");
add("feck");
add("fellate");
add("fellatio");
add("felching");
add("fuck");
add("fudgepacker");
add("flange");
add("gtfo");
add("hoe");
add("horny");
add("incest");
add("jerk");
add("jizz");
add("labia");
add("masturb");
add("muff");
add("nazi");
add("nipple");
add("nips");
add("nude");
add("pedophile");
add("penis");
add("piss");
add("poop");
add("porn");
add("prick");
add("prostit");
add("pube");
add("pussie");
add("pussy");
add("queer");
add("rape");
add("rapist");
add("retard");
add("rimjob");
add("scrotum");
add("sex");
add("shit");
add("slut");
add("spunk");
add("stfu");
add("suckmy");
add("tits");
add("tittie");
add("titty");
add("turd");
add("twat");
add("vagina");
add("wank");
add("whore");
}};
} }

View File

@@ -0,0 +1,6 @@
package io.github.thetrouper.sentinel.server.functions;
public class AdvancedBlockers {
}

View File

@@ -2,7 +2,7 @@ package io.github.thetrouper.sentinel.server.functions;
import io.github.thetrouper.sentinel.data.FAT; import io.github.thetrouper.sentinel.data.FAT;
import io.github.thetrouper.sentinel.server.FilterAction; import io.github.thetrouper.sentinel.server.FilterAction;
import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.config.MainConfig;
import io.github.thetrouper.sentinel.server.util.GPTUtils; import io.github.thetrouper.sentinel.server.util.GPTUtils;
import io.github.thetrouper.sentinel.server.util.ServerUtils; import io.github.thetrouper.sentinel.server.util.ServerUtils;
import io.github.thetrouper.sentinel.server.util.Text; import io.github.thetrouper.sentinel.server.util.Text;
@@ -38,29 +38,29 @@ public class AntiSpam {
if (lastMessageMap.containsKey(p)) { if (lastMessageMap.containsKey(p)) {
String lastMessage = lastMessageMap.get(p); String lastMessage = lastMessageMap.get(p);
double similarity = GPTUtils.calcSim(message, lastMessage); double similarity = GPTUtils.calcSim(message, lastMessage);
ServerUtils.sendDebugMessage("AntiSpam: " + p.getName() + " has a heat of " + heatMap.get(p) + "/" + Config.punishHeat + ". Current Message: \"" + message + "\" Last message: \"" + lastMessage + "\""); ServerUtils.sendDebugMessage("AntiSpam: " + p.getName() + " has a heat of " + heatMap.get(p) + "/" + MainConfig.Chat.AntiSpam.punishHeat + ". Current Message: \"" + message + "\" Last message: \"" + lastMessage + "\"");
if (similarity > 90) { if (similarity > 90) {
heatMap.put(p, heatMap.get(p) + Config.highGain); heatMap.put(p, heatMap.get(p) + MainConfig.Chat.AntiSpam.highGain);
ServerUtils.sendDebugMessage("AntiSpam: Similarity: " + similarity + ", is greater than 90% for " + p.getName() + ". Adding " + Config.highGain); ServerUtils.sendDebugMessage("AntiSpam: Similarity: " + similarity + ", is greater than 90% for " + p.getName() + ". Adding " + MainConfig.Chat.AntiSpam.highGain);
} else if (similarity > 50) { } else if (similarity > 50) {
heatMap.put(p, heatMap.get(p) + Config.mediumGain); heatMap.put(p, heatMap.get(p) + MainConfig.Chat.AntiSpam.mediumGain);
ServerUtils.sendDebugMessage("AntiSpam: Similarity: " + similarity + ", is greater than 50% for " + p.getName() + ". Adding " + Config.mediumGain); ServerUtils.sendDebugMessage("AntiSpam: Similarity: " + similarity + ", is greater than 50% for " + p.getName() + ". Adding " + MainConfig.Chat.AntiSpam.mediumGain);
} else if (similarity > 25) { } else if (similarity > 25) {
heatMap.put(p, heatMap.get(p) + Config.lowGain); heatMap.put(p, heatMap.get(p) + MainConfig.Chat.AntiSpam.lowGain);
ServerUtils.sendDebugMessage("AntiSpam: Similarity: " + similarity + ", is greater than 25% for " + p.getName() + ". Adding " + Config.lowGain); ServerUtils.sendDebugMessage("AntiSpam: Similarity: " + similarity + ", is greater than 25% for " + p.getName() + ". Adding " + MainConfig.Chat.AntiSpam.lowGain);
} }
} }
if (heatMap.get(p) > Config.punishHeat) { if (heatMap.get(p) > MainConfig.Chat.AntiSpam.punishHeat) {
e.setCancelled(true); e.setCancelled(true);
FilterAction.filterAction(p,e,null,null, GPTUtils.calcSim(e.getMessage(),lastMessageMap.get(p)), FAT.SPAM); FilterAction.filterAction(p,e,null,null, GPTUtils.calcSim(e.getMessage(),lastMessageMap.get(p)), FAT.SPAM);
return; return;
} }
if (heatMap.get(p) > Config.blockHeat) { if (heatMap.get(p) > MainConfig.Chat.AntiSpam.blockHeat) {
e.setCancelled(true); e.setCancelled(true);
FilterAction.filterAction(p,e,null,null, GPTUtils.calcSim(e.getMessage(),lastMessageMap.get(p)), FAT.BLOCK_SPAM); FilterAction.filterAction(p,e,null,null, GPTUtils.calcSim(e.getMessage(),lastMessageMap.get(p)), FAT.BLOCK_SPAM);
heatMap.put(p, heatMap.get(p) + Config.highGain); heatMap.put(p, heatMap.get(p) + MainConfig.Chat.AntiSpam.highGain);
return; return;
} }
lastMessageMap.put(p, message); lastMessageMap.put(p, message);
@@ -69,7 +69,7 @@ public class AntiSpam {
for (Player p : heatMap.keySet()) { for (Player p : heatMap.keySet()) {
int heat = heatMap.get(p); int heat = heatMap.get(p);
if (heat > 0) { if (heat > 0) {
heat = heat - Config.heatDecay; heat = heat - MainConfig.Chat.AntiSpam.heatDecay;
heatMap.put(p, Math.max(0, heat)); heatMap.put(p, Math.max(0, heat));
} }
//ServerUtils.sendDebugMessage("AntiSpam: Decaying heat for " + p.getName() + ": " + heatMap.get(p)); //ServerUtils.sendDebugMessage("AntiSpam: Decaying heat for " + p.getName() + ": " + heatMap.get(p));

View File

@@ -3,7 +3,7 @@ package io.github.thetrouper.sentinel.server.functions;
import io.github.itzispyder.pdk.utils.ServerUtils; import io.github.itzispyder.pdk.utils.ServerUtils;
import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.Sentinel;
import io.github.thetrouper.sentinel.cmds.SocialSpyCommand; import io.github.thetrouper.sentinel.cmds.SocialSpyCommand;
import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.config.MainConfig;
import net.md_5.bungee.api.chat.HoverEvent; import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.chat.hover.content.Text; import net.md_5.bungee.api.chat.hover.content.Text;
@@ -23,9 +23,9 @@ public class Message {
receivers.add(sender); receivers.add(sender);
AsyncPlayerChatEvent checkEvent = new AsyncPlayerChatEvent(true,sender,message,receivers); AsyncPlayerChatEvent checkEvent = new AsyncPlayerChatEvent(true,sender,message,receivers);
if (checkEvent.isCancelled()) return; if (checkEvent.isCancelled()) return;
if (!Sentinel.isTrusted(sender) || !sender.hasPermission("sentinel.chat.antiswear.bypass")) if (Config.antiSwearEnabled) ProfanityFilter.handleProfanityFilter(checkEvent); if (!Sentinel.isTrusted(sender) || !sender.hasPermission("sentinel.chat.antiswear.bypass")) if (MainConfig.Chat.AntiSwear.antiSwearEnabled) ProfanityFilter.handleProfanityFilter(checkEvent);
if (!Sentinel.isTrusted(sender) || !sender.hasPermission("sentinel.chat.antispam.bypass")) if (Config.antiSpamEnabled) AntiSpam.handleAntiSpam(checkEvent); if (!Sentinel.isTrusted(sender) || !sender.hasPermission("sentinel.chat.antispam.bypass")) if (MainConfig.Chat.AntiSpam.antiSpamEnabled) AntiSpam.handleAntiSpam(checkEvent);
if (!Sentinel.isTrusted(sender) || !sender.hasPermission("sentinel.chat.antiunicode.bypass")) if (Config.antiUnicode) AntiUnicode.handleAntiUnicode(checkEvent); if (!Sentinel.isTrusted(sender) || !sender.hasPermission("sentinel.chat.antiunicode.bypass")) if (MainConfig.Chat.antiUnicode) AntiUnicode.handleAntiUnicode(checkEvent);
if (checkEvent.isCancelled()) return; if (checkEvent.isCancelled()) return;
sender.sendMessage(Sentinel.dict.get("message-sent").formatted(receiver.getName(),message)); sender.sendMessage(Sentinel.dict.get("message-sent").formatted(receiver.getName(),message));

View File

@@ -2,7 +2,7 @@ package io.github.thetrouper.sentinel.server.functions;
import io.github.thetrouper.sentinel.data.FAT; import io.github.thetrouper.sentinel.data.FAT;
import io.github.thetrouper.sentinel.server.FilterAction; import io.github.thetrouper.sentinel.server.FilterAction;
import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.config.*;
import io.github.thetrouper.sentinel.server.util.ServerUtils; import io.github.thetrouper.sentinel.server.util.ServerUtils;
import io.github.thetrouper.sentinel.server.util.Text; import io.github.thetrouper.sentinel.server.util.Text;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -14,9 +14,9 @@ import java.util.Map;
public class ProfanityFilter { public class ProfanityFilter {
public static Map<Player, Integer> scoreMap; public static Map<Player, Integer> scoreMap;
private static final List<String> swearBlacklist = Config.swearBlacklist; private static final List<String> swearBlacklist = SwearsConfig.swears;
private static final List<String> swearWhitelist = Config.swearWhitelist; private static final List<String> swearWhitelist = FPConfig.swearWhitelist;
private static final List<String> slurs = Config.slurs; private static final List<String> slurs = StrictConfig.strict;
public static void enableAntiSwear() { public static void enableAntiSwear() {
scoreMap = new HashMap<>(); scoreMap = new HashMap<>();
@@ -28,48 +28,48 @@ public class ProfanityFilter {
String severity = ProfanityFilter.checkSeverity(message); String severity = ProfanityFilter.checkSeverity(message);
if (!scoreMap.containsKey(p)) scoreMap.put(p, 0); if (!scoreMap.containsKey(p)) scoreMap.put(p, 0);
// Old: if (scoreMap.get(p) > Config.punishScore) punishSwear(p,highlighted,message,e); // Old: if (scoreMap.get(p) > Config.punishScore) punishSwear(p,highlighted,message,e);
if (scoreMap.get(p) > Config.punishScore) FilterAction.filterAction(p,e,highlighted,severity, null, FAT.SWEAR); if (scoreMap.get(p) > MainConfig.Chat.AntiSwear.punishScore) FilterAction.filterAction(p,e,highlighted,severity, null, FAT.SWEAR);
switch (severity) { switch (severity) {
case "low" -> { case "low" -> {
ServerUtils.sendDebugMessage("AntiSwear Flag, Message: " + message + " Concentrated: " + fullSimplify(message) + " Severity: " + severity + " Previous Score: " + scoreMap.get(p) +" Adding Score: " + Config.lowScore); ServerUtils.sendDebugMessage("AntiSwear Flag, Message: " + message + " Concentrated: " + fullSimplify(message) + " Severity: " + severity + " Previous Score: " + scoreMap.get(p) +" Adding Score: " + MainConfig.Chat.AntiSwear.lowScore);
scoreMap.put(p, scoreMap.get(p) + Config.lowScore); scoreMap.put(p, scoreMap.get(p) + MainConfig.Chat.AntiSwear.lowScore);
e.setCancelled(true); e.setCancelled(true);
// Old: blockSwear(p,highlighted,message,severity,e); // Old: blockSwear(p,highlighted,message,severity,e);
FilterAction.filterAction(p,e,highlighted,severity, null, FAT.BLOCK_SWEAR); FilterAction.filterAction(p,e,highlighted,severity, null, FAT.BLOCK_SWEAR);
} }
case "medium-low" -> { case "medium-low" -> {
ServerUtils.sendDebugMessage("AntiSwear Flag, Message: " + message + " Concentrated: " + fullSimplify(message) + " Severity: " + severity + " Previous Score: " + scoreMap.get(p) +" Adding Score: " + Config.mediumLowScore); ServerUtils.sendDebugMessage("AntiSwear Flag, Message: " + message + " Concentrated: " + fullSimplify(message) + " Severity: " + severity + " Previous Score: " + scoreMap.get(p) +" Adding Score: " + MainConfig.Chat.AntiSwear.mediumLowScore);
scoreMap.put(p, scoreMap.get(p) + Config.mediumLowScore); scoreMap.put(p, scoreMap.get(p) + MainConfig.Chat.AntiSwear.mediumLowScore);
e.setCancelled(true); e.setCancelled(true);
// Old: blockSwear(p,highlighted,message,severity,e); // Old: blockSwear(p,highlighted,message,severity,e);
FilterAction.filterAction(p,e,highlighted,severity, null, FAT.BLOCK_SWEAR); FilterAction.filterAction(p,e,highlighted,severity, null, FAT.BLOCK_SWEAR);
} }
case "medium" -> { case "medium" -> {
ServerUtils.sendDebugMessage("AntiSwear Flag, Message: " + message + " Concentrated: " + fullSimplify(message) + " Severity: " + severity + " Previous Score: " + scoreMap.get(p) +" Adding Score: " + Config.mediumScore); ServerUtils.sendDebugMessage("AntiSwear Flag, Message: " + message + " Concentrated: " + fullSimplify(message) + " Severity: " + severity + " Previous Score: " + scoreMap.get(p) +" Adding Score: " + MainConfig.Chat.AntiSwear.mediumScore);
scoreMap.put(p, scoreMap.get(p) + Config.mediumScore); scoreMap.put(p, scoreMap.get(p) + MainConfig.Chat.AntiSwear.mediumScore);
e.setCancelled(true); e.setCancelled(true);
// Old: blockSwear(p,highlighted,message,severity,e); // Old: blockSwear(p,highlighted,message,severity,e);
FilterAction.filterAction(p,e,highlighted,severity, null, FAT.BLOCK_SWEAR); FilterAction.filterAction(p,e,highlighted,severity, null, FAT.BLOCK_SWEAR);
} }
case "medium-high" -> { case "medium-high" -> {
ServerUtils.sendDebugMessage("AntiSwear Flag, Message: " + message + " Concentrated: " + fullSimplify(message) + " Severity: " + severity + " Previous Score: " + scoreMap.get(p) +" Adding Score: " + Config.mediumHighScore); ServerUtils.sendDebugMessage("AntiSwear Flag, Message: " + message + " Concentrated: " + fullSimplify(message) + " Severity: " + severity + " Previous Score: " + scoreMap.get(p) +" Adding Score: " + MainConfig.Chat.AntiSwear.mediumHighScore);
scoreMap.put(p, scoreMap.get(p) + Config.mediumHighScore); scoreMap.put(p, scoreMap.get(p) + MainConfig.Chat.AntiSwear.mediumHighScore);
e.setCancelled(true); e.setCancelled(true);
// Old: blockSwear(p,highlighted,message,severity,e); // Old: blockSwear(p,highlighted,message,severity,e);
FilterAction.filterAction(p,e,highlighted,severity, null, FAT.BLOCK_SWEAR); FilterAction.filterAction(p,e,highlighted,severity, null, FAT.BLOCK_SWEAR);
} }
case "high" -> { case "high" -> {
ServerUtils.sendDebugMessage("AntiSwear Flag, Message: " + message + " Concentrated: " + fullSimplify(message) + " Severity: " + severity + " Previous Score: " + scoreMap.get(p) +" Adding Score: " + Config.highScore); ServerUtils.sendDebugMessage("AntiSwear Flag, Message: " + message + " Concentrated: " + fullSimplify(message) + " Severity: " + severity + " Previous Score: " + scoreMap.get(p) +" Adding Score: " + MainConfig.Chat.AntiSwear.highScore);
scoreMap.put(p, scoreMap.get(p) + Config.highScore); scoreMap.put(p, scoreMap.get(p) + MainConfig.Chat.AntiSwear.highScore);
e.setCancelled(true); e.setCancelled(true);
// Old: blockSwear(p,highlighted,message,severity,e); // Old: blockSwear(p,highlighted,message,severity,e);
FilterAction.filterAction(p,e,highlighted,severity, null, FAT.BLOCK_SWEAR); FilterAction.filterAction(p,e,highlighted,severity, null, FAT.BLOCK_SWEAR);
} }
case "slur" -> { case "slur" -> {
// Insta-Punish // Insta-Punish
ServerUtils.sendDebugMessage("AntiSwear Flag, Message: " + message + " Concentrated: " + fullSimplify(message) + " Severity: " + severity + " Previous Score: " + scoreMap.get(p) +" Adding Score: " + Config.highScore); ServerUtils.sendDebugMessage("AntiSwear Flag, Message: " + message + " Concentrated: " + fullSimplify(message) + " Severity: " + severity + " Previous Score: " + scoreMap.get(p) +" Adding Score: " + MainConfig.Chat.AntiSwear.highScore);
scoreMap.put(p, scoreMap.get(p) + Config.highScore); scoreMap.put(p, scoreMap.get(p) + MainConfig.Chat.AntiSwear.highScore);
e.setCancelled(true); e.setCancelled(true);
// Old: punishSlur(p,highlighted,message,e); // Old: punishSlur(p,highlighted,message,e);
FilterAction.filterAction(p,e,highlighted,severity, null,FAT.SLUR); FilterAction.filterAction(p,e,highlighted,severity, null,FAT.SLUR);
@@ -286,7 +286,7 @@ public class ProfanityFilter {
for (Player p : scoreMap.keySet()) { for (Player p : scoreMap.keySet()) {
int score = scoreMap.get(p); int score = scoreMap.get(p);
if (score > 0) { if (score > 0) {
score = score - Config.scoreDecay; score = score - MainConfig.Chat.AntiSwear.scoreDecay;
scoreMap.put(p, Math.max(0, score)); scoreMap.put(p, Math.max(0, score));
} }
} }

View File

@@ -3,7 +3,7 @@ package io.github.thetrouper.sentinel.server.functions;
import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.Sentinel;
import io.github.thetrouper.sentinel.data.Emojis; import io.github.thetrouper.sentinel.data.Emojis;
import io.github.thetrouper.sentinel.discord.DiscordWebhook; import io.github.thetrouper.sentinel.discord.DiscordWebhook;
import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.config.MainConfig;
import io.github.thetrouper.sentinel.server.util.Randomizer; import io.github.thetrouper.sentinel.server.util.Randomizer;
import io.github.thetrouper.sentinel.server.util.ServerUtils; import io.github.thetrouper.sentinel.server.util.ServerUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@@ -53,7 +53,7 @@ public class ReportFalsePositives {
String simplifyRep, String simplifyRep,
String sanitized) { String sanitized) {
ServerUtils.sendDebugMessage("Creating FalsePositive Webhook..."); ServerUtils.sendDebugMessage("Creating FalsePositive Webhook...");
DiscordWebhook webhook = new DiscordWebhook(Config.webhook); DiscordWebhook webhook = new DiscordWebhook(MainConfig.Plugin.webhook);
webhook.setAvatarUrl("https://r2.e-z.host/d440b58a-ba90-4839-8df6-8bba298cf817/3lwit5nt.png"); webhook.setAvatarUrl("https://r2.e-z.host/d440b58a-ba90-4839-8df6-8bba298cf817/3lwit5nt.png");
webhook.setUsername("Sentinel Anti-Nuke | Logs"); webhook.setUsername("Sentinel Anti-Nuke | Logs");
DiscordWebhook.EmbedObject embed = new DiscordWebhook.EmbedObject() DiscordWebhook.EmbedObject embed = new DiscordWebhook.EmbedObject()

View File

@@ -1,92 +0,0 @@
package io.github.thetrouper.sentinel.server.util;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.*;
public interface JsonSerializable<T> {
Gson gson = new GsonBuilder().serializeNulls().setPrettyPrinting().create();
File getFile();
default String serialize(boolean pretty) {
Gson gson;
if (pretty) {
gson = new GsonBuilder().setPrettyPrinting().create();
}
else {
gson = new Gson();
}
try {
String json = gson.toJson(this);
if (json == null) {
throw new IllegalStateException("json parse failed for " + this.getClass().getSimpleName());
}
return json;
}
catch (Exception ex) {
return "{}";
}
}
@SuppressWarnings("unchecked")
default T deserialize(String json) {
try {
JsonSerializable<?> v = gson.fromJson(json, this.getClass());
if (v == null) {
throw new IllegalStateException("json parse failed");
}
return (T)v;
}
catch (Exception ex) {
return null;
}
}
default void save() {
String json = serialize(true);
File f = getFile();
if (FileValidationUtils.validate(f)) {
try {
FileWriter fw = new FileWriter(f);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(json);
bw.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
default <O> O getOrDef(O val, O def) {
return val != null ? val : def;
}
static <T extends JsonSerializable<?>> T load(File file, Class<T> jsonSerializable, T fallback) {
if (FileValidationUtils.validate(file)) {
try {
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
T t = gson.fromJson(br, jsonSerializable);
if (t == null) {
throw new IllegalStateException("json parse failed!");
}
return t;
}
catch (Exception ex) {
ex.printStackTrace();
}
}
return fallback;
}
static <T extends JsonSerializable<?>> T load(String path, Class<T> jsonSerializable, T fallback) {
return load(new File(path), jsonSerializable, fallback);
}
}

View File

@@ -2,7 +2,7 @@ package io.github.thetrouper.sentinel.server.util;
import io.github.thetrouper.sentinel.Sentinel; import io.github.thetrouper.sentinel.Sentinel;
import io.github.thetrouper.sentinel.server.config.Config; import io.github.thetrouper.sentinel.server.config.AdvancedConfig;
import java.util.Map; import java.util.Map;
import java.util.regex.PatternSyntaxException; import java.util.regex.PatternSyntaxException;
@@ -48,7 +48,7 @@ public class Text {
return result.toString(); return result.toString();
} }
public static String fromLeetString(String s) { public static String fromLeetString(String s) {
Map<String, String> dictionary = Config.leetPatterns; Map<String, String> dictionary = AdvancedConfig.leetPatterns;
String msg = s; String msg = s;
for (String key : dictionary.keySet()) { for (String key : dictionary.keySet()) {

View File

@@ -1,6 +1,6 @@
{ {
"dictionary" : { "dictionary" : {
"example-message" : "Test Message", "if-you-see-this-lang-is-broken" : "Sentinel language is working!",
"no-permission" : "§cInsufficient Permissions!", "no-permission" : "§cInsufficient Permissions!",
"cooldown" : "This action is on cooldown!", "cooldown" : "This action is on cooldown!",
"false-positive-report-success" : "Successfully reported a false positive!", "false-positive-report-success" : "Successfully reported a false positive!",