Support setting uuid's on ServerPing.PlayerInfo + fix plugins which don't provide a valid uuid.
This commit is contained in:
parent
86ef046544
commit
bf9521472b
@ -3,6 +3,9 @@ package net.md_5.bungee.api;
|
|||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
import net.md_5.bungee.Util;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents the standard list data returned by opening a server in the
|
* Represents the standard list data returned by opening a server in the
|
||||||
@ -42,7 +45,32 @@ public class ServerPing
|
|||||||
{
|
{
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
private String id;
|
private UUID uniqueId;
|
||||||
|
|
||||||
|
private static final UUID md5UUID = Util.getUUID( "af74a02d19cb445bb07f6866a861f783" );
|
||||||
|
|
||||||
|
public PlayerInfo(String name, String id)
|
||||||
|
{
|
||||||
|
setName( name );
|
||||||
|
setId( id );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
uniqueId = Util.getUUID( id );
|
||||||
|
} catch ( Exception e )
|
||||||
|
{
|
||||||
|
// Fallback on a valid uuid otherwise Minecraft complains
|
||||||
|
uniqueId = md5UUID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getId()
|
||||||
|
{
|
||||||
|
return uniqueId.toString().replaceAll( "-", "" );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
private String description;
|
private String description;
|
||||||
private String favicon;
|
private String favicon;
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package net.md_5.bungee;
|
package net.md_5.bungee;
|
||||||
|
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
|
import net.md_5.bungee.api.ServerPing;
|
||||||
import net.md_5.bungee.module.ModuleManager;
|
import net.md_5.bungee.module.ModuleManager;
|
||||||
import com.google.common.io.ByteStreams;
|
import com.google.common.io.ByteStreams;
|
||||||
import net.md_5.bungee.api.chat.BaseComponent;
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
@ -128,7 +130,10 @@ public class BungeeCord extends ProxyServer
|
|||||||
private ConsoleReader consoleReader;
|
private ConsoleReader consoleReader;
|
||||||
@Getter
|
@Getter
|
||||||
private final Logger logger;
|
private final Logger logger;
|
||||||
public final Gson gson = new Gson();
|
public final Gson gson = new GsonBuilder()
|
||||||
|
.registerTypeAdapter( ServerPing.PlayerInfo.class, new PlayerInfoSerializer( 5 ) ).create();
|
||||||
|
public final Gson gsonLegacy = new GsonBuilder()
|
||||||
|
.registerTypeAdapter( ServerPing.PlayerInfo.class, new PlayerInfoSerializer( 4 ) ).create();
|
||||||
@Getter
|
@Getter
|
||||||
private ConnectionThrottle connectionThrottle;
|
private ConnectionThrottle connectionThrottle;
|
||||||
private final ModuleManager moduleManager = new ModuleManager();
|
private final ModuleManager moduleManager = new ModuleManager();
|
||||||
|
@ -0,0 +1,51 @@
|
|||||||
|
package net.md_5.bungee;
|
||||||
|
|
||||||
|
import com.google.gson.JsonDeserializationContext;
|
||||||
|
import com.google.gson.JsonDeserializer;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonParseException;
|
||||||
|
import com.google.gson.JsonSerializationContext;
|
||||||
|
import com.google.gson.JsonSerializer;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import net.md_5.bungee.api.ServerPing;
|
||||||
|
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class PlayerInfoSerializer implements JsonSerializer<ServerPing.PlayerInfo>, JsonDeserializer<ServerPing.PlayerInfo>
|
||||||
|
{
|
||||||
|
|
||||||
|
private final int protocol;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ServerPing.PlayerInfo deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
|
||||||
|
{
|
||||||
|
JsonObject js = json.getAsJsonObject();
|
||||||
|
ServerPing.PlayerInfo info = new ServerPing.PlayerInfo( js.get( "name" ).getAsString(), (UUID) null );
|
||||||
|
if ( protocol == 4 )
|
||||||
|
{
|
||||||
|
info.setId( js.get( "id" ).getAsString() );
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
info.setUniqueId( UUID.fromString( js.get( "id" ).getAsString() ) );
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JsonElement serialize(ServerPing.PlayerInfo src, Type typeOfSrc, JsonSerializationContext context)
|
||||||
|
{
|
||||||
|
JsonObject out = new JsonObject();
|
||||||
|
out.addProperty( "name", src.getName() );
|
||||||
|
if ( protocol == 4 )
|
||||||
|
{
|
||||||
|
out.addProperty( "id", src.getId() );
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
out.addProperty( "id", src.getUniqueId().toString() );
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
}
|
@ -11,6 +11,8 @@ import java.util.List;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import javax.crypto.SecretKey;
|
import javax.crypto.SecretKey;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import net.md_5.bungee.*;
|
import net.md_5.bungee.*;
|
||||||
@ -161,7 +163,8 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
|||||||
result = bungee.getPluginManager().callEvent( new ProxyPingEvent( InitialHandler.this, result ) ).getResponse();
|
result = bungee.getPluginManager().callEvent( new ProxyPingEvent( InitialHandler.this, result ) ).getResponse();
|
||||||
|
|
||||||
BungeeCord.getInstance().getConnectionThrottle().unthrottle( getAddress().getAddress() );
|
BungeeCord.getInstance().getConnectionThrottle().unthrottle( getAddress().getAddress() );
|
||||||
unsafe.sendPacket( new StatusResponse( BungeeCord.getInstance().gson.toJson( result ) ) );
|
Gson gson = handshake.getProtocolVersion() == 4 ? BungeeCord.getInstance().gsonLegacy : BungeeCord.getInstance().gson;
|
||||||
|
unsafe.sendPacket( new StatusResponse( gson.toJson( result ) ) );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package net.md_5.bungee.connection;
|
package net.md_5.bungee.connection;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import net.md_5.bungee.BungeeCord;
|
import net.md_5.bungee.BungeeCord;
|
||||||
import net.md_5.bungee.api.Callback;
|
import net.md_5.bungee.api.Callback;
|
||||||
@ -49,7 +50,8 @@ public class PingHandler extends PacketHandler
|
|||||||
@Override
|
@Override
|
||||||
public void handle(StatusResponse statusResponse) throws Exception
|
public void handle(StatusResponse statusResponse) throws Exception
|
||||||
{
|
{
|
||||||
callback.done( BungeeCord.getInstance().gson.fromJson( statusResponse.getResponse(), ServerPing.class ), null );
|
Gson gson = protocol == 4 ? BungeeCord.getInstance().gsonLegacy : BungeeCord.getInstance().gson;
|
||||||
|
callback.done( gson.fromJson( statusResponse.getResponse(), ServerPing.class ), null );
|
||||||
channel.close();
|
channel.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user