Installation
Install OptimalTeams and OptimalLibrary on your Paper or Folia server.
Requirements
Section titled “Requirements”- OptimalLibrary - required. A separate, free plugin that provides the shared runtime (text and MiniMessage, menus, prompts, storage, scheduling). OptimalTeams will not enable without it.
- Paper / Folia (or a Paper fork). Spigot is not supported. Supported versions are 1.21.11, 26.1.1, 26.1.2, 26.2 and 26.3.
- Java 21 on 1.21.11, Java 25 on the 26.x servers. Check with
java -version.
Optional soft dependencies:
- PlaceholderAPI - registers the
%optimalteams_...%placeholders and resolves%...%from other plugins inside messages and menus. See Placeholders. - OptimalKoth - when installed, a KOTH capture earns the capturer’s team points
(
Point-Sources.Koth-Capture). Without it, nothing is hooked and kills are the only automatic point source.
- Confirm
java -versionreports the right version for your server. - Stop the server.
- Drop
OptimalLibrary.jarandOptimalTeams.jarintoplugins/. - (Optional) Add
PlaceholderAPI.jarand/orOptimalKoth.jar. - Start the server. The plugin generates its files and prints a startup banner with the number of
teams and members it loaded. With OptimalKoth present, the console also logs
Hooked OptimalKoth. - Run
/plugins-OptimalLibraryandOptimalTeamsshould both be green.
OptimalLibrary downloads sqlite-jdbc, mysql-connector-j, HikariCP and XSeries through Paper’s
library loader on first startup, so the first launch needs internet access and may take a few extra
seconds.
Generated files
Section titled “Generated files”plugins/OptimalTeams/├─ config.yml # settings, point sources, roles, team format, sounds├─ messages.yml # every message and title├─ guis/│ ├─ team-menu.yml # /team for a player in a team│ ├─ hub-menu.yml # /team for a player without a team│ ├─ invites-menu.yml # pending invites│ ├─ members-menu.yml # roster, promote, demote, kick│ ├─ settings-menu.yml # rename, friendly fire, open joining, set home│ ├─ top-menu.yml # team leaderboard│ ├─ team-info-menu.yml # read-only view of any team│ └─ confirm-menu.yml # disband, leave, kick and transfer confirmation└─ data/ └─ data.db # SQLite team data (do not edit by hand)data/data.db is only created with the default SQLite storage. Every GUI file is required; a missing
one is extracted again on the next start.
Storage
Section titled “Storage”Teams and members are stored in two tables, optimalteams_teams and optimalteams_members, in
SQLite (data/data.db, the default) or MySQL. Switch with Settings.Storage in
config.yml.
Everything is loaded into memory when the server starts. Every change (a new team, a join, a point change, a toggle) is queued for the database right away and written on a background thread, in order, so there is no save interval to configure. Creating, transferring and disbanding a team are single transactions. Pending writes are flushed when the server shuts down.
Continue to Creating a Team, or read the Information overview first.
