44import java .util .ArrayList ;
55import java .util .List ;
66import lombok .AccessLevel ;
7+ import lombok .Data ;
78import lombok .EqualsAndHashCode ;
89import lombok .Getter ;
910import lombok .Setter ;
@@ -677,11 +678,11 @@ public boolean hasFormatting()
677678 public String toPlainText ()
678679 {
679680 StringBuilder builder = new StringBuilder ();
680- toPlainText ( builder );
681+ toPlainText ( new LimitedStringVisitor ( builder , Short . MAX_VALUE ) );
681682 return builder .toString ();
682683 }
683684
684- void toPlainText (StringBuilder builder )
685+ void toPlainText (StringVisitor builder )
685686 {
686687 if ( extra != null )
687688 {
@@ -701,11 +702,11 @@ void toPlainText(StringBuilder builder)
701702 public String toLegacyText ()
702703 {
703704 StringBuilder builder = new StringBuilder ();
704- toLegacyText ( builder );
705+ toLegacyText ( new LimitedStringVisitor ( builder , Short . MAX_VALUE ) );
705706 return builder .toString ();
706707 }
707708
708- void toLegacyText (StringBuilder builder )
709+ void toLegacyText (StringVisitor builder )
709710 {
710711 if ( extra != null )
711712 {
@@ -716,7 +717,7 @@ void toLegacyText(StringBuilder builder)
716717 }
717718 }
718719
719- void addFormat (StringBuilder builder )
720+ void addFormat (StringVisitor builder )
720721 {
721722 builder .append ( getColor () );
722723 if ( isBold () )
@@ -740,4 +741,35 @@ void addFormat(StringBuilder builder)
740741 builder .append ( ChatColor .MAGIC );
741742 }
742743 }
744+
745+ @ FunctionalInterface
746+ protected static interface StringVisitor
747+ {
748+
749+ void append (String s );
750+
751+ default void append (Object obj )
752+ {
753+ append ( String .valueOf ( obj ) );
754+ }
755+ }
756+
757+ @ Data
758+ protected static class LimitedStringVisitor implements StringVisitor
759+ {
760+
761+ private final StringBuilder builder ;
762+ private final int maxLength ;
763+
764+ @ Override
765+ public void append (String s )
766+ {
767+ if ( builder .length () >= maxLength )
768+ {
769+ throw new IllegalArgumentException ( "String exceeded maximum length " + maxLength );
770+ }
771+
772+ builder .append ( s );
773+ }
774+ }
743775}
0 commit comments