Zum Hauptinhalt springen

Vote System

Umfragen im Spiel mit Optionen, Enddatum, einer Stimme pro Spieler und Live-Platzhaltern.

Kostenlosv0.9Soziales
BenötigtTypeWriter0.9PlaceholderAPIoptional

Überblick​

Vote System fügt deinem Server Umfragen hinzu. Eine Umfrage ist eine Vote Definition: ein Titel, eine Liste von Optionen, ein optionales Enddatum und eine Nachricht, die nach dem Schließen der Umfrage angezeigt wird. Jeder Spieler kann pro Umfrage einmal abstimmen, über eine TypeWriter-Aktion (eine Dialogoption, einen NPC, einen Menüklick) oder per Befehl. Die Stimmen werden in einem TypeWriter-Artifact gespeichert.

Die Ergebnisse stehen als PlaceholderAPI-Platzhalter zur Verfügung, sodass du sie auf einem Scoreboard, in einem Hologramm oder in einem Menü anzeigen kannst, sowie per Befehl für das Team. Es handelt sich um eine Abstimmung unter deinen Spielern, nicht um einen Link zu Server-Listen-Votingseiten.

Funktionen​

  • Umfragen mit mehreren Optionen — jede Option hat ihren eigenen Text, der Platzhalter und Farben enthalten kann.
  • Eine Stimme pro Spieler — eine zweite Stimme bei derselben Umfrage wird abgelehnt, es sei denn, du legst in Vote Config ein cooldownSeconds für erneutes Abstimmen fest.
  • Enddatum — schließe eine Umfrage automatisch zu einem bestimmten Datum und einer bestimmten Uhrzeit.
  • Nachrichten bei Schließung und Sperre — sagen späten Abstimmenden, dass die Umfrage vorbei ist, und Spielern, die zu früh erneut abstimmen, dass sie warten müssen. Beide sind MiniMessage.
  • Vote-Aktion — gib eine Stimme für den auslösenden Spieler ab und setze deine Sequence nur fort, wenn die Stimme erfasst wurde.
  • Statusnachricht — sende je nachdem, ob der Spieler bereits abgestimmt hat, eine andere Nachricht.
  • Live-Ergebnisse — Summen, Zählungen pro Option und die vom Spieler gewählte Option als Platzhalter.
  • Team-Befehle — für einen Spieler abstimmen, die Ergebnisse lesen und eine Umfrage zurücksetzen.

Installation​

  1. Installiere PlaceholderAPI, wenn du Ergebnisse mit Platzhaltern anzeigen möchtest.
  2. Lege die Vote-System-JAR in plugins/Typewriter/extensions/ ab und starte den Server neu.

Erste Schritte​

Führe eine Umfrage zum nächsten Karten-Thema durch:

  1. Öffne im TypeWriter-Web-Panel eine Manifest-Page und füge ein Vote Data-Artifact hinzu. Behalte die Standard-artifactId (vote_storage) bei.
  2. Füge eine Vote Definition hinzu. Setze displayName auf Next map theme, füge drei Einträge zu options hinzu (zum Beispiel Desert, Snow, Jungle) und verknüpfe das Artifact in data.
  3. Setze endDate auf ein UTC-Datum mit Uhrzeit wie 2026-12-31T23:00:00Z und closedMessage auf einen kurzen Text. Lass endDate für eine Umfrage ohne Ende leer.
  4. Öffne eine Sequence-Page. Füge für jede Option eine Vote Action hinzu: Verknüpfe die definition und setze optionIndex auf 0, 1 oder 2. Der Optionsindex beginnt bei 0.
  5. Verbinde jede Aktion mit einer Dialogoption, einer NPC-Interaktion oder einem Menü-Button und lege deine Dankesnachricht oder Belohnung in die triggers der Aktion. Sie werden nur ausgeführt, wenn die Stimme erfasst wird.
  6. Füge optional vor den Optionen eine Vote Message hinzu, um Spieler, die bereits abgestimmt haben, daran zu erinnern.
  7. Veröffentliche. Verwende %typewriter_vote_total_<definition id>% auf einem Scoreboard, um die Anzahl der Stimmen anzuzeigen.
Die Definitions-ID beibehalten

Die Stimmen einer Umfrage werden unter einem Schlüssel gespeichert, der von der Entry-ID ihrer Vote Definition abgeleitet ist. Wenn du den Entry löschst oder seine ID änderst, werden die gespeicherten Stimmen nicht mehr gefunden.

Befehle​

Alle Befehle sind Unterbefehle von /typewriter (Alias /tw). <definition> ist die ID oder der Name einer Vote Definition.

BefehlBerechtigungBeschreibung
/typewriter vote <definition> <option> [target]typewriter.vote.castFür eine Option abstimmen. Optionen beginnen bei 1. Mit target für die ausgewählten Spieler abstimmen.
/typewriter vote stats [definition]typewriter.vote.statsZeigt die Stimmen pro Option und die Gesamtzahl, für eine Umfrage oder alle.
/typewriter vote reset <definition>typewriter.vote.resetLöscht jede Stimme einer Umfrage.

Alle benötigen zusätzlich typewriter.vote.

Anpassbare Texte​

Kein im Spiel angezeigter Text ist im Code festgelegt. Die Nachrichten einer Abstimmung sind Felder ihrer Einträge: closedMessage der Vote Definition und die beiden Nachrichten von Vote Message. Was die /typewriter vote-Befehle antworten, ist ein TypeWriter-Snippet, du kannst es also umformulieren, übersetzen oder umfärben, ohne etwas neu zu bauen. Öffne plugins/Typewriter/snippets.yml, suche den Schlüssel unter content.vote, ändere den Wert und führe /tw reload aus. Die Erweiterung registriert beim Start alle ihre Snippets mit dem Standardtext, sie erscheinen also nach dem ersten Start in der Datei. Behältst du die Standardwerte, ändert sich nichts.

Die Befehlsantworten sind MiniMessage. Sie werden mit dem Typewriter-Antwortpräfix (Typewriter ») gesendet, das von der Engine stammt und nicht zu diesen Snippets gehört. Ein {name} in einem Text wird durch den in der Tabelle genannten Wert ersetzt; ein Platzhalter, den es nicht gibt, bleibt unverändert stehen, und ein Wert wird nie erneut nach Platzhaltern durchsucht. Das Log der Server-Konsole bleibt auf Englisch.

Snippet (unter content.vote.)StandardwertPlatzhalter
usage<gray>Usage: /tw vote <definition> <option> [target]</gray>keine
option_unavailable<red>Option {option} is not available for {definition}.</red>{option} (die eingegebene Nummer), {definition} (die ID der Abstimmung)
already_voted<red>{player} cannot vote in {definition} yet.</red>{player}, {definition}
cast_option_fallbackoption {number}{number} (Position der Option, ab 1)
recorded_for_voterYour vote for <blue>{definition}</blue> has been recorded as <green>{option}</green>.{definition}, {option} (der Text der Option)
recorded_by_otherRecorded vote for <blue>{player}</blue> in {definition}: {option}.{player}, {definition}, {option}
recorded_for_selfVote registered for {definition}: {option}.{definition}, {option}
cast_failed<red>Unable to register the vote for {player} in {definition}.</red>{player}, {definition}
reset_done<green>Votes reset for {definition}.</green>{definition}
no_definitionsThere are no active vote definitions.keine
stats_lineStats for {name} [{definition}]: {options} | total: {total}{name} (der displayName oder bei leerem Wert der Eintragsname), {definition}, {options}, {total}
stats_option{number}: {votes} ({label}){number}, {votes}, {label} (der Text der Option)
stats_option_fallbackOption {number}{number}
stats_separator, keine
entry_not_foundCould not find entry {entry}{entry} (das Eingegebene)
entry_rejectedEntry did not pass filterkeine

stats_option wird einmal pro Option wiederholt, und die Ergebnisse werden mit stats_separator zu {options} von stats_line verbunden. stats_option_fallback ist das {label} einer Option ohne Text, und cast_option_fallback ist der Name einer solchen Option in den Nachrichten, die beim Erfassen einer Stimme gesendet werden. Die letzten beiden Snippets sind Befehlsfehler, die das Spiel in Rot anzeigt: Sie sind einfacher Text, ohne MiniMessage.

Ist die Umfrage geschlossen, zeigt /tw vote dem Teammitglied das closedMessage der Umfrage (cast_failed wird nur verwendet, wenn diese Nachricht leer ist). cast_failed antwortet auch bei fehlendem Daten-Eintrag oder einer Option außerhalb des Bereichs.

Berechtigungen​

BerechtigungGewährt
typewriter.voteZugriff auf den Befehl /typewriter vote.
typewriter.vote.castEine Stimme per Befehl abgeben.
typewriter.vote.statsErgebnisse per Befehl lesen.
typewriter.vote.resetEine Umfrage zurücksetzen.

Die Vote-Aktion prüft diese Berechtigungen nicht: Sie benötigt nur, dass der Entry ausgeführt wird.

Platzhalter​

Ersetze <id> durch die Entry-ID der Vote Definition. Sie benötigen PlaceholderAPI.

PlatzhalterGibt zurück
%typewriter_vote_display_<id>%Den displayName der Umfrage.
%typewriter_vote_option_<id>_<n>%Den Text der Option Nummer n, ab 1.
%typewriter_vote_total_<id>%Die Gesamtzahl der Stimmen.
%typewriter_vote_stats_<id>%Die Stimmen jeder Option, durch Kommas getrennt.
%typewriter_vote_stats_<id>_<n>%Die Stimmen der Option Nummer n, ab 1.
%typewriter_vote_player_<id>%Den Text der Option, für die der Spieler gestimmt hat, oder nichts, wenn er nicht abgestimmt hat.
%typewriter_vote_has_voted_<id>%1, wenn der Spieler vorerst nicht erneut abstimmen kann (er hat abgestimmt und die Wartezeit ist nicht vorbei), sonst 0.
%typewriter_vote_closed_<id>%1, sobald das Enddatum überschritten ist, sonst 0.
%typewriter_vote_remaining_<id>%Ganze Sekunden bis zum Enddatum; 0 ohne Enddatum oder nach dessen Ablauf.

vote_votes_<id> funktioniert wie vote_stats_<id>.

Entries​

7 Einträge, aus dem Quellcode der Erweiterung generiert.

Aktionen2
Ereignisse1
Fakten1
Artefakte1
Manifeste2
Entries, die das aktuelle Release nicht verwendet

Vote Cast Event und Vote Fact existieren, aber nichts liest sie bisher aus: Das Event wird nie ausgelöst und der Fact wird nicht durch Stimmen befüllt. Vote Config wird gelesen: Es legt den Cooldown für erneutes Abstimmen und das Debug-Log fest.

Fehlerbehebung​

Die Stimme wird nicht erfasst. Die Aktion und der Befehl schlagen stillschweigend fehl, wenn etwas fehlt: Die Vote Definition muss ein verknüpftes data-Artifact haben, die Option muss existieren, der Spieler darf noch nicht abgestimmt haben (oder sein Cooldown muss abgelaufen sein, siehe Vote Config), und die Umfrage darf ihr endDate nicht überschritten haben. Ist die Umfrage geschlossen, wird die closedMessage an den Spieler gesendet. Muss der Spieler noch warten, wird das blockedMessage gesendet. Aktiviere debug in Vote Config, um den Grund jeder Ablehnung zu protokollieren.

Die falsche Option erhält die Stimme. Die Vote-Aktion zählt Optionen ab 0, während der Befehl und die Platzhalter ab 1 zählen.

Die Umfrage schließt nie. endDate muss ein ISO-8601-Zeitpunkt in UTC sein, der auf Z endet, wie 2026-12-31T23:00:00Z. Ein Wert in einem anderen Format wird ignoriert, und die Umfrage bleibt offen.

Die Ergebnisse sind leer, nachdem ich den Entry umbenannt habe. Stimmen sind an die Entry-ID der Definition gebunden. Stelle die alte ID wieder her oder setze die Umfrage zurück und beginne von vorn.

Ein Platzhalter wird unverändert angezeigt. Prüfe, ob PlaceholderAPI installiert ist und ob die ID die Entry-ID der Definition ist. Die Erweiterung findet eine Definition auch dann, wenn ein Platzhalter vor der ersten Stimme angefragt wird.

Farben in einer Nachricht sehen falsch aus. Die Statusnachrichten von Vote Message, closedMessage und blockedMessage werden nach dem Auflösen der Platzhalter als MiniMessage gelesen: Schreibe <red>Text</red>, keine &c-Codes.

Spieler können zweimal abstimmen. Die Prüfung gilt pro Spieler und pro Umfrage. Mehrere Vote Definitions mit denselben Optionen erzeugen getrennte Umfragen.