From 6d6891925b5c0662ee53ec5633a3543c8de6226e Mon Sep 17 00:00:00 2001 From: trouper Date: Fri, 21 Mar 2025 12:19:00 -0500 Subject: [PATCH] Need to improve rate limit logic --- .gradle/8.5/checksums/checksums.lock | Bin 17 -> 17 bytes .../8.5/executionHistory/executionHistory.bin | Bin 2344489 -> 2344489 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/8.5/fileHashes/fileHashes.bin | Bin 288319 -> 288319 bytes .gradle/8.5/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../8.5/fileHashes/resourceHashesCache.bin | Bin 205913 -> 206151 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/file-system.probe | Bin 8 -> 8 bytes .../sentinel/data/config/NBTConfig.class | Bin 3642 -> 3642 bytes .../compileJava/previous-compilation-data.bin | Bin 91366 -> 91366 bytes .../sentinel/data/config/NBTConfig.java | 8 +++--- .../violations/players/CreativeHotbar.java | 10 +++++-- .../functions/itemchecks/ItemCheck.java | 27 ++++++++++++++++-- .../trouper/sentinel/startup/drm/Loader.java | 2 +- 14 files changed, 38 insertions(+), 9 deletions(-) diff --git a/.gradle/8.5/checksums/checksums.lock b/.gradle/8.5/checksums/checksums.lock index 2295aaf56dc30641a00919e42610171586350e10..588ab510878fda9d9be7630b90b1400e9c6c6b1e 100644 GIT binary patch literal 17 VcmZSfyWC&;{v_{G1~B091OPe91n2+& literal 17 VcmZSfyWC&;{v_{G1~A}p1pqn61mpk! diff --git a/.gradle/8.5/executionHistory/executionHistory.bin b/.gradle/8.5/executionHistory/executionHistory.bin index 51dfd1b80d08bd46a59907636c14e3e396193e31..f373e08faa4d13cdf8a9402ea218f17cd9ffe9a7 100644 GIT binary patch delta 3823 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 delta 3820 zcmc(ic~DeG9>*E;9t8-X4aO+oc%UoB3xsH5#E9G7R(5N(QdaFByHoY6`ux7XU-#?& zb-$k1yYdS~yRc>HM7n;ucXW)7)fwuHbYh*c&O~Q=NYd5hn3=TL%QIo#l8nqbNedFa z(lzM|Gg8tQq{lBZc=byY;^K{$7z();B;VO^GfddQp}V77AA5iFe!EAsD^$+3wOPxR zaj@W`JWDX`lC(|cHm5%e`sTFli8&fo->r8+@=Lwr)+uKpzWe#o8}rXX@vk*r_(cMqz+bga$ z7Pw_*+mAbVW`2;II5#;pB|ae`b>3XB#Tko|ljg@|dcGRCh{t(My-0{GwV&S)RL4vd zg3?cFWXG)>9CGxURdz>>WyjSJv%#a*6ZGlKFxc?+S zr4*unw~u!f{K}5Po2hjHp1ZcP13Uu97>=aV6!0{Ym7Fr~E~&esESC;r_Z-JKhmu{S?=&-&QBGH##NkrmDgM zJzQv%yvy7_Tvz}bW))nXr|{>R z-Jh)3X7%~AHCg4!o-Sv)AfQpAhG|KP_`mLUwOO(Pn-ZG^HcP=QnQxK4wbmB~2C}mRXGUL&KIsGzY z^B~*ShQ3JVf{7HZm2k#oTRJNCiGo`O9_e&`aCRy5IP@C;b%$(Ch0E4RXT~KNAFXaF zmYQa@-Ckofv-}BEFEfh+{}Unx{Ljd=AazC@+wh_Q7cOGAg$?*&U))4|%{B|j4&@!i z=cw1FfSxllUq+8TsCPyq*ml~gE=R6mFH(&C+QOZ^MX@-98^PYD*!;DHn!Q8u!|O^f z_D72TRTe&ME5)oT3l)2fVt}<&&0eOcYLt1fS19&uHt~SE8%mD7OZ|O~GC$@%M#y$W z@39YGC53UmY!}6fcI7Cxn_^lx=L6MyEjTu}kIbdF~WW~G?XbKbi)meXVw!^xg%d@3!yZ3G?LwbNe^lHa&LAI#eMnm;cPX< zs0hxL-A_?wCv{^>C`PQ2^Kd?j=S&U}UsER+ZCW2KwX!yN;|&vNLcJKGZYve&^@FLF zMr&KS2=x3@lL9w;c6KW^n^t&{jYnFL}nFr#S2iOM( z52R%u(n$Rsr7NtS%yZ%{+P2yl(j28$5c#o)g}qv_Ih>u$%Z;AV;1=>I4?t6J$33)p zkBw3TF~omN{kkH#CwxWxU#XvMt8{_8#D7ZtdRwI$+@|sz(~W%y_dQV zaMC^MK=Zp!tCUrD0*7cTSW#X`gj@Uvap~y>TsLP@eg4|>_Q-t_ZDF2G%*vOf*%e37 zPUnYWmbT2m`% z(IPpMt;3ymYLSL5!lZ|;Sl*qfBH}cE6v!MTROXLdnWKcx`y-9`?<7%EGzfZzNC&{6 z06eq?67&v05zG&S)&w9=<|3if0ca(2nNaw9C`sIjNw4{15){wite`v|SD|DTkv0s1 z3#H~ZAP&U6^^$zsKs1P5NrE6t;Qhs4(!BLiaI;OOgwzDw^ca=yJA?X((h@dfi9JOd z>`UN-ne!MyH3rRME)gmkgLlnM8ZJxZ2SM)`yd&=e8Sf5H;9hM)|lgHU8B8pu2$ zv@{esGkt`1grXW|Yc8hPFr+cLhDonEAQf$efK+=2I39-N>~$hS@qD~VJHv48Zj*FT zICA5eaq zAN^Ud*FQgVXEb6;rD*~tmAM)D_BiHTBef>bJhe@!SrBSAA$c2v+}SM5P^@cRhWd-2*ik( zQX(#jL{ZE(LQRp#kvTx9I}#;|Ph-++&U%6Df+2#UB#whsQD|DoI-zAq=A7wMMQnF= z-)Vm(9x#MH5Mu3)e73M%x zcF!;iho0sArwh$b(G-zT{@iA&Sh!MQpY0_4ZHD9j`L>ZKf3qpJKUgcu{#y7|R z_%?L=fYT1y>#KJhDqBrQLdA52g>d(vlY`uzyR;!8C0pvzD)uk6S#En|Z6mq=bl>O} L;R}#x@kjE~I+yZyf3Ut5#5=iYnHx%YeY*R~#c zTaP?DPm(9ileGwyzOIKhcg^wss>8l0cJA@a;puuiJ4t0r*#STJCrFg%F8d0zorUI~ z&AYKDL>2}0OPS)_szt(0saN$0k6B}Bi{p=a#BVDMk4t01lJ~aRu~%R+B*D^%a|KI; z06}Oq>P{kUxO)i`yuHg?fL7hkv<1O%Xz^7%{EeGE$0d&EDpSoihe>N ztwwzbKM9AW^c@gPA8*rJWqVKS*&Q-4bz%ComnUEfKL6ti+u4!gH2hX@mu5VQ=A*Tv zl;?8d&@Lh^G;683(@NGnX9cu3Xh^jfra|k-Typfh(CEl{MqKqG*^n4kK%$~>QY5d| z!84M}hM*DAcQ8%ixh}Mc=nBR~bRF8~bfrR_xIqK_y~!_K3?2E9&wgiHmt)VvjRQP% z!^kS`9E7k;n%;jkcbUt>6fyh|`l*~ZhOhzR^-g8H+(j^bM%^aFungljWwu+KYk_(V zQ{)aHgQL7xXmn<|djp)3mhB6=)0R&5NOpXIgU&YLs+A+QmWxByNHd@&qO`%F#GTd$3FlT`^<}b#AO`NQ5bYxfp1l z6NF1Nv)Kx>JIj@;puR%nL3crcdx=6SRm(#VlfF5jsy!xrAnpjs)QjAxzrD8Xfry>6;j(Dh9P8O2D8O z&+UY>ilO{^go)@j9(_UGOe!`;{sZW5$&_9{y{p?BYI!rjqulGECF$$4{K=J1e_OWK zg8g`OOXhV4v=HnSfos!_XuHpK0LOo3=Ev%&?K=5g{c+6du}Sa=Sndt@5wL%Y0ki?Ggh+6}`( zC)pp?jJl^;{rBRL{O~K5G4Npe7vHnZ05X%3r=!h-dVzmq3?xt?L{f(~oF;|oyvneLq+0Cf7 GN&W@F2r!8N delta 2195 zcmZ8jdr(wm6nELHV#s4|>O3lgUsX{~` zHq26HLjR9aeKKW^aLXsObgpfW*;BFdp>@Yzd(im|p0lxh51eX2gZv>zTsu!l69l{a zmu8fVQE1Sn7u1sZD<0{E7zwpNmF&aOZDb^p?=CDdYD1mIM+0w(4^R6Iifu&hfo?dF zf5*QcFiKrAQLe(NA<7Lj8HnOVmy9}~noqu4=)bDeAa6bidVs1C6nF@`j2=T@Or@Tp zteEwvx}xMV{(v@|nMYc=Df%LI6Y&ONlF^^2-_CvFE2wW}jkF7SBXKkgzPynbgz0HS z2|->wt0(#rB^)gai4qFM6_$JIIyH($+#(9Z!nlTIR4$^7IM_x}U@Tf0nq_y3Gl%hO zR3f{@#Ivv0*heRQf@Wu&*bn#3<_Ddqi*qr3F;z*xlXQ}niaOc18crD% z!MKDq_fMkcg)rS@BK5Ml1|~nM@-79M{D`*>mm^tPmu#+wLdVRJ$rODL+GI*Ahfzjl zs2xqd_aVw?69#0o8KxKPNG14FfenbB!0MICW)6w`tDQ!dP3FoDGFPBGg(|OtVIxx? zok~@5$;_9{0$2iww*`g{#%l>6-d5Cp$hr;5<~|JEQc9;-v_k(DWgI}6jC#=&NWMOF zF$86rFes6qLXpk`j&(>-5!!%K8ClRMqaEm<$oIps3%W^!K1cKt$~Xw;c_yuIDSrYS z-=ba)97f9+q8!DLj7}mhn0(hTbeE-72J;m;`Y~{bna9XVY_&U3zsei=nUmr1@@ zYk;rNFL7tdX^c@1QFPN0xGm>vec#6pz3x^38*RAwRp@rDrFeUBRe#`vjvlOHhwy z-X!wA+5l^}GK$G{WuSW;P~dD#pW$mSrrB(o}vqN%9O=2aYp5VHl3r1>T4!@18r4*E-s>NQK zWaLmZ36>n;x#TN_A%`ioMew5T{b*W2l%LSp#R@ci#*dl%8dNKV0x6>xRa&AvgIz{1 zagQO4%;k+d6HuDVDV{tu%4ik5k>oQYP{)xY00tRN!IQnLTdj`PHVu|erA8ZwnVz!7 zxR40VzC$|)GTZ3Q7daP)i!G;pn$110rsMG<}PA2mA5E;TfIdB&K z_gT?|C^qS&LLoCWKC*gjMS^Yjr0QpmcjjH_Bh}}saI8=`t_^D6Yc93~#NY5uw1!oN zpW;!^!7uol-i(FCrU*v=SIWh>zFJc4!2%pV%ha4P^VxK0P-f;rI*XBaoS(POjgpU@ zH?v@l)TAwI-@G&Ow5jOR6Wa%>lBs0e{g#;NDb5U5!@#VvfAh?}#nP-R85mg|r$0Q*l(~7* z%`Y8{4%^$47%e6F^IgPl2Th&~HF56r?bVEm{Bsc+0$0vx2(!mHp4_&wFT%;#Pmu>C>4!1x! G0vYU4)H&4v diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index beec8ca3f4a35be57b3494529f5066e66fec8830..a34f41fba5cf07687c9ebc93f91eeb92813c4da8 100644 GIT binary patch literal 17 VcmZSnKTT<6%cI}H3}7Js0suiI1{VMT literal 17 VcmZSnKTT<6%cI}H3}7IB697RK1_%HE diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe index cf440c91df339591b6dd354b5e9e8810b646aadb..0767e4bceadc92b1f36fa9f11bede6c5a67bfdda 100644 GIT binary patch literal 8 PcmZQzV4S+GE2I?w2$}-0 literal 8 PcmZQzV4S+qd&^}22-gD| 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 122a7d0bdb540f56bfb5051c97e205301fc55e12..024789638b77e05c2ffa65ad82820395e97f0e74 100644 GIT binary patch delta 218 zcmWO0DKvy(0EOY_D+RvBjL=DbHfToTpD#1iPy&6m~dy(L(Y^()1IQ{*{qT|FXp{k o@D{c2mV8+DX~maS-|@zeb-y?N$Ex4B^JhItY$PQ%lTuqrg>3$!{PrJdp diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index 0d8cb3cf56821d49ba6e512c6392f81a7798be3b..586d9ff890e5ce3973ad3c2bf9a19fe07f586bc7 100644 GIT binary patch delta 101 zcmV-r0Gj{i$pz-g1+WPY5R`tYP4yI&^LI;!7ynxI { 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();