PLAYER GUIDEFrom your first invitation to a thriving team.
No matching chapter. Try “officer”, “overdraft”, “trust” or a permission node.
PLAYERS / 01
Start your team
Create a home for your group, invite your friends, and learn the essentials.
A team connects your members, private chat, rank ladder, shared claim access and optional treasury. You belong to one team at a time. Your team name is its public label; its permanent identity stays the same when it is renamed.
Your first five minutes
- Run
/team list to discover teams, or /team info <team> to inspect one. /team top ranks teams by member count.
- Join an open team with
/team join <team>. For a closed team, ask someone with invitation access to invite you, then use /team accept. Use /team deny to decline.
- To lead your own team, use
/team create <name>. Creation may cost money if the server has configured a price. A failed payment cannot create the team.
- Open
/team or /team gui after joining. The menu shows your rank, group and members, with management buttons according to your access.
- Try
/tc Hello team! for a single team message. Use /team help for the server's command list and Tab to complete supported arguments.
Examples use Ember as a fictional team and Alex as a fictional player. Replace angle-bracket arguments with your values; do not type the brackets. Square brackets mean optional input.
Names and capacity
Fresh defaults allow 3–24 characters in a team name, using letters, numbers, underscores and hyphens. Names must be available and pass the server blacklist. Existing server settings can differ. The default member limit is 20 including the Leader; a Leader's capacity permissions can increase it. An invitation does not reserve a slot or bypass a full team.
New members start at the lowest enabled rank. New teams have 15 rank slots, but leaders can customize or disable unoccupied lower slots. Team ranks are separate from your server-wide donor, progression or PvE rank.
Back to top ↑PLAYERS / 02
Invites, membership & leaving
Open recruitment, invitations, removals and safe team closure.
Invite or recruit
Use /team invite Alex to invite an online player. Invitations must be enabled and expire after the configured interval—60 seconds in a fresh configuration. The invitee must still be eligible when accepting: not already in another team, not banned, and within capacity.
/team open enables direct joining; /team close returns to invitation-only joining. Officers and Leaders can do this by default. Closing a team does not remove current members. A valid invitation still lets its recipient join a closed team.
Managing members
/team kick Alex removes an online lower-ranked member. /team ban Alex removes a member if applicable and prevents that player from joining your team again. Ban and unban can resolve known offline players. /team unban Alex removes that team ban; it does not automatically rejoin or invite them. A team ban is not a server ban.
The team action rule and your Bukkit permission must both allow the operation. Kick and ban also protect equal and higher ranks. Rank labels alone do not grant authority. Promoting someone into a powerful permission group can immediately unlock chat, claim or bank access.
Leaving and disbanding
/team leave removes a normal member and clears their team chat mode and linked personal-claim association. Their personal claim ownership remains. If the Leader leaves, the team is disbanded, subject to the treasury being empty. Arrange an admin leadership transfer before leaving if the team should continue.
/team disband deletes your team when your group allows it. Treat the command as immediate: do not rely on a confirmation dialog. Withdraw or distribute every currency in the team treasury first. A nonempty treasury blocks closure, including admin closure and removal of the Leader. If the banking service is unavailable for a previously linked team, restore it before trying to close the team.
Removing a teammate removes their dynamic team access. Separately granted GriefPrevention trust must be reviewed separately; leaving a team does not necessarily revoke manual trust.
Back to top ↑PLAYERS / 04
Team & officer chat
Toggle a channel or send one message with /tc, /to and /toc.
| Command | Without a message | With a message |
/tc or /team chat | Toggle team chat | Send one team message |
/to, /toc or /team officerchat | Toggle officer chat | Send one officer message |
After /tc, ordinary chat goes to your team until you toggle it off or switch channels. Running /to switches to officer chat. Running the currently selected toggle again turns it off. A one-message command does not change your current toggle.
/tc Meet at the main gate.
/to Please review the new recruit.
/toc I will check the storage permissions.
Team chat is available from Initiates by default; officer chat starts at Officers. Both senders and recipients need the matching server permission and team group access. A cosmetic rank called “Officer” does not qualify unless its group does.
A team permissions manager can use /team officerchat group MEMBERS to change the minimum group, or edit the officerchat action in the permissions menu. The word group is reserved for this control path. Modes clear on disconnect, leaving, removal or disbanding. GUI text prompts take priority over channel routing, so your editor input is not broadcast as team chat.
Back to top ↑PLAYERS / 05
Ranks, groups & customization
Fifteen stable slots, four permission groups, and a protected Leader.
Each rank has a stable ID, display name, color, icon, lore, group, order and enabled state. The ID identifies the slot; its order determines hierarchy; its group determines which minimum-group rules it meets. Changing a name or color does not change its group.
Leaders›Officers›Members›Initiates
Higher groups satisfy lower minimums. If an action requires Members, Officers and Leaders also qualify. A separate relative-rank check still prevents managing equal or higher-ranked members.
Promote, demote or assign
/team promote Alex moves an online member up the enabled ladder; /team demote Alex moves them down. The Members menu can assign an eligible rank directly, including for an offline member. You cannot change yourself, assign the Leader slot, or raise someone to your own rank or above. Leadership transfer uses the protected admin command.
Customize the ladder
Use /team rank for the draft editor and /team rank list to inspect slot IDs, aliases, names, groups, ordering and enabled state. Technical examples below apply immediately:
/team rank level_8 name Officer
/team rank level_8 color #00ccff
/team rank level_8 icon CYAN_CANDLE
/team rank level_8 lore Trusted teammate|Can help manage recruits
/team rank level_8 group OFFICERS
/team rank level_8 order 9
/team rank level_3 disable
/team rank level_3 enable
Names are 1–48 characters. Colors use #RRGGBB. Icons must be valid item materials. A vertical bar separates lore lines. Order changes swap positions rather than creating duplicate positions; lower slots use orders 1–14. Disable only unoccupied slots, and keep at least one nonleader slot enabled.
The Leader slot always stays enabled at order 15 in Leaders. No lower slot can be mapped to Leaders. Use level_N or the retained enum alias in commands, not a custom display name. Renaming a rank does not rename its stable identity.
| Stable ID / alias | Default display | Group | Color |
|---|
level_1
PROSPECT | Prospect | Initiates | #999999 |
level_2
PRIVATE | Private | Members | #ffffff |
level_3
LEVEL_3 | Level 3 | Members | #eeff00 |
level_4
CORPORAL | Corporal | Members | #91c200 |
level_5
LEVEL_5 | Level 5 | Members | #1eff44 |
level_6
SERGEANT | Sergeant | Members | #00a8a3 |
level_7
LEVEL_7 | Level 7 | Members | #0090ff |
level_8
LIEUTENANT | Lieutenant | Officers | #a335ee |
level_9
LEVEL_9 | Level 9 | Officers | #ff8000 |
level_10
CAPTAIN | Captain | Officers | #e268a8 |
level_11
LEVEL_11 | Level 11 | Officers | #e5cc80 |
level_12
GENERAL | General | Officers | #00ccff |
level_13
LEVEL_13 | Level 13 | Officers | #ca8350 |
level_14
LEVEL_14 | Level 14 | Officers | #c70000 |
level_15
LEADER | Leader | Leaders | #6359a6 |
Back to top ↑PLAYERS / 06
Who can do what?
The default action matrix and how your team can change it.
These are fresh-team defaults. Your team can set different minimums with /team permissions. Click an action to cycle the group, then Review and Save. A direct example is /team permissions bank.withdraw OFFICERS.
| Default minimum | Actions |
|---|
| Initiates | chat, bank.view, bank.deposit |
| Officers | officerchat, invite, kick, ban, unban, open, close, bank.withdraw |
| Leaders | promote, demote, edit, ally, trust, ranks, permissions, disband, bank.manage |
The four groups are internal team roles, not LuckPerms group names. A server permission is a second gate: granting a command node does not automatically grant the team action. Prefix editing additionally remains actual-Leader-only, and personal-claim linking requires the actual claim owner.
Use care when delegating permissions or ranks: these controls can change who qualifies for other actions. For a recruit-friendly team, keep chat and deposits open to Initiates, decide explicitly who can withdraw funds, and grant build/container access only to groups you trust.
Back to top ↑PLAYERS / 07
Team identity, MOTD & statistics
Set your name and prefix, write a welcome message, and inspect team stats.
/team edit <field> <value> supports name, prefix, description, color and motd. The edit action is Leaders-only by default. Prefix changes always require the actual Leader.
/team edit name Ember
/team edit prefix [EMBER]
/team edit description Builders and explorers
/team edit motd Meet at the base before our next expedition.
/team edit color #00ccff
Fresh defaults permit 16 visible prefix characters and 128 visible characters each for description and MOTD. The MOTD can display when a member logs in. Server configuration controls these limits and the public chat format.
Colored prefixes and charges
Plain prefixes are free. MiniMessage, legacy color, legacy formatting and RGB styles require their own permissions and may have configured prices. Mixed styles require every applicable use permission; the highest applicable non-exempt price is charged, rather than adding all prices together. A fee-exemption node does not grant permission to use that style.
Prefixes must have usable visible text and be unique according to the plugin's validation. Interactive or special tags such as click, hover and newline are rejected. Reapplying the same prefix is not a new purchase. Check the requested price and your balance before changing a paid style.
Information and rankings
/team info shows your team; add a team name to inspect another. /team list lists teams. /team top shows the member-count leaderboard, with 15 entries in a fresh config. Kill, death and KD statistics can also appear through server displays using PlaceholderAPI. KD uses kills when deaths are zero, and otherwise kills divided by deaths.
Back to top ↑PLAYERS / 08
Claims & team access
Keep ownership while sharing the right level of access.
GriefPrevention owns the land claims. SimpleTeams supplies dynamic access based on team membership, ranks and groups. The current Leader's player claims automatically participate. Other members can opt in their own root claims with /team claim link while standing in a claim they own.
Linking does not transfer ownership or spend team funds. The owner retains full access. To stop sharing a linked personal claim, stand in its root and run /team claim unlink. Leader-owned claims already use team trust and do not need linking. Admin claims cannot be linked through this path.
Understand the three trust levels
| Type | Purpose | Fresh team minimum |
|---|
| interact | Basic interaction such as doors and buttons | Initiates |
| container | Container access and lower interaction rights | Officers |
| build | Building access, plus container and interaction rights | Officers |
Build includes Container and Interact; Container includes Interact. A restrictive container threshold alone is not a complete security policy if another rule still grants Build. Review all applicable paths, including manual GP trust and any object override.
/team trust
/team trust interact INITIATES
/team trust container OFFICERS
/team trust build OFFICERS
/team claim list
/team access Alex
With no arguments, trust shows the team's rules and whether the bridge is active. Setting a threshold requires the trust action. Group thresholds follow group mappings; explicit rank thresholds follow the team's current rank order. Existing teams may retain legacy rank thresholds instead of the fresh group defaults.
/team claim list lists Leader-owned and linked personal claims with locations and thresholds. /team access explains your team/ally access in the current claim; add an online player's name to inspect their bridge access. This explanation is not a guarantee that every GP or siege condition permits the action.
Team grants are evaluated dynamically. They are not copied into GriefPrevention's manual trust list, so /trustlist alone does not show the complete team-access picture.
Back to top ↑PLAYERS / 09
Rooms, containers & temporary trust
Apply claim overrides, object rules, presets and timed grants.
Current claim and subdivisions
Stand inside a claim belonging to your team. Its actual owner can manage their linked personal claim; delegated team management needs the trust action and the correct team association.
/team trust here container OFFICERS
/team trust here build LEADERS
/team trust here container default
here sets the root claim policy. default returns that team rule to inheritance. For a subdivision, first use GP's /restrictsubclaim so parent permissions do not defeat a tighter rule, then use /team trust subclaim <type> <group|rank|default> while standing inside it. Check both container and build inheritance.
Choose a chest or door
- Run
/team trust this container OFFICERS, or select the chest control in the Claims menu. - Right-click the intended container within 30 seconds. For a door, use
/team trust this interact MEMBERS. - The selected block must still be in the same root claim you manage. The plugin rechecks ownership/access before saving.
An object-specific rule is evaluated specifically for that object. Use default to restore inheritance. Physical layout, other access routes, manually trusted players and GP restrictions still matter; inspect the result with an ordinary member account.
Presets and history
/team trust preset team-base applies all three configured thresholds to your current claim (or current subdivision for that preset path). The bundled private-storage preset uses Lieutenant for interaction and Leader for containers/building. Presets can be changed by the administrator, so review the menu's three displayed rules before applying. Use /team trust history to view recorded changes for the current claim.
Timed access
/team trust temporary Alex container 30
/team trust temporary team:Ember interact 60
The duration is 1–10,080 minutes, up to seven days. Player targets must be known to the server. A team target must be a mutual ally. Expiry ends this temporary grant; it does not revoke unrelated access the player already has. Grants are scoped to the claim and are recorded with an expiry timestamp, rather than requiring the recipient to stay online.
Back to top ↑PLAYERS / 10
Alliances
Agree to an alliance first, then grant claim access deliberately.
An alliance requires agreement from both teams. It does not merge membership, chats, ranks or treasuries, and accepting it does not automatically open claims.
/team ally request Ember
/team ally accept Ember
/team ally deny Ember
/team ally list
/team ally remove Ember
Use request on your side; the other team's authorized manager uses accept with your team's name. Deny rejects an incoming request. List shows mutual allies. Remove ends the relationship on both sides and makes ally-based claim grants inactive. The ally management action defaults to Leaders; viewing the list does not require that action.
Give allies access to a claim
Stand in the managed claim and use /team trust ally interact MEMBERS, for example, to grant qualifying allied members interaction. The threshold applies to the visiting allied player's team group or rank. It is a claim-level allied-team policy, not a named-team selector. /team trust ally container off disables that ally rule; review higher Build grants too.
Use a timed team:Name grant for a specific mutual ally and duration. Each claim-owning team chooses its own permissions independently; reciprocal alliance membership does not imply reciprocal land access. Online members of allied teams are notified when applicable access is granted.
Back to top ↑PLAYERS / 11
GriefPrevention essentials
The land-claim commands that complement your team.
/claim is GriefPrevention land creation. /team claim links or lists an existing claim. They are different commands. Claim tools, block allowances and claim costs come from GP's server configuration.
| Command | Use |
/claim <radius> | Create a claim around your location when eligible. |
/claimslist | Review your claims and claim-block allowance. |
/extendclaim <blocks> | Resize the current claim in the direction you face. |
/subdivideclaims, /basicclaims | Switch the claim tool between subdivision and ordinary claim modes. |
/restrictsubclaim | Stop a subdivision inheriting parent permissions. |
/accesstrust <player> | Manually grant basic interaction. |
/containertrust <player> | Manually grant container access and related GP rights. |
/trust <player> | Manually grant building access. |
/permissiontrust <player> | Allow the recipient to share their trust level with others. |
/untrust <player>, /trustlist | Revoke or inspect manual GP trust. Dynamic team grants remain separate. |
/abandonclaim | Remove the current claim protection. This does not disband a team. |
/abandontoplevelclaim | Remove a root claim and its subdivisions. |
/abandonallclaims | Remove all your claims. Use only when you intend to give up all that protection. |
/trapped | Ask GP to move you out of a claim under its eligibility and cooldown rules. |
/buyclaimblocks <amount>, /sellclaimblocks <amount> | Buy or sell allowance if the server enables Vault-based trading. |
/claimexplosions | Toggle the claim's explosive-use setting, subject to GP rules. |
Stand inside the intended claim before changing manual trust, and read the response. GP commands can have broader scopes when used outside claims. Trusting a player is a meaningful grant: team membership does not protect you from someone you deliberately allow to open containers or build.
Back to top ↑PLAYERS / 12
Siege: Seasonal world only
ProtoSMP enables siege only in the Seasonal world.
SEASONAL WORLD ONLYSiege mode is enabled only in the Seasonal world. It is not enabled in other worlds.
In the Seasonal world, /siege <player> asks GriefPrevention to start a siege against an eligible player. It is a GP feature, not a SimpleTeams command. Being on a team does not start a siege, extend siege to other worlds, or automatically grant victory.
The command checks the world, player eligibility, proximity to the claim, existing sieges, immunity and cooldowns. Admin claims cannot be besieged through this path. A failed attempt explains the applicable restriction in chat.
What changes during a siege?
GriefPrevention applies its configured siege rules to the encounter. The list of breakable blocks, post-siege door-access duration and cooldown are server settings. Do not assume a team trust threshold overrides those rules or that this wiki's normal access examples promise siege protection. Follow the current in-game messages and ProtoSMP's Seasonal rules.
Normal team membership and treasury rules still apply. Siege is not a permission to withdraw bank funds. Container access, physical banknotes and claim interactions are separate from a shared bank balance. Ask staff about any live siege rule not shown in game; this handbook does not invent a loot window or a block-breaking whitelist.
Back to top ↑PLAYERS / 13
Your team treasury
Keep shared funds separate from personal money and debt.
- Open
/bank or select Team bank in /team. - Choose the currency.
- Open Team treasury, available when the team bridge grants View.
- Choose an allowed deposit or withdrawal action and follow its amount/confirmation flow.
The team treasury belongs to the team UUID, not to its name or Leader. Renaming the team or transferring leadership keeps the same account identity. Different currencies have separate balances, and personal balances remain separate from the team's balance.
| Right | Default group | Purpose |
|---|
| View | Initiates | See the treasury. |
| Deposit | Initiates | Fund it from a personal account or selected notes. |
| Withdraw | Officers | Move funds to a personal account or notes through the supported flow. |
| Manage | Leaders | Authorize applicable treasury management/closure checks. |
No team overdraft
Team accounts have no fees, overdraft or debt interest. They can only spend funds they hold. A player's unlimited-overdraft permission does not turn a team account into a credit account. Positive team balances may earn savings interest when configured.
You may fund a team deposit using personal overdraft if your personal plan, credit availability and penalties permit it. The resulting debt belongs to your personal account. Your personal transaction rules and fees can still apply even though the receiving team account has no fees.
Before you close a team
Empty every currency, not just the one you last viewed. The plugin checks the treasury centrally when disbanding, when the Leader leaves, and when an admin removes the Leader or disbands the team. Funds are not automatically distributed. A bank-linked team cannot be deleted while the economy integration is unavailable.
Back to top ↑PLAYERS / 14
Personal banking, fees & debt
Read your account, understand its cycle, and avoid confusing credit with savings.
/bank (also /azobank) opens currency/account menus. The account screen shows signed balance, debt, pending fees, pending interest, available credit, transactions remaining, reset time, strikes and any scheduled plan. The statement includes recent journal history.
A negative balance is debt. Available credit is how much further spending your account can support, not money you own. Pending obligations reserve credit too. Incoming money reduces a negative balance naturally, but it does not cancel pending charges.
Transactions and plan changes
Successful outgoing operations that use bank funds count against your cycle allowance. Incoming credits and cash-only purchases do not. Normally, spending after the allowance uses the plan's configured overage fee. Plans may allow rollover of unused transactions. Comparing and selecting a new plan schedules it for renewal; it does not instantly refill your allowance.
Read the reset time, not “monthly.” This fork measures cycles in elapsed Minecraft days: one day equals 20 real minutes. A configured 30-day cycle is 10 real hours, not a calendar month. Logging out, sleeping and changing world time do not pause the clock.
Interest
Ordinary overdraft interest is assessed at renewal from bank debt. Borrowing cash at an ATM assesses cash interest immediately on the newly borrowed portion and records it as pending until renewal. The first term tracks that cash borrowing to avoid charging both first-term rates on the same portion.
For example, withdrawing 100 from a balance of 40 borrows 60. At a hypothetical 5% cash rate, 3 is recorded as pending interest. Depositing money later reduces the outstanding borrowed principal but does not refund that already-assessed charge. Rates are examples; the selected plan defines the real percentages.
Positive bank balances can earn configured savings interest. Inventory cash does not earn bank interest. Personal and team savings are calculated separately. Due cycles catch up while you are offline, in time order, so unpaid debt or retained savings can compound.
Failed billing
If renewal cannot be paid, the account drops to the free plan and records a strike while keeping outstanding debt and pending charges. Borrowing perks—including unlimited overdraft—stop providing debt spending. After the free allowance is exhausted, bank payments are denied; earnings and cash-only payments can still be possible.
Forgiveness begins only after your balance is strictly positive and all pending obligations are zero. Stay in that state for the configured forgiveness duration. A relapse resets the timer. Time never writes off debt, and there are no separate loan contracts in this release.
Back to top ↑PLAYERS / 15
Banknotes, ATMs & payments
Use physical currency and understand where the money comes from.
When enabled for a currency, banknotes represent value using database-backed unique note IDs. Their material, name and denomination are configurable. Ordinary renamed paper is not a valid note, and copying a note does not create another redeemable balance.
Use /bank atm near a registered ATM block, or interact through the available ATM flow. Without remote access, the command requires a registered ATM within four blocks. Choose the currency, add denominations to the withdrawal draft, review the total and charges, then confirm. In the denomination draft, left-click adds and right-click removes. Deposits select actual valid notes.
Leave inventory space for a withdrawal. Do not discard a note while troubleshooting a delivery problem; ask staff to inspect its ledger state. Cash-first, account-first or account-only payment priority is a currency setting. An ATM withdrawal that needs overdraft can create pending cash interest as explained in Personal banking.
Paying and receiving
The bank's Pay a player flow accepts a recipient and amount in chat and asks you to confirm. Currency-specific balance, send, exchange and top commands depend on the server's configured labels; use their help or tab completion instead of assuming a universal /eco alias.
Player transfers, team transfers and cash redemption move existing value. Ordinary mob/ore rewards, selling to an admin shop and admin give operations create currency. They are not automatically deducted from Protosmp's treasury. The economy has no automatic inflation adjustment; staff control reward rates and configured costs.
Back to top ↑PLAYERS / 16
Player command reference
Every registered Teams player command, plus the advanced trust forms.
Permissions are listed in the admin reference. Most commands require a player; info, list, top and help also support console. The direct rank and trust forms below supplement the legacy help text.
| Command | Purpose |
|---|
/team / /team gui | Open your team management menu. |
/team accept | Accept a pending team invite |
/team access [online player] | Explain team and ally trust in this claim |
/team ally <request|accept|deny|remove|list> [team] | Manage mutually agreed team alliances |
/team ban <player> | Ban a known online/offline player from this team. |
/team chat [message] | Toggle team-only chat mode |
/team claim <link|unlink|list> | Link, unlink or list team-associated claims |
/team close | Close team from public joining |
/team create <name> | Create a team; configured creation price and limits apply. |
/team demote <player> | Move an online lower-ranked member down the enabled ladder. |
/team deny | Deny a pending team invite |
/team disband [team] | Disband your team; every treasury currency must be empty. |
/team edit <prefix|name|description|color|motd> <value> | Edit team settings |
/team permissions [action <group>] | Open group rules, or save /team permissions <action> <group>. |
/team help | Show this help menu |
/team info [team] | Show your team, or a named team. |
/team invite <player> | Invite a player to your team |
/team join <team> | Join an open team |
/team kick <player> | Remove an online lower-ranked member. |
/team leave | Leave your team; a departing Leader disbands it if closure is allowed. |
/team list | List all teams |
/team gui | Open team management |
/team officerchat [message|group <group>] | Toggle officer chat, send a message or configure its group |
/team open | Open team to public joining |
/team promote <player> | Move an online lower-ranked member up the enabled ladder. |
/team rank [list|<level/alias> <name|color|icon|lore|group|order|enable|disable> [value]] | Open the editor, list ranks, or edit a stable rank slot. |
/team top | Rank teams by member count. |
/team trust [interact|container|build] [rank] | View team trust; set group/rank thresholds. Advanced forms below. |
/team unban <player> | Remove a team ban; does not rejoin the player. |
/tc [message] | Toggle/send team chat. |
/to [message] / /toc [message] | Toggle/send officer chat. |
Advanced trust syntax
| Command | Purpose |
|---|
/team trust <type> <group|rank> | Set the team-wide minimum. |
/team trust here <type> <group|rank|default> | Set the current root claim policy. |
/team trust subclaim <type> <group|rank|default> | Set a restricted subdivision policy. |
/team trust this <type> <group|rank|default> | Arm a 30-second right-click object selection. |
/team trust ally <type> <group|rank|off> | Set an allied-team policy for the claim. |
/team trust temporary <player|team:Name> <type> <minutes> | Grant temporary access for 1–10,080 minutes. |
/team trust preset <name> | Apply the configured three-rule preset. |
/team trust history | Inspect recorded changes in the current claim. |
<type> is interact, container or build. Thresholds accept groups or stable rank IDs/aliases. Use default only for team overrides, and off only for ally rules. See the claim guides before using broader grants.
Back to top ↑PLAYERS / 17
Common questions
Practical answers when a command, claim or bank action is blocked.
Why can I see a command but not use it?
Help and completion can show commands for which you have a Bukkit node. Your team action group, relative rank, claim ownership and target eligibility are checked when you run the command.
Why does changing a rank name not unlock officer chat?
The permission group controls officer chat, not its cosmetic name. Ask a permissions manager to check the rank's group and the officerchat minimum, plus the server node.
Why can someone open a chest despite a restrictive rule?
Check Build inheritance, object overrides, restricted subdivisions, temporary access, mutual-ally grants and manual GP trust. Use both /team access and /trustlist. Siege conditions are separate.
Why did my editor refuse to save?
The team may have changed since the draft opened, or your permission/rank may have changed. Reopen it. Also check protected Leader rules, occupied disabled ranks, unique order positions and valid item/color values.
Why is the team-bank button missing?
The compatible economy service must be present and your team group must allow viewing. Opening banking also requires economy access; team operations require simpleteams.player.bank for online users.
Why can't I disband an apparently empty team?
Another currency may still have funds. If the team was bank-linked and the economy is unavailable, closure remains blocked. Ask staff to restore the service and verify every currency.
Can I leave my debt behind by leaving a team?
No. Personal debt belongs to your player account. A deposit funded by your borrowing does not move that debt into the team account.
Will going offline stop interest?
No. Renewals use elapsed real time and catch up chronologically. Check the account reset time and plan rates.
Can I siege outside the Seasonal world?
No. ProtoSMP enables siege only in the Seasonal world.
Back to top ↑ADMINS / 18
Installation & compatibility
Supported versions, optional bridges, build and ProtoSMP deployment.
This handbook targets SimpleTeams 2.4.0-azo on Paper 26.2 and 26.3 with Java 26. Optional integrations are the Azo GriefPrevention 16.18.7-teambridge2-azo API, Azo ExcellentEconomy 2.8.0-azo.1, Vault and PlaceholderAPI. Economy requires its compatible NightCore dependency. Folia support is not advertised for this GUI/banking release.
Base team features work without the economy service. Claim integration requires the custom GP bridge, including ClaimAdditionalTrustEvent#getTriggeringEvent; a stock or older GP jar does not supply the same integration contract. Banking requires the compatible TeamTreasuryBridge registration.
Build from source
git pull
./compile.sh
The build uses Java 26 and Maven. It installs the provided custom GP, economy and Vault APIs from the standard-named jars in the ProtoSMP plugins directory into the local Maven cache, then runs mvn clean verify. Override their locations with SIMPLETEAMS_GP_JAR, SIMPLETEAMS_ECO_JAR and SIMPLETEAMS_VAULT_JAR when building elsewhere.
The output is target/SimpleTeams-2.4.0-azo.jar. Runtime optionality does not remove compile-time dependency requirements.
Deploy to ProtoSMP
- Stop the server and back up plugin data and the economy database.
- Move any old differently named SimpleTeams jar outside the plugins directory.
- Run
./deploy.sh after compiling. - Start the server and inspect integration/startup messages.
The Teams deploy script targets only /opt/minecraft/multicraft/servers/protosmp/plugins, rejects arguments and duplicate differently named jars, and does not build or restart the server. Do not confuse it with another fork's deployment script.
Back to top ↑ADMINS / 19
All Teams permission nodes
Bukkit permissions, internal group rules, limits and prefix privileges.
simpleteams.player.* is declared default true and contains the player nodes below. simpleteams.admin.* defaults to OP and contains the five admin nodes. Specific permission negations can restrict access. Internal team group checks remain in force even when a command node is granted.
| Permission node | Purpose |
|---|
simpleteams.player.create | Create a new team |
simpleteams.player.trust | View or set minimum team ranks for claim trust |
simpleteams.player.claim | Link, unlink or list team-associated claims |
simpleteams.player.access | Explain team and ally trust in this claim |
simpleteams.player.ally | Manage mutually agreed team alliances |
simpleteams.player.join | Join an open team |
simpleteams.player.leave | Leave your current team |
simpleteams.player.info | View team information |
simpleteams.player.list | List all teams |
simpleteams.player.top | Top teams by member count |
simpleteams.player.open | Open team to public joining |
simpleteams.player.close | Close team from public joining |
simpleteams.player.kick | Kick a member from your team |
simpleteams.player.promote | Promote a team member |
simpleteams.player.demote | Demote a team member |
simpleteams.player.disband | Disband your team |
simpleteams.player.ban | Ban a player from your team |
simpleteams.player.unban | Unban a player from your team |
simpleteams.player.edit | Edit team settings |
simpleteams.player.invite | Invite a player to your team |
simpleteams.player.accept | Accept a pending team invite |
simpleteams.player.deny | Deny a pending team invite |
simpleteams.player.chat | Toggle team-only chat mode |
simpleteams.player.officerchat | Toggle officer chat, send a message or configure its group |
simpleteams.player.gui | Open team management |
simpleteams.player.ranks | Edit rank names, icons, lore, groups and order |
simpleteams.player.permissions | View/edit permission-group rules |
simpleteams.player.bank | Online team-bank bridge access |
simpleteams.player.help | Show this help menu |
simpleteams.admin.disband | Named-team disband, with bank protection. |
simpleteams.admin.kick | Administrative online-member removal. |
simpleteams.admin.setleader | Protected leadership transfer to an online member. |
simpleteams.admin.reload | Reload config, messages and team data. |
simpleteams.admin.bypass | Join a closed team without an invitation; other join checks remain. |
Member capacity
simpleteams.maxmembers.<positive integer> sets the Leader's team capacity. The highest granted numeric value wins; values do not add together. simpleteams.maxmembers.unlimited overrides finite grants and defaults false. Without these grants, use limits.max-members-per-team. The Leader counts as a member. Offline leaders use the saved effective limit until refreshed.
Prefix style nodes
| Use node | Free-price node | Style |
|---|
simpleteams.prefix.minimessage | simpleteams.prefix.free.minimessage | MiniMessage formatting |
simpleteams.prefix.legacy-color | simpleteams.prefix.free.legacy-color | Legacy color, e.g. &c |
simpleteams.prefix.legacy-format | simpleteams.prefix.free.legacy-format | Legacy formatting, e.g. &l |
simpleteams.prefix.rgb | simpleteams.prefix.free.rgb | RGB color, e.g. &#ff8800 |
All listed prefix-style and free-style nodes default false. Plain prefixes are free. Mixed styles need every applicable use node, then charge the highest non-exempt price. The global colored-prefix setting can still disable formatted prefixes. A previously saved prefix does not automatically disappear when the Leader loses a formatting permission; the next edit is validated again.
Administrative node semantics
simpleteams.admin.bypass bypasses the closed-team invitation requirement when joining. It is not a universal team, ban, capacity or bank-safety bypass. simpleteams.admin.disband authorizes the named-team form, but the command dispatcher still checks simpleteams.player.disband first. Account for this if you negate the player wildcard for staff.
Back to top ↑ADMINS / 20
Administrator commands
Moderation, leadership transfer, reload and banking tools.
| Command | Required node(s) | Behavior |
|---|
/team disband <team> | simpleteams.player.disband + simpleteams.admin.disband | Disband a named team. Bank safeguards still apply. |
/team adminkick <player> | simpleteams.admin.kick | Admin: kick player from any team; player or console. |
/team reload | simpleteams.admin.reload | Reload config, messages and teams.yml; player or console. |
/team setleader <team> <player> | simpleteams.admin.setleader | Admin: transfer team leadership; player or console. |
/team setleader requires an online target already in the team. The old Leader moves to the highest enabled nonleader rank. The team UUID and treasury identity stay unchanged. The new Leader's capacity is cached, linked claim policies are cleared, and team inventories are closed. Review land access afterwards: current-Leader ownership is dynamic, and personal links/policies need deliberate re-establishment.
Admin kick uses an online target. Kicking the Leader takes the disband path, including the treasury guard. Administrative disband does not erase or distribute funds. Empty all currencies first.
Related economy tools
| Command | Access | Result |
/bank edit <currency> | Player; bank.use + admin.bank | Open live currency draft editor. |
/bank treasury <currency> | Console/player; admin.treasury | Print treasury UUID and signed balance. |
/bank atm create | Player; bank.use + admin.bank | Register the targeted block within five blocks. |
/bank atm remove | Player; bank.use + admin.bank | Remove that ATM registration. |
Economy nodes in that table are relative to excellenteconomy.. Supply the currency ID explicitly; omission selects the first ID in sorted order. Console supports only the treasury path of /bank. Currency-specific give, take, set, balance, send and exchange labels follow the currency's configured commands. Admin give creates money, take removes it, and set directly adjusts it. Active banking reset operations are rejected rather than erasing debt.
Back to top ↑ADMINS / 21
PlaceholderAPI reference
Every fixed Teams placeholder and all leaderboard patterns.
The expansion identifier is simpleteams and the expansion is supplied by this plugin when PlaceholderAPI is present. Use the exact percent-delimited forms below in compatible scoreboard, tab-list or chat configurations.
| Placeholder | Output |
|---|
%simpleteams_has_team% | true or false |
%simpleteams_team% | Actual team name |
%simpleteams_team_plain% | Plain prefix (legacy compatibility) |
%simpleteams_team_formatted% | Legacy-formatted prefix (legacy compatibility) |
%simpleteams_prefix% | Legacy-formatted prefix |
%simpleteams_prefix_plain% | Plain prefix |
%simpleteams_prefix_formatted% | Legacy-formatted prefix |
%simpleteams_rank% | Canonical legacy rank display name |
%simpleteams_rank_name% | Retained enum alias, e.g. SERGEANT |
%simpleteams_rank_display% | Custom per-team rank display name |
%simpleteams_rank_display_formatted% | Custom rank name with configured color, legacy output |
%simpleteams_rank_level% | Stable level_1 … level_15 ID |
%simpleteams_rank_order% | Current numeric hierarchy position |
%simpleteams_rank_group% | LEADERS / OFFICERS / MEMBERS / INITIATES |
%simpleteams_rank_color% | Configured #RRGGBB color |
%simpleteams_leader% | Leader player name, if known |
%simpleteams_size% | Member count; 0 without a team |
%simpleteams_kills% | Team kills; 0 without a team |
%simpleteams_deaths% | Team deaths; 0 without a team |
%simpleteams_kd% | KD to two decimals; 0.00 without a team |
%simpleteams_kdr% | Alias of kd |
%simpleteams_max_size% | Effective team member limit (raw numeric output) |
%simpleteams_description% | Team description |
%simpleteams_color% | Stored team color |
%simpleteams_status% | Open or Closed |
%simpleteams_motd% | Team message of the day |
%simpleteams_created% | Creation date in yyyy-MM-dd |
Text/rank fields normally return an empty string without a team. Numeric fields use the fallbacks noted above; max_size resolves the configured limit rather than a blank label.
Compatibility quirk: team_plain and team_formatted are prefix outputs. Use %simpleteams_team% for the actual team name. Use the newer rank_display placeholders for custom per-team rank names.
Leaderboard patterns
| Pattern | Returns | Example |
%simpleteams_<stat>_top_<n>% | Team name at 1-based position n | %simpleteams_kills_top_1% |
%simpleteams_top_<stat>_<n>% | Equivalent alternative form | %simpleteams_top_members_1% |
%simpleteams_<stat>_rank_<teamName>% | That team's 1-based position | %simpleteams_kd_rank_Ember% |
%simpleteams_<stat>_<teamName>% | That team's statistic value | %simpleteams_kills_Ember% |
Supported stat tokens: kills, deaths, members, size, kd, kdr and kdratio. Size aliases members; kdr and kdratio alias kd. Sorting is descending, including deaths. KD has two decimal places and treats zero deaths as kills. Invalid ranks or unknown teams return unresolved/null for leaderboard lookups; no viewer context returns an empty result. Do not promise a fixed tie-break ordering.
These are team statistics, not bank-balance placeholders. No new team-treasury placeholder is declared by this Teams expansion. Keep currency/economy placeholders tied to their own provider instead of inventing a simpleteams_bank placeholder.
Back to top ↑ADMINS / 22
Teams configuration reference
Default values, messages, rank profiles and which edits affect existing teams.
config.yml contains limits, formatting, trust defaults, presets, creation/prefix prices and new-team rank profiles. messages.yml contains command responses. Existing values survive the additive defaults migration; the values below describe bundled defaults, not a claim about the live server.
| Path | Bundled default | Meaning |
|---|
prefix | "<#1E3A5F>[<#4A90E2>SimpleTeams</#4A90E2>]</#1E3A5F> " | Message prefix |
limits.max-teams | 100 | Maximum teams |
limits.max-members-per-team | 20 | Fallback capacity, including Leader |
limits.max-name-length | 24 | Maximum team-name length |
limits.min-name-length | 3 | Minimum team-name length |
limits.max-prefix-length | 16 | Visible prefix length |
limits.max-description-length | 128 | Visible description length |
limits.max-motd-length | 128 | Visible MOTD length |
limits.allow-colored-prefix | true | Global formatted-prefix switch |
limits.default-prefix-format | "<dark_gray>[<white>{name}</white>]</dark_gray>" | Initial prefix template |
validation.allowed-name-chars | "a-zA-Z0-9_-" | Allowed name character class |
validation.blacklisted-names | [] | Blocked names |
chat.enabled | true | Public chat integration |
chat.format | "{team_prefix}<#FFFFFF>{player}</#FFFFFF><#1E3A5F>:</#1E3A5F> <#7BA7D9>{message}</#7BA7D9>" | Public chat format |
invites.enabled | true | Enable invitations |
invites.expire-seconds | 60 | Invitation lifetime in seconds |
team-chat.enabled | true | Team channel enabled |
team-chat.format | "<#1E3A5F>[<#4A90E2>Team Chat</#4A90E2>]</#1E3A5F> <#7BA7D9>{rank} {player}:</#7BA7D9> <#FFFFFF>{message}</#FFFFFF>" | Team chat template |
top.entries | 15 | Member leaderboard size |
motd.show-on-join | true | Display team MOTD on login |
update-checker.enabled | false | Update checks |
trust-bridge.enabled | true | Dynamic GP team trust |
trust-bridge.group-defaults.interact | "INITIATES" | Initial group/rank threshold |
trust-bridge.group-defaults.container | "OFFICERS" | Initial group/rank threshold |
trust-bridge.group-defaults.build | "OFFICERS" | Initial group/rank threshold |
trust-bridge.defaults.interact | "PROSPECT" | Initial group/rank threshold |
trust-bridge.defaults.container | "LIEUTENANT" | Initial group/rank threshold |
trust-bridge.defaults.build | "LIEUTENANT" | Initial group/rank threshold |
trust-presets.team-base.interact | "PROSPECT" | Preset trust threshold |
trust-presets.team-base.container | "LIEUTENANT" | Preset trust threshold |
trust-presets.team-base.build | "LIEUTENANT" | Preset trust threshold |
trust-presets.private-storage.interact | "LIEUTENANT" | Preset trust threshold |
trust-presets.private-storage.container | "LEADER" | Preset trust threshold |
trust-presets.private-storage.build | "LEADER" | Preset trust threshold |
economy.team-creation-price | 0.0 | Vault creation charge; 0 free |
economy.prefix-change-prices.minimessage | 0.0 | Style price; highest non-exempt price applies |
economy.prefix-change-prices.legacy-color | 0.0 | Style price; highest non-exempt price applies |
economy.prefix-change-prices.legacy-format | 0.0 | Style price; highest non-exempt price applies |
economy.prefix-change-prices.rgb | 0.0 | Style price; highest non-exempt price applies |
internal.defaults-version | "2.4.0-azo" | Defaults migration marker |
officer-chat.format | "<gold>[Officer] <rank> <player>: <white><message>" | Officer chat template |
Rank profile defaults
Each ranks.level_N entry has name, color, icon, lore, group, order and enabled. New teams copy those defaults. Existing teams retain their saved profiles, so changing YAML defaults or reloading does not rename every existing team's ranks. Edit an existing team through its commands or GUI.
Trust defaults and presets
trust-bridge.group-defaults initializes new teams to Initiates for interaction and Officers for containers/build. Legacy rank defaults are Prospect/Lieutenant/Lieutenant. Saved thresholds remain compatible. Presets under trust-presets.<name> supply three rules; missing preset fields inherit DEFAULT. Validate every rule before relying on a preset in restricted subdivisions.
Formats and text
Team chat uses team-chat.format; officer chat uses officer-chat.format. Sender/message/rank substitutions are handled as literal Adventure placeholders for those channels. The older public chat format is under chat.format. Keep the bundled placeholder spelling for the format you edit instead of assuming all format systems share syntax.
Reload boundaries
/team reload reloads config, messages and team data. Direct team-management commands persist immediately. Use a full restart for plugin jar changes and integration installation. Do not use the server-wide /reload as the deployment procedure.
Back to top ↑ADMINS / 23
Claims & siege administration
Bridge requirements, policy storage and Seasonal-only configuration.
The GP bridge evaluates additional team/ally grants at permission checks, using the original triggering event for object-specific policies. It does not rewrite GP's manual trust lists. Rules are stored in SimpleTeams/claim-rules.yml, separately from GP's claim storage and teams.yml.
Check the current Leader's UUID, the root claim owner, linked personal claim membership, restricted subdivisions, object rules and mutual alliances when diagnosing access. A higher team group is not a global GP administrator. Manual GP trust can still provide access independently, and siege handling can constrain or alter the final outcome.
Seasonal-only siege policy
ProtoSMP's rule is explicit: siege is enabled only in the Seasonal world. GP implements this through GriefPrevention.Siege.Worlds. Configure the exact Bukkit world name for the Seasonal world as the only entry; display names and folder names are not automatically interchangeable.
GriefPrevention:
Siege:
Worlds:
- YOUR_EXACT_SEASONAL_WORLD_NAME
This is a template, not a literal world name. Do not add other worlds. BreakableBlocks, DoorsOpenDelayInSeconds and CooldownEndInMinutes under Siege control separate behavior. The fork's defaults for the latter two are 300 seconds and 60 minutes, but this handbook does not assert that production uses those values. An explicit empty BreakableBlocks list differs from accepting the bundled breakable-block defaults.
Relevant GP nodes and tools
| Node | Relevant access |
griefprevention.claims | Core claim/trust commands; default true. |
griefprevention.createclaims | Claim creation; default true. |
griefprevention.buysellclaimblocks | Configured Vault claim-block trading; default true. |
griefprevention.siege | /siege; default true, still requires enabled world and eligibility. |
griefprevention.siegeimmune | Siege immunity; default OP. |
griefprevention.siegeteleport | Teleporting into/out of besieged areas; default OP. |
griefprevention.claimslistother | /claimslist <player> for others; default OP. |
griefprevention.ignoreclaims | /ignoreclaims; default OP. Disable bypass while testing member access. |
griefprevention.reload | /gpreload; default OP. |
griefprevention.adjustclaimblocks | /adjustbonusclaimblocks, /adjustbonusclaimblocksall and /setaccruedclaimblocks; default OP. |
griefprevention.deleteclaims | /deleteclaim and /deleteallclaims; default OP. |
griefprevention.transferclaim | /transferclaim <player>; default OP. |
griefprevention.adminclaims | Admin-claim tools; default OP. |
These are the GP permissions relevant to this handbook, not a replacement for the full GP administration manual. GP claim deletion and transfer are separate from team disband and setleader. Review associations after ownership changes and test using ordinary accounts without OP bypass.
Back to top ↑ADMINS / 24
Economy configuration & treasury
Plans, account identity, monetary flows and live currency editing.
Banking is optional per currency. Missing Banking/Banknotes sections leave those features disabled, so an upgrade does not silently convert every currency. Keep existing currency IDs and storage columns. Use the compatible ExcellentEconomy fork and its own documented migration path.
Banking settings
| Path under Banking | Default | Meaning |
|---|
Schema | 0 if missing | Versions above 1 rejected |
Enabled | false | Enable banking for this currency |
Precision | 8 decimal / 0 integer | 0–8; preserve after activation |
Free_Plan | free | Existing zero-price plan ID |
Payment_Priority | ACCOUNT_ONLY | ACCOUNT_ONLY, CASH_FIRST or ACCOUNT_FIRST |
Savings_Funding | DISABLED | DISABLED, TREASURY or CREATE |
Forgiveness_Seconds | 86400 | Sustained positive/debt-cleared duration |
Treasury.UUID | empty | Real treasury Minecraft UUID |
Treasury.Name | Protosmp | Optional profile label |
Treasury.Collect_Fees | false | Route collected fees/interest to treasury |
Plans | empty | Plan-ID map required for enabled banking |
Plan fields
| Field under Banking.Plans.<id> | Default | Meaning |
|---|
Name | Plan ID | Display label |
Cycle_Minecraft_Days | 30 | Elapsed 20-minute days |
Price | 0 | Recurring price at renewal |
Transactions | 10 | Base allowance; -1 unlimited |
Overage_Fee | 0 | Flat charge after allowance |
Rollover | false | Carry unused allowance after successful billing |
Rollover_Cap | 0 | Maximum carry; negative uncapped |
Overdraft | 0 | Finite personal borrowing limit |
Unlimited_Overdraft | false | Unlimited unless penalized |
Debt_Interest_Percent | 0 | Per-cycle ordinary debt interest |
Cash_Interest_Percent | 0 | Newly borrowed cash interest |
Savings_Interest_Percent | 0 | Positive bank balance interest per cycle |
The free plan must exist and have zero recurring price. Plan monetary values must be nonnegative and fit the currency precision. Transactions uses -1 for unlimited. Rollover_Cap 0 carries none; a negative cap is uncapped. Rates are percentages per configured cycle, not APR. Existing accounts keep their term snapshots until renewal; changes do not reset their allowances immediately.
Protosmp treasury
Configure the real Minecraft UUID under Banking.Treasury.UUID; the name is only a label. That account has unlimited overdraft and transactions, no plan/transaction fees and no debt, cash or savings interest. The exemption applies online and offline without permission nodes. A similarly named player with a different UUID is not the treasury.
/bank treasury <currency> reports its actual signed balance. Collected fees and interest credit it when Collect_Fees is enabled; otherwise collected value leaves circulation. Savings funding can be DISABLED, TREASURY or CREATE. With TREASURY, a payout debits Protosmp; with CREATE, it creates value. Team balances can earn positive savings interest separately from personal balances.
Ordinary reward/admin-shop deposits and admin give operations create currency. They are not automatically treasury-funded. An integration must deliberately use the treasury payout API for that behavior. ProtoLottery needs its own integration change before describing lottery payouts as treasury-funded.
Live currency editing
/bank edit <currency> opens a draft editor. Review and save supported currency/plan/note settings for a targeted live update. Keep identity, storage and precision changes out of casual live edits; restart after manual command/storage configuration changes. There is no automatic ledger export or precision-conversion utility.
The current player account menu exposes pending fee and interest totals, debt and reset time. Richer itemized pending-charge presentation, a player exchange GUI and some menu pagination remain release limitations; do not advertise them as finished screens.
Back to top ↑ADMINS / 25
Banking permissions & bonuses
Exact access nodes, additive plan bonuses and fee discounts.
| Node | Default | Meaning |
excellenteconomy.bank.use | True | Bank command/menu. |
excellenteconomy.bank.atm | True | ATM use. |
excellenteconomy.bank.atm.remote | OP | Bypass ATM proximity. |
excellenteconomy.admin.bank | OP | Currency editor and ATM registration. |
excellenteconomy.admin.treasury | OP | Treasury balance command. |
simpleteams.player.bank | Player wildcard child | Online team-bank bridge authorization, alongside team action rules. |
| Node example | Effect |
|---|
excellenteconomy.bonus.transactions.10 | Add 10 to the plan allowance. |
excellenteconomy.bonus.transactions.unlimited | Unlimited transactions unless penalties restrict them. |
excellenteconomy.bonus.overdraft.1000 | Add 1,000 to personal plan overdraft. |
excellenteconomy.bonus.overdraft.unlimited | Unlimited personal overdraft unless penalized. |
excellenteconomy.discount.fees.10 | 10% discount on transaction fees and recurring plan price. |
excellenteconomy.discount.interest.10 | 10% discount on debt/cash interest; does not boost savings. |
Replace example numbers with the desired grant. Currency-scoped forms are excellenteconomy.currency.<id>.<suffix>, for example excellenteconomy.currency.pc.bonus.overdraft.1000. The highest applicable numeric grant wins across global and currency-scoped nodes. Numeric grants do not add to one another, but the winning bonus adds to the plan base. Discounts clamp to 0–100.
Unlimited bonus nodes default false. Strikes override credit perks, including unlimited, and prevent unlimited transaction perks bypassing the penalty allowance. Effective permissions refresh on the main thread for online players; offline billing retains the last saved values. A changed offline LuckPerms grant may not affect a bill until the next refresh.
The configured treasury exemption needs none of these bonus nodes. Team accounts never gain overdraft from them. Upstream economy command/currency nodes remain under their existing command configuration; avoid granting broad wildcards merely to diagnose a single bank operation.
Back to top ↑ADMINS / 26
Storage, UUIDs & backups
Preserve team identity and financial records across changes.
| Store | Contains | Identity |
|---|
| SimpleTeams/teams.yml | Teams, member ranks, profiles, rules, revision and bank-linked metadata | Stable team UUID + member Minecraft UUIDs |
| SimpleTeams/claim-rules.yml | Claim links, scoped trust policies, temporary grants and history | GP claim IDs linked to team/player identities |
| GriefPrevention data | Land claim ownership and manual trust | GP claims and owner UUIDs |
| Economy SQL ledger | Balances, obligations, renewals, journal and note state | Account owner UUID + currency ID |
Economy account keys are player:<Minecraft UUID>:<currency ID> and team:<team UUID>:<currency ID>. Team names and Leader UUIDs are not substitutes for the team UUID. A rename or leadership transfer must not create a replacement bank account.
BankStore uses the existing ExcellentEconomy JDBC connector and table prefix. Suffixes are _bank_accounts, _bank_journal, _bank_notes and _bank_lock. Account documents record signed balance, term snapshot, renewal, usage, pending charges, cash-interest tracking, strikes and saved bonuses.
A legacy native player balance seeds a newly managed account. Afterwards the banking ledger is authoritative; the old native row is not a continuously synchronized mirror. Editing that row will not reliably change a managed account. Balances, fee recipients, journal records and note state commit together in SQL; physical inventory delivery happens after that commit.
Back up team data, GP claims, the complete economy database and relevant player/world inventories together before a coordinated migration. Do not delete bank-linked metadata or database rows to get around a closure guard. There is no automatic journal/note pruning or third-party team-bank conversion in this release.
Back to top ↑ADMINS / 27
Upgrades & settings migration
Add new defaults while preserving existing teams and configuration.
- Stop the server. Save a matched backup of SimpleTeams, GP, economy data and inventories when cash is involved.
- Test the upgrade on an isolated copy using the same currency and world identities.
- Replace the jar and start with Java 26 on supported Paper.
- Inspect migration/startup logs and the timestamped config/message backups.
- Check old teams, legacy ranks, trust rules, member limits, prefixes and every funded currency.
Config/messages migration adds missing defaults while preserving existing leaf values and custom keys. It writes a backup before rewriting. Bundled comments are rebuilt; arbitrary custom comments are not guaranteed to survive. The defaults marker is internal.defaults-version: 2.4.0-azo.
Teams gain schema 3 with rank profiles, group overrides, revision and optional bank-linked metadata. Team/member UUIDs and retained legacy rank aliases survive. The first legacy-team persistence creates a teams.yml backup, and saves use temporary files with atomic replacement where available. Unknown ranks and future schemas fail loading rather than silently dropping teams.
Fresh defaults such as 15 leaderboard entries do not overwrite an existing configured value of 10. Global rank defaults initialize new teams only. Saved trust thresholds remain valid and can be deliberately migrated to group thresholds through commands or GUI.
Rollback
An older jar cannot interpret every new rank slot or profile. Restore a matched pre-upgrade team/config backup when rolling back, and coordinate it with the economy state. Rolling back only the plugin jar after assigning intermediate ranks is insufficient. Native economy balances are not a safe substitute for a current banking-ledger backup.
Back to top ↑ADMINS / 28
Troubleshooting & release checks
Known verification, operational checks and current limitations.
The release's Maven verification covers 16 regression tests, including rank migration, stable identities, group behavior, profile/rule persistence, invalid/future data rejection, claim inheritance, membership, prefixes and officer chat. Disposable probes passed on Paper 26.2-132 and 26.3-166 with banking present and absent.
Inventory probes use simulated players. Real connected-player clicks, chest selection, live shop interactions, siege behavior and large-team performance still need deployment testing. Economy MySQL validation and cross-server cash coordination are not implied by SQLite regression success.
Before opening to players
- Use ordinary test accounts from each of the four internal groups; test both sending and receiving officer chat.
- Verify a known offline member can be assigned an eligible rank in the menu, while protected Leader/equal-rank changes fail.
- Test a Leader claim, linked personal claim, restricted subdivision, object override and mutual-ally rule.
- Confirm siege works only in the Seasonal world and fails in every other world.
- Deposit and withdraw a small amount in each currency; verify nonempty-bank closure is denied.
- Inspect treasury UUID and signed balance, plan cycle length, rates and forgiveness settings.
Diagnose in the right layer
For missing commands, check plugin load and Bukkit permissions. For denied team actions, inspect group mapping and relative order. For claim issues, inspect owner/link, all trust paths and GP siege state. For payment failures, inspect debt, pending charges, available credit, allowance and strikes. For a failed save or reload, preserve the log and original data rather than repeatedly editing until the error disappears.
Do not install disposable integration-probe plugins on production: they create/delete fixtures and can shut down the server. Use the normal plugin jar and a separate staging copy.
Back to top ↑ADMINS / 29
Sources & handbook scope
Versioned implementation references and the site theme.
This handbook is based on the SimpleTeams 2.4.0-azo source and its wiki, the ExcellentEconomy 2.8.0-azo.1 banking documentation, and the Azo GP command/configuration source. It describes bundled defaults separately from the explicit ProtoSMP rule that siege is Seasonal-only. Live prices, rates, world IDs and customized team rules are not inferred from defaults.
The handbook embeds the original Azotorp Bootstrap CSS and Bootstrap bundle for a portable HTML file. Its documentation layout adds navigation, search, copy controls and print styles. Player/Admin is a reading filter, not authentication; the admin documentation contains reference material, not live management controls or secrets.
Original SimpleTeams authorship belongs to _GodlyCow and upstream contributors. Bootstrap retains its embedded MIT license notice. Documentation prepared for ProtoSMP; review it when plugin behavior or server policy changes.
Back to top ↑