Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
307 commits
Select commit Hold shift + click to select a range
4bee5c4
feat(discord): added sponge support via magibridge
confuser Mar 3, 2020
d703a7a
release: v7.0.1
confuser Mar 3, 2020
5ebc827
chore: prepare next release
confuser Mar 4, 2020
8f265e0
chore: remove unused dep
confuser Mar 4, 2020
a7b2d3b
fix: global command reason parsing
confuser Mar 4, 2020
1157305
fix: missing addnoteall message
confuser Mar 4, 2020
1e6f9f9
chore: remove InetAddresses validation in favour of IpAddress
confuser Mar 4, 2020
a24c353
chore(deps): remove lang3
confuser Mar 4, 2020
2b18469
fix: migrate to gson maxmind reducing jar size
confuser Mar 4, 2020
1999335
chore: catch invalid ip addresses on ban load
confuser Mar 4, 2020
ed1424c
chore: catch invalid ip addresses on storage loads
confuser Mar 4, 2020
4e40b84
chore(bukkit): catch/log command registration failures
confuser Mar 4, 2020
f2d123c
fix(sponge): downgrade bStats to 1.4
confuser Mar 7, 2020
1bdcd2c
release: v7.0.2
confuser Mar 7, 2020
523163c
chore: prepare next release
confuser Mar 7, 2020
5ad5d65
fix: ban and mutes broadcasting
confuser Mar 7, 2020
a0c88d8
release: v7.0.3
confuser Mar 8, 2020
c9e1d41
chore: prepare next release
confuser Mar 9, 2020
ad0f52e
fix(bukkit): added permission check to commands
confuser Mar 9, 2020
93cb7d3
fix(bukkit): command lookup
confuser Mar 9, 2020
2e9d9b0
fix(bukkit): permission denied formatting
confuser Mar 9, 2020
f225dd8
release: v7.0.4
confuser Mar 11, 2020
67b3319
chore: prepare next release
confuser Mar 18, 2020
f878feb
fix: lookup actor via uuid to prevent issues with duplicates
confuser Mar 18, 2020
2ea4406
fix: do not update console name if already exists
confuser Mar 18, 2020
3bfa27c
feat(discord): notify on kicks and ip bans
confuser Mar 18, 2020
b7e2c1b
fix: lookup actor via uuid to prevent issues with duplicates
confuser Mar 19, 2020
8e4331e
feat: added tab completion to reasons and block invalid reasons confi…
Joo200 Mar 20, 2020
689aafb
fix: removed INET6_NTOA from bmactivity
confuser Mar 22, 2020
71292c8
feat: added [players] to discord ip ban notifications
confuser Mar 22, 2020
4f5aeac
feat: added baniprecords to /bmclear
confuser Mar 22, 2020
589603d
fix: baniprecords clear permission typo
confuser Mar 22, 2020
7cfd2de
fix: ip ban and mute sync comparisons
confuser Mar 22, 2020
dd95c94
fix: temp mute NPE and expose IP-related mute actions in API (#859)
mxs42 Mar 27, 2020
8bb7edc
fix: correctly handle tab complete for multiple reasons in one comman…
mxs42 Mar 29, 2020
f9a3b02
fix: command blocking when muted
confuser Mar 30, 2020
3b98c2a
fix: map chatPriority values to Sponge Order
confuser Mar 30, 2020
dd442e6
fix: list reports with newest first
confuser Mar 30, 2020
c905ee2
feat: added /bmutils duplicates [UUID] [newName]
confuser Apr 3, 2020
e6bae18
chore: reference FAQ on duplicate found warning
confuser Apr 4, 2020
fc5fb55
fix: reports list and on join not querying correct state
confuser Apr 7, 2020
d490764
fix: always put player names into autoCompleteTree (#866)
mxs42 Apr 13, 2020
e90d1b8
feat: allow JSON messages (#865)
mxs42 Apr 13, 2020
dc66c8b
fix(test): use UTC explicitly for DateUtils tests (#867)
mxs42 Apr 14, 2020
9c8862c
release: v7.1.0
confuser Apr 16, 2020
b2533f9
chore: prepare next release
confuser Apr 17, 2020
2aff27d
fix: ignore cancelled AsyncPlayerPreLoginEvent events (#868)
mxs42 Apr 17, 2020
94fb729
chore: bump sponge dependency
confuser Apr 17, 2020
cd19a1f
fix(sponge): do not create players on cancelled auth event
confuser Apr 17, 2020
66977a3
fix: do not notify player when unmuting soft mute (#869)
mxs42 Apr 18, 2020
690140d
fix: only disable common plugin if enabled
confuser Apr 19, 2020
4001ef5
fix: change bukkit command registrations
confuser Apr 19, 2020
37e57aa
fix: handle unknown players in /alts
confuser Apr 22, 2020
1a7e604
fix: /alts colours and click commands
confuser Apr 22, 2020
ac0f818
fix(bungee): message colours
confuser Apr 22, 2020
33a43c1
fix(bungee): duplicate join notifications
confuser Apr 22, 2020
81f03fe
feat: added [notes] to info.stats.player
confuser Apr 22, 2020
b014560
feat: added [player] to info.connection message
confuser Apr 24, 2020
0103337
release: v7.1.1
confuser Apr 24, 2020
6e611e5
chore: prepare next release
confuser May 2, 2020
d72305e
feat: added report hook
confuser May 2, 2020
8ea80ee
fix: temp player bans/mutes records
confuser May 3, 2020
8d4b670
feat: broadcast soft mute messages
confuser May 3, 2020
c045c91
fix: global sync duplicate errors
confuser May 9, 2020
2e3730b
fix: bminfo with no args runs against player executing command
confuser May 9, 2020
7694336
fix: unban and unmute not showing usage
confuser May 9, 2020
f22f7d1
fix: force bad ip values to 127.0.0.1
confuser May 9, 2020
955c809
feat: added cooldowns to some punishment commands
confuser May 9, 2020
966cadc
release: 7.2.0
confuser May 10, 2020
f2d7ef2
chore: prepare next release
confuser May 14, 2020
b2b6bdc
fix: typo in temp ip ban causing async kicks
confuser May 14, 2020
01a5aa3
fix(sponge): api dependency
confuser May 15, 2020
b27d453
fix: save lastChecked on shutdown
confuser May 15, 2020
aec3972
fix: ip unbans not being removed from memory correctly
confuser May 15, 2020
9118a7b
fix: unban/unmute reasons are optional again
confuser May 15, 2020
313bc98
fix: global sync kick NPE in certain scenarios
confuser May 15, 2020
592b61e
release: 7.2.1
confuser May 15, 2020
d5b6605
chore: prepare next release
confuser May 16, 2020
10b99ea
fix: NPE on global temp ban kicks
confuser May 16, 2020
0c66585
fix(discord): warning notifications
confuser May 20, 2020
3766d36
fix: slf4j warning on start up
confuser May 30, 2020
dfb3a84
fix(bungee): chat listener registration
confuser Jun 12, 2020
e5af1ec
fix: duplicates command usage showing /bmutils twice
confuser Jun 12, 2020
3d0042c
fix: duplicates name change regex
confuser Jun 12, 2020
8b40421
release: 7.2.2
confuser Jun 12, 2020
e0e2828
chore: prepare next release
confuser Jun 12, 2020
015fded
feat: support latest WebEnhancer addon
confuser Sep 17, 2020
34909fb
fix: reports list running sync
confuser Sep 17, 2020
a50320e
fix: rollback type argument
confuser Nov 7, 2020
de97df5
fix: rollback invalid type messaging
confuser Nov 7, 2020
146a244
fix: expose connectionTimeout & maxLifetime connection options
confuser Jan 23, 2021
550e445
fix: syntax
confuser Jan 23, 2021
9261282
feat: discord notifications on unbans/unmutes
confuser Jan 24, 2021
01b0d8f
fix: ty to interpret /bminfo arg as username before IP address (#909)
lekro Feb 2, 2021
57f5d5d
feat: use DiscordSRV webhooks to show actor name/avatar
confuser Feb 6, 2021
ac88cf2
feat: use MagiBridge webhooks to show actor name/avatar
confuser Feb 6, 2021
7f8e4e9
feat(deps): bump HikariCP to v4.0.1
confuser Feb 6, 2021
f66d553
feat: remove leakDetection from new installations
confuser Feb 6, 2021
b8031e0
feat: update mysql props to recommended settings
confuser Feb 6, 2021
6b83a40
feat: added allowPublicKeyRetrieval to config connection setting
confuser Feb 6, 2021
c2ba044
fix: syntax
confuser Feb 6, 2021
936fbb4
feat: migrate from travis to github actions (#910)
confuser Feb 6, 2021
d392870
fix(sponge): bminfo website opens link on click
confuser Feb 6, 2021
5c530a9
fix: unban/unmute commands broadcasting when silent
confuser Feb 6, 2021
b02d1b8
release: 7.3.0
confuser Feb 6, 2021
af3b414
fix: missing report state default value
confuser Feb 7, 2021
b59a135
release: 7.3.1
confuser Feb 7, 2021
291436f
chore: prepare next release
confuser Apr 8, 2021
fd20dfa
fix: h2 player name case sensitivity
confuser Apr 8, 2021
7f74a9a
test: h2 player name sensitivity
confuser Apr 8, 2021
ce546ec
deps: downgrade MagiBridge
confuser Apr 8, 2021
7b583ef
fix: use correct player name for report closed message (#916)
TrekkieEnderman Apr 19, 2021
704acc7
feat: storageType case insensitive
confuser May 24, 2021
210cab8
chore(deps-dev): bump junit from 4.12 to 4.13.1 (#903)
dependabot[bot] May 24, 2021
8da0546
chore(deps): bump mysql-connector-java from 8.0.15 to 8.0.16 in /comm…
dependabot[bot] May 24, 2021
41679e2
chore: prepare for next release
confuser May 24, 2021
93b3002
feat: added BmAPI.toTimestamp method
confuser May 24, 2021
59c0bcd
feat: added ignoreSilent option to discord.yml
confuser May 24, 2021
c42d607
feat: bump bstats to v2 (#922)
confuser May 24, 2021
125bf04
fix(bungeecord): broadcast NPE
confuser May 26, 2021
6270d65
feat: added timeAssociatedAlts to ignore old ip address associations
confuser May 26, 2021
d7a8c7d
feat(bukkit): added PlaceholderAPI support (#923)
confuser May 26, 2021
94e093e
feat: broadcast when an alt joins
confuser May 26, 2021
a705e53
feat: added punishment [id] token to messages (#924)
confuser May 26, 2021
20136c6
fix: allow /reports info to be run from console
confuser May 28, 2021
bc6af7a
fix: support allow/deny types instead of white/blacklist in geoip
confuser May 29, 2021
37d7329
fix: removed unused warningCooldown option, use cooldowns instead
confuser May 29, 2021
8239141
fix: removed unused incorrectFlagUsage message
confuser Jun 2, 2021
7c7eb53
fix: bminfo ip history dateTimeFormat message
confuser Jun 2, 2021
66d4df0
fix: typo in default info indexRequired message
confuser Jun 2, 2021
543a627
feat: specify api-version
confuser Jun 5, 2021
c94447e
feat: bump ipaddress dep
confuser Jun 5, 2021
2be32aa
feat: block muted players using signs and books
confuser Jun 5, 2021
c50ce48
fix: reports help not showing sub command
confuser Jun 5, 2021
c9f4e5a
feat: bump snakeyaml dep
confuser Jun 5, 2021
9d404bf
feat: allow uuid/name fetching to be configurable
confuser Jun 5, 2021
88a5bf9
release: 7.4.0
confuser Jun 5, 2021
abb2561
chore: prepare for next release
confuser Jun 7, 2021
9195655
fix: sponge bstats initialisation
confuser Jun 7, 2021
7b99c56
release: 7.4.1
confuser Jun 7, 2021
20623b1
chore: prepare for next release
confuser Jun 12, 2021
8d04743
feat: bump lombok
confuser Jun 12, 2021
a9f61c1
fix: alt checking
confuser Jun 13, 2021
7a863e1
fix: ban ips notification when no players associated
confuser Jun 13, 2021
2338e92
feat: implemented /bminfo <ip> support
confuser Jun 13, 2021
dbf3a21
feat: added new ip info perms
confuser Jun 13, 2021
2077918
feat: support geysermc names in bminfo
confuser Jun 25, 2021
9d1f497
release: 7.5.0
confuser Aug 1, 2021
581adaa
chore: prepare for next release
confuser Aug 24, 2021
a8313ff
fix: ignore bStat failures on start up
confuser Aug 24, 2021
ff9c6e2
chore: remove unused imports
confuser Aug 24, 2021
2e50a8d
chore: removed unused isUUID check in /addnote
confuser Aug 24, 2021
d7b8105
fix: remove erroneous System.out
confuser Aug 28, 2021
51d7e0d
fix: quick disconnects causing NPE
confuser Sep 12, 2021
79a8eaa
feat: added report discord notifications
confuser Oct 17, 2021
191c717
fix: NPE checks (#940)
Kadeluxe Nov 3, 2021
9630658
feat(deps): bump mysql, mariadb and hikaricp
confuser Nov 12, 2021
6e411e2
fix: incorrect muteip disallowed message (#942)
MattW-source Nov 21, 2021
b1cbd23
fix: do not broadcast empty messages (#944)
Kadeluxe Dec 13, 2021
e7111d1
fix: include submitStorageVersion in try catch (#946)
Sir-Will Dec 13, 2021
c5bdf68
fix: do not send empty messages (#948)
Kadeluxe Dec 20, 2021
4305737
feat: added baniprecords to /bmdelete
confuser Dec 20, 2021
fff8c87
feat: added baniprange & tempbaniprange to exemptions
confuser Dec 20, 2021
d2b0818
feat: added exemption perms for multi accounts
confuser Dec 20, 2021
2f1dfd6
feat: allow disabling chat handling completely (#947)
Kadeluxe Dec 21, 2021
da08c62
release: 7.6.0
confuser Dec 21, 2021
b73477d
chore: prepare for next release
confuser Dec 29, 2021
1bc0ad3
feat: added messagesFromActor to toggle messages from users in Discor…
confuser Dec 29, 2021
84a6293
fix: NPE when specifying an unban ip reason
confuser Jan 2, 2022
acb1ef1
fix: display stack trace when unbanning invalid ip addresses
confuser Jan 2, 2022
88aa909
fix: remove rewriteBatchedStatements property (#957)
A248 Jan 21, 2022
7a97491
fix: swallow two fewer exceptions (in InfoCommand) (#958)
A248 Jan 22, 2022
14578f2
feat: changed build process to gradle (#951)
Joo200 Jan 29, 2022
3b58e3f
fix: aggregateJavadoc warnings
confuser Jan 29, 2022
946e94d
fix: jar output names
confuser Jan 29, 2022
7ee0890
chore: remove artifactory
confuser Feb 6, 2022
c6c08f4
feat: added [created] token to discord messages
confuser Feb 6, 2022
4387537
fix: race condition on getPlayer Bungee implementation
confuser Feb 6, 2022
1afa198
feat: added BmAPI.getPlayers(ip) method
confuser Feb 6, 2022
19a4c37
fix: specify correct main path
confuser Feb 11, 2022
0ccb99a
fix: javadocs deploy
confuser Feb 11, 2022
32f0946
feat: add username in front of Muted messages for staff with correct …
TomLewis Mar 2, 2022
ef82e6f
feat: publish to maven central repo
confuser Mar 5, 2022
4d1e80c
fix: publish to maven central repo
confuser Mar 5, 2022
a89e6be
fix: publish once
confuser Mar 5, 2022
5c4de62
fix: publish credentials env vars
confuser Mar 5, 2022
4330201
fix: abstract BungeeScheduler
confuser Mar 5, 2022
e16efbd
fix: bungee start up
confuser Mar 5, 2022
abfb356
feat: update readme
confuser Mar 5, 2022
2b9d5e0
feat: update readme
confuser Mar 5, 2022
6a2b668
feat: added bm.command.unmuteip.own & bm.command.unbanip.own permissions
confuser Mar 6, 2022
76ea2f9
release: 7.7.0
confuser Mar 6, 2022
0381dc4
fix: sign releases
confuser Mar 6, 2022
083d046
fix: release
confuser Mar 6, 2022
30462e5
fix: publish (#967)
confuser Mar 6, 2022
02c91bb
fix: missing signing key envs
confuser Mar 6, 2022
fd332f5
fix: use signing key from memory
confuser Mar 6, 2022
c5f84df
chore: prepare for next release
confuser Mar 6, 2022
bbc67e3
fix: offline uuid lookups
confuser Apr 2, 2022
8cde8c7
fix: mysql driver loading in sponge
confuser Apr 3, 2022
3b0cde3
feat: added PluginReloadedEvent
confuser Apr 29, 2022
bfdb0ab
feat: added PlayerDeniedEvent
confuser May 1, 2022
9fa6e35
release: 7.8.0
confuser May 1, 2022
5805f82
chore: prepare for next release
confuser May 1, 2022
4ef4b8c
fix: muted blacklist sub commands on bukkit
confuser May 28, 2022
eb7bfc7
fix: global sync only remove local punishment if not a duplicate
confuser May 28, 2022
694b4eb
fix: magibridge broken dependency
confuser Jun 5, 2022
69b49a2
feat: lower default polling timings
confuser Jun 5, 2022
98de8f1
fix: scheduler tests
confuser Jun 5, 2022
dc66925
fix: timestamps past 2038 (Y2K38 problem) (#971)
confuser Jun 12, 2022
25a84f1
fix: column definition typo
confuser Jun 12, 2022
5c2413b
feat: detect resource loading interference
confuser Jul 18, 2022
6557973
feat: added [created] token to ban deny messages
confuser Jul 20, 2022
a1557ed
fix: set correct utf8 settings for new installations
confuser Jul 20, 2022
674aae6
feat: removed enabled option for local database, this should always b…
confuser Jul 20, 2022
79e323f
chore: update enabled test check
confuser Jul 20, 2022
fa32358
fix: H2 /bmactivity incompatibility causing malformed results to show
confuser Jul 20, 2022
558eef1
feat: added fast IPv6 conversion mode
confuser Jul 20, 2022
f1169a7
fix: shade slf4j for bukkit to fix older minecraft versions
confuser Jul 20, 2022
c443dad
fix(deps): update dependency ipaddress to v5.3.4
confuser Jul 20, 2022
1b79a33
fix: exempt permissions for temp ip ban and mutes
confuser Aug 4, 2022
8ae3e87
feat: update bminfo website default for new webui
confuser Aug 4, 2022
ba18dc2
fix: info command ignore empty website message
confuser Aug 4, 2022
568c3f5
fix(bungee): correctly display resource loading interference
confuser Aug 16, 2022
59a766a
feat: added [actor] to deniedNotify messages
confuser Sep 5, 2022
642e548
fix: kick silent flag being ignored
confuser Sep 18, 2022
23ff153
release: 7.9.0
confuser Sep 18, 2022
425dea7
chore: prepare for next release
confuser Sep 18, 2022
49bdd8e
fix: point to plugin docs
confuser Sep 19, 2022
d746bcc
feat: added geyserPrefix config option
confuser Oct 29, 2022
6a67fe5
feat: added Velocity support (#985)
Lorias-Jak Aug 20, 2023
f629d91
fix(velocity): permissions check (#986)
Lorias-Jak Sep 8, 2023
84317e3
fix: add missing velocity publishing
confuser May 24, 2024
b95bfc5
fix: missing gradle plugins
confuser May 24, 2024
96afe50
chore: delete old deploy file
confuser May 24, 2024
d3ed0a3
fix: remove magibridge as breaking builds (#988)
confuser May 24, 2024
1d8ad57
fix: VelocityScheduler for webenhancer (#989)
Lorias-Jak May 24, 2024
9ef5583
fix(velocity): firing denied event (#990)
Lorias-Jak Jul 4, 2024
d64397d
fix: BmAPI null plugin reference (#992)
confuser Aug 31, 2024
282acee
feat: added /kickall & /nlkickall commands (#993)
confuser Sep 8, 2024
1a73048
fix: safely handle duplicate entries when punishing alts (#994)
confuser Sep 8, 2024
4231530
feat: added pointsTimeframe to warningActions (#995)
confuser Sep 8, 2024
a2a0db4
fix(velocity): correctly repeat tasks
confuser Dec 11, 2024
0a0639a
feat: added /bminfo <player> -reports to see list of reports against …
confuser Jan 2, 2025
2eb8f0b
feat(breaking): replaced DiscordSRV with Discord webhooks (#997)
confuser Jan 2, 2025
92f0faa
feat: added fabric support (#998)
confuser Jan 5, 2025
3fcb049
fix(velocity): relocate bstats correctly (#1001)
confuser Feb 2, 2025
262fe05
fix(fabric): harden schedules config for ConcurrentModificationException
confuser Mar 15, 2025
347e32a
feat: add velocity config option to enable mutes (#1003)
Rossterd Jul 30, 2025
60edbaa
Move from annotation to velocity-plugin,json to insert version easier.
Nov 15, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
58 changes: 58 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: Java CI

on:
pull_request:
push:
branches:
- master
schedule:
- cron: '0 0 * * 0' # weekly

jobs:
build:
runs-on: ubuntu-latest
name: Java ${{ matrix.java }} - ${{ matrix.storageType }}
strategy:
matrix:
include:
- storageType: mariadb
java: 21
# - storageType: h2 # disabled for now due to memory issues
# java: 21

steps:
- uses: actions/checkout@v2

- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v1
with:
java-version: ${{ matrix.java }}

- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@v1

- name: Setup Gradle
uses: gradle/gradle-build-action@v2

- uses: actions/cache@v4
with:
path: |
.gradle/loom-cache
key: ${{ runner.os }}-gradle-${{ hashFiles('**/libs.versions.*', '**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: ${{ runner.os }}-gradle-${{ matrix.java }}-

- name: Execute Gradle build
env:
STORAGE_TYPE: ${{ matrix.storageType }}
run: ./gradlew build --info

- name: Publish to Maven Central
# only publish once
if: github.ref == 'refs/heads/master' && matrix.java == '21' && matrix.storageType == 'mariadb'
env:
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEUSERNAME }}
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEPASSWORD }}
ORG_GRADLE_PROJECT_signingKey : ${{ secrets.ORG_GRADLE_PROJECT_SIGNINGINMEMORYKEY }}
ORG_GRADLE_PROJECT_signingPassword : ${{ secrets.ORG_GRADLE_PROJECT_SIGNINGINMEMORYKEYPASSWORD }}
run: |
./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository
34 changes: 19 additions & 15 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,21 +1,25 @@
*.class
.settings
# Eclipse
.classpath
bin
.project
.settings/
/bin
eclipse

# Intellij
.idea
*.iml
.externalToolBuilders
build.xml
.DS_Store
dependency-reduced-pom.xml
*.ipr
*.iws

# Package Files #
*.jar
*.war
*.ear
# Mac
.DS_Store

# Web Interface Files #
banmanagement/settings.php
cache
/target
# Gradle
.gradle
/local.properties
bin
build
target
/dependency-reduced-pom.xml
*-private.sh
*.txt
6 changes: 0 additions & 6 deletions .travis.yml

This file was deleted.

119 changes: 114 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,116 @@
![BanManager](http://i.imgur.com/ZE7zXx9.png)
<p align="center">
<a href="https://banmanagement.com">
<img src="https://banmanagement.com/images/banmanager-icon.png" height="128">
<h1 align="center">BanManager</h1>
</a>
</p>

[![Build Status](https://travis-ci.org/BanManagement/BanManager.svg?branch=master)](https://travis-ci.org/BanManagement/BanManager)
==============
The Java based plugin for Bukkit and is released under the Creative Commons Attribution-NonCommercial-ShareAlike 2.0 UK: England & Wales
<h3 align="center">
The defacto plugin for Minecraft to manage punishments and moderate more effectively
</h3>

BukkitDev - http://dev.bukkit.org/server-mods/ban-management/
<p align="center">
<strong>
<a href="https://banmanagement.com">Website</a>
|
<a href="https://banmanagement.com/docs/banmanager/install">Docs</a>
|
<a href="https://demo.banmanagement.com">Demo</a>
</strong>
</p>
<p align="center">
<a aria-label="Tests status" href="https://github.com/BanManagement/BanManager/actions/workflows/build.yml">
<img alt="" src="https://img.shields.io/github/actions/workflow/status/BanManagement/BanManager/build.yml?branch=master&label=Tests&style=for-the-badge&labelColor=000000">
</a>
<a aria-label="Join the community on Discord" href="https://discord.gg/59bsgZB">
<img alt="" src="https://img.shields.io/discord/664808009393766401?label=Support&style=for-the-badge&labelColor=000000&color=7289da">
</a>
</p>

## Overview
- **Free.** Open source and free to use
- **Robust.** Used and battle tested by some of the largest Minecraft servers
- **Maintained.** Actively developed since 2012, 10+ years
- **Cross platform.** Supports Bukkit, Spigot, Bungeecord & Sponge
- **Feature rich.** An advanced punishment system, reports, appeals, network friendly and [website compatible](https://github.com/BanManagement/BanManager-WebUI)
- **Flexible.** [Fully customisable](https://banmanagement.com/docs/banmanager/configuration) with [extensive player permissions](https://banmanagement.com/docs/banmanager/permissions)

To learn more about configuration, usage and features of BanManager, take a look at [the website](https://banmanagement.com/docs/banmanager/configuration) or view [the website demo](https://demo.banmanagement.com).

## Requirements
- Java 8+ (JDK21+ required to build from source)
- CraftBukkit/Spigot/Paper, BungeeCord or Sponge for Minecraft 1.7.2+
- Optionally [MySQL or MariaDB](https://banmanagement.com/docs/banmanager/install#setup-shared-database-optional)

## Installation
- Download from https://banmanagement.com/download
- Copy jar to plugins (Spigot/BungeeCord) or mods (Sponge) folder
- For further instructions on how to support multiple servers [click here](https://banmanagement.com/docs/banmanager/install-network)

## Commands
View [full list here](https://banmanagement.com/docs/banmanager/commands)
- `/ban <player> <reason>` - Permanently ban a player, requires permission, requires permission `bm.command.ban`
- `/tempban <player> <timeDiff> <reason>` - Temporarily ban a player, requires permission `bm.command.tempban`
- `/unban <player> [reason]` - Unban a player, requires permission `bm.command.unban`
- `/mute <player> <reason>` - Permanently mute a player, requires permission `bm.command.mute`
- `/tempmute <player> <timeDiff> <reason>` - Temporarily mute a player, requires permission `bm.command.tempmute`
- `/unmute <player> [reason]` - Unmute a player, requires permission `bm.command.unmute`
- `/banip <player || ip> <reason>` - Permanently ban an ip address or ip of a player, requires permission `bm.command.banip`
- `/tempbanip <player || ip> <timeDiff> <reason>` - Temporarily ban an ip address or ip of a player, requires permission `bm.command.tempbanip`
- `/unbanip <ip> [reason]` - Unban an ip address, requires permission `bm.command.unbanip`
- `/muteip <player || ip> <reason>` - Permanently mute an ip address or ip of a player, requires permission `bm.command.muteip`
- `/tempmuteip <player || ip> <timeDiff> <reason>` - Temporarily mute an ip address or ip of a player, requires permission `bm.command.tempmuteip`
- `/unmuteip <ip> [reason]` - Unmute an ip address, requires permission `bm.command.unmuteip`
- `/baniprange <cidr || wildcard> <reason>` - Permanently ban a cidr or wildcard ip range, e.g. 192.168.0.1/16 or 192.168.*.*, requires permission `bm.command.baniprange`
- `/tempbaniprange <cidr || wildcard> <timeDiff> <reason>` - Temporarily ban a cidr or wildcard ip range, requires permission `bm.command.tempbaniprange`
- `/unbaniprange <cidr || wildcard || player>` - Unban an ip range, requires permission `bm.command.unbaniprange`
- `/warn <player> <reason>` - Warn a player, requires permission `bm.command.warn`
- `/tempwarn <player> <timeDiff> <reason>` - Temporarily warn a player, requires permission `bm.command.tempwarn`
- `/dwarn <player>` - Delete the last warning a player received, requires permission `bm.command.dwarn`
- `/addnote <player> <message>` - Add a note against a player, requires permission `bm.command.addnote`
- `/notes [player]` - View notes of all online players or a particular player, requires permission `bm.command.notes`
- `/kick <player> <reason>` - Kick a player from the server, requires permission `bm.command.kick`
- `/nlkick <player> <reason>` - Kick a player from the server without logging the kick if kick logging enabled, requires permission `bm.command.nlkick`
- `/bminfo [player]` - Look up information of a player, requires permission `bm.command.bminfo`
- `/bmimport`, Check the [migration guides](https://banmanagement.com/docs/banmanager/migrations) for more information, requires permission `bm.command.import`
- `/bmexport <players || ips>` - Export bans to vanilla format, requires permission `bm.command.export`
- `/bmreload` - Reload plugin configuration and messages (excludes database connection info), requires permission `bm.command.reload`
- `/banlist [players || ipranges || ips]` - List all bans stored in memory, requires permission `bm.command.banlist`
- `/bmsync <local || external>` - Force the server to syncronise with the database, requires permission `bm.command.sync`
- `/bmclear <player> [banrecords || baniprecords || kicks || muterecords || notes || warnings]` - Clear all records of a player or specify a type, requires permission `bm.command.clear`
- `/bmdelete <banrecords || kicks || muterecords || notes || warnings> <ids>` - Delete specific records for a player based on ids from /bminfo, requires permission `bm.command.delete`
- `/bmactivity <timeDiff> [player]` - View recent activity of staff, or a particular player, requires permission `bm.command.bmactivity`
- `/alts <player || ip>` - List players which have the same ip address, requires permission `bm.command.alts`
- `/report <player> <reason>` - Report a player for rule breaking, logs their location and the actors location, as well as other data, requires permission `bm.command.report`
- `/reports` - Report management, executes list by default, requires permission `bm.command.reports`
- `/reports assign <ids> [player]` - Assign a report to a player, if none given assigns to self, requires permission `bm.command.reports.assign`
- `/reports close <ids> [/command || comment]` - Marks a report as closed, with an optional comment or command, requires permission `bm.command.reports.close`
- `/reports list [page] [state]` - Lists reports, requires permission `bm.command.reports.list`
- `/reports tp <id>` - Teleports you to where the report was created, requires permission `bm.command.reports.tp`
- `/reports unassign <ids>` - Unassigns reports from a player, requires permission `bm.command.reports.unassign`
- `/bmrollback <player> <timeDiff> [types]` - Allows rolling back malicious actions by a staff member, requires permission `bm.command.bmrollback`
- `/banname <name> <reason>` - Ban any players with the name specified, requires permission `bm.command.banname`
- `/tempbanname <name> <timeDiff> <reason>` - Temporarily ban a name, requires permission `bm.command.tempbanname`
- `/unbanname <name> [reason]` - Unban a name, requires permission `bm.command.unbanname`
- `/bmutils <duplicates||missingplayers>` - Utility commands to aid with resolving issues, requires permission `bm.command.bmutils`
- `/bmutils duplicates [UUID] [newName]` - Finds duplicate player names and allows manual updating of a player name, requires permission `bm.command.bmutils.duplicates`
- `/bmutils missingplayers` - Finds missing player records associated to punishments and creates them, requires permission `bm.command.bmutils.missingplayers`

## Permissions
View [full list here](https://banmanagement.com/docs/banmanager/permissions)

## Development
```
git clone [email protected]:BanManagement/BanManager.git
```

## Contributing
If you'd like to contribute, please fork the repository and use a feature branch. Pull requests are warmly welcome.

## Help / Bug / Feature Request
If you have found a bug please [open an issue](https://github.com/BanManagement/BanManager/issues/new) with as much detail as possible, including relevant logs and screenshots where applicable

Have an idea for a new feature? Feel free to [open an issue](https://github.com/BanManagement/BanManager/issues/new) or [join us on Discord](https://discord.gg/59bsgZB) to chat

## License
Free to use under the [Creative Commons Attribution-NonCommercial-ShareAlike 2.0 UK: England & Wales](LICENCE)
25 changes: 25 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
logger.lifecycle("""
*******************************************
You are building BanManager!
If you encounter trouble:
1) Try running 'build' in a separate Gradle run
2) Use gradlew and not gradle
3) If you still need help, ask on Discord! Further information https://banmanagement.com/support

Output files will be in [subproject]/build/libs
*******************************************
""")

plugins {
id("io.github.gradle-nexus.publish-plugin") version "2.0.0"
id("io.freefair.aggregate-javadoc") version "8.11"
}

nexusPublishing {
repositories {
sonatype { //only for users registered in Sonatype after 24 Feb 2021
nexusUrl.set(uri("https://s01.oss.sonatype.org/service/local/"))
snapshotRepositoryUrl.set(uri("https://s01.oss.sonatype.org/content/repositories/snapshots/"))
}
}
}
25 changes: 25 additions & 0 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
plugins {
`kotlin-dsl`
kotlin("jvm") version embeddedKotlinVersion
}

repositories {
mavenCentral()
gradlePluginPortal()
maven {
name = "sponge"
url = uri("https://repo.spongepowered.org/repository/maven-public/")
}
maven {
name = "Fabric"
url = uri("https://maven.fabricmc.net/")
}
}

dependencies {
implementation(gradleApi())
implementation("com.gradleup.shadow:com.gradleup.shadow.gradle.plugin:9.0.0-beta4")
implementation("org.jfrog.buildinfo:build-info-extractor-gradle:5.2.5")
implementation("org.spongepowered:spongegradle-plugin-development:2.3.0")
implementation("fabric-loom:fabric-loom.gradle.plugin:1.9-SNAPSHOT")
}
34 changes: 34 additions & 0 deletions buildSrc/src/main/kotlin/CommonConfig.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import org.gradle.api.Project
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.jvm.toolchain.JavaLanguageVersion
import org.gradle.kotlin.dsl.*

fun Project.applyCommonConfiguration() {
group = rootProject.group
version = rootProject.version

repositories {
mavenCentral()
maven { url = uri("https://repo.codemc.io/repository/maven-public/") }
maven { url = uri("https://ci.frostcast.net/plugin/repository/everything") }
}

dependencies {
"compileOnly"("org.projectlombok:lombok:1.18.36")
"annotationProcessor"("org.projectlombok:lombok:1.18.36")

"testCompileOnly"("org.projectlombok:lombok:1.18.36")
"testAnnotationProcessor"("org.projectlombok:lombok:1.18.36")
}

configurations.all {
resolutionStrategy {
cacheChangingModulesFor(5, "MINUTES")
}
}

plugins.withId("java") {
the<JavaPluginExtension>().setSourceCompatibility("1.8")
the<JavaPluginExtension>().setTargetCompatibility("1.8")
}
}
12 changes: 12 additions & 0 deletions buildSrc/src/main/kotlin/GradleExtras.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import org.gradle.api.Project
import org.gradle.api.plugins.ExtraPropertiesExtension
import org.gradle.api.plugins.JavaPluginConvention
import org.gradle.api.tasks.SourceSetContainer
import org.gradle.kotlin.dsl.getByType
import org.gradle.kotlin.dsl.the

val Project.ext: ExtraPropertiesExtension
get() = extensions.getByType()

val Project.sourceSets: SourceSetContainer
get() = the<JavaPluginConvention>().sourceSets
Loading
Loading