Moderation¶
Configured in staff.yml. Most tools need hcfcore.staff.
Mining alerts¶
When a player breaks into a vein of diamond, ancient debris or emerald, staff are told — once for the whole vein, with its size and position:
A player finding vein after vein, fast and at depth, is what an x-ray client looks like. Ores placed by a player are never reported, and a vein is counted once however it is mined. audience: everyone in staff.yml also shows everybody the classic public line — without the position. See mining-alerts.
Staff mode¶
Entering staff mode:
- puts your own inventory aside in the database — written before your inventory is emptied, and given back when you leave. A crash gives it back at your next login;
- gives you a toolbar of items bound to commands;
- turns on vanish, flight and invulnerability — no damage taken or dealt, no mob targeting, nothing picked up (you would otherwise collect the loot of the fight you are watching into an inventory that is emptied when you leave).
Building is not part of it: that is /staffbuild. Other staff are told when you enter or leave (staff-mode.announce).
The toolbar¶
Each slot of staff-mode.items is an item that runs a command. The shipped bar:
| Slot | Item | Command |
|---|---|---|
| 0 | Player Tracker (compass) | staff tpnearest |
| 1 | Random Teleport (eye of ender) | staff randomtp |
| 2 | Inspect (book) — right-click a player | invsee %player% |
| 3 | Freeze (packed ice) — right-click a player | freeze %player% |
| 7 | Vanish — grey dye while you can be seen, green while vanished | vanish |
| 8 | Leave Staff Mode (barrier) | staff |
The toolbar as shipped in staff.yml
# The toolbar, by inventory slot. 0-8 is the hotbar; 0-35 is the whole
# inventory. Two items cannot share a slot - the first one wins and the second
# is reported in the console.
#
# material any item name, e.g. COMPASS, BOOK, BLAZE_ROD
# name display name, & colour codes allowed
# lore optional lines under the name
# command the command run when the item is used, WITHOUT the leading /.
# It runs as you, so your own permissions apply.
# %player% becomes the player you clicked, %staff% becomes you.
# needs-target true if the command needs a player: the item then only works
# by right-clicking somebody, and says so if used on air.
#
# Any command works here, including one from another plugin - the only rule is
# that it has to exist, or the slot looks like a tool and answers "unknown
# command".
items:
0:
material: COMPASS
name: "{secondary}&lPlayer Tracker"
lore:
- "{muted}Teleports you to the nearest player."
command: "staff tpnearest"
1:
material: ENDER_EYE
name: "{primary}&lRandom Teleport"
lore:
- "{muted}Teleports you to a random player."
command: "staff randomtp"
2:
material: BOOK
name: "{warning}&lInspect"
lore:
- "{muted}Right-click a player to see"
- "{muted}what they are carrying."
command: "invsee %player%"
needs-target: true
3:
material: PACKED_ICE
name: "{secondary}&lFreeze"
lore:
- "{muted}Right-click a player to hold"
- "{muted}them for a check."
command: "freeze %player%"
needs-target: true
7:
# Grey while you can be seen, green while you are vanished.
material: GRAY_DYE
vanished-material: LIME_DYE
name: "{success}&lVanish"
lore:
- "{muted}Toggles whether players can see you."
- "{muted}Grey: seen. Green: vanished."
command: "vanish"
8:
material: BARRIER
name: "{error}&lLeave Staff Mode"
lore:
- "{muted}Gives your own items back."
command: "staff"
Adding a slot — here, the last deaths of the player clicked:
staff-mode:
items:
4:
material: BLAZE_ROD
name: "&6&lLast Deaths"
command: "lastinv %player%"
needs-target: true
commandhas no leading/, and runs as you, so your own permissions apply. Any command works, another plugin's included.%player%is the player you right-clicked,%staff%is you.needs-target: truemakes the item work only by right-clicking a player.vanished-materialis the item shown while you are vanished,materialthe one shown otherwise: the shipped Vanish switch is a grey dye that turns green. It changes the moment vanish does, wherever you put it.
Vanish¶
/vanish (alias /v) hides you from players — and from the player list (vanish.hide-from-tab). Vanished staff are not found by player commands either: /msg, /ping, /team invite, /report and the others answer "not found", as for somebody offline, and no name completion lists them.
hcfcore.staff.vanish.see lets a player see vanished staff, and reach them by name with /invsee, /freeze and the /staff teleports. Nobody holds it by default, operators included: given to everyone, staff would all see each other and vanish would be useless among them. Grant it to your senior ranks.
A vanish you turned on by hand survives leaving staff mode; one set by staff mode leaves with it.
Staffbuild¶
/staffbuild (alias /sb) lets you build, break and interact through territory protection — player land, server land, the warzone — only if you also hold hcfcore.claim.bypass. Operators included: the toggle alone lifts nothing, and so does the permission alone.
The permission says a rank may; the toggle says you are choosing to, right now. That way nobody breaks a wall by accident while looking around, and an operator in normal play is stopped like anybody else. Watching a raid and changing the world are two different intentions — which is why building is not part of staff mode.
The same pair applies to the blocks-per-claim limits with hcfcore.limiter.bypass, and to the crowbar.
Freeze¶
/freeze <player> # hold a player for a check, or release them (alias /ss)
/freeze list # who is frozen
/freeze unban <player> # lift a ban for leaving while frozen
A frozen player cannot move from their block, go through a portal, build, break, use a block, an item (an ender pearl, a partner item, a refill sign) or an entity (a boat, a horse, a villager), drop items or fight, and cannot run commands other than private messages (freeze.allowed-commands). They can still look around and talk — a check is a conversation.
A reminder is repeated every 10 seconds (reminder-seconds), so a player who cannot move does not think their game froze and restart their client.
Disconnecting while frozen bans
Leaving while frozen records a ban with no expiry (ban-on-logout), lifted only with /freeze unban <player>. It is a ban of its own, not a deathban — turning deathbans off in pvp.yml does not turn it off.
Invsee and lastinv¶
/invsee <player> # their live inventory (alias /inv)
/lastinv <player> [number] # what they carried at one of their last deaths (alias /li)
- Invsee opens the real, live inventory — not a copy that would need writing back. It is read-only unless you hold
hcfcore.staff.invsee.edit, which nobody holds by default: on a server where items are the economy, an accidental drag cannot be undone and looks exactly like staff theft. The window shows the 36 storage slots; armour and off-hand are shown as text. - Lastinv keeps each player's last 3 deaths (
last-inventory.keep), always read-only.
Reports and requests¶
Players raise tickets; staff work through one queue.
/report <player> <reason> # players
/request <message> # players
/tickets # staff: the queue as a menu (alias /reports)
/tickets list | view <id> | claim <id> | close <id>
- Reports and requests share one queue, oldest first — the same act with a different word on the front.
- A player waits 60 seconds between tickets (
tickets.cooldown-seconds). - In the menu, left-click takes a ticket and teleports you to it (to the reported player, or else to whoever asked); right-click closes it. The
list/view/claim/closesubcommands do the same by id, from the console too. - One staff member holds a ticket at a time.
- Whoever raised a ticket is told when it is taken and closed — without the staff member's name, who may be vanished while watching.
- A player cannot report someone they cannot see: the answer is the same as for an offline player, so
/reportcannot detect vanished staff.
Staff chat¶
/staffchat (alias /sc) toggles the staff channel; /staffchat <message> sends one line without toggling — from the console too. Format: staff-chat.format. Staff chat wins over team chat.
Teleports¶
Subcommands of /staff, so they never fight another plugin over /tp or /near:
| Command | Does |
|---|---|
/staff tp <player> |
Teleport to a player |
/staff tphere <player> |
Bring a player to you |
/staff tpall |
Bring everyone |
/staff tploc <x> <y> <z> [world] |
Go to coordinates |
/staff tpnearest |
Go to the nearest player |
/staff randomtp |
Go to a random player |
/staff near [radius] |
Players within a radius (50 blocks by default) |
/staff telllocation <player> |
A player's coordinates |
/staff end · /staff nether |
Who is in The End; in the Nether — by dimension, whatever your worlds are called |
Broadcast and clear chat¶
/broadcast <message> # hcfcore.staff.broadcast (alias /bc)
/clearchat # hcfcore.staff.clearchat (alias /cc)
/clearchat pushes 100 blank lines (broadcast.clear-chat-lines) — the chat history lives on the client, so there is no other way. Staff are skipped: they usually need to read what caused the clear.
Strikes¶
Strikes punish a team for what its members did. A strike is given for an offence, and each offence takes its own share of the team's points; whatever the offences, a team is disbanded at its third active strike.
/strike add <team|player> <offence> [details] # hcfcore.staff.strike
/strike pardon <id> # hcfcore.staff.strike
/strike offences # hcfcore.staff.strike: what a team can be struck for
/strike list [team|player] # everyone; your own team by default (alias /strikes)
As shipped:
| Offence | /strike add … <offence> |
Points lost |
|---|---|---|
| Cheating | cheating |
50% |
| Bug abuse | bug-abuse |
40% |
| Kill boosting | boosting |
40% |
| Teaming | teaming |
35% |
| Other | other |
25% |
# A team is disbanded when its ACTIVE strikes reach this number, whatever they
# were for. 0: never.
disband-at: 3
# What a team can be struck for: /strike add <team|player> <offence> [details].
# Each offence takes its share of the team's points (rounded down); everybody
# sees a strike and the team's count, and the offence in /strike list - the
# details staff add are for staff. Each offence takes:
# name how messages write it
# points-loss-percent share of the team's points taken, 0 to 100
# commands: [...] console commands, with %team%, %strikes% and %offence%
offences:
cheating:
name: "Cheating"
points-loss-percent: 50
bug-abuse:
name: "Bug abuse"
points-loss-percent: 40
boosting:
name: "Kill boosting"
points-loss-percent: 40
teaming:
name: "Teaming"
points-loss-percent: 35
other:
name: "Other"
points-loss-percent: 25
- Who sees what. Nothing is said in the general chat. Staff —
hcfcore.staff, and the console — are told of each strike, its offence and details, the points taken and a disband. The team's online members are told when it is disbanded./team showgives a struck team aStrikes: 1line, as a statistic, never what for./strike listshows each strike's offence; the details staff add (/strike add Wizards teaming allied with Raiders at the Citadel) are for staff only. - Striking a player's name strikes their team and records the member.
- The points are taken first, then the offence's
commandsrun (with%team%,%strikes%,%offence%), then the team is disbanded if it reacheddisband-at— as by/team forcedisband. - A pardon does not give back points taken or undo a disband.
- A strike outlives its team: a disbanded team is found by the name it had.
- No strike is added automatically — the plugin cannot know that a ban made by another plugin was for cheating.