diff --git a/.gradle/8.5/checksums/checksums.lock b/.gradle/8.5/checksums/checksums.lock index 2295aaf..588ab51 100644 Binary files a/.gradle/8.5/checksums/checksums.lock and b/.gradle/8.5/checksums/checksums.lock differ diff --git a/.gradle/8.5/executionHistory/executionHistory.bin b/.gradle/8.5/executionHistory/executionHistory.bin index 51dfd1b..f373e08 100644 Binary files a/.gradle/8.5/executionHistory/executionHistory.bin and b/.gradle/8.5/executionHistory/executionHistory.bin differ diff --git a/.gradle/8.5/executionHistory/executionHistory.lock b/.gradle/8.5/executionHistory/executionHistory.lock index 498ba86..a7c86f1 100644 Binary files a/.gradle/8.5/executionHistory/executionHistory.lock and b/.gradle/8.5/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.5/fileHashes/fileHashes.bin b/.gradle/8.5/fileHashes/fileHashes.bin index c7df9ba..531c16d 100644 Binary files a/.gradle/8.5/fileHashes/fileHashes.bin and b/.gradle/8.5/fileHashes/fileHashes.bin differ diff --git a/.gradle/8.5/fileHashes/fileHashes.lock b/.gradle/8.5/fileHashes/fileHashes.lock index a21d685..eabc461 100644 Binary files a/.gradle/8.5/fileHashes/fileHashes.lock and b/.gradle/8.5/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.5/fileHashes/resourceHashesCache.bin b/.gradle/8.5/fileHashes/resourceHashesCache.bin index fc71764..7651bff 100644 Binary files a/.gradle/8.5/fileHashes/resourceHashesCache.bin and b/.gradle/8.5/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index beec8ca..a34f41f 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe index cf440c9..0767e4b 100644 Binary files a/.gradle/file-system.probe and b/.gradle/file-system.probe differ diff --git a/build/classes/java/main/me/trouper/sentinel/data/config/NBTConfig.class b/build/classes/java/main/me/trouper/sentinel/data/config/NBTConfig.class index 122a7d0..0247896 100644 Binary files a/build/classes/java/main/me/trouper/sentinel/data/config/NBTConfig.class and b/build/classes/java/main/me/trouper/sentinel/data/config/NBTConfig.class differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index 0d8cb3c..586d9ff 100644 Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/src/main/java/me/trouper/sentinel/data/config/NBTConfig.java b/src/main/java/me/trouper/sentinel/data/config/NBTConfig.java index df7d690..476e0b5 100644 --- a/src/main/java/me/trouper/sentinel/data/config/NBTConfig.java +++ b/src/main/java/me/trouper/sentinel/data/config/NBTConfig.java @@ -17,11 +17,11 @@ public class NBTConfig implements JsonSerializable { public RateLimit rateLimit = new RateLimit(); public class RateLimit { - public int rateLimitBytes = 16348; - public int byteDecay = 1024; + public int rateLimitBytes = 16348; + public int byteDecay = 1024; // Every Minute public int rateLimitItems = 10; - public int itemDecay = 2; - public List punishmentCommands = List.of("kick %player% Internal Exception: io.netty.handler.codec.DecoderException: java.lang.RuntimeException: Tried to read NBT tag that was too big; tried to allocate 28391038bytes where max allowed: 16348"); + public int itemDecay = 5; // Every 10 seconds + public List punishmentCommands = List.of("kick %player% Internal Exception: io.netty.handler.codec.DecoderException: java.lang.RuntimeException: Tried to read NBT tag that was too big; tried to allocate %s bytes where max allowed: %s"); } public boolean allowName = true; diff --git a/src/main/java/me/trouper/sentinel/server/events/violations/players/CreativeHotbar.java b/src/main/java/me/trouper/sentinel/server/events/violations/players/CreativeHotbar.java index e155559..fd30ad9 100644 --- a/src/main/java/me/trouper/sentinel/server/events/violations/players/CreativeHotbar.java +++ b/src/main/java/me/trouper/sentinel/server/events/violations/players/CreativeHotbar.java @@ -22,6 +22,7 @@ import org.bukkit.event.inventory.InventoryCreativeEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import java.util.ArrayList; import java.util.List; public class CreativeHotbar extends AbstractViolation { @@ -42,6 +43,11 @@ public class CreativeHotbar extends AbstractViolation { //ServerUtils.verbose("NBT: Cursor has meta"); if (!(i.hasItemMeta() && i.getItemMeta() != null)) return; if (!new RateLimitCheck().passes(new Pair<>(p,i))) { + List punishmentCommands = new ArrayList<>(); + for (String punishmentCommand : Sentinel.getInstance().getDirector().io.nbtConfig.rateLimit.punishmentCommands) { + punishmentCommands.add(punishmentCommand.formatted()); + } + ServerUtils.verbose("Player flags rate limit, performing action"); ActionConfiguration.Builder config = new ActionConfiguration.Builder() .setEvent(e) @@ -49,8 +55,8 @@ public class CreativeHotbar extends AbstractViolation { .cancel(true) .punish(true) .deop(Sentinel.getInstance().getDirector().io.violationConfig.creativeHotbarAction.deop) - .setPunishmentCommands(Sentinel.getInstance().getDirector().io.nbtConfig.rateLimit.punishmentCommands); - + .setPunishmentCommands(); + runActions( Sentinel.getInstance().getDirector().io.lang.violations.protections.rootName.rootNameFormatPlayer.formatted(p.getName(), Sentinel.getInstance().getDirector().io.lang.violations.protections.rootName.grab, Sentinel.getInstance().getDirector().io.lang.violations.protections.rootName.nbtItem), Sentinel.getInstance().getDirector().io.lang.violations.protections.rootName.rootNameFormatPlayer.formatted(p.getName(), Sentinel.getInstance().getDirector().io.lang.violations.protections.rootName.grab, Sentinel.getInstance().getDirector().io.lang.violations.protections.rootName.nbtItem), diff --git a/src/main/java/me/trouper/sentinel/server/functions/itemchecks/ItemCheck.java b/src/main/java/me/trouper/sentinel/server/functions/itemchecks/ItemCheck.java index 6c405ea..9e0e68d 100644 --- a/src/main/java/me/trouper/sentinel/server/functions/itemchecks/ItemCheck.java +++ b/src/main/java/me/trouper/sentinel/server/functions/itemchecks/ItemCheck.java @@ -14,9 +14,32 @@ import org.bukkit.inventory.meta.BlockStateMeta; import org.bukkit.inventory.meta.BundleMeta; import org.bukkit.inventory.meta.ItemMeta; +import java.util.Arrays; +import java.util.List; + public class ItemCheck extends AbstractCheck { + + public List> checks; + + public ItemCheck() { + enchantmentCheck = new EnchantmentCheck(); + } + @Override public boolean passes(ItemStack item) { + try { + return scan(item); + } catch (Exception ex) { + Sentinel.getInstance().getLogger().warning("Caught an exception while handling an item check: " + Arrays.toString(ex.getStackTrace())); + return false; + } + } + + private boolean checksPass(ItemStack item) { + + } + + private boolean scan(ItemStack item) { ServerUtils.verbose("Checking item: " + item.getType().name()); NBTConfig config = Sentinel.getInstance().getDirector().io.nbtConfig; @@ -188,8 +211,8 @@ public class ItemCheck extends AbstractCheck { ServerUtils.verbose("Item passed all checks."); return true; } - - public static boolean isSpawnEgg(ItemStack item) { + + private boolean isSpawnEgg(ItemStack item) { return item.getType().name().toLowerCase().contains("spawn_egg"); } } diff --git a/src/main/java/me/trouper/sentinel/startup/drm/Loader.java b/src/main/java/me/trouper/sentinel/startup/drm/Loader.java index 40741c7..2500200 100644 --- a/src/main/java/me/trouper/sentinel/startup/drm/Loader.java +++ b/src/main/java/me/trouper/sentinel/startup/drm/Loader.java @@ -184,7 +184,7 @@ public final class Loader { Bukkit.getScheduler().runTaskTimer(Sentinel.getInstance(), SpamFilter::decayHeat,0, 20); Bukkit.getScheduler().runTaskTimer(Sentinel.getInstance(), ProfanityFilter::decayScore,0,1200); Bukkit.getScheduler().runTaskTimer(Sentinel.getInstance(), WandEvents::handleDisplay,0,1); - Bukkit.getScheduler().runTaskTimer(Sentinel.getInstance(), RateLimitCheck::decayData,0,20*60); + Bukkit.getScheduler().runTaskTimer(Sentinel.getInstance(), RateLimitCheck::decayData,0,1200); Bukkit.getScheduler().runTaskTimer(Sentinel.getInstance(), RateLimitCheck::decayItems,0,200); if (Sentinel.getInstance().getDirector().io.mainConfig.backdoorDetection.enabled) Sentinel.getInstance().getDirector().backdoorDetection.init();