LogOres
What is LogOres?
I wrote this as an anti-cheat plugin, along the lines of NoCheat, FoundDiamonds and AntiXRay. It's purpose is to log ores that people are mining so that you can look for cheat patterns. It also does some calculations that make it easier to look for these patterns rather than just manually correlating FoundDiamonds, LogBlock, etc (which is what I used to do).
How do I install it?
- Download the latest version here
- Copy the jar file into your plugins directory
- Restart your minecraft server (or if using PlugMan, you can live-load by typing "/plugman load LogOres")
- (Optional) Tweak the plugins/LogOres/config.yml and then type '/lo reload' (permission 'logores.admin')
Source code available here
How does it work?
LogOres does some basic checks/calculations on ore activity to help you find cheaters without having to do all the manual correlation yourself. You specify the ores you want to log in a config file:
# default 14 (gold), 15 (iron) and 56 (diamond) - MUST USE DATA VALUES # [URL]http://www.minecraftwiki.net/wiki/Data_values[/URL] loggedOres: - 14 - 15 - 56
and then it will log any mining of those ores to a file, like so:
[Sat Jul 09 09:30:59 PDT 2011] IRON_ORE broken by morganm at (x= -91, y= 11, z= -47, world=world) [Sat Jul 09 09:30:59 PDT 2011] IRON_ORE broken by morganm at (x= -92, y= 11, z= -48, world=world) [Sat Jul 09 09:30:59 PDT 2011] IRON_ORE broken by morganm at (x= -91, y= 10, z= -47, world=world) [Sat Jul 09 09:31:59 PDT 2011] IRON_ORE broken by morganm at (x= -90, y= 9, z= -48, world=world) [Sat Jul 09 09:31:59 PDT 2011] IRON_ORE broken by morganm at (x= -90, y= 9, z= -49, world=world) [Sat Jul 09 09:33:49 PDT 2011] IRON_ORE broken by morganm at (x= -67, y= 38, z= -63, world=world) [t= 109sec / (d= 40 / b= 101) = r=278.2] [Sat Jul 09 09:34:39 PDT 2011] IRON_ORE broken by morganm at (x= -49, y= 31, z= -61, world=world) [t= 54sec / (d= 19 / b= 59) = r=164.1] [flagged]
Note the extra details that were added to some entries, I'll explain those further in just a moment.
LogOres keeps track of the most recent ore a person mined and compares that to the current ore. If the ores are > minDistance (default 5) blocks apart (in order to ignore clusters of ore), it will print out the time since last ore (t=), distance (d=), number of non-ore blocks (b=) and the ratio between them (r=) all. The ratio calculation is: time / (distance / blocks). This has the effect that smaller ratio numbers indicate a higher likelihood of cheating, as explained in more detail below.
Examples
Here are some examples of the extra information that is logged:
# 60 seconds between ores, distance=60, 120 blocks broken # this is mining straight between ores (2 blocks * 60 distance = 120 blocks, ie. just enough room to walk) [t= 60sec / (d= 60 / b= 120) = r=120.0] # 180 seconds between ores, distance=60, 250 blocks broken # this is same distance, but taking longer and breaking more blocks to get there - more "normal" mining [t= 180sec / (d= 60 / b= 250) = r=750.0] # 180 seconds between ores, distance=20, 250 blocks broken # this is an example of a normal horizontal zig-zag mine, where the ore is closer but took just as long as previous example [t= 180sec / (d= 20 / b= 250) = r=2250.0]
So we can see that the closer the ores are together and the longer time/blocks it takes us to get there, the less likely we are cheating and the higher the ratio. The further the ores are apart and the less time/blocks it takes us to get there, the lower the ratio and the more likely that we are cheating to do it.
Be sure to verify in-game that cheating actually took place!
Please note that someone having a low ratio does not immediately mean they are a cheater. It's possible for ores to just be in a straight line, or for someone to just be in a lucky ore-rich area. On the other hand, a consistent pattern of low ratio ore mining, especially between ores that are very unlikely to be in straight lines (like diamonds) indicates a high cheat probability. I always personally tp to the locations and look for the tell-tale "cheat tunnels" just to verify - this plugin just makes it much easier to focus my attention on likely cheaters rather than manually sifting through lots of logs to find them.
To additionally help make it easy to focus on high-probability cheating, there is a "flagRatio" config option, for which any ratio below this value will append a '[flagged]' to the end of the log entry. By default this is set to 250, which I've found to be reasonable but you can certainly play around with it to find the value that works for you. Thus it becomes a very easy matter to look for possible cheating:
> grep flagged oreLog.txt [Sat Jul 09 09:34:39 PDT 2011] IRON_ORE broken by morganm at (x= -49, y= 31, z= -61, world=world) [t= 54sec / (d= 19 / b= 59) = r=164.1] [flagged] [Sat Jul 09 09:35:09 PDT 2011] IRON_ORE broken by morganm at (x= -51, y= 30, z= -72, world=world) [t= 17sec / (d= 12 / b= 19) = r=26.6] [flagged] [Sat Jul 09 09:35:39 PDT 2011] GOLD_ORE broken by morganm at (x= -50, y= 30, z= -85, world=world) [t= 23sec / (d= 13 / b= 28) = r=49.0] [flagged] [Sat Jul 09 09:35:59 PDT 2011] IRON_ORE broken by morganm at (x= -54, y= 30, z= -95, world=world) [t= 19sec / (d= 10 / b= 24) = r=46.3] [flagged] [Sat Jul 09 09:39:09 PDT 2011] IRON_ORE broken by morganm at (x= 78, y= 34, z= -104, world=world) [t= 28sec / (d= 23 / b= 14) = r=16.8] [flagged] [cave?]
(ps. yes I was actually running an ore cheat to test locally, so this is "real" cheating and as you can see, it caught me)
Additional info
You'll also note the plugin has some minimal cave-detection. This doesn't query a bunch of blocks and looking for actual caves, instead it simply does a basic calculation of the distance vs. the number of blocks broken. If the distance is large and the number of blocks broken is low, it's probably a cave (since they didn't have to break many blocks to get between ores). This is not fool-proof, but I've found it to be pretty accurate and it helps weed out false positives at a glance.
As mentioned before, you won't see the time/block/distance/ratio text on every log entry. The plugin only prints it on block breaks that meet the minimum distance/block criteria as defined in the config file. This helps weed out the majority of block breaks in ore clusters, which are right next to each other. Thus if I just want to get a good feel for the ratio system and weed out the noise, another simple grep proves useful:
> grep 'r=' oreLog.txt [Sat Jul 09 03:35:15 PDT 2011] IRON_ORE broken by Player1 at (x= -786, y= 12, z= 1899, world=world) [t= 127sec / (d= 25 / b= 63) = r=318.8] [Sat Jul 09 03:36:35 PDT 2011] IRON_ORE broken by Player2 at (x= -152, y= 49, z= -249, world=world) [t=1202sec / (d= 3 / b= 403) = r=153182.6] [Sat Jul 09 03:40:45 PDT 2011] IRON_ORE broken by Player2 at (x= -153, y= 46, z= -252, world=world) [t= 249sec / (d= 5 / b= 147) = r=7178.4] [Sat Jul 09 03:42:25 PDT 2011] GOLD_ORE broken by Player1 at (x= -836, y= 13, z= 1893, world=world) [t= 418sec / (d= 52 / b= 86) = r=697.1]
A note on Performance
As I run a server myself, I'm keenly aware that every new plugin I install has a tendency to slow down the server and thus make my server lag and feel sluggish when at max capacity, so I take performance of my plugins very seriously. Minimal processing happens on the main Bukkit thread; it does the bare minimum checks as fast integer comparisons for an ore match and if found, pushes the info into a Queue where it is then picked up by a worker thread that all processing is done on. This means for those of you with beefy multicore systems, this plugin does it's best to take advantage of your additional cores and keep the Main Bukkit thread free to do it's processing in order to keep the server running smooth.
Could you add a feature that add two different logs? One will have all the ores broken and another one could have flags with a user defined amount? It will help me search through the logs to see who is cheating. :)
Yip looking forward to the update :)
Oh dear, it's not liking 1.2. I'd love an update if possible, this plugin is pretty much the basis of my server! Thanks for all of your hard work so far, it's made my life about a million times easier :)
My live server is now on 1.0 Dev as well as new R5 builds. All systems go. Reporting in that everything works :)
Weird the error is "magically" gone lol :P And yes tested version 1.0 and works great :) Thank you!
@andrewkm
Please post all the LogOres startup msgs, here's what I see (no error, v1.0):
Andune: The latest 1.0 dev you posted as dropbox link still gives off the warning on startup: [WARNING] [LogOres] Could not load build number from JAR
@kukelekuuk00
The comment I posted, which is now right below yours says this: "Dropbox link to 1.0 pre-release. This includes R5 update".
Please see that comment for a pre-release that includes R5 update. At the end of that comment it says: 'Report back here if it works and I'll promote this to a full release'. So give it a test, if it works let me know and after a few 'it works' reports I'll make it a full release.
Thanks.
@andune http://pastie.org/3446157 Could you please update for the new Bukkit R5?
@andune
Dropbox link to 1.0 pre-release. This includes R5 update as well as fixes for the build.number error and updates for latest versions of WorldEdit/WEPIF. Please give it a test against the latest dev builds, which I understand are already broken due to deprecation of the old event system. Report back here if it works and I'll promote this to a full release and upload it here for everyone to use.
@Alexcityoffun
This is a benign error. It is a bug, whose sum total effect is that it prints an annoying warning message on startup. It will be fixed when I release an R5-compatible update.
@Bronskee
I have this problem too !
Hi ! I installed your plugin and got this error :
22.02.2012 13:56:42 [INFO] [LogOres] Loading LogOres v0.9.
22.02.2012 13:56:42 [WARNING] [LogOres] Could not load build number from JAR
22.02.2012 13:56:42 [INFO] [LogOres] using PEX permissions
22.02.2012 13:56:42 [INFO] [LogOres]version 0.9, build -1 is enabled
Any solution ?
Thanks !
Can you fix this (if it's a bug):
2012-02-21 05:39:52 [WARNING] [LogOres] Could not load build number from JAR
It's the only warning I can't get rid of. I actually thought this was abandoned because there had never been an update/fix >.>
@kukelekuuk00
This will be updated for the new events. It only hooks one event so it will be a simple update. I've been going through my plugins and updating them, I depend on this plugin just as much as you all do so it will be updated as needed (or before, if I get around to it beforehand). :)
Im curious if this plugin is updated to the new events system as the old one was removed starting CB 1944. Just a headsup before the coming RB which will cause quite the mess
Would be great if we can get an option to limit what is shown in the notifications. My staff dont really care about all the numbers/calculations etc... just that someone was flagged, and how many times, then they go check it out. (The massive report is a chat spam, especially with 200 players online) - Please allow us to customize it :)
@ElgarL
WE, last I checked, only uses WEPIF if you aren't using anything else (that it supports; if you use a permissions plugin that supports Superperms, then WE supports that permissions plugin).
This works amazingly, thank you!
Thanks I'll wait for a fix as no config is ever created. It errors out on the wepif before ever creating any folders/files.
I actually hate that WE has gone the route of it's own perm system. I'll likely dorp it for some alternative in the near future.