+ Antworten
Ergebnis 1 bis 3 von 3
  1. #1
    Landwirt
    Registriert seit
    27.03.2017
    Beiträge
    68

    Wort in Chatnachricht durch ClickEvent ersetzen

    Heyho!

    Stehe momentan wieder vor einem kleinen Problem..


    Arbeite momentan an einer Mod, mit der es unter anderem auch möglich ist, bestimmte Nachrichten zu customizen.
    Nehmen wir also zum Beispiel eine private Nachricht auf einem Server von "Spieler A" an "Spieler B". Das personalisierte Nachrichten-Layout wird als String in die Config eingetagen. Da das Layout aber auf jede private Nachricht passen soll, muss ich mit ersetzbaren Strings wie "%p1%" arbeiten.
    Sprich, der Nutzer trägt "%p1% -> Dir: %m%" in die Config ein und das System ersetzt es durch "Spielername -> Dir: Hallo wie geht's".
    Das ist auch absolut kein Problem, solang es nur durch Strings ersetzt wird Allerdings möchte ich, dass man direkt auf den Namen klicken kann, um schnell antworten zu können.

    Ich kann nur leider keinen String durch einen TextComponent ersetzen, müsste also irgendwie bei jedem %XY% den String trennen, dann jedes Mal den TextComponent anhängen und so weiter. Das Anhängen ist ja auch kein Problem, nur wie mach ich das, wenn er die Nachricht durchgehen muss und jedes mal cutten muss, wo was zum ersetzen kommt >.<

    Leider bin ich da mit meinem Latein am Ende und weiß nicht, wie ich das hinbekommen soll..

    Gibt es eventuell noch eine andere (einfache) Möglichkeit, um zum richtigen Ergebnis zu kommen?


    Ich würde mich riesig über ein paar Antworten freuen :3


    Lg ^-^
    Geändert von SpeedyDust (14.01.2018 um 01:36 Uhr)

  2. #2
    Obsidianforscher
    Registriert seit
    06.04.2011
    Beiträge
    2.101
    https://stackoverflow.com/questions/...the-delimiters

    Nutzt RegEx lookbehind und lookahead um einen Zero-width match vor und nach dem "delimiter" zu haben, in deinem Fall die %p1% und ähnliches.

    Beispiel:
    Code:
    String[] splitted = whisperString.split(String.format("((?<=%1$s)|(?=%1$s))", "(%(p1|m)%)"));
    Dann kannst du den Array verarbeiten und später wieder zusammenfügen.

    Oder mit String.substring und String.indexOf was zusammen basteln. (Dies wäre mein erster Ansatz gewesen nachdem ich nichts bei Java intern gefunden habe)

  3. Mag ich Black__Hole, SpeedyDust mag diesen Beitrag
  4. #3
    Landwirt
    Registriert seit
    27.03.2017
    Beiträge
    68
    Zitat Zitat von Neui Beitrag anzeigen
    https://stackoverflow.com/questions/...the-delimiters

    Nutzt RegEx lookbehind und lookahead um einen Zero-width match vor und nach dem "delimiter" zu haben, in deinem Fall die %p1% und ähnliches.

    Beispiel:
    Code:
    String[] splitted = whisperString.split(String.format("((?<=%1$s)|(?=%1$s))", "(%(p1|m)%)"));
    Dann kannst du den Array verarbeiten und später wieder zusammenfügen.

    Oder mit String.substring und String.indexOf was zusammen basteln. (Dies wäre mein erster Ansatz gewesen nachdem ich nichts bei Java intern gefunden habe)
    Oh man, das ist einfach perfekt! Vielen, vielen Dank dir! Ich bekomm wirklich Zustände bei Regex und hätte das so wahrscheinlich nicht hinbekommen Danke

+ Antworten