Remove 1.7.x Support

This commit is contained in:
Thinkofdeath
2016-03-01 09:13:12 +11:00
committed by md_5
parent 219819b738
commit dfaa687f71
29 changed files with 165 additions and 547 deletions

View File

@@ -139,10 +139,7 @@ public class BungeeCord extends ProxyServer
@Getter
private final Logger logger;
public final Gson gson = new GsonBuilder()
.registerTypeAdapter( ServerPing.PlayerInfo.class, new PlayerInfoSerializer( ProtocolConstants.MINECRAFT_1_7_6 ) )
.registerTypeAdapter( Favicon.class, Favicon.getFaviconTypeAdapter() ).create();
public final Gson gsonLegacy = new GsonBuilder()
.registerTypeAdapter( ServerPing.PlayerInfo.class, new PlayerInfoSerializer( ProtocolConstants.MINECRAFT_1_7_2 ) )
.registerTypeAdapter( ServerPing.PlayerInfo.class, new PlayerInfoSerializer() )
.registerTypeAdapter( Favicon.class, Favicon.getFaviconTypeAdapter() ).create();
@Getter
private ConnectionThrottle connectionThrottle;

View File

@@ -152,16 +152,11 @@ public class BungeeTitle implements Title
@Override
public Title send(ProxiedPlayer player)
{
if ( player.getPendingConnection().getVersion() >= ProtocolConstants.MINECRAFT_1_8 )
{
// Send the packets in the correct order
sendPacket( player, clear );
sendPacket( player, reset );
sendPacket( player, times );
sendPacket( player, subtitle );
sendPacket( player, title );
}
sendPacket( player, clear );
sendPacket( player, reset );
sendPacket( player, times );
sendPacket( player, subtitle );
sendPacket( player, title );
return this;
}
}

View File

@@ -14,21 +14,13 @@ import java.util.UUID;
public class PlayerInfoSerializer implements JsonSerializer<ServerPing.PlayerInfo>, JsonDeserializer<ServerPing.PlayerInfo>
{
private final int protocol;
public PlayerInfoSerializer(int protocol)
{
this.protocol = 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 );
String id = js.get( "id" ).getAsString();
if ( protocol == 4 || !id.contains( "-" ) )
if ( !id.contains( "-" ) )
{
info.setId( id );
} else
@@ -43,13 +35,7 @@ public class PlayerInfoSerializer implements JsonSerializer<ServerPing.PlayerInf
{
JsonObject out = new JsonObject();
out.addProperty( "name", src.getName() );
if ( protocol == 4 )
{
out.addProperty( "id", src.getId() );
} else
{
out.addProperty( "id", src.getUniqueId().toString() );
}
out.addProperty( "id", src.getUniqueId().toString() );
return out;
}
}

View File

@@ -28,7 +28,6 @@ import net.md_5.bungee.netty.ChannelWrapper;
import net.md_5.bungee.netty.HandlerBoss;
import net.md_5.bungee.netty.PacketHandler;
import net.md_5.bungee.protocol.DefinedPacket;
import net.md_5.bungee.protocol.MinecraftOutput;
import net.md_5.bungee.protocol.Protocol;
import net.md_5.bungee.protocol.ProtocolConstants;
import net.md_5.bungee.protocol.packet.EncryptionRequest;
@@ -193,18 +192,10 @@ public class ServerConnector extends PacketHandler
user.unsafe().sendPacket( modLogin );
if ( user.getPendingConnection().getVersion() < ProtocolConstants.MINECRAFT_1_8 )
{
MinecraftOutput out = new MinecraftOutput();
out.writeStringUTF8WithoutLengthHeaderBecauseDinnerboneStuffedUpTheMCBrandPacket( ProxyServer.getInstance().getName() + " (" + ProxyServer.getInstance().getVersion() + ")" );
user.unsafe().sendPacket( new PluginMessage( "MC|Brand", out.toArray(), handshakeHandler.isServerForge() ) );
} else
{
ByteBuf brand = ByteBufAllocator.DEFAULT.heapBuffer();
DefinedPacket.writeString( bungee.getName() + " (" + bungee.getVersion() + ")", brand );
user.unsafe().sendPacket( new PluginMessage( "MC|Brand", brand.array().clone(), handshakeHandler.isServerForge() ) );
brand.release();
}
ByteBuf brand = ByteBufAllocator.DEFAULT.heapBuffer();
DefinedPacket.writeString( bungee.getName() + " (" + bungee.getVersion() + ")", brand );
user.unsafe().sendPacket( new PluginMessage( "MC|Brand", brand.array().clone(), handshakeHandler.isServerForge() ) );
brand.release();
} else
{
user.getServer().setObsolete( true );

View File

@@ -391,7 +391,7 @@ public final class UserConnection implements ProxiedPlayer
public void sendMessage(ChatMessageType position, BaseComponent... message)
{
// Action bar doesn't display the new JSON formattings, legacy works - send it using this for now
if ( position == ChatMessageType.ACTION_BAR && pendingConnection.getVersion() >= ProtocolConstants.MINECRAFT_1_8 )
if ( position == ChatMessageType.ACTION_BAR )
{
sendMessage( position, ComponentSerializer.toString( new TextComponent( TextComponent.toLegacyText( message ) ) ) );
} else
@@ -404,7 +404,7 @@ public final class UserConnection implements ProxiedPlayer
public void sendMessage(ChatMessageType position, BaseComponent message)
{
// Action bar doesn't display the new JSON formattings, legacy works - send it using this for now
if ( position == ChatMessageType.ACTION_BAR && pendingConnection.getVersion() >= ProtocolConstants.MINECRAFT_1_8 )
if ( position == ChatMessageType.ACTION_BAR )
{
sendMessage( position, ComponentSerializer.toString( new TextComponent( TextComponent.toLegacyText( message ) ) ) );
} else
@@ -541,25 +541,19 @@ public final class UserConnection implements ProxiedPlayer
@Override
public void setTabHeader(BaseComponent header, BaseComponent footer)
{
if ( pendingConnection.getVersion() >= ProtocolConstants.MINECRAFT_1_8 )
{
unsafe().sendPacket( new PlayerListHeaderFooter(
( header != null ) ? ComponentSerializer.toString( header ) : EMPTY_TEXT,
( footer != null ) ? ComponentSerializer.toString( footer ) : EMPTY_TEXT
) );
}
unsafe().sendPacket( new PlayerListHeaderFooter(
( header != null ) ? ComponentSerializer.toString( header ) : EMPTY_TEXT,
( footer != null ) ? ComponentSerializer.toString( footer ) : EMPTY_TEXT
) );
}
@Override
public void setTabHeader(BaseComponent[] header, BaseComponent[] footer)
{
if ( pendingConnection.getVersion() >= ProtocolConstants.MINECRAFT_1_8 )
{
unsafe().sendPacket( new PlayerListHeaderFooter(
( header != null ) ? ComponentSerializer.toString( header ) : EMPTY_TEXT,
( footer != null ) ? ComponentSerializer.toString( footer ) : EMPTY_TEXT
) );
}
unsafe().sendPacket( new PlayerListHeaderFooter(
( header != null ) ? ComponentSerializer.toString( header ) : EMPTY_TEXT,
( footer != null ) ? ComponentSerializer.toString( footer ) : EMPTY_TEXT
) );
}
@Override

View File

@@ -229,28 +229,13 @@ public class DownstreamBridge extends PacketHandler
if ( pluginMessage.getTag().equals( "MC|Brand" ) )
{
if ( con.getPendingConnection().getVersion() >= ProtocolConstants.MINECRAFT_1_8 )
{
try
{
ByteBuf brand = Unpooled.wrappedBuffer( pluginMessage.getData() );
String serverBrand = DefinedPacket.readString( brand );
brand.release();
brand = ByteBufAllocator.DEFAULT.heapBuffer();
DefinedPacket.writeString( bungee.getName() + " (" + bungee.getVersion() + ")" + " <- " + serverBrand, brand );
pluginMessage.setData( brand.array().clone() );
brand.release();
} catch ( Exception ignored )
{
// TODO: Remove this
// Older spigot protocol builds sent the brand incorrectly
return;
}
} else
{
String serverBrand = new String( pluginMessage.getData(), "UTF-8" );
pluginMessage.setData( ( bungee.getName() + " (" + bungee.getVersion() + ")" + " <- " + serverBrand ).getBytes( "UTF-8" ) );
}
ByteBuf brand = Unpooled.wrappedBuffer( pluginMessage.getData() );
String serverBrand = DefinedPacket.readString( brand );
brand.release();
brand = ByteBufAllocator.DEFAULT.heapBuffer();
DefinedPacket.writeString( bungee.getName() + " (" + bungee.getVersion() + ")" + " <- " + serverBrand, brand );
pluginMessage.setData( brand.array().clone() );
brand.release();
// changes in the packet are ignored so we need to send it manually
con.unsafe().sendPacket( pluginMessage );
throw CancelSendSignal.INSTANCE;

View File

@@ -213,7 +213,7 @@ public class InitialHandler extends PacketHandler implements PendingConnection
public void done(ProxyPingEvent pingResult, Throwable error)
{
BungeeCord.getInstance().getConnectionThrottle().unthrottle( getAddress().getAddress() );
Gson gson = handshake.getProtocolVersion() == ProtocolConstants.MINECRAFT_1_7_2 ? BungeeCord.getInstance().gsonLegacy : BungeeCord.getInstance().gson;
Gson gson = BungeeCord.getInstance().gson;
unsafe.sendPacket( new StatusResponse( gson.toJson( pingResult.getResponse() ) ) );
}
};
@@ -478,13 +478,7 @@ public class InitialHandler extends PacketHandler implements PendingConnection
userCon.setCompressionThreshold( BungeeCord.getInstance().config.getCompressionThreshold() );
userCon.init();
if ( getVersion() >= ProtocolConstants.MINECRAFT_1_7_6 )
{
unsafe.sendPacket( new LoginSuccess( getUniqueId().toString(), getName() ) ); // With dashes in between
} else
{
unsafe.sendPacket( new LoginSuccess( getUUID(), getName() ) ); // Without dashes, for older clients.
}
unsafe.sendPacket( new LoginSuccess( getUniqueId().toString(), getName() ) ); // With dashes in between
ch.setProtocol( Protocol.GAME );
ch.getHandle().pipeline().get( HandlerBoss.class ).setHandler( new UpstreamBridge( bungee, userCon ) );

View File

@@ -53,7 +53,7 @@ public class PingHandler extends PacketHandler
@SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR")
public void handle(StatusResponse statusResponse) throws Exception
{
Gson gson = protocol == ProtocolConstants.MINECRAFT_1_7_2 ? BungeeCord.getInstance().gsonLegacy : BungeeCord.getInstance().gson;
Gson gson = BungeeCord.getInstance().gson;
callback.done( gson.fromJson( statusResponse.getResponse(), ServerPing.class ), null );
channel.close();
}

View File

@@ -74,10 +74,7 @@ public class UpstreamBridge extends PacketHandler
} );
for ( ProxiedPlayer player : con.getServer().getInfo().getPlayers() )
{
if ( player.getPendingConnection().getVersion() >= ProtocolConstants.MINECRAFT_1_8 )
{
player.unsafe().sendPacket( packet );
}
player.unsafe().sendPacket( packet );
}
con.getServer().disconnect( "Quitting" );
}

View File

@@ -25,10 +25,6 @@ public abstract class EntityMap
{
switch ( version )
{
case ProtocolConstants.MINECRAFT_1_7_2:
return EntityMap_1_7_2.INSTANCE;
case ProtocolConstants.MINECRAFT_1_7_6:
return EntityMap_1_7_6.INSTANCE;
case ProtocolConstants.MINECRAFT_1_8:
return EntityMap_1_8.INSTANCE;
}

View File

@@ -87,19 +87,15 @@ enum ForgeClientHandshakeState implements IForgeClientPacketHandler<ForgeClientH
Map<String, String> clientModList = ForgeUtils.readModList( message );
con.getForgeClientHandler().setClientModList( clientModList );
// If the user is running 1.8 or above, we don't need to check the version of FML - it's always an OK version.
if ( con.getPendingConnection().getVersion() < ProtocolConstants.MINECRAFT_1_8 )
{
// Get the version from the mod list.
int buildNumber = ForgeUtils.getFmlBuildNumber( clientModList );
// Get the version from the mod list.
int buildNumber = ForgeUtils.getFmlBuildNumber( clientModList );
// If we get 0, we're probably using a testing build, so let it though. Otherwise, check the build number.
if ( buildNumber < ForgeConstants.FML_MIN_BUILD_VERSION && buildNumber != 0 )
{
// Mark the user as an old Forge user. This will then cause any Forge ServerConnectors to cancel any
// connections to it.
con.getForgeClientHandler().setForgeOutdated( true );
}
// If we get 0, we're probably using a testing build, so let it though. Otherwise, check the build number.
if ( buildNumber < ForgeConstants.FML_MIN_BUILD_VERSION && buildNumber != 0 )
{
// Mark the user as an old Forge user. This will then cause any Forge ServerConnectors to cancel any
// connections to it.
con.getForgeClientHandler().setForgeOutdated( true );
}
}

View File

@@ -90,24 +90,7 @@ public class Global extends TabList
item.setGamemode( ( (UserConnection) p ).getGamemode() );
item.setPing( p.getPing() );
}
if ( player.getPendingConnection().getVersion() >= ProtocolConstants.MINECRAFT_1_8 )
{
player.unsafe().sendPacket( playerListItem );
} else
{
// Split up the packet
for ( PlayerListItem.Item item : playerListItem.getItems() )
{
PlayerListItem packet = new PlayerListItem();
packet.setAction( playerListItem.getAction() );
packet.setItems( new PlayerListItem.Item[]
{
item
} );
player.unsafe().sendPacket( packet );
}
}
player.unsafe().sendPacket( playerListItem );
PlayerListItem packet = new PlayerListItem();
packet.setAction( PlayerListItem.Action.ADD_PLAYER );
PlayerListItem.Item item = new PlayerListItem.Item();

View File

@@ -12,7 +12,6 @@ public class ServerUnique extends TabList
{
private final Collection<UUID> uuids = new HashSet<>();
private final Collection<String> usernames = new HashSet<>(); // Support for <=1.7.9
public ServerUnique(ProxiedPlayer player)
{
@@ -26,22 +25,10 @@ public class ServerUnique extends TabList
{
if ( playerListItem.getAction() == PlayerListItem.Action.ADD_PLAYER )
{
if ( item.getUuid() != null )
{
uuids.add( item.getUuid() );
} else
{
usernames.add( item.getUsername() );
}
uuids.add( item.getUuid() );
} else if ( playerListItem.getAction() == PlayerListItem.Action.REMOVE_PLAYER )
{
if ( item.getUuid() != null )
{
uuids.remove( item.getUuid() );
} else
{
usernames.remove( item.getUsername() );
}
uuids.remove( item.getUuid() );
}
}
player.unsafe().sendPacket( playerListItem );
@@ -58,40 +45,16 @@ public class ServerUnique extends TabList
{
PlayerListItem packet = new PlayerListItem();
packet.setAction( PlayerListItem.Action.REMOVE_PLAYER );
PlayerListItem.Item[] items = new PlayerListItem.Item[ uuids.size() + usernames.size() ];
PlayerListItem.Item[] items = new PlayerListItem.Item[ uuids.size() ];
int i = 0;
for ( UUID uuid : uuids )
{
PlayerListItem.Item item = items[i++] = new PlayerListItem.Item();
item.setUuid( uuid );
}
for ( String username : usernames )
{
PlayerListItem.Item item = items[i++] = new PlayerListItem.Item();
item.setUsername( username );
item.setDisplayName( username );
}
packet.setItems( items );
if ( player.getPendingConnection().getVersion() >= ProtocolConstants.MINECRAFT_1_8 )
{
player.unsafe().sendPacket( packet );
} else
{
// Split up the packet
for ( PlayerListItem.Item item : packet.getItems() )
{
PlayerListItem p2 = new PlayerListItem();
p2.setAction( packet.getAction() );
p2.setItems( new PlayerListItem.Item[]
{
item
} );
player.unsafe().sendPacket( p2 );
}
}
player.unsafe().sendPacket( packet );
uuids.clear();
usernames.clear();
}
@Override