mirror of
https://github.com/PaperMC/Waterfall.git
synced 2025-02-09 00:11:59 +01:00
131 lines
5.8 KiB
Diff
131 lines
5.8 KiB
Diff
From 0619f444be30213382fa501bcc12bc5dc68f58bc Mon Sep 17 00:00:00 2001
|
|
From: PunKeel <punkeel@me.com>
|
|
Date: Wed, 8 Apr 2015 22:36:33 +0200
|
|
Subject: [PATCH] Store last known dimension and don't send useless respawn
|
|
packets
|
|
|
|
In order to improve server switching without lossing the advantages of the Respawn package (reset entities, for instance)
|
|
|
|
diff --git a/proxy/src/main/java/net/md_5/bungee/ServerConnector.java b/proxy/src/main/java/net/md_5/bungee/ServerConnector.java
|
|
index e327325..f1ccd72 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/ServerConnector.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/ServerConnector.java
|
|
@@ -257,7 +257,10 @@ public class ServerConnector extends PacketHandler
|
|
}
|
|
user.getSentBossBars().clear();
|
|
|
|
- user.sendDimensionSwitch();
|
|
+ if( user.getDimension() == login.getDimension() ){
|
|
+ // Only change dimension to reset entities
|
|
+ user.unsafe().sendPacket( new Respawn( ( login.getDimension() == 0 ) ? 1 : 0, login.getDifficulty(), login.getGameMode(), login.getLevelType() ) );
|
|
+ }
|
|
|
|
user.setServerEntityId( login.getEntityId() );
|
|
user.unsafe().sendPacket( new Respawn( login.getDimension(), login.getDifficulty(), login.getGameMode(), login.getLevelType() ) );
|
|
@@ -280,7 +283,7 @@ public class ServerConnector extends PacketHandler
|
|
target.addPlayer( user );
|
|
user.getPendingConnects().remove( target );
|
|
user.setServerJoinQueue( null );
|
|
- user.setDimensionChange( false );
|
|
+ user.setDimension( login.getDimension() );
|
|
|
|
user.setServer( server );
|
|
ch.getHandle().pipeline().get( HandlerBoss.class ).setHandler( new DownstreamBridge( bungee, user, server ) );
|
|
@@ -316,14 +319,7 @@ public class ServerConnector extends PacketHandler
|
|
throw CancelSendSignal.INSTANCE;
|
|
}
|
|
|
|
- String message = bungee.getTranslation( "connect_kick", target.getName(), event.getKickReason() );
|
|
- if ( user.isDimensionChange() )
|
|
- {
|
|
- user.disconnect( message );
|
|
- } else
|
|
- {
|
|
- user.sendMessage( message );
|
|
- }
|
|
+ user.sendMessage( bungee.getTranslation( "connect_kick", target.getName(), event.getKickReason() ) );
|
|
|
|
throw CancelSendSignal.INSTANCE;
|
|
}
|
|
diff --git a/proxy/src/main/java/net/md_5/bungee/UserConnection.java b/proxy/src/main/java/net/md_5/bungee/UserConnection.java
|
|
index 9a13f5c..ff103bf 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/UserConnection.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/UserConnection.java
|
|
@@ -89,7 +89,7 @@ public final class UserConnection implements ProxiedPlayer
|
|
private ServerConnection server;
|
|
@Getter
|
|
@Setter
|
|
- private boolean dimensionChange = true;
|
|
+ private int dimension = 0;
|
|
@Getter
|
|
private final Collection<ServerInfo> pendingConnects = new HashSet<>();
|
|
/*========================================================================*/
|
|
@@ -187,7 +187,7 @@ public final class UserConnection implements ProxiedPlayer
|
|
|
|
// No-config FML handshake marker.
|
|
// Set whether the connection has a 1.8 FML marker in the handshake.
|
|
- if (this.getPendingConnection().getExtraDataInHandshake().contains( ForgeConstants.FML_HANDSHAKE_TOKEN ))
|
|
+ if (this.getPendingConnection().getExtraDataInHandshake().contains( ForgeConstants.FML_HANDSHAKE_TOKEN ))
|
|
{
|
|
forgeClientHandler.setFmlTokenInHandshake( true );
|
|
}
|
|
@@ -223,16 +223,8 @@ public final class UserConnection implements ProxiedPlayer
|
|
connect( target, callback, false );
|
|
}
|
|
|
|
- void sendDimensionSwitch()
|
|
- {
|
|
- dimensionChange = true;
|
|
- unsafe().sendPacket( PacketConstants.DIM1_SWITCH );
|
|
- unsafe().sendPacket( PacketConstants.DIM2_SWITCH );
|
|
- }
|
|
-
|
|
public void connectNow(ServerInfo target)
|
|
{
|
|
- sendDimensionSwitch();
|
|
connect( target );
|
|
}
|
|
|
|
@@ -328,12 +320,9 @@ public final class UserConnection implements ProxiedPlayer
|
|
{
|
|
sendMessage( bungee.getTranslation( "fallback_lobby" ) );
|
|
connect( def, null, false );
|
|
- } else if ( dimensionChange )
|
|
- {
|
|
- disconnect( bungee.getTranslation( "fallback_kick", future.cause().getClass().getName() ) );
|
|
} else
|
|
{
|
|
- sendMessage( bungee.getTranslation( "fallback_kick", future.cause().getClass().getName() ) );
|
|
+ disconnect( bungee.getTranslation( "fallback_kick", future.cause().getClass().getName() ) );
|
|
}
|
|
}
|
|
}
|
|
diff --git a/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java b/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java
|
|
index fa57f28..017c2b2 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java
|
|
@@ -37,6 +37,7 @@ import net.md_5.bungee.protocol.packet.ScoreboardScore;
|
|
import net.md_5.bungee.protocol.packet.ScoreboardDisplay;
|
|
import net.md_5.bungee.protocol.packet.PluginMessage;
|
|
import net.md_5.bungee.protocol.packet.Kick;
|
|
+import net.md_5.bungee.protocol.packet.Respawn;
|
|
import net.md_5.bungee.protocol.packet.SetCompression;
|
|
import net.md_5.bungee.protocol.packet.TabCompleteResponse;
|
|
import net.md_5.bungee.tab.TabList;
|
|
@@ -501,6 +502,12 @@ public class DownstreamBridge extends PacketHandler
|
|
}
|
|
|
|
@Override
|
|
+ public void handle(Respawn respawn) throws Exception
|
|
+ {
|
|
+ con.setDimension( respawn.getDimension() );
|
|
+ }
|
|
+
|
|
+ @Override
|
|
public String toString()
|
|
{
|
|
return "[" + con.getAddress() + "|" + con.getName() + "] <-> DownstreamBridge <-> [" + server.getInfo().getName() + "]";
|
|
--
|
|
2.7.4 (Apple Git-66)
|
|
|