Zum Hauptinhalt springen

Profiles

Mehrere Charakterprofile pro Spieler, jedes mit eigenem Inventar, Endertruhe, XP und TypeWriter-Fakten.

Privatv0.2.0RPG & Progression
BenötigtTypeWriter0.9.0-beta-177 (BTC build)Basic (TypeWriter extension)GUI (TypeWriter extension)MySQL (TypeWriter extension)optionalParty (TypeWriter extension)optional

Für das BornToCraft-Netzwerk entwickelt. Diese Erweiterung ist zu Referenzzwecken dokumentiert und wird nicht verteilt.

Ü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​

  1. Installiere die Erweiterung GUI, die das Menü zeichnet. Die Erweiterung Basic ist als Abhängigkeit deklariert.
  2. Empfohlen: Installiere die Erweiterung MySQL und aktiviere sie (mysql.enabled: true). Ohne sie werden Profile in Dateien gespeichert und nicht zwischen Servern geteilt.
  3. Lege die Profiles-JAR in plugins/Typewriter/extensions/ ab und starte den Server neu.
  4. Bearbeite den Abschnitt profiles in plugins/Typewriter/mysql/config.yml, siehe Konfiguration. Profiles liest seine Einstellungen aus der Konfigurationsdatei der MySQL-Erweiterung, auch wenn du keine Datenbank verwendest.
  5. Erstelle die Menü-Entries, die unter Erste Schritte beschrieben sind.

Erste Schritte​

Richte eine Profilauswahl ein, die neue Spieler abschließen müssen:

  1. Ö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.
  2. Setze inventoryTitle, inventoryRows und guiType. Baue das Layout in layoutPool und setze mainLayoutId. Siehe die GUI-Anleitungen.
  3. Platziere Items mit buttonPrefix profile_button: und buttonType PROFILE_SLOT dort, 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, zeigen createProfileTemplate, Slots jenseits des Limits zeigen maxProfilesTemplate.
  4. Setze defaultMaxProfiles und bei Bedarf permissionLimits.
  5. 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ührt profile create solo oder profile create coop aus, und bei reinen Solo-Modi nur profile create.
  6. Prüfe in plugins/Typewriter/mysql/config.yml die Werte profiles.force-profile-selection (Standard true) und profiles.coop-supported.
  7. 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.

Inhalte an das Profil knüpfen

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üsselStandard in der mitgelieferten DateiBedeutung
profiles.enabledtrueSchaltet das Profilsystem ein.
profiles.max-profiles2Maximale Profile pro Spieler, wenn kein Profile Menu Config-Entry existiert. Das defaultMaxProfiles des Entries ersetzt ihn.
profiles.default-profile-namePrincipalName des automatischen Profils.
profiles.save-statisticstrueMinecraft-Statistiken pro Profil speichern. Benötigt viel Speicherplatz.
profiles.save-inventorytrueDas Inventar pro Profil austauschen.
profiles.save-ender-chesttrueDie Endertruhe pro Profil austauschen.
profiles.require-permissionfalsetypewriter.profiles.create zum Erstellen eines Profils verlangen.
profiles.auto-create-defaulttrueBeim ersten Beitritt ein Standardprofil erstellen. Funktioniert nur, wenn coop-supported false ist.
profiles.force-profile-selectiontrueDen Spieler blockieren, bis ein Profil aktiv ist.
profiles.switch-cooldown-seconds60Mindestverzögerung zwischen zwei Wechseln eines Spielers. 0 deaktiviert sie.
profiles.coop-supportedtrueOb dieser Spielmodus Coop-Profile hat. Bei false wird die Frage Solo oder Coop übersprungen, und jedes Profil ist Solo.
profiles.creation-menu-entry-idleerID 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.

Sprache

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.

BefehlBeschreibung
/profileÖffnet das Profilmenü.
/profile menuÖffnet das Profilmenü.
/profile select <id>Wechselt zu einem Profil.
/profile create solo oder coopErstellt 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).
Befehlsabfang im Spiel

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​

BerechtigungStandardGewährt
profiles.useAlleDie /profile-Befehle.
profiles.adminOperatoren/profile admin.
profiles.headlessNiemand/profile headless, für Clients ohne Bildschirm wie Test-Bots.
profiles.switch.bypasscooldownNiemandWechseln ohne Cooldown.
typewriter.profiles.createNiemandProfile erstellen, wenn profiles.require-permission true ist.
Berechtigungen aus permissionLimitsDu wählstErhö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.

PlatzhalterGibt 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
Ereignisse5
Fakten7
Artefakte1
Manifeste1

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.

Verwandte Erweiterungen​

  • MySQL — Speicherung, Spielmodi und die von Profiles gelesenen Einstellungen.
  • GUI — Layouts und Ansichten des Profilmenüs.
  • BTC Sky — Coop-Inseln und Inseldaten, die an ein Profil gehängt werden.
  • Party und Friend — soziale Funktionen, die dem aktiven Profil folgen.