• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

[PEX] Wie man seine permissions.yml entrümpelt - mit echtem Beispiel

SilberRegen

Workaholic
Mitglied seit
23 März 2012
Beiträge
890
Alter
28
Minecraft
SilberRegen
HINWEIS: Pex ist veraltet und die offizielle Version nicht mehr sicher.
Server die Pex benutzen können zum Absturz gebracht werden.


Meine Empfehlung: Luckperms

=====================================================================


Ziel: Sichtung, Sortierung und sinnvolle Editierung einer vorhandenen permissions.yml.
Oder:
Wie man weit über 50% an Dateilänge spart und dabei den Server auch noch sicherer macht.

Schwierigkeit: ➊➋➂➃➄ | Zeitfaktor: 2 - 3 Std.
Andere Tutorials: Permissions sicher einrichten|Neue Gruppen hinzufügen


Voraussetzungen:
  • eine miese permissions.yml zum Bearbeiten
  • Notepad++ oder ein anderer brauchbarer Texteditor
  • Google Tabellen oder ein Programm wie Excel/OpenOffice Tabellen/Libre Calc
  • Kenntnis über die Benutzung von STRG+X, STRG+C, STRG+V
  • Eine grundlegende Idee, wie man im Tabellenprogramm Sachen verschiebt/kopiert/entfernt
  • Motivation zum Aufräumen
  • Grundlagenkenntnisse zum Aufbau sicherer Permissions
In einem Thema im Hilfeforum wurde die Tage eine permissions.yml gepostet, die ein hervorragendes Beispiel dafür ist, wie man es nicht macht.
Es wurden massig Gruppen angelegt, Permissions doppelt und dreifach vergeben und natürlich fleißig "*" verteilt.
Unsicher, unübersichtlich und unnötig viel Arbeit (an der falschen Stelle).

Wenn eure permissions.yml furchtbar aussieht und ihr das gerne ändern würdet, ist das hier euer Tutorial.
Die im Tutorial verwendete Konfiguration habe ich mir nicht ausgedacht, sondern sie wurde so ins Forum gestellt (spielerbezogene Informationen habe ich entfernt).
Da ich keinerlei Informationen des ursprünglichen Erstellers habe, wie genau die Gruppen angedacht waren, habe ich hier ein paar Annahmen gemacht und die Gruppen anhand der vergebenen Permissions sortiert.

Vorweg: Ich gebe hier keine fertig bearbeiteten Dateien aus, da ich lediglich die vorhandenen Sachen überarbeitet habe und für eine vollständige Überarbeitung unbedingt jeder Node jedes Plugins nochmal überprüft werden und dann eingepflegt werden sollte, wenn fehlend.
Außerdem kann jeder der so eine Datei abliefert bitte selber seinen Müll aufräumen. Ich zeige gerne wie es geht, aber Drecksarbeit mache ich bestimmt nicht für jeden gratis.
____________________________________________________________________________________________________

Wir starten mit dieser hübschen Datei:
https://pastebin.com/zhB5VQap

Wie wir sehen, sehen wir nichts bzw. die Permissions vor lauter Permissions nicht.

Schritt 1 - Permissions in eine Tabelle aufnehmen

Damit wir ein bisschen Übersicht bekommen starten wir Google Tabellen (oder unser gewähltes Tabellenprogramm) und legen uns jede Gruppe in eine eigene Spalte. Unter die Gruppennamen packen wir jeweils unsere Präfixe und lassen noch etwas Platz um später Sachen wie "inheritance", "rank", "weight" und vielleicht ein paar Notizen hinzufügen zu können.
Keine Sorge, mit einem Rechtsklick auf die Zeilennummer, (links am Rand) oder die Buchstaben der Spalten (oben am Rand) kann man sich auch nachträglich Platz schaffen durch hinzufügen von Zeilen oder Spalten.
Anschließend kopieren wir für jede Gruppe den ganzen Batzen an Permissionnodes und fügen ihn in der passenden Spalte ein.
Es ist wichtig die Bindestriche zu belassen, damit sie später einfach zurück kopierbar sind.

Das kann dann so aussehen:

____________________________________________________________________________________________________

Schritt 2 - Sortieren und Übersicht schaffen
Die Permissions markieren wir jetzt die Permissions und sortieren sie alphabetisch. In "Google Tabellen" geht das durch Rechtsklick auf den markierten Bereich und Auswahl von "Bereich sortieren". Dies machen wir für jede Spalte einzeln.

Es sollte uns nun möglich sein, grob abzuschätzen, welche Gruppen die meisten und welche die wenigsten Permissions haben. Zusammen mit den Informationen aus den Bezeichnungen der Gruppen sortieren wir die Spalten nun so um, dass die mit den wenigsten Permissions links und die mit dein meisten Rechts steht.
Das was jetzt kommt, dauert etwas länger, ist aber der wichtigste Vorgang, um die lange Liste an Nodes in eine übersichtliche Form zu bringen.

Wir versuchen identische Permissions in eine Zeile zu bekommen. Hat eine Gruppe die Permissions nicht, so soll dort ein leeres Feld stehen.
Das klappt ganz gut, wenn man alphabetisch vorgeht und sich an den Gruppen mit den meisten Permissions orientiert. In den Gruppen mit weniger Permissions, schneiden wir diese so aus und fügen sie so wieder ein, dass sie mit der ersten übereinstimmenden Permission der Referenzgruppe auf gleicher Höhe liegt.
Dieser Vorgang wird solange wiederholt bis in jede Permission ihre eigene Zeile hat.

Bilder sagen oft mehr als tausend Worte, daher im Spoiler, wie das ganze für zwei Gruppen aussehen kann:





Bei vielen Gruppen muss man natürlich öfter mal in den Zeilen springen aber es lohnt sich hier Geduld zu haben.
Wenn wir damit fertig sind, können wir leicht erkennen, ob Permissions fehlen, doppelt sind und ganz wichtig: Welche Permissions ein Sicherheitsrisiko darstellen (ich verweise hier nochmal auf das Tutorial dazu).

Neben einigen optischen Aufwertungen der Tabelle, habe ich fehlende, doppelte und sicherheitsrelevante Nodes mit diversen Farben gekennzeichnet. Welche Farben man nimmt ist reine Geschmackssache, aber man ordnet am besten einer Farbe eine Bedeutung zu.
Wenn ihr mit mehreren Leute am Dokument arbeitet (mit Google Tabellen geht das z.B. recht einfach) könnt ihr dies in einer Legende hinterlegen, damit der nächste weiß, was ihr meint.

Zusätzlich habe ich spätere Gruppen und Rangleitern farbig markiert und die Tabelle sieht nun so aus:

muhmuh, muh :cow: muh muuuh :cow: muh, muhuu, muh :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow::cow: muh muuuh :cow: muh, muhuumuh :cow: muh muuuh :cow: muh, muhuu, muh :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow: muh muuuh :cow: muh, muhuu :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow::cow: muh muuuh :cow: muh, muhuumuh :cow: muh muuuh :cow: muh, muhuu, muh :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow: muh muuuh :cow: muh, muhuu muhmuh, muh :cow: muh muuuh :cow: muh, muhuu, muh :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow::cow: muh muuuh :cow: muh, muhuumuh :cow: muh muuuh :cow: muh, muhuu, muh :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow: muh muuuh :cow: muh, muhuu :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow::cow: muh muuuh :cow: muh, muhuumuh :cow: muh muuuh :cow: muh, muhuu, muh :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow: muh muuuh :cow: muh, muhuumuhmuh, muh :cow: muh muuuh :cow: muh, muhuu, muh :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow::cow: muh muuuh :cow: muh, muhuumuh :cow: muh muuuh :cow: muh, muhuu, muh :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow: muh muuuh :cow: muh, muhuu :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow::cow: muh muuuh :cow: muh, muhuumuh :cow: muh muuuh :cow: muh, muhuu, muh :cow::cow: muhuuu mumumuh :cow::cow::cow: muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow: muh muuuh :cow: muh, muhuu muhmuh, muh :cow: muh muuuh :cow: muh, muhuu, muh :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow::cow: muh muuuh :cow: muh, muhuumuh :cow: muh muuuh :cow: muh, muhuu, muh :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow: muh muuuh :cow: muh, muhuu :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow::cow: muh muuuh :cow: muh, muhuumuh :cow: muh muuuh :cow: muh, muhuu, muh :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow: muh muuuh :cow: muh, muhuu muhmuh, muh :cow: muh muuuh :cow: muh, muhuu, muh :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow::cow: muh muuuh :cow: muh, muhuumuh :cow: muh muuuh :cow: muh, muhuu, muh :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow: muh muuuh :cow: muh, muhuu :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow::cow: muh muuuh :cow: muh, muhuumuh :cow: muh muuuh :cow: muh, muhuu, muh :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow: muh muuuh :cow: muh, muhuumuhmuh, muh :cow: muh muuuh :cow: muh, muhuu, muh :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow::cow: muh muuuh :cow: muh, muhuumuh :cow: muh muuuh :cow: muh, muhuu, muh :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow: muh muuuh :cow: muh, muhuu :cow::cow: muhuuu mumumuh muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow::cow: muh muuuh :cow: muh, muhuumuh :cow: muh muuuh :cow: muh, muhuu, muh :cow::cow: muhuuu mumumuh :cow::cow::cow: muh muhmuhmuh, muh :cow: muh muuuh :cow:muhuu, muh :cow::cow: muh muuuh :cow: muh, muhuu
____________________________________________________________________________________________________

Schritt 3 - Vererbung festlegen, Optimierung und überflüssige Gruppen entfernen


Es hat wenig Sinn 25 Gruppen anzulegen, die alle dieselben Rechte haben und sich nur im Präfix unterscheiden.
Gerade wenn nur wenige Spieler im Chat anders betitelt werden sollen, bietet sich an tatsächlich Einzelpräfixe für diese Spieler zu vergeben.
So habe ich an dieser Stelle direkt die Gruppe "Teamleitung" entfernt, die außer einer falsch geschriebenen Extrapermission und einem anderen Präfix nichts zu bieten hat. Später werde ich auch noch "Owner" kappen, da auch hier der Unterschied nur im Titel liegt.
Wer meint als "Owner" eine eigene Gruppe verdient zu haben, kann sich natürlich auch eine eigene Gruppe anlegen. Wenn's glücklich macht.

An den Gruppen "Admin", "Owner" und "Teamleitung" können wir außerdem sehen, dass der Ersteller wahlweise nicht wusste wie "*" funktioniert oder dieses nachträglich eingefügt hat, nachdem er feststellte, dass das Eintragen aller Permission wohl etwas länger dauert. Das ist natürlich nur eine gemeine Unterstellung von mir.
Im Beispiel habe ich die "*"-Permission herausgenommen und wie im Tutorial zu sicheren Permissions ersetzt.

In unserem Beispiel ist auch die Benennung der Gruppen ungünstig, weil sie teils Sonderzeichen und durchgängig Großbuchstaben enthalten.
Da nie jemand außer den Administratoren sehen wird, wie diese Gruppen intern heißen und lediglich die Präfixe ingame zu sehen sind, passen wir diese nun so an, dass sie kürzer und durchgängig klein geschrieben sind.
Hier die Übersicht, welche Bezeichnungen ich gewählt habe und wie es aussehen könnte:

AltNeu
Gamergamer
YouTuberyoutuber
VIPvip
Herohero
Legendlegend
Test-Supportersupport1
Supportersupport2
Moderatormoderator
EventLeitungevent
BuilderbuilderDeveloperdeveloper
Adminadmin
[tr] [/tr]

Aus den Gruppen habe ich nun eine Vererbungsreihenfolge für die Permissions, zwei Rangleitern, sowie mehrere "Sondergruppen" konstruiert.
Dabei richtet sich die Vererbung ("inheritance") immer danach, wer in aufsteigender Reihenfolge die meisten Permissions hat. Daraus ergibt sich für unser Beispiel:
  • gamer → youtuber → vip → hero → legend → support1 → support2 → moderator → developer → admin
  • --------------------------------------------------------------- ↳ → builder
  • --------------------------------------------------------------- ↳ → event
Die Rangleitern, die rein technisch nichts mit der Vererbung zu tun haben, sind:
  • Leiter "vip": ---vip → hero → legend
  • Leiter "team": support1 → support2 → moderator
Ihr einziger Zweck besteht darin, dass man nun mit dem Befehl "/pex promote <Spieler> <NamederLeiter>" Spieler auf dieser Leiter aufsteigen lassen kann.
Daher ist es auch wichtig, keine Ränge in eine Leiter aufzunehmen, die Administratorbefugnisse haben. (Warum findet ihr im Tutorial dazu)
Allen anderen Gruppen müssen wir die Spieler mit einem längeren Befehl zuordnen. (Siehe dazu: Dokumentation von PEX)

Diese Informationen habe ich auch in die Tabelle eingearbeitet und einige Permissions ergänzt und entfernt.
Mittlerweile schaut das ganze so aus:


____________________________________________________________________________________________________

Wer genau hingeschaut hat, sieht, dass zwei Gruppen zusätzlich von einer mysteriösen Gruppe namens "worldedit" erben.

Diese habe als "Funktionsgruppe" angelegt um die WorldEdit-Permissions einfacher zu managen. Wie, warum und wann solche Gruppen praktisch sind könnte Gegenstand eines anderen Beitrages werden.
In diesem Fall dient es hauptsächlich dazu, die Permission "worldedit.calc" zu entfernen, die zu geschätzten 99% nur dafür gebraucht wird, den Server abstürzen zu lassen. Mit einer eigenen Gruppe für WorldEdit, kann man die Permissions dafür auch unproblematisch zusätzlich und "auf Zeit" an einzelne Spieler vergeben.
Wie genau das geht, ist aber auch nicht Gegenstand dieses Tutorials.

____________________________________________________________________________________________________

Vielleicht ist euch aufgefallen, dass ich die Permission "essentials.chat.*" violett markiert habe.

Dieser Node ist ein hervorragendes Beispiel, warum man sich alle Permissions genau ansehen sollte, bevor man ein Sternchen setzt.
In der Dokumentation finden wir nämlich heraus, dass diese Permission für 8 Permissions steht:


Ich bin mir ziemlich sicher, dass nicht alle davon an alle Gruppen gehen sollten. Zumal damit die vergebene Permission "essentials.ignore" komplett ausgehebelt wird.
Wir merken uns: Besser dreimal nachschauen was sich hinter den Sternen verbirgt.
____________________________________________________________________________________________________

Schritt 4 - Jede Menge Zeug löschen

Da wir unsere Gruppen brav von links nach rechts sortiert haben, wie es unsere "inheritance" vorgibt, können wir nun immer die Permissions markieren, die am weitesten links steht. Also immer in der Gruppe, in der sie das erste Mal auftaucht.

Alles was nach rechts gehend doppelt ist wird gelöscht und stattdessen so markiert, dass wir die Vererbung nachvollziehen können.
Man kann sicher darüber streiten, ob das ganze Markieren notwendig ist, aber bei so vielen Permissions kann man jede Hilfe brauchen, um nicht durcheinander zu geraten.

So schaut es aus, wenn es fertig ist:


An dieser Stelle stellt sich auch heraus, dass die Gruppe "developer" identische Permissions zur Gruppe "moderator" besitzt. Damit fliegt auch diese aus der späteren permission.yml und Spieler die so heißen sollen bekommen ein nettes Präfix zusätzlich und die Gruppe "moderator".
Sieht keiner und spart Platz.
____________________________________________________________________________________________________

Schritt 5 - Die permissions.yml wieder zusammenbasteln

Jetzt brauchen wir noch etwas Geschick beim Zusammenbasteln.
Hierfür bereiten wir unser Notepad++ vor (Anleitung hier), damit sich möglichst keine Satzzeichenfehler einschleichen.

Wer auf Nummer sicher gehen will kann die alte Datei löschen und über Befehle eine neue Datei erstellen. Wie man Die Ränge und Vererbung hinbekommt erfahrt ihr wieder in dem Tutorial dafür.

Meine Empfehlung ist, sich die permissions.yml aus dem Tutorial für paranoide Anfänger zu kopieren und für jede neue Gruppe eine vohergegangene zu kopieren.
Vorhandene Permissions können wir einfach löschen, die Name und die "inheritance" anpassen, sowie die Präfixe an ihre richtige Stelle setzen.

Dann kopieren wir die Permissions aus unserer Tabelle für jede Gruppe einzeln und fügen sie in die Datei ein. Es bleibt, die überflüssigen Zeilenumbrüche zuentfernen und die Node richtig einzurücken. (1 Tab á 4 Leerzeichen vor jeder Zeile)
Vor den Gruppen finden wir je 2 Leerzeichen, auch das müssen wir am Ende nocheinmal gut überprüfen.

Nachdem wir alles eingefügt haben, können wir uns noch überlegen ein paar Schönheitskorrekturen durchzuführen und vielleicht ein paar Nodes mit Regex zusammenzufassen. Auch hierfür mal in das Tutorial schauen.

Als vorletzte Handlung kopieren wir alles noch einmal und fügen es in einem YAML-Parser ein. (http://yaml-online-parser.appspot.com/)
Kommt hier nichts rotes im linken Kasten heraus, haben wir vermutlich alles richtig gemacht mit der Zeichensetzung. Wenn doch, gucken wir uns die Datei nochmal genau an und beheben das Problem.

Häufige Fehler:
  • Zeilen falsch eingerückt
  • ein ":" fehlt oder ist zuviel
  • Tabulatoren wurden nicht ausgeschaltet
  • Die Präfixe oder andere Optionen sind nicht in Anführungszeichen gesetzt
  • Sonderzeichen an Stellen, an denen sie nichts zu suchen haben
____________________________________________________________________________________________________

Letzter Schritt - permissions.yml wieder einfügen und überprüfen

Zum guten Schluss fügen wir unsere neue Datei wieder ein und starten den Server neu.
Sollten immernoch Fehler in der Datei sein, sehen wir dies in der Konsole inklusive der betroffenen Zeile. Dann heißt es noch einmal alles kontrollieren und den Fehler finden.

Hat alles geklappt können wir jetzt die Funktionalität überprüfen und wenn wir hier nichts zu beanstanden haben uns an unserer erfolgreichen Arbeit erfreuen.
Wir haben unsere knapp 800 Zeilen auf etwa 180 Zeilen reduziert und ein übersichtliches System erhalten, das wir viel einfacher warten und ergänzen können.
Vorher:

Nachher:

Geschafft.
 
Zuletzt bearbeitet:

SilberRegen

Workaholic
Mitglied seit
23 März 2012
Beiträge
890
Alter
28
Minecraft
SilberRegen
Tja, was soll ich sagen. Offensichtlich liest niemand was ich schreibe, bevor es freigeschaltet wird.
So bemerkt zumindest keiner den 100 Zeilen langen Part in der Mitte, in den ich immer nur Obszönitäten und Hetzparolen gegen Kühe schreibe. :evil:
 

SilberRegen

Workaholic
Mitglied seit
23 März 2012
Beiträge
890
Alter
28
Minecraft
SilberRegen
Okay, es sind nur ~25 Zeilen, ich geb's zu.

Aber der Beitrag ist jetzt auch fertig :)
 
Allgemein
Hilfe Benutzer
  • ❤️可愛いちゃん️❤️ ❤️可愛いちゃん️❤️:
    Weil sie scheiße alt ist und grundlegende API Methoden einfach fehlen.
  • MrSpock78 MrSpock78:
    Das hat nichts mit Schnittstellen zu tun, wenn der Client ausrastet^^
  • MrSpock78 MrSpock78:
    Sowas kannst du auch in 1.14.x nicht lösen
  • ❤️可愛いちゃん️❤️ ❤️可愛いちゃん️❤️:
    Minecraft hat halt auch keine Serverseitig Verifizierung der Eingaben
  • ❤️可愛いちゃん️❤️ ❤️可愛いちゃん️❤️:
    Meinte aber eher, dass die 1.8 einfach scheiße alt und total verbuggt ist. Das halt als ob man heute Windows 98 nutzt
  • MrSpock78 MrSpock78:
    Die Schnittstellen bleiben die Gleichen... man kann nur das Spielprinzip ändern. Und das versucht Mojang derzeit, um so mehr sich daran beteiligen um so besser.
  • Hadde-chan Hadde-chan:
    Die schnittstellen haben sich nicht geändert owo erzähl das mal den drölf hunderten plugins, die inkompatibel sind xD
  • SirYwell SirYwell:
    Das Video zeigt ziemlich deutlich, wie dumm dieses sog. PvP in Minecraft ist. Ich finde das irgendwie richtig unnötig, wenns nur darum geht, schnell zu klicken
  • MrSpock78 MrSpock78:
    Es bezog sich auf grob "Alle API methoden sind scheisse usw" ... klar ändert sich etwas.
  • MrSpock78 MrSpock78:
    Der Versuch des neuen Combats ist halt genau dass superschnelles Klicken keinen Vorteil mehr bringt^^
  • ❤️可愛いちゃん️❤️ ❤️可愛いちゃん️❤️:
    Ich fand ja Exploits in den Plugins suchen immer deutlich effektiver als schnelles klicken.
  • maybeto maybeto:
    das ist aber schade für @iTz_Proph3t , auch flinker Finger genannt.....
  • iTz_Proph3t iTz_Proph3t:
    Du meinst der flinkeste Finger im Festen?
  • iTz_Proph3t iTz_Proph3t:
    So nennt man mich auch
  • ❤️可愛いちゃん️❤️ ❤️可愛いちゃん️❤️:
    Press F to pay respect
  • Stern☆ Stern☆:
    F F F
  • Matthias Matthias:
    A A A
  • Matthias Matthias:
    Gute Nacht
  • Matthias Matthias:
    Guten Morgen
  • Stern☆ Stern☆:
    Morgen :)
  • HardSoul HardSoul:
    Moin
  • LottaXL LottaXL:
    Moin, moin =)
  • SirYwell SirYwell:
    Guten Morgen
    SirYwell SirYwell: Guten Morgen
    Oben