promotional bannermobile promotional banner

NeoBans

Modern GUI Based Banning System
# NeoBans

A server-side punishment management mod for **Minecraft 1.21.1** running **NeoForge 21.1.x**.

Adds a full suite of ban, mute, kick, and warn commands along with an in-game GUI for staff to issue punishments. All punishment history is stored on the server and persists across restarts. **Players do not need the mod installed to join** — it is only required on the client if staff want to use the GUI.

---

## Features

- Permanent and temporary bans (player and IP)
- Permanent and temporary mutes
- Kick and warn commands
- In-game ban GUI with configurable preset reasons and durations (requires mod on staff client)
- Full punishment history per player
- Server-side ban list browser
- Fully configurable ban disconnect message with placeholder support
- Optional appeal link appended to ban messages
- Data stored as JSON in the world folder — no database required

---

## Requirements

| Requirement | Version |
|---|---|
| Minecraft | 1.21.1 |
| NeoForge | 21.1.x (tested on 21.1.222) |
| Java | 21 |

The mod is **server-side only**. Players without NeoBans can connect normally. Staff who want the `/ban` GUI need the mod on their client as well.

---

## Installation

1. Download the NeoBans `.jar` file.
2. Place it in your server's `mods/` folder.
3. Start the server once to generate the config file.
4. Edit `world/serverconfig/neobans-server.toml` to your liking (see [Configuration](#configuration) below).
5. Restart the server (or use `/reload` — the config will reload automatically).

For staff who want the GUI, they also place the same `.jar` in their client `mods/` folder.

---

## Commands

All commands require operator permission level 2 or higher.

### Ban

| Command | Description |
|---|---|
| `/ban` | Opens the player-select GUI (requires mod on client) |
| `/ban <player> [reason]` | Permanently bans a player |
| `/ban-ip <player\|ip> [reason]` | Permanently IP-bans a player or raw IP address |
| `/tempban <player> <duration> [reason]` | Temporarily bans a player |
| `/tempban-ip <player\|ip> <duration> [reason]` | Temporarily IP-bans a player or raw IP |
| `/unban <player>` | Pardons a player's active ban |

### Mute

| Command | Description |
|---|---|
| `/mute <player> [reason]` | Permanently mutes a player |
| `/tempmute <player> <duration> [reason]` | Temporarily mutes a player |
| `/unmute <player>` | Removes a player's active mute |

### Other

| Command | Description |
|---|---|
| `/kick <player> [reason]` | Kicks a player from the server |
| `/warn <player> <reason>` | Issues a formal warning |
| `/history <player>` | Opens the punishment history GUI for a player |
| `/banlist` | Opens the active ban list GUI |

### Duration format

Used by `/tempban`, `/tempban-ip`, and `/tempmute`.

| Suffix | Meaning |
|---|---|
| `m` | Minutes — e.g. `30m` |
| `h` | Hours — e.g. `2h` |
| `d` | Days — e.g. `7d` |
| `w` | Weeks — e.g. `2w` |
| `M` | Months — e.g. `1M` |
| `y` | Years — e.g. `1y` |
| `permanent` | No expiry |

---

## Configuration

The config file is generated at:

```
<world folder>/serverconfig/neobans-server.toml
```

### Options

#### `banReasons`

List of preset reasons shown in the `/ban` GUI. Editable without restarting — changes take effect the next time a staff member opens the GUI.

```toml
banReasons = [
"Griefing",
"Hacking / Cheating",
"Harassment",
"Inappropriate Content",
"Spam",
"Exploiting",
"Racism / Hate Speech",
"Other"
]
```

#### `appealLink`

URL shown at the bottom of every ban disconnect message. Set to `""` to hide the appeal line entirely.

```toml
appealLink = "https://your-server.com/appeal"
```

#### `banMessage`

The full disconnect message shown to a banned player. Supports Minecraft colour codes (`§` or `&`). Use `\n` for newlines.

```toml
banMessage = "§c§lYou are banned from this server!\n\n§fReason: §e{reason}\n§fBanned by: §e{banned_by}\n§fExpires: §e{expires}\n\n§7Punishment ID: {id}\n\n§eAppeal your ban: §b{appeal_link}"
```

**Available placeholders:**

| Placeholder | Value |
|---|---|
| `{reason}` | The ban reason |
| `{banned_by}` | The staff member who issued the ban |
| `{expires}` | `Permanent` or a human-readable time remaining (e.g. `3d 2h 15m`) |
| `{id}` | The internal punishment ID |
| `{appeal_link}` | The appeal URL — the **entire line** is removed if `appealLink` is empty |

---

## Data Storage

Punishments are saved to:

```
<world folder>/neobans/punishments.json
```

This file is written on every punishment action and on server shutdown. It is safe to back up while the server is running.

---

## Permissions

NeoBans uses NeoForge's built-in permission API. Each command has its own permission node so you can grant or deny them individually using a permissions mod such as [LuckPerms](https://luckperms.net/).

**If no permissions mod is installed**, every node falls back to vanilla operator level 2 — the behaviour is identical to before.

### Permission nodes

| Node | Commands |
|---|---|
| `neobans.ban` | `/ban`, `/ban-ip` |
| `neobans.tempban` | `/tempban`, `/tempban-ip` |
| `neobans.unban` | `/unban`, `/unban-ip` |
| `neobans.mute` | `/mute` |
| `neobans.tempmute` | `/tempmute` |
| `neobans.unmute` | `/unmute` |
| `neobans.kick` | `/kick` |
| `neobans.warn` | `/warn` |
| `neobans.history` | `/history` |
| `neobans.banlist` | `/banlist` |

Console always bypasses permission checks and has access to all commands.

### LuckPerms example

```bash
# Give a group access to kick and warn only
/lp group moderator permission set neobans.kick true
/lp group moderator permission set neobans.warn true

# Give a group full access
/lp group admin permission set neobans.* true
```

---

The NeoBans Team

profile avatar
  • 2
    Followers
  • 13
    Projects
  • 11.5K
    Downloads

More from rowan802View all