Heimdall
Description
Heimdall anti-grief is a plugin that watches new players when they first login to your server and looks for griefing patterns. If the griefer does enough damage to go over your defined threshold, they will be automatically banned and their damage rolled back. This is accomplished through hooking a block logging plugin, the first of which will be LogBlock.
Primarily I'm writing this for myself, so I am not necessarily interested in a bunch of feature ideas (sorry). My goal with this plugin is to automate the work that my mods have to do when they follow griefers around invisible and then LogBlock verify and ban them for griefing. If I can weed out 80%+ of the griefers automatically, then this plugin has accomplished what I set out to do.
Heimdall Beta Released!
Heimdall is now in beta, you can click on the Files tab to download v0.6, when Bukkit mods finish the file approval. Here are a few notes about this beta release:
- It is available only in passive "notify-only" mode. This allows your mods to receives notifications when griefing is occuring.
- It depends upon LogBlock to be useful at all (LogBlock queries are used to establish block ownership)
- It will hook LWC (if you use it) and automatically ignore anything related to public chests
- This is beta, there is very little documentation available right now. But if you're willing to play around with it a bit or know how to open a plugin.yml to find out what commands are available, it's very usable in it's current state
Author's configuration
The author of Heimdall has been using this plugin since it was first written in early January of 2012. It has transformed the way mods deal with griefers on our server. We used to go invis and follow new players around to watch for bad behavior, which was a full time job considering 7 of 10 people who login immediately set to griefing. Now, the mods continue their normal activity and if someone starts griefing, they get Heimdall alerts and respond to it then.
Heimdall is part of my "defense-in-depth" strategy against griefers. I employ the following plugins as part of that strategy:
- LogBlock: Rollback any griefer damage. Heimdall also uses this to determine block owners.
- Honeypot: weed out griefers automatically, works amazingly well.
- LoginLimiter: I have my server setup to not allow new player logins when no mods are on. When the last mod logs out for the night, the server goes into "auto new player lockdown". Additionally, this plugin lets me limit the guest:mod ratio so a single mod doesn't get overwhelmed with too many guests.
- Heimdall: Since LoginLimiter means a mod is always on when new players are, Heimdall fills in to notify the mods of any griefing behavior by monitoring all guest activity. It additionally logs this behavior in an easy-to-access log that can be reviewed using the '/hdgl' command (Heimdall GriefLog). In the future, of course, Heimdall will be able to respond and ban automatically.
Installation
- Download Heimdall.jar, copy into your plugins directory
- Restart Bukkit or live-load using PlugMan, PluginReloader or similar
- Edit config.yml and engine configs to your liking
- Restart/reload for config changes to take effect
Performance
With plugins that deal with every block break, performance is always a consideration. I'm keenly aware every new plugin I install can slow down my server, so when writing my own, I go out of my way to make sure they have the smallest performance impact possible. For this plugin, that is achieved by using a circular buffer for block events (this means new objects don't have to be allocated every time a block is broken/placed) and then the buffer is processed asynchronously in a separate thread, meaning for anyone with at least 2 cores, this plugin will have almost zero impact on your server performance.
Does this show if player opens a chest? Cause i was looking for a plugin that tracks players activity and i need to be sure about the plugin or does your ActivityTracker does that?
Would you be interested in adding CoreProtect next? I've had a few people poking about that.
Another vote for prism.
Anyway to get it compatible with Prism?
@andune
ah the last you said there, is a good idea. I i have an idea who will be worthy hehe. Yes griefprevention has an ability to trust friends and heimdall sees it asap, when /trust player is used. NP there. Ill try /hdi if that can hide the alerts.
@fungreenfox
I've never seen naturalgrow events, but it seems likely that's newly added since I last worked on it, or perhaps unique to your LogBlock configuration. I'd bet all you have to do to fix that issue is add "NaturalGrow" to the ignored list of players for the LogBlock history manager, link to github here. All of my plugins are built with maven, so building them is a simple matter of running "git clone" to copy the repository to your machine and then "mvn package" to build the JAR. Feel free to add NaturalGrow to the list and give it a test in your environment.
Heimdall does for sure have false positives, the most often I remember seeing was the occasional null owner alert. I don't recall if that was fixed or not.
However, specific to GriefPrevention (don't know what this is, assuming from your description it's a land claim sort of plugin), there's no magic hook in Heimdall to ignore griefing on those plots. Adding one would of course eliminate any false positives. In the mean time, it's possible your LogBlock histories have someone else as owning that block, or that you're seeing the null-owner type bug, not really sure.
Do note that if you trust a player not to grief, you can "/hdi" to temporarily ignore alerts from them. Or better still, promote them to a trusted rank that Heimdall doesn't monitor. On my server, Heimdall only monitors new players for griefing. Once we've promoted them to a regular player, we don't monitor them anymore.
Right, seems very fair, and my ops also want to just notice incoming incidents too.
May i please add some info?
When watching some players waking around among nature and wilderness, i noticed "player griefing "naturalgrow" .. well, naturalgrow is not a person. Can i add ALL ppl to bypass naturalgrow, or should i add leaves or somethiing to the list?
Normally, HD will accept a trust to a GP claim as friend, but i noticed a player griefing on his own ground, with a Griefprevention claim at it too. How can this be possible? False positive?
@fungreenfox
If you add a friend, Heimdall will no longer alert on blocks between friends. It has an automated system whereby if it notices people building near each other, it will suggest that they might be friends and allow them to friend each other. This avoids spam when a group of friends login to a server and start building together, you won't get alerts from them working on their shared structure.
You can manually friend someone as it often happens that one person joins and days, weeks or months later they have a friend join and start helping them; once you know they are friends, you can use the /heimdall admin command to tell Heimdall about the friendship so it stops alerting you.
Regarding banning of griefers, no. That was this plugins original intent, but after I wrote the automated alerting piece, my mods asked me not to build the auto ban piece. They liked having something to do by looking into and responding to grief events. While I still like the idea of the auto ban, at this time I'm not actively working on Minecraft plugins beyond keeping mine maintained in their existing state, so it won't be added anytime soon unless some other dev decides to pitch in and write it.
Right now Heimdall serves as a very good notification system of griefing that might be happening on your server. It requires some tuning to weed out false positives (like setting common shared farm items like wheat to 0 points), but once in place, it's a very reliable notification of griefing events.
@andune
Thanks for a very good answere.
What happens generally, when i add a friend from ingame?
Is banning of a griefer enabled, and when will it ban /kick? I have made a test but did not get banned. My server is using Serubans, it has it own ban and kick plugins, i believe, but they are still the same written cmd's.
@fungreenfox
That's as it should be: the block ownership hasn't changed if you restore something through a block logging tool (such as LogBlock) or WorldEdit. If you restore it to it's original state and someone else comes through and griefs the same blocks, you should still get notified.
Regarding blocks in main.yml: just add the ids you want. The ones in the default config are just some defaults. Any block id not in main.yml defaults to 1 point. So if, for example, you decide you don't ever want to be notified about sand, you could set it to 0 points. Or perhaps you still want to know if someone steals sand, but you don't want a ton of notifications, you could set it to 0.1, so someone would have to break 10 blocks in order for a whole point to be accumulated.
Last, Heimdall has a notification anti-spam feature built into it, so if someone is destroying dozens of blocks of sand in a very short time, you might only get one notification: I think it's one notification per 10 seconds. Although I had always intended to make it configurable, I think it's still hard coded at 10 seconds right now.
One item on the "todo" list that was never coded was the ability to exclude warnings for a specific WorldGuard region. The idea being you could set large shared regions (with pass_through set) where you don't care if someone griefs and you want to exclude that region from notifications. I never implemented it because we didn't have a need for it on our server and no users of Heimdall ever asked for it; no point in coding features that no one is going to use. :)
If an operator is getting notifyed, and he restores an isle using Worldedit, he will get notifyed everytime someone is breaking a piece of sand there.Could be a lot of spam. Sand 12 or sandstone is not to be found in main.yml, but it warns anyway.
@andune
At first glance I am getting errors with any command I type.
Oh waw andune you make my day! Can't wait to play with it. Just updating my whole server to 1.5.1 atm since ive been absent for a while. Thanks again!
@yaguznal
v1.7.2, tested against CraftBukkit 1.5.1 has just been released. It will be available here whenever the Bukkit admins approve it.
If you get Heimdall working for 1.5, maybe you can publish the jar here? If you don't want to bother with the paperwork, I'd be a real happy chap if you'd send it to me :)
Great andune! Thank you very much!
@yaguznal
Hmm, that's an error related to a change in 1.4.6 when the Bukkit team changed the method signature of JavaPlugin. I may have to eat my words here, maybe the latest version *isn't* running against 1.4.7.
I do know that Heimdall it is running fine on my 1.4.7 server. Which means if the latest version available here on DBO isn't working, it's because I fixed the issue and then just deployed it on my server and forgot to release it here.
I'll do some testing with the latest version here on DBO to confirm whether or not it's working against 1.4.7 and if not I'll package up a working release. I may have a chance to do that this weekend, I'll post an update with what I find.
I dont mind doing a little experimenting and finding out but the error the console spits out when trying to load heimdall is beyond my capabilities. I have filed a ticket but all there is to it is this error: http://pastebin.com/pidJUb2Q Maybe it's something I did, in which case it's an easy fix. If not .. I don't want to pressure you into anything so I'll try to find another way to protect my sever.
@yaguznal
Heimdall is working on 1.4.7, it's a critical component of my servers anti-grief measures. Its only supported log plugin right now is LogBlock.
As to future development, the truth is I don't play MC anymore and mostly am too busy with other things to develop for it like I once did, though I still stay in touch with my server and would fix any critical issues. Heimdall spits out the occasional benign exception, but for the most part, it just chugs along like a champ and hasn't needed much work since the last version I released however-long-ago.
So there haven't been any new releases because I just don't have the time / motivation to work on it right now, and also in large part because the current version fulfills it's purpose so effectively on the server I originally wrote Heimdall for (my server).
I still enjoy coding when I have time to do it and have future ideas for Heimdall that I never got to finish, whether or not I'll ever get back to it is an open question.. But in the mean time, if you're an admin that doesn't mind a little do-it-yourself work (there's practically no documentation), Heimdall's most recent release is still running great.
Hello andune!
Glad to see you pick up this project again. I think this is the solution to alot of griefing problems.
I would love to use this so I'm wondering if it works with 1.4.7 and possibly Coreprotect. If not, I might even switch my blockprotection plugin to one that works with Heimdall.