Profiles
Überblick
Profiles gibt jedem Spieler mehrere unabhängige Charaktere auf demselben Account. Das Wechseln des Profils tauscht Inventar, Endertruhe, Erfahrung, Leben und Hunger des Spielers sowie seine TypeWriter-Facts aus, sodass Quest-Fortschritt, Freischaltungen und Zähler für jeden Charakter getrennt sind. Andere BTC-Erweiterungen, etwa BTC Sky, hängen ihre eigenen Daten an das aktive Profil.
Profile werden über ein Menü erstellt und gewählt, das du im Web-Panel gestaltest. Ein Server kann Spieler zwingen, ein Profil zu wählen, bevor sie sich bewegen, bauen, kämpfen oder chatten können. Die Daten werden in einer Datenbank gespeichert, wenn die MySQL-Bridge aktiviert ist, wodurch Profile auf jedem Server eines Netzwerks verfügbar sind, andernfalls in Dateien.
Das System ist an den Spielmodus des Servers gebunden (mysql.game-mode.current): Ein Spieler hat in jedem Spielmodus eine eigene Liste von Profilen.
Funktionen
- Getrennte Charaktere — Inventar, Rüstung, Nebenhand, Endertruhe, Level, Erfahrung, Leben, Hunger und Sättigung pro Profil.
- Getrennter Story-Zustand — TypeWriter-Facts werden beim Wechsel gespeichert und für das Profil wiederhergestellt.
- Profilmenü — ein GUI mit einem Slot pro Profil und Vorlagen für aktive, inaktive, freie und gesperrte Slots.
- Erzwungene Auswahl — solange kein Profil aktiv ist, kann der Spieler sich nicht bewegen, interagieren, abbauen, platzieren, droppen, kämpfen oder chatten.
- Solo und Coop — ein Profil wird als Solo oder Coop erstellt (gemeinsame BTC-Sky-Insel), und ein Spielmodus ohne Coop überspringt die Frage.
- Limits — ein Standardmaximum und höhere Limits pro Berechtigung.
- Wechselschutz — ein Cooldown zwischen Wechseln und ein Event, das andere Erweiterungen abbrechen können.
- Entries — Aktionen zum Öffnen des Menüs, Erstellen, Wechseln, Umbenennen, Löschen und Speichern, Facts zum Profilzustand sowie Events.
- Serverübergreifend — Profile und ihre Daten werden über die MySQL-Bridge geteilt.
- Platzhalter — Name, ID, Anzahl, Limits und Details pro Profil für Menüs und HUDs.
Installation
- Installiere die Erweiterung GUI, die das Menü zeichnet. Die Erweiterung Basic ist als Abhängigkeit deklariert.
- Empfohlen: Installiere die Erweiterung MySQL und aktiviere sie (
mysql.enabled: true). Ohne sie werden Profile in Dateien gespeichert und nicht zwischen Servern geteilt. - Lege die Profiles-JAR in
plugins/Typewriter/extensions/ab und starte den Server neu. - Bearbeite den Abschnitt
profilesinplugins/Typewriter/mysql/config.yml, siehe Konfiguration. Profiles liest seine Einstellungen aus der Konfigurationsdatei der MySQL-Erweiterung, auch wenn du keine Datenbank verwendest. - Erstelle die Menü-Entries, die unter Erste Schritte beschrieben sind.
Erste Schritte
Richte eine Profilauswahl ein, die neue Spieler abschließen müssen:
- Öffne im TypeWriter-Web-Panel eine Page und füge einen Profile Menu Config-Entry hinzu.
/profileöffnet den ersten gefundenen und bewirkt nichts, wenn keiner existiert. - Setze
inventoryTitle,inventoryRowsundguiType. Baue das Layout inlayoutPoolund setzemainLayoutId. Siehe die GUI-Anleitungen. - Platziere Items mit
buttonPrefixprofile_button:undbuttonTypePROFILE_SLOTdort, wo Profile erscheinen sollen. Jeder Marker zeigt ein Profil, gelesen von links nach rechts und dann von oben nach unten. Slots unterhalb des Limits des Spielers, die kein Profil enthalten, zeigencreateProfileTemplate, Slots jenseits des Limits zeigenmaxProfilesTemplate. - Setze
defaultMaxProfilesund bei BedarfpermissionLimits. - Erstelle die beiden GUI-Pages für die Erstellung als Open GUI-Entries mit den IDs
profile_create_chooser(eine Wahl zwischen Solo und Coop) und, für Spielmodi ohne Coop,profile_create_solo. Ein Button auf diesen Pages führtprofile create solooderprofile create coopaus, und bei reinen Solo-Modi nurprofile create. - Prüfe in
plugins/Typewriter/mysql/config.ymldie Werteprofiles.force-profile-selection(Standardtrue) undprofiles.coop-supported. - Veröffentliche, tritt dem Server bei und wähle oder erstelle ein Profil.
Verwende Switch Profile Action oder Open Profile Menu Action von NPCs und Items aus. Reagiere auf Wechsel, die durch die Wechsel-Aktion oder eingetippte Befehle erfolgen, mit dem Profile Switched Event.
Verwende die Facts Profile Count Fact und Is Profile Active Fact in Criteria. Zeige zum Beispiel einen Button „Profil erstellen“ nur, solange Can Create Profile Fact 1 ist.
Funktionsweise
Bei einem Wechsel prüft die Erweiterung den Cooldown und löst dann ein abbrechbares Pre-Switch-Event aus, damit ein Spielmodus ablehnen kann (zum Beispiel während eines Krieges oder eines Minispiels). Danach erfasst sie den aktuellen Zustand des Spielers, schreibt ihn ins Repository, leert die TypeWriter-Facts und das Inventar des Spielers und stellt die Daten des Zielprofils wieder her. Der Zustand des aktiven Profils wird außerdem gespeichert, wenn der Spieler den Server verlässt.
Was gespeichert wird, hängt von der Konfiguration ab: Inventar und Endertruhe (save-inventory, save-ender-chest) und Minecraft-Statistiken (save-statistics, wegen der Größe standardmäßig aus). Level, Erfahrung, Leben, Hunger und TypeWriter-Facts werden immer gespeichert.
Da Facts ausgetauscht werden, gehört alles, was in einem Fact gespeichert ist, zum Profil. Daten anderer Erweiterungen folgen deren eigenem profile-mode in der MySQL-Konfiguration: per-profile-Daten werden für jedes Profil getrennt geführt, shared-Daten sind allen Profilen gemeinsam.
Konfiguration
Profiles hat keine eigene Konfigurationsdatei. Seine Einstellungen stehen im Abschnitt profiles von plugins/Typewriter/mysql/config.yml, die von der Erweiterung MySQL erstellt wird.
| Schlüssel | Standard in der mitgelieferten Datei | Bedeutung |
|---|---|---|
profiles.enabled | true | Schaltet das Profilsystem ein. |
profiles.max-profiles | 2 | Maximale Profile pro Spieler, wenn kein Profile Menu Config-Entry existiert. Das defaultMaxProfiles des Entries ersetzt ihn. |
profiles.default-profile-name | Principal | Name des automatischen Profils. |
profiles.save-statistics | true | Minecraft-Statistiken pro Profil speichern. Benötigt viel Speicherplatz. |
profiles.save-inventory | true | Das Inventar pro Profil austauschen. |
profiles.save-ender-chest | true | Die Endertruhe pro Profil austauschen. |
profiles.require-permission | false | typewriter.profiles.create zum Erstellen eines Profils verlangen. |
profiles.auto-create-default | true | Beim ersten Beitritt ein Standardprofil erstellen. Funktioniert nur, wenn coop-supported false ist. |
profiles.force-profile-selection | true | Den Spieler blockieren, bis ein Profil aktiv ist. |
profiles.switch-cooldown-seconds | 60 | Mindestverzögerung zwischen zwei Wechseln eines Spielers. 0 deaktiviert sie. |
profiles.coop-supported | true | Ob dieser Spielmodus Coop-Profile hat. Bei false wird die Frage Solo oder Coop übersprungen, und jedes Profil ist Solo. |
profiles.creation-menu-entry-id | leer | ID der GUI-Page, die zum Erstellen eines Profils geöffnet wird. Leer bedeutet profile_create_chooser, wenn Coop unterstützt wird, sonst profile_create_solo. |
Die obigen Werte stammen aus der mitgelieferten Datei. Die eingebauten Fallbacks weichen ab, wenn ein Schlüssel fehlt (max-profiles 5, save-statistics true, auto-create-default false), behalte die Schlüssel also in deiner Datei.
Speicherung. Mit mysql.enabled: true und profiles.enabled: true werden Profile in der Tabelle typewriter_profiles gespeichert. Andernfalls werden sie als Assets in profiles/<game mode>/<player uuid>.json gespeichert. Im alten Profile Storage Artifact gespeicherte Profile werden beim Start automatisch in den neuen Speicher kopiert.
Menüs
Der Entry Profile Menu Config beschreibt das Menü. Ein Klick auf ein Profil wechselt zu ihm, Shift + Linksklick löscht es (nach einem Bestätigungsbildschirm, außer deleteConfirmation ist deaktiviert), und ein Klick auf einen freien Slot öffnet die Erstellungsseite. Beim Erstellen eines Profils wird sein Name in einem Amboss abgefragt. {profile_name}, {profile_id}, {created_date}, {last_used}, {level}, {exp}, {health}, {food}, {profile_count} und {max_profiles} können in Titeln, Namen und Lore verwendet werden.
Button-Items mit buttonPrefix profile_button: unterstützen PROFILE_SLOT (ein Profil) sowie die Marker INFO und CLOSE, die profile info und gui:close ausführen.
Slots können profile open, profile select <id>, profile create solo|coop und profile delete <id> als der klickende Spieler ausführen.
Die Standardtexte des Menüs, der Nachrichten und der Cooldown-Nachricht sind auf Französisch. Ändere sie im Menü-Entry.
Befehle
Alle Befehle erfordern profiles.use. Aliase: /profil, /profiles.
| Befehl | Beschreibung |
|---|---|
/profile | Öffnet das Profilmenü. |
/profile menu | Öffnet das Profilmenü. |
/profile select <id> | Wechselt zu einem Profil. |
/profile create solo oder coop | Erstellt und aktiviert ein Profil; der Name wird in einem Amboss abgefragt. Ohne Modus nur für Spielmodi ohne Coop. |
/profile delete <id> [confirm] | Löscht ein Profil, das nicht aktiv ist. Öffnet zuerst den Bestätigungsbildschirm, wenn deleteConfirmation aktiv ist, außer confirm wird angegeben. |
/profile admin list <player> | Listet die Profile eines Online-Spielers auf (erfordert profiles.admin). |
/profile admin create <player> <name> | Erstellt ein Solo-Profil für einen Spieler. |
/profile admin delete <player> <id> | Löscht ein Profil eines Spielers. |
/profile admin switch <player> <id> | Wechselt einen Spieler zu einem Profil. |
/profile admin rename <player> <id> <name> | Benennt ein Profil um. |
/profile headless list, select <id>, create <name> | Verwaltet deine eigenen Profile ohne Menü (erfordert profiles.headless). |
Ein Menü-Listener verarbeitet das von einem Spieler eingetippte /profile vor dem Befehlsbaum: Er unterstützt select, create, delete und das Öffnen des Menüs und ignoriert die übrigen. /profile admin ... und /profile headless ... funktionieren daher zuverlässig über die Konsole oder über die Aliase /profil und /profiles.
Berechtigungen
| Berechtigung | Standard | Gewährt |
|---|---|---|
profiles.use | Alle | Die /profile-Befehle. |
profiles.admin | Operatoren | /profile admin. |
profiles.headless | Niemand | /profile headless, für Clients ohne Bildschirm wie Test-Bots. |
profiles.switch.bypasscooldown | Niemand | Wechseln ohne Cooldown. |
typewriter.profiles.create | Niemand | Profile erstellen, wenn profiles.require-permission true ist. |
Berechtigungen aus permissionLimits | Du wählst | Erhöhen das Profillimit. Das höchste Limit gewinnt. |
Platzhalter
MiniPlaceholders-Tags für MiniMessage-Text. Eine Referenz ist eine Position in der Liste (Ziffern, ab 0) oder eine Profil-ID.
| Platzhalter | Gibt zurück |
|---|---|
<profile_active_id>, <profile_active_name> | ID und Name des aktiven Profils. |
<profile_active> | 1, wenn ein Profil aktiv ist. Mit einer Referenz gibt <profile_active:0> an, ob dieses Profil das aktive ist. |
<profile_count> | Anzahl der Profile. |
<profile_max> | Maximale Anzahl an Profilen für den Spieler. |
<profile_can_create> | 1, wenn der Spieler ein weiteres Profil erstellen kann. |
<profile_remaining> | Anzahl der noch verfügbaren Profile. |
<profile_friend_count> | Anzahl der Freunde, 0 ohne die Erweiterung Friend. |
<profile_enabled> | 1, wenn das System eingeschaltet ist. |
<profile_name:ref>, <profile_id:ref> | Name und ID eines Profils. |
<profile_created:ref>, <profile_last_used:ref> | Daten als dd/MM/yyyy HH:mm. |
<profile_created_timestamp:ref>, <profile_last_used_timestamp:ref> | Epoch-Millisekunden. |
<profile_level:ref>, <profile_exp:ref> | Level und Erfahrungsfortschritt als Prozentwert. |
<profile_health:ref>, <profile_food:ref> | Gespeichertes Leben und Hungerlevel. |
Entries
20 Einträge, aus dem Quellcode der Erweiterung generiert.
Aktionen6
- Create Profile ActionCreates a new profile for the player
- Delete Profile ActionDeletes a specific profile
- Open Profile Menu ActionOpens the profile selection menu for the player
- Rename Profile ActionRenames a specific profile
- Save Profile ActionSaves the current profile state
- Switch Profile ActionSwitches the player to a specific profile
Ereignisse5
- Profile Created EventTriggered when a player creates a new profile
- Profile Deleted EventTriggered when a player deletes a profile
- Profile Loaded EventTriggered when a player's profile is loaded on join
- Profile Saved EventTriggered when a player's profile is saved
- Profile Switched EventTriggered when a player switches profiles
Fakten7
- Can Create Profile FactReturns 1 if player can create more profiles, 0 otherwise
- Has Active Profile FactReturns 1 if player has an active profile, 0 otherwise
- Is Profile Active FactReturns 1 if the specified profile is active, 0 otherwise
- Max Profiles FactReturns the maximum number of profiles allowed per player
- Profile Coop Enabled FactReturns 1 if the active profile was created as a coop profile
- Profile Count FactReturns the number of profiles a player has
- Profiles Enabled FactReturns 1 if the profile system is enabled, 0 otherwise
Artefakte1
- Profile Storage ArtifactStores player profiles with separate inventories and data
Manifeste1
- Profile Menu ConfigConfiguration for the profile selection menu
Fehlerbehebung
/profile bewirkt nichts. Es gibt keinen Profile Menu Config-Entry. Erstelle und veröffentliche einen.
Neue Spieler sind eingefroren und können nicht chatten. profiles.force-profile-selection ist true, und kein Profil ist aktiv. Der Spieler wird nach dem Beitritt zur Erstellungsseite geschickt; stelle sicher, dass der GUI-Entry profile_create_chooser (oder profile_create_solo oder deine creation-menu-entry-id) existiert. Setze die Option auf false, um die Sperre zu deaktivieren.
„Choisissez d'abord Solo ou Coop dans le menu des profils.“ Der Spieler hat während der Sperre einen Befehl versucht. Solange kein Profil aktiv ist, sind nur /profile ... und der Befehl der Erstellungsseite erlaubt.
„Vous devez attendre N s avant de changer à nouveau de profil.“ Der Wechsel-Cooldown läuft. Senke profiles.switch-cooldown-seconds oder vergib profiles.switch.bypasscooldown.
Beim ersten Beitritt wird kein Standardprofil erstellt. auto-create-default funktioniert nur, wenn coop-supported false ist. Bei Coop muss ein Spieler Solo oder Coop wählen, und das Log meldet „No implicit profile was created; disable the setting.“
Profile unterscheiden sich zwischen Servern. Die MySQL-Erweiterung muss auf jedem Server mit derselben Datenbank und demselben Spielmodus aktiviert sein (mysql.enabled: true). Ohne sie liegen Profile in lokalen Dateien. Ist MySQL aktiviert, aber die Datenquelle fehlt, meldet das Log „MySQL enabled for profiles but DataSource not found. Falling back to JSON.“
Spieler verlieren nach einem Wechsel Items. Prüfe save-inventory und save-ender-chest. Sind sie false, wird das Inventar weder ausgetauscht noch geleert, Items werden also zwischen Profilen geteilt.
Ein Wechsel wird mit einer Nachricht abgelehnt. Eine andere Erweiterung hat ihn über das Pre-Switch-Event abgebrochen, zum Beispiel während eines Kampfes oder eines Minispiels. Die Nachricht stammt von dieser Erweiterung.