DynamicBan
Announcement: Version 1.3.1 is not compatible with current spigot versions!
Announcement: Version 1.3.1 is not compatible with current spigot versions!
A workaround is being worked on.
- Posted on (10.10.2014) by DJ Addi
- Kick, ban, IP-ban or range-ban players
- Temporarily ban or IP-ban players
- Automatically punish players that are blacklisted by DNSBL services
- Warn players and execute commands after a certain amount of warnings
- Get notified when two players with the same IP adress join or compare IPs manually per command
- Lock IPs to a single name
- Recieve a list of all players and their IPs from the console
- Make players immune to all commands or whitelist them to protect them from bans
- Check a player's status including warnings, kicks, bans, temporary bans and more
- Send players information about their own warnings whenever they login
- Purge a player's data with a simple command
- Fully costumizable messages for everything including broadcasts
- Only explicit autocomplete for safer administration
- Update notifications
Command | Arguments | Description |
---|---|---|
dp | [Name] | Displays details for the given player. |
dk | [Name] [Reason] | Kicks the specified player. |
db | [Name] [Reason] | Bans a player's name. |
dbip | [Name] [Reason] | Bans a player's IP. |
drb | [Name] [level:1/level:2/level:3] [Reason] | Bans a player's IP range. |
dub | [Name] | Unbans a player's name.. |
dubip | [Name] | Unbans a player's IP. |
durb | [Name] | Unbans a player's IP range. |
dst | [Name] (1/2) | View detailed information about warns and bans. |
dtb | [Name] [Time eg. 1h:2m] [Reason] | Temporarily bans a player's name. |
dtbip | [Name] [Time eg. 1h:2m] [Reason] | Temporarily bans a player's IP. |
dim | [Add/Remove][Name] | Adds or removes a player's immunity to DynamicBan commands. |
dwl | [Add/Remove][Name] | Adds or removes a player from the whitelist which protects the player from bans. |
dw | [Name] [Reason] | Warns the specified player. |
dpg | [Name] [data,warns,kicks] | Resets a player's data. |
drl | Reload the DynamicBan data. | |
dlist | View a list of online player's IPs. (Console only) | |
dc | [Name] [SecondName] | Compare the IPs of the specified players. |
dl | [IP] [Name] | Locks the specified IP to a name. |
dul | [IP] | Unlocks the specified IP. |
dm | [Name] [Time eg. 1h:2m] [Reason] | Mute the specified player. |
dum | [Name] | Unmute the specified player. |
Permission | Granted |
---|---|
operator or dynamicban.* | All commands |
dynamicban.ban.player | db |
dynamicban.ban.ip | dbip |
dynamicban.ban.range | drb |
dynamicban.immune.add | dim add |
dynamicban.immune.remove | dim remove |
dynamicban.whitelist.add | dwl add |
dynamicban.whitelist.remove | dwl remove |
dynamicban.purge | dpg |
dynamicban.kick | dk |
dynamicban.player.details | dp |
dynamicban.player.standing | dst |
dynamicban.reload | drl |
dynamicban.tempban.player | dtb |
dynamicban.tempban.ip | dtbip |
dynamicban.unban.player | dub |
dynamicban.unban.ip | dubip |
dynamicban.unban.range | durb |
dynamicban.warn | dw |
dynamicban.mute | dm |
dynamicban.unmute | dum |
dynamicban.lockip | dl |
dynamicban.unlockip | dul |
dynamicban.check | Same-IP notifications |
dynamicban.compare | dc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | # DynamicBan 1.3.1a - Comprehensive Administration System. config: check_for_updates: true # Do you want to check for updates? plugin_tag: '&0[&3DynamicBan&0]&f: ' # How do you want the plugin messages to be tagged? ('' to deactivate) broadcast_on_kick: true # Do you want to broadcast kicks? broadcast_on_ban: true # Do you want to broadcast bans? broadcast_on_ipban: true # Do you want to broadcast ipbans? broadcast_on_tempban: true # Do you want to broadcast tempbans? broadcast_on_iptempban: true # Do you want to broadcast iptempbans? broadcast_on_same_ip: true # Do you want to broadcast when two players have the same ip? broadcast_on_mute: true # Do you want to broadcast mutes? broadcast_on_unmute: false # Do you want to broadcast unmutes? broadcast_on_warn: true # Do you want to broadcast warnings? broadcast_on_rangeban: true # Do you want to broadcast rangebans? broadcast_on_unban: false # Do you want to broadcast unbans? warns_timeout: 72 # How many hours do you want to keep warnings? (0 to keep warnings permanently) warns_on_login: true # Should players be informed about their warnings after they logged in? warns_on_login_delay: 0 # By how many seconds should the warning notification be delayed? (0 to deactivate) connections_per_ip: 5 # How many connections do you want to allow per ip? (0 to deactivate) messages_per_ip: 3 # For how many connections from the same ip should the join and leave message be shown? (0 to deactivate) op_immune_bypass: false # Allows OPs to bypass the immunity of players. mute: blocked_commands: # When a player is muted, what commands should be disallowed? - msg - tell - r - er dnsbl_services: - zen.spamhaus.org - dnsbl.sorbs.net # Which DNSBL services do you want to be checked? dnsbl_result: none # What should happen when a blacklisted ip attempts to join? (none, kick, ban, ipban, notify) tempban_limits: dynamicban/tempban/limit/minute: 60 dynamicban/tempban/limit/hour: 3600 dynamicban/tempban/limit/day: 86400 # Do you want to define permission nodes to limit the maximum tempban length? allow_offline_players: true # Do you want to allow Bukkit to handle offline UUIDs if they don't have a normal one? enable_bukkit_bans: true # Do you want to enable the Bukkit bans as backup? convert_to_uuid: true # Do not change this! messages: # Variables are {SENDER}, {REASON} and {TIME} for temporary actions kick_message: "You have been kicked by {SENDER}. Reason: {REASON}" # The kick message. mute_message: "&cYou have been muted by {SENDER}. Time left: {TIME}" # The mute message. unmute_message: "&bYou have been unmuted by {SENDER}." # The unmute message. ban_message: "You have been banned by {SENDER}. Reason: {REASON}" # The ban message. tempban_message: "You have been temporarily banned by {SENDER}. Time left: {TIME}" # The tempban message. ip_tempban_message: "You have been temporarily ip-banned by {SENDER}. Time left: {TIME}" # The tempipban message. ip_ban_message: "Your IP has been banned by {SENDER}. Reason: {REASON}" # The ipban message. warn_kick_message: "You were kicked after multiple warnings." # The warnkick message. locked_ip_message: "That IP has been locked to another player." # The iplock message. ip_connections_message: "Too many players connected from your IP." # The iplimit message. rangeban_message: "Your IP-range has been banned by {SENDER}. Reason: {REASON}" # The rangeban message. muted_message: "&cYou cannot talk, you have been muted. Time left: {TIME}" # The message to send to the player when he/she is muted and attempts to send a message. muted_command_blocked: "&cYou cannot perform that command, you have been muted! Time left: {TIME}" # The message to send to the player when he/she is muted and attempts a blocked command. broadcast_messages: # Variables are {PLAYER}, {SENDER}, {REASON} and {TIME} for temporary actions kick_message: "&b{PLAYER} has been kicked. Reason: {REASON}" # The broadcast message when a player is kicked. mute_message: "&b{PLAYER} has been muted. Time: {TIME}" # The broadcast message when a player is muted. unmute_message: "&b{PLAYER}'s mute has been removed." # The broadcast message when a player is muted. ban_message: "&b{PLAYER} has been banned. Reason: {REASON}" # The broadcast message when a player is banned. tempban_message: "&b{PLAYER} has been temporarily banned. Time: {TIME}" # The broadcast message when a player is tempbanned. ip_tempban_message: "&b{PLAYER} has been temporarily ip-banned. Time: {TIME}" # The broadcast message when a player is iptempbanned. ip_ban_message: "&b{PLAYER} has been ip-banned. Reason: {REASON}" # The broadcast message when a player is ipbanned. warn_message: "&b{PLAYER} has recieved a warning. Reason: {REASON}." # The broadcast message when a player is warned. rangeban_message: "&b{PLAYER} has been range-banned. Reason: {REASON}" # The broadcast message when a player is rangebanned. unban_message: "&b{PLAYER}'s ban has been removed." # The broadcast message when a player is unbanned. other_messages: immune_message: "&cThat player is immune to your command!" # The message the commandsender will recieve if a player is immune. warned_message: "&c{SENDER} warned you. Reason: {REASON}." # The message to send to the player when he/she is warned. same_ip_message: "&b{PLAYER} logged in on the same IP ({IP}) as {OLDERPLAYER}." # The message to send to players with permission/op when the are two or more players with the same ip. dnsbl_ip_message: "&b{PLAYER}'s ip is blacklisted." warnings_message: "&cYou have been warned for the following reason(s):&b{WARNS}&cYou have {AMOUNT} warning(s)." # The message to send to players if warns_on_login is true. Each warning will be sent in a new line. default_reason: "&cUnspecified" # The default reason for everything. dnsbl_reason: "&cYour ip is blacklisted." # The default reason for DNSBL bans. |
- MySQL
Information on further development
Hey guys, DJ Addi here. With version 1.3.0 the plugin reached a point where I'd say it is more or less finished. If there are bugs or important features that require an update I will release a new version as fast as possible (without waiting for stuff to pile up). However, it is unlikely that new big features will be added (unless I really like them so keep the suggestions coming).
Stay tuned for updates on the release of DynamicBan 2.0.
Currently working on:
- Cleaning up database code, adding missing comments to other classes
- Moving ban-types to separate tables to allow future scalability (We cannot easily append missing fields, but we can add on missing tables if a new feature is added).
Please add MySQL. We run 4 Servers and its important to sync the bans. Would be really nice to see this feature as soon as possible
@djaddi
Yeah, I know they are relatively slow. But the uptime isn't that bad, and I'd rather stick to the official servers, only my personal opinion.
Perhaps later I can give the user the option to switch between fetchers, but for now I will retrieve them using the official server. To work around the blocking nature of those calls (why do they run on the main thread?) we can run them as an async task or separate thread I guess.
If it comes to it, I will write my own. I think the best approach might be to use the one you sent, if it is unavailable, fallback to the Mojang servers. Let's see.
@xDrapor
I downgraded to 1.7.8 where it's compatible with all of 1.7...should be fixed until you guys update to DynamicBan2 and when I update 1.7.9. Best of luck to you guys :)
@djaddi
Essentials is a good plugin...but DynamicBan is better for bans as you can warn people. Perhaps adding Jails to DynamicBan could be a cool update :)
Hey everyone, sorry for this but I won't be able to finish the update this week. The main problem (for those who care) is that currently, all UUID lookup methods for offline players block the main thread (which basically means that your server will lag until the UUID is fetched or the request timed out), which is a serious issue due to Mojang's servers being very unstable. I'm working on a solution, but it'll take some more time.
@xDrapor
Actually, I changed the priority of our listeners a while ago because Essentials started overriding ours back then. A specialized plugin should always have a higher priority than a general (multitool) plugin.
The thing is... evilmidget's UUID fetcher is still based on Mojang's server and - as mentioned above - that kinda sucks. Also, Server#getOfflinePlayer(String name) basically does the same thing (in the main thread, but I think that'll be changed soon(tm)). There currently is a faster server here. I could explain what I have in mind right now... but I guess I'll just send you the code when it's done.
Have fun,
Addi
@djaddi
I think its moreover that he's using 1.7.9, where bans use UUIDs. As far as I remember DB only checks by usernames for normal bans, it will be fail the "banned" check (our listeners run before Essentials, they allow overriding based on priority), and pass on to the Essentials listener or whatever.
P.S: You might find this class useful, I implemented it to save time coding a UUID fetcher from scratch http://forums.bukkit.org/threads/player-name-uuid-fetcher.250926/ (I believe they will deprecate fetching UUIDs by name server side, and finally remove the method altogether, so best we start early to workaround it)
You will have to modify the way it stores names and fetches names so case can be ignored when retrieving.
Update on DynamicBan2:
I've figured out the new UUID system, and gotten MySQL working perfectly. Adding some fixes, commenting and implementing localization + flatfile before pushing the first commit to the repo. Once the majority of features have been migrated, I will setup a Jenkins server for dev builds before the final release to make sure the official release is as bug-free as possible.
@Z609
It's most likely just Essentials messing around with priorities (again) in order to override every other plugin (I don't know why they keep trying to do that). I'll look into it.
@djaddi
Something's going wrong with the server I am running. If I ban someone the message appears successfully with my custom ban reason I set in the config.yml. However, when banning someone for an actual reason (/ban alzeller1 Being a noob), and I try to join, it shows an Essentials Ban message like:
Banned: The Ban Hammer has spoken!
Perhaps it is a glitch with 1.7.9. Perhaps an update is necessary. I made sure there are no issues with my config.yml. Please hurry, this is URGENT!!!
@djaddi
I own a cracked server, so it won't really affect me, but it might affect other servers that are premium.
@djaddi
Thanks dood. Really looking forward to this.
Can you possibly add reasons for tempbans and tempipbans?
And can you also add support for multiple lines on the ban messages like:
Where it has multiple lines? I'm trying to get something similar to that using your plugin.
Anyways, great plugin! Keep up the good work! Using it on my server and have been for 1 year! <3
@xDrapor
That's great to hear.
I started coding the update for the name to UUID conversion. Old name-based bans are definitely going to be lost after the update, but at least they'll work from that point on. I hope that I can get it done by this weekend or early next week. GeoIP support propably won't make it in. Have fun,
Addi
Dynamicban - best ban system at dev.bukkit
I never play Minecraft, nor have as much time. However, my programming skills have vastly improved since I first developed this plugin; this was one of my earliest java-based projects.
I am now also fluent at PHP, MySQL and a few other languages, which means I can also finally implement MySQL with ease and other cool stuff.
This being said, I will slowly, but gradually begin actual work on DynamicBan2. This is a busy time for me, but I will push commits when I can. Github will be linked in due time.
Thanks for keeping up with the other updates @djaddi and generally keeping the plugin alive! It's much appreciated. Hopefully I will be seeing you pushing commits to the 2.0 repository :)
Need update, time bans doesn`t work (can`t be unbanned, because new json system?)
when we can see dev build?
Because it`s best ban plugin o_O
@Z609
Oh jeez, sounds like trouble. Well, the good news is that IP bans won't be affected.
EvilSeph said on the latest blog post at bukkit.org: Up until this switch to UUIDs, Minecraft has relied on names for many of its core systems (bans, the whitelist, ops, etc.) and plugins have used names for permissions and protections. Once Mojang allow players to change their names at will with Minecraft 1.8, these systems’ accuracy can no longer be relied on. For Minecraft, Mojang have said they'll be handling the transition of bans, whitelist, etc. for the most part, but most Bukkit plugins will need to be updated to use UUIDs to track players instead of names.
To prepare servers for the switch to UUIDs, server admins should perform an audit on their plugins to determine which ones currently use names for player identification. It is recommended that server admins communicate with the developers of the plugins that they use to ensure that they're preparing for the switch to UUIDs. The types of plugins that will likely be affected include (but are not limited to): permissions, region protection, world protection, chest protection, ownership, teleportation, economy, chat, and ban management plugins.
Basically, it comes down to this: neglecting to prepare for the switch to UUIDs is the equivalent of running your server in offline mode. With player names no longer being static, anyone could potentially pick up an Admin's username and take over your server or bypass your protections.
View more information at this link. Please be ready for this, xDrapor and djaddi! Having tons of servers break because of Mojang's small change can cause people to stop using your plugin! I solely rely on your plugin, please make sure to try and get it updated in time!
Nevermind, It was because I didn't have Vault. It works now. Thanks!
The only error message it gives me is: [21:12:48 ERROR]: Could not load 'plugins/DynamicBan (1).jar' in folder 'plugins'
I am running in CraftBukkit 1.7.5 Dev Build.