mirror of
https://github.com/SpigotMC/BungeeCord.git
synced 2024-09-28 05:37:28 +02:00
Change to provide deserializable implementations with inbuilt converters and split either-sourced and new-only-sourced.
This commit is contained in:
parent
c6c9e72282
commit
21cd21565c
@ -26,7 +26,10 @@ import net.md_5.bungee.protocol.data.NumberFormat;
|
||||
import net.md_5.bungee.protocol.data.PlayerPublicKey;
|
||||
import net.md_5.bungee.protocol.data.Property;
|
||||
import net.md_5.bungee.protocol.util.ChatDeserializable;
|
||||
import net.md_5.bungee.protocol.util.ChatFunctionDeserializable;
|
||||
import net.md_5.bungee.protocol.util.ChatDeserializableJson;
|
||||
import net.md_5.bungee.protocol.util.ChatDeserializableTag;
|
||||
import net.md_5.bungee.protocol.util.ChatNewDeserializable;
|
||||
import net.md_5.bungee.protocol.util.ChatNewDeserializableTag;
|
||||
import net.md_5.bungee.protocol.util.Either;
|
||||
import net.md_5.bungee.protocol.util.TagUtil;
|
||||
import se.llbit.nbt.ErrorTag;
|
||||
@ -103,7 +106,7 @@ public abstract class DefinedPacket
|
||||
|
||||
public static Either<String, ChatDeserializable> readEitherBaseComponent(ByteBuf buf, int protocolVersion, boolean string)
|
||||
{
|
||||
return ( string ) ? Either.left( readString( buf ) ) : Either.right( readBaseComponent( buf, protocolVersion ) );
|
||||
return string ? Either.left( readString( buf ) ) : Either.right( readBaseComponent( buf, protocolVersion ) );
|
||||
}
|
||||
|
||||
public static ChatDeserializable readBaseComponent(ByteBuf buf, int protocolVersion)
|
||||
@ -115,14 +118,10 @@ public abstract class DefinedPacket
|
||||
{
|
||||
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_20_3 )
|
||||
{
|
||||
SpecificTag nbt = (SpecificTag) readTag( buf, protocolVersion );
|
||||
|
||||
return new ChatFunctionDeserializable( Either.right( nbt ), (ov) -> ComponentSerializer.deserialize( TagUtil.toJson( ov.getRight() ) ) );
|
||||
return new ChatDeserializableTag( (SpecificTag) readTag( buf, protocolVersion ) );
|
||||
} else
|
||||
{
|
||||
String string = readString( buf, maxStringLength );
|
||||
|
||||
return new ChatFunctionDeserializable( Either.left( string ), (ov) -> ComponentSerializer.deserialize( ov.getLeft() ) );
|
||||
return new ChatDeserializableJson( readString( buf, maxStringLength ) );
|
||||
}
|
||||
}
|
||||
|
||||
@ -147,6 +146,13 @@ public abstract class DefinedPacket
|
||||
}
|
||||
}
|
||||
|
||||
public static ChatNewDeserializable readNewBaseComponent(ByteBuf buf, int protocolVersion)
|
||||
{
|
||||
SpecificTag nbt = (SpecificTag) readTag( buf, protocolVersion );
|
||||
|
||||
return new ChatNewDeserializableTag( nbt );
|
||||
}
|
||||
|
||||
public static ComponentStyle readComponentStyle(ByteBuf buf, int protocolVersion)
|
||||
{
|
||||
SpecificTag nbt = (SpecificTag) readTag( buf, protocolVersion );
|
||||
@ -227,6 +233,19 @@ public abstract class DefinedPacket
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeNewBaseComponent(ChatNewDeserializable message, ByteBuf buf, int protocolVersion)
|
||||
{
|
||||
SpecificTag nbt;
|
||||
if ( message.hasDeserialized() )
|
||||
{
|
||||
nbt = TagUtil.fromJson( ComponentSerializer.toJson( message.get() ) );
|
||||
} else
|
||||
{
|
||||
nbt = message.original();
|
||||
}
|
||||
writeTag( nbt, buf, protocolVersion );
|
||||
}
|
||||
|
||||
public static void writeComponentStyle(ComponentStyle style, ByteBuf buf, int protocolVersion)
|
||||
{
|
||||
JsonElement json = ComponentSerializer.toJson( style );
|
||||
|
@ -11,8 +11,7 @@ import net.md_5.bungee.protocol.DefinedPacket;
|
||||
import net.md_5.bungee.protocol.Protocol;
|
||||
import net.md_5.bungee.protocol.ProtocolConstants;
|
||||
import net.md_5.bungee.protocol.util.ChatDeserializable;
|
||||
import net.md_5.bungee.protocol.util.ChatFunctionDeserializable;
|
||||
import net.md_5.bungee.protocol.util.Either;
|
||||
import net.md_5.bungee.protocol.util.ChatDeserializableJson;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@ -28,8 +27,7 @@ public class Kick extends DefinedPacket
|
||||
{
|
||||
if ( protocol == Protocol.LOGIN )
|
||||
{
|
||||
String json = readString( buf );
|
||||
message = new ChatFunctionDeserializable( Either.left( json ), (ov) -> ComponentSerializer.deserialize( ov.getLeft() ) );
|
||||
message = new ChatDeserializableJson( readString( buf ) );
|
||||
} else
|
||||
{
|
||||
message = readBaseComponent( buf, protocolVersion );
|
||||
|
@ -8,7 +8,7 @@ import lombok.NoArgsConstructor;
|
||||
import net.md_5.bungee.protocol.AbstractPacketHandler;
|
||||
import net.md_5.bungee.protocol.DefinedPacket;
|
||||
import net.md_5.bungee.protocol.ProtocolConstants;
|
||||
import net.md_5.bungee.protocol.util.ChatDeserializable;
|
||||
import net.md_5.bungee.protocol.util.ChatNewDeserializable;
|
||||
import net.md_5.bungee.protocol.util.Either;
|
||||
|
||||
@Data
|
||||
@ -27,13 +27,13 @@ public class ServerLinks extends DefinedPacket
|
||||
links = new Link[ len ];
|
||||
for ( int i = 0; i < len; i++ )
|
||||
{
|
||||
Either<LinkType, ChatDeserializable> type;
|
||||
Either<LinkType, ChatNewDeserializable> type;
|
||||
if ( buf.readBoolean() )
|
||||
{
|
||||
type = Either.left( LinkType.values()[readVarInt( buf )] );
|
||||
} else
|
||||
{
|
||||
type = Either.right( readBaseComponent( buf, protocolVersion ) );
|
||||
type = Either.right( readNewBaseComponent( buf, protocolVersion ) );
|
||||
}
|
||||
String url = readString( buf );
|
||||
|
||||
@ -47,7 +47,7 @@ public class ServerLinks extends DefinedPacket
|
||||
writeVarInt( links.length, buf );
|
||||
for ( Link link : links )
|
||||
{
|
||||
Either<LinkType, ChatDeserializable> type = link.getTypeRaw();
|
||||
Either<LinkType, ChatNewDeserializable> type = link.getType();
|
||||
if ( type.isLeft() )
|
||||
{
|
||||
buf.writeBoolean( true );
|
||||
@ -55,7 +55,7 @@ public class ServerLinks extends DefinedPacket
|
||||
} else
|
||||
{
|
||||
buf.writeBoolean( false );
|
||||
writeBaseComponent( type.getRight(), buf, protocolVersion );
|
||||
writeNewBaseComponent( type.getRight(), buf, protocolVersion );
|
||||
}
|
||||
writeString( link.getUrl(), buf );
|
||||
}
|
||||
@ -86,7 +86,7 @@ public class ServerLinks extends DefinedPacket
|
||||
public static class Link
|
||||
{
|
||||
|
||||
private final Either<LinkType, ChatDeserializable> typeRaw;
|
||||
private final Either<LinkType, ChatNewDeserializable> type;
|
||||
private final String url;
|
||||
}
|
||||
}
|
||||
|
@ -5,4 +5,8 @@ import se.llbit.nbt.SpecificTag;
|
||||
|
||||
public interface ChatDeserializable extends Deserializable<Either<String, SpecificTag>, BaseComponent>
|
||||
{
|
||||
default ChatNewDeserializable cloneAsNew()
|
||||
{
|
||||
return new ChatNewComponentDeserializable( get() );
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,26 @@
|
||||
package net.md_5.bungee.protocol.util;
|
||||
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NonNull;
|
||||
import lombok.ToString;
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
import net.md_5.bungee.chat.ComponentSerializer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@ToString
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class ChatDeserializableJson extends ChatCapturingDeserializable
|
||||
{
|
||||
|
||||
public ChatDeserializableJson(@NonNull String chatJson)
|
||||
{
|
||||
super( Either.left( chatJson ) );
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public BaseComponent deserialize()
|
||||
{
|
||||
return ComponentSerializer.deserialize( original().getLeft() );
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package net.md_5.bungee.protocol.util;
|
||||
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NonNull;
|
||||
import lombok.ToString;
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
import net.md_5.bungee.chat.ComponentSerializer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import se.llbit.nbt.SpecificTag;
|
||||
|
||||
@ToString
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class ChatDeserializableTag extends ChatCapturingDeserializable
|
||||
{
|
||||
|
||||
public ChatDeserializableTag(@NonNull SpecificTag chatTag)
|
||||
{
|
||||
super( Either.right( chatTag ) );
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public BaseComponent deserialize()
|
||||
{
|
||||
return ComponentSerializer.deserialize( TagUtil.toJson( original().getRight() ) );
|
||||
}
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
package net.md_5.bungee.protocol.util;
|
||||
|
||||
import java.util.function.Function;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NonNull;
|
||||
import lombok.ToString;
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import se.llbit.nbt.SpecificTag;
|
||||
|
||||
@ToString
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class ChatFunctionDeserializable extends ChatCapturingDeserializable
|
||||
{
|
||||
private final Function<Either<String, SpecificTag>, BaseComponent> function;
|
||||
|
||||
public ChatFunctionDeserializable(@NonNull Either<String, SpecificTag> ov, Function<Either<String, SpecificTag>, BaseComponent> supplier)
|
||||
{
|
||||
super( ov );
|
||||
this.function = supplier;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public BaseComponent deserialize()
|
||||
{
|
||||
return function.apply( original() );
|
||||
}
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package net.md_5.bungee.protocol.util;
|
||||
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NonNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.ToString;
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
import se.llbit.nbt.SpecificTag;
|
||||
|
||||
@ToString
|
||||
@EqualsAndHashCode
|
||||
@RequiredArgsConstructor
|
||||
public abstract class ChatNewCapturingDeserializable implements ChatNewDeserializable
|
||||
{
|
||||
@NonNull
|
||||
private final SpecificTag original;
|
||||
private BaseComponent deserialized;
|
||||
|
||||
/**
|
||||
* Method called to get the deserialized value. Called only once unless multiple threads are calling get() at the
|
||||
* same time.
|
||||
*
|
||||
* @return the deserialized value
|
||||
*/
|
||||
@NonNull
|
||||
protected abstract BaseComponent deserialize();
|
||||
|
||||
@Override
|
||||
public final BaseComponent get()
|
||||
{
|
||||
if ( !hasDeserialized() )
|
||||
{
|
||||
return deserialized = deserialize();
|
||||
}
|
||||
return deserialized;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean hasDeserialized()
|
||||
{
|
||||
return deserialized != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final SpecificTag original()
|
||||
{
|
||||
return original;
|
||||
}
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package net.md_5.bungee.protocol.util;
|
||||
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.ToString;
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
import se.llbit.nbt.SpecificTag;
|
||||
|
||||
@ToString
|
||||
@EqualsAndHashCode
|
||||
@RequiredArgsConstructor
|
||||
public class ChatNewComponentDeserializable implements ChatNewDeserializable
|
||||
{
|
||||
private final BaseComponent value;
|
||||
|
||||
@Override
|
||||
public BaseComponent get()
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SpecificTag original()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasDeserialized()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
package net.md_5.bungee.protocol.util;
|
||||
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
import se.llbit.nbt.SpecificTag;
|
||||
|
||||
public interface ChatNewDeserializable extends Deserializable<SpecificTag, BaseComponent>
|
||||
{
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package net.md_5.bungee.protocol.util;
|
||||
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NonNull;
|
||||
import lombok.ToString;
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
import net.md_5.bungee.chat.ComponentSerializer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import se.llbit.nbt.SpecificTag;
|
||||
|
||||
@ToString
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class ChatNewDeserializableTag extends ChatNewCapturingDeserializable
|
||||
{
|
||||
|
||||
public ChatNewDeserializableTag(@NonNull SpecificTag chatTag)
|
||||
{
|
||||
super( chatTag );
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public BaseComponent deserialize()
|
||||
{
|
||||
return ComponentSerializer.deserialize( TagUtil.toJson( original() ) );
|
||||
}
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package net.md_5.bungee.protocol.util;
|
||||
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
import se.llbit.nbt.SpecificTag;
|
||||
|
||||
class ChatNewOldAdapter implements ChatDeserializable
|
||||
{
|
||||
|
||||
private final ChatNewDeserializable newDeserializable;
|
||||
|
||||
public ChatNewOldAdapter(ChatNewDeserializable newDeserializable)
|
||||
{
|
||||
this.newDeserializable = newDeserializable;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseComponent get()
|
||||
{
|
||||
return newDeserializable.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Either<String, SpecificTag> original()
|
||||
{
|
||||
return Either.right( newDeserializable.original() );
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasDeserialized()
|
||||
{
|
||||
return newDeserializable.hasDeserialized();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user