Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 29 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,32 +91,45 @@ To release a frozen player, use `/unfreeze <player>`
Allows players to temporarily disable certain permissions (i.e. those that give them staff-only alerts), intended for
use when screen sharing or live-streaming gameplay.

#### Placeholder

When PlaceholderAPI is available, a placeholder is made available to display when a player has streamer mode active.

- ``%rel_streamermode_tag%``: Displays a `⬤` tag in red when streamer mode is active.
- ``%rel_streamermode_prefix%``: Displays the tag followed by a space when streamer mode is active.
- ``%rel_streamermode_suffix%``: Displays the tag preceded by a space when streamer mode is active.

## Permissions

| Permission | Description |
|---------------------------------------|---------------------------------------------------------------------------------------------------|
| `admintoolbox.target` | Use [`/target`](#target-locations) at current location |
| `admintoolbox.target.player` | Use [`/target <player>`](#target-locations) |
| `admintoolbox.target.location` | Use [`/target <x> [y] <z> [world]`](#target-locations) |
| `admintoolbox.reveal` | Use [`/reveal`](#reveal) |
| `admintoolbox.yell` | Use [`/yell`](#yell) |
| `admintoolbox.freeze` | Use [`/freeze` and `/unfreeze`](#freeze) |
| `admintoolbox.spawn` | Use [`/spawn`](#targeting-spawn) in current world |
| `admintoolbox.spawn.all` | Use [`/spawn [world]`](#targeting-spawn) |
| `admintoolbox.fullbright` | Use [`/fullbright`](#fullbright) while in admin mode |
| `admintoolbox.broadcast.receive` | Receive alerts about others' [targets](#spectate), [yells](#yell), and [freeze](#freeze) actions. |
| `admintoolbox.broadcast.exempt` | Do not send alerts to players with `admintoolbox.broadcast.receive` |
| `admintoolbox.streamermode` | Use [streamer mode](#streamer-mode) |
| `admintoolbox.streamermode.unlimited` | Bypass maximum streamer mode duration. (Set in config.yml) |
| Permission | Description |
|----------------------------------------------|---------------------------------------------------------------------------------------------------|
| `admintoolbox.target` | Use [`/target`](#target-locations) at current location |
| `admintoolbox.target.player` | Use [`/target <player>`](#target-locations) |
| `admintoolbox.target.location` | Use [`/target <x> [y] <z> [world]`](#target-locations) |
| `admintoolbox.reveal` | Use [`/reveal`](#reveal) |
| `admintoolbox.yell` | Use [`/yell`](#yell) |
| `admintoolbox.freeze` | Use [`/freeze` and `/unfreeze`](#freeze) |
| `admintoolbox.spawn` | Use [`/spawn`](#targeting-spawn) in current world |
| `admintoolbox.spawn.all` | Use [`/spawn [world]`](#targeting-spawn) |
| `admintoolbox.fullbright` | Use [`/fullbright`](#fullbright) while in admin mode |
| `admintoolbox.broadcast.receive` | Receive alerts about others' [targets](#spectate), [yells](#yell), and [freeze](#freeze) actions. |
| `admintoolbox.broadcast.exempt` | Do not send alerts to players with `admintoolbox.broadcast.receive` |
| `admintoolbox.streamermode` | Use [streamer mode](#streamer-mode) |
| `admintoolbox.streamermode.unlimited` | Bypass maximum streamer mode duration. (Set in config.yml) |
| `admintoolbox.streamermode.placeholder.wear` | Wear the streamer mode status placeholder. |
| `admintoolbox.streamermode.placeholder.view` | View other players' streamer mode status placeholders. |

## Integrations

- **[LuckPerms](https://luckperms.net/)**
- Required for [Streamer Mode](#streamer-mode).
- Required for [streamer mode](#streamer-mode).
- **New in version 1.4.0:** Custom context for conditionally applying permissions based on admin state.
- **`admintoolbox:state`** can be any of `spectating`, `revealed`, or `normal` (not in admin mode).
- **[BlueMap](https://bluemap.bluecolored.de)**
- The plugin will hide admins who are [revealed](#reveal) from the map.
- **[PlaceholderAPI](https://modrinth.com/plugin/placeholderapi)**
- The plugin provides a placeholder for players' [streamer mode](#streamer-mode) status.
- Players must have the appropriate [permissions](#permissions) to wear and view the placeholder.

## Analytics

Expand Down
14 changes: 12 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ plugins {

group = "org.modernbeta.admintoolbox"

val baseVersion = "1.4.1"
val baseVersion = "1.5.0"
version = run {
// CI: on release tag - use that version
val refType = System.getenv("GITHUB_REF_TYPE")
Expand Down Expand Up @@ -65,12 +65,16 @@ repositories {
maven("https://repo.bluecolored.de/releases") {
name = "bluemap"
}
maven("https://repo.extendedclip.com/releases/") {
name = "clip"
}
}

dependencies {
compileOnly("io.papermc.paper:paper-api:1.20.4-R0.1-SNAPSHOT")
compileOnly("net.luckperms:api:5.4")
compileOnly("de.bluecolored:bluemap-api:2.7.4")
compileOnly("me.clip:placeholderapi:2.11.7")
implementation("org.bstats:bstats-bukkit:3.1.0")
}

Expand Down Expand Up @@ -101,6 +105,8 @@ tasks.shadowJar {
val plugins = runPaper.downloadPluginsSpec {
modrinth("viaversion", "5.6.0") // makes testing much easier
modrinth("bluemap", "5.5-paper")
modrinth("placeholderapi", "2.11.7")
modrinth("tab-was-taken", "5.4.0")
}

// Paper (non-Folia!) server
Expand All @@ -109,14 +115,18 @@ tasks.runServer {
downloadPlugins {
from(plugins)
// Add Folia-incompatible plugins below
modrinth("luckperms", "v5.5.0-bukkit") // they are working on Folia support but it's not ready yet!
modrinth("luckperms", "v5.5.0-bukkit")
}
}

// Folia server
runPaper.folia.registerTask {
minecraftVersion("1.20.4")
downloadPlugins.from(plugins)
downloadPlugins {
// LuckPerms for Folia
url("https://ci.lucko.me/job/LuckPerms-Folia/9/artifact/bukkit/loader/build/libs/LuckPerms-Bukkit-5.5.11.jar")
}
}

// better IntelliJ IDEA debugging
Expand Down
1 change: 1 addition & 0 deletions run/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
The `run` directory contains configuration files for the development testing server.
200 changes: 200 additions & 0 deletions run/plugins/TAB/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
header-footer:
enabled: false
designs:
default:
header: null
footer: null
tablist-name-formatting:
enabled: true
disable-condition: '%world%=disabledworld'
scoreboard-teams:
enabled: false
enable-collision: true
invisible-nametags: false
sorting-types: null
case-sensitive-sorting: true
can-see-friendly-invisibles: false
disable-condition: '%world%=disabledworld'
playerlist-objective:
enabled: false
value: '%ping%'
fancy-value: '&7Ping: %ping%'
title: TAB
render-type: INTEGER
disable-condition: '%world%=disabledworld'
belowname-objective:
enabled: true
value: '%rel_streamermode_tag%'
title: ''
fancy-value: '&c%health%'
fancy-value-default: NPC
disable-condition: '%world%=disabledworld'
prevent-spectator-effect:
enabled: false
bossbar:
enabled: false
toggle-command: /bossbar
remember-toggle-choice: false
hidden-by-default: false
bars:
ServerInfo:
style: PROGRESS
color: '%animation:barcolors%'
progress: '100'
text: '&fWebsite: &bwww.domain.com'
scoreboard:
enabled: false
toggle-command: /sb
remember-toggle-choice: false
hidden-by-default: false
use-numbers: true
static-number: 0
delay-on-join-milliseconds: 0
scoreboards:
scoreboard-1.20.3+:
title: <#E0B11E>MyServer</#FF0000>
display-condition: '%player-version-id%>=765;%bedrock%=false'
lines:
- '&7%date%'
- '%animation:MyAnimation1%'
- '&6Online:'
- '* &eOnline&7:||%online%'
- '* &eCurrent World&7:||%worldonline%'
- '* &eStaff&7:||%staffonline%'
- ''
- '&6Personal Info:'
- '* &bRank&7:||%group%'
- '* &bPing&7:||%ping%&8ms'
- '* &bWorld&7:||%world%'
- '%animation:MyAnimation1%'
scoreboard:
title: <#E0B11E>MyServer</#FF0000>
lines:
- '&7%date%'
- '%animation:MyAnimation1%'
- '&6Online:'
- '* &eOnline&7: &f%online%'
- '* &eCurrent World&7: &f%worldonline%'
- '* &eStaff&7: &f%staffonline%'
- ''
- '&6Personal Info:'
- '* &bRank&7: &f%group%'
- '* &bPing&7: &f%ping%&8ms'
- '* &bWorld&7: &f%world%'
- '%animation:MyAnimation1%'
layout:
enabled: false
direction: COLUMNS
default-skin: mineskin:37e93c8e12cd426cb28fce31969e0674
enable-remaining-players-text: true
remaining-players-text: '... and %s more'
empty-slot-ping-value: 1000
layouts:
default:
fixed-slots:
- '1|&3Website&f:'
- 2|&bmyserver.net
- '3|&8&m '
- '4|&3Name&f:'
- 5|&b%player%
- '7|&3Rank&f:'
- '8|Rank: %group%'
- '10|&3World&f:'
- 11|&b%world%
- '13|&3Time&f:'
- 14|&b%time%
- '21|&3Teamspeak&f:'
- 22|&bts.myserver.net
- '23|&8&m '
- '41|&3Store&f:'
- 42|&bshop.myserver.net
- '43|&8&m '
groups:
staff:
condition: permission:tab.staff
slots:
- 24-40
players:
slots:
- 44-80
ping-spoof:
enabled: false
value: 0
global-playerlist:
enabled: false
display-others-as-spectators: false
display-vanished-players-as-spectators: true
isolate-unlisted-servers: false
update-latency: false
spy-servers:
- spyserver1
- spyserver2
server-groups:
lobbies:
- lobby1
- lobby2
group2:
- server1
- server2
placeholders:
date-format: dd.MM.yyyy
time-format: '[HH:mm:ss / h:mm a]'
time-offset: 0
register-tab-expansion: false
placeholder-output-replacements: null
conditions: null
placeholder-refresh-intervals:
default-refresh-interval: 500
'%server_uptime%': 1000
'%server_tps_1_colored%': 1000
'%server_unique_joins%': 5000
'%player_health%': 200
'%player_ping%': 1000
'%vault_prefix%': 1000
'%rel_factionsuuid_relation_color%': 1000
assign-groups-by-permissions: false
primary-group-finding-list:
- Owner
- Admin
- Helper
- default
permission-refresh-interval: 1000
debug: false
mysql:
enabled: false
host: 127.0.0.1
port: 3306
database: tab
username: user
password: password
useSSL: true
proxy-support:
enabled: false
type: PLUGIN
plugin:
name: RedisBungee
redis:
url: redis://:password@localhost:6379/0
rabbitmq:
exchange: plugin
url: amqp://guest:guest@localhost:5672/%2F
components:
minimessage-support: true
disable-shadow-for-heads: true
config-version: 2
per-world-playerlist:
enabled: false
allow-bypass-permission: false
ignore-effect-in-worlds:
- ignoredworld
- build
shared-playerlist-world-groups:
lobby:
- lobby1
- lobby2
minigames:
- paintball
- bedwars
compensate-for-packetevents-bug: false
use-bukkit-permissions-manager: false
use-online-uuid-in-tablist: true
3 changes: 3 additions & 0 deletions run/plugins/TAB/groups.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
_DEFAULT_:
tabprefix: "%rel_streamermode_prefix%&r%luckperms-prefix%"
tagsuffix: "%luckperms-suffix%"
Loading