Limit length of chat string conversions
This commit is contained in:
parent
93508d5083
commit
b60c1bdb37
@ -4,6 +4,7 @@ import java.awt.Color;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
@ -677,11 +678,11 @@ public abstract class BaseComponent
|
|||||||
public String toPlainText()
|
public String toPlainText()
|
||||||
{
|
{
|
||||||
StringBuilder builder = new StringBuilder();
|
StringBuilder builder = new StringBuilder();
|
||||||
toPlainText( builder );
|
toPlainText( new LimitedStringVisitor( builder, Short.MAX_VALUE ) );
|
||||||
return builder.toString();
|
return builder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
void toPlainText(StringBuilder builder)
|
void toPlainText(StringVisitor builder)
|
||||||
{
|
{
|
||||||
if ( extra != null )
|
if ( extra != null )
|
||||||
{
|
{
|
||||||
@ -701,11 +702,11 @@ public abstract class BaseComponent
|
|||||||
public String toLegacyText()
|
public String toLegacyText()
|
||||||
{
|
{
|
||||||
StringBuilder builder = new StringBuilder();
|
StringBuilder builder = new StringBuilder();
|
||||||
toLegacyText( builder );
|
toLegacyText( new LimitedStringVisitor( builder, Short.MAX_VALUE ) );
|
||||||
return builder.toString();
|
return builder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
void toLegacyText(StringBuilder builder)
|
void toLegacyText(StringVisitor builder)
|
||||||
{
|
{
|
||||||
if ( extra != null )
|
if ( extra != null )
|
||||||
{
|
{
|
||||||
@ -716,7 +717,7 @@ public abstract class BaseComponent
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void addFormat(StringBuilder builder)
|
void addFormat(StringVisitor builder)
|
||||||
{
|
{
|
||||||
builder.append( getColor() );
|
builder.append( getColor() );
|
||||||
if ( isBold() )
|
if ( isBold() )
|
||||||
@ -740,4 +741,35 @@ public abstract class BaseComponent
|
|||||||
builder.append( ChatColor.MAGIC );
|
builder.append( ChatColor.MAGIC );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@FunctionalInterface
|
||||||
|
protected static interface StringVisitor
|
||||||
|
{
|
||||||
|
|
||||||
|
void append(String s);
|
||||||
|
|
||||||
|
default void append(Object obj)
|
||||||
|
{
|
||||||
|
append( String.valueOf( obj ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
protected static class LimitedStringVisitor implements StringVisitor
|
||||||
|
{
|
||||||
|
|
||||||
|
private final StringBuilder builder;
|
||||||
|
private final int maxLength;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void append(String s)
|
||||||
|
{
|
||||||
|
if ( builder.length() >= maxLength )
|
||||||
|
{
|
||||||
|
throw new IllegalArgumentException( "String exceeded maximum length " + maxLength );
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.append( s );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,14 +50,14 @@ public final class KeybindComponent extends BaseComponent
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void toPlainText(StringBuilder builder)
|
protected void toPlainText(StringVisitor builder)
|
||||||
{
|
{
|
||||||
builder.append( getKeybind() );
|
builder.append( getKeybind() );
|
||||||
super.toPlainText( builder );
|
super.toPlainText( builder );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void toLegacyText(StringBuilder builder)
|
protected void toLegacyText(StringVisitor builder)
|
||||||
{
|
{
|
||||||
addFormat( builder );
|
addFormat( builder );
|
||||||
builder.append( getKeybind() );
|
builder.append( getKeybind() );
|
||||||
|
@ -85,14 +85,14 @@ public final class ScoreComponent extends BaseComponent
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void toPlainText(StringBuilder builder)
|
protected void toPlainText(StringVisitor builder)
|
||||||
{
|
{
|
||||||
builder.append( this.value );
|
builder.append( this.value );
|
||||||
super.toPlainText( builder );
|
super.toPlainText( builder );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void toLegacyText(StringBuilder builder)
|
protected void toLegacyText(StringVisitor builder)
|
||||||
{
|
{
|
||||||
addFormat( builder );
|
addFormat( builder );
|
||||||
builder.append( this.value );
|
builder.append( this.value );
|
||||||
|
@ -69,14 +69,14 @@ public final class SelectorComponent extends BaseComponent
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void toPlainText(StringBuilder builder)
|
protected void toPlainText(StringVisitor builder)
|
||||||
{
|
{
|
||||||
builder.append( this.selector );
|
builder.append( this.selector );
|
||||||
super.toPlainText( builder );
|
super.toPlainText( builder );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void toLegacyText(StringBuilder builder)
|
protected void toLegacyText(StringVisitor builder)
|
||||||
{
|
{
|
||||||
addFormat( builder );
|
addFormat( builder );
|
||||||
builder.append( this.selector );
|
builder.append( this.selector );
|
||||||
|
@ -280,14 +280,14 @@ public final class TextComponent extends BaseComponent
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void toPlainText(StringBuilder builder)
|
protected void toPlainText(StringVisitor builder)
|
||||||
{
|
{
|
||||||
builder.append( text );
|
builder.append( text );
|
||||||
super.toPlainText( builder );
|
super.toPlainText( builder );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void toLegacyText(StringBuilder builder)
|
protected void toLegacyText(StringVisitor builder)
|
||||||
{
|
{
|
||||||
addFormat( builder );
|
addFormat( builder );
|
||||||
builder.append( text );
|
builder.append( text );
|
||||||
|
@ -156,20 +156,20 @@ public final class TranslatableComponent extends BaseComponent
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void toPlainText(StringBuilder builder)
|
protected void toPlainText(StringVisitor builder)
|
||||||
{
|
{
|
||||||
convert( builder, false );
|
convert( builder, false );
|
||||||
super.toPlainText( builder );
|
super.toPlainText( builder );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void toLegacyText(StringBuilder builder)
|
protected void toLegacyText(StringVisitor builder)
|
||||||
{
|
{
|
||||||
convert( builder, true );
|
convert( builder, true );
|
||||||
super.toLegacyText( builder );
|
super.toLegacyText( builder );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void convert(StringBuilder builder, boolean applyFormat)
|
private void convert(StringVisitor builder, boolean applyFormat)
|
||||||
{
|
{
|
||||||
String trans = TranslationRegistry.INSTANCE.translate( translate );
|
String trans = TranslationRegistry.INSTANCE.translate( translate );
|
||||||
|
|
||||||
|
@ -564,6 +564,15 @@ public class ComponentsTest
|
|||||||
assertEquals( "http://google.com/test", url2.getValue() );
|
assertEquals( "http://google.com/test", url2.getValue() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testLong()
|
||||||
|
{
|
||||||
|
BaseComponent test = ComponentSerializer.deserialize( "{\"translate\":\"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s\",\"with\":[{\"translate\":\"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s\",\"with\":[{\"translate\":\"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s\",\"with\":[{\"translate\":\"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s\",\"with\":[{\"translate\":\"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s\",\"with\":[{\"translate\":\"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s\",\"with\":[{\"translate\":\"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s\",\"with\":[{\"translate\":\"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s\",\"with\":[{\"translate\":\"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s\",\"with\":[{\"translate\":\"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s\",\"with\":[\"Test\"]}]}]}]}]}]}]}]}]}]}" );
|
||||||
|
|
||||||
|
assertThrows( RuntimeException.class, test::toLegacyText );
|
||||||
|
assertThrows( RuntimeException.class, test::toPlainText );
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testBuilderCreate()
|
public void testBuilderCreate()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user