Archiviert
13
0

Don't cache the NetHandler when checking if it has changed.

Dieser Commit ist enthalten in:
Kristian S. Stangeland 2014-02-21 19:28:07 +01:00
Ursprung 5f66dc6b4a
Commit 6e0a44f9df

Datei anzeigen

@ -30,7 +30,6 @@ import net.sf.cglib.proxy.Factory;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import com.comphenix.protocol.PacketType; import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.Packets;
import com.comphenix.protocol.PacketType.Sender; import com.comphenix.protocol.PacketType.Sender;
import com.comphenix.protocol.error.ErrorReporter; import com.comphenix.protocol.error.ErrorReporter;
import com.comphenix.protocol.error.Report; import com.comphenix.protocol.error.Report;
@ -437,7 +436,15 @@ public abstract class PlayerInjector implements SocketInjector {
* @throws IllegalAccessException Unable to find or retrieve net handler. * @throws IllegalAccessException Unable to find or retrieve net handler.
*/ */
protected Object getNetHandler() throws IllegalAccessException { protected Object getNetHandler() throws IllegalAccessException {
return getNetHandler(false);
}
/**
* Retrieves the current net handler for this player.
* @return Current net handler.
* @throws IllegalAccessException Unable to find or retrieve net handler.
*/
protected Object getNetHandler(boolean refresh) throws IllegalAccessException {
// What a mess // What a mess
try { try {
if (netHandlerField == null) if (netHandlerField == null)
@ -460,7 +467,7 @@ public abstract class PlayerInjector implements SocketInjector {
} }
// Get the handler // Get the handler
if (netHandler == null) if (netHandler == null || refresh)
netHandler = FieldUtils.readField(netHandlerField, networkManager, true); netHandler = FieldUtils.readField(netHandlerField, networkManager, true);
return netHandler; return netHandler;
} }
@ -590,11 +597,13 @@ public abstract class PlayerInjector implements SocketInjector {
if (updateOnLogin) { if (updateOnLogin) {
if (updatedPlayer == null) { if (updatedPlayer == null) {
try { try {
final Object handler = getNetHandler(); final Object handler = getNetHandler(true);
// Is this a net server class? // Is this a net server class?
if (MinecraftReflection.getNetServerHandlerClass().isAssignableFrom(handler.getClass())) { if (MinecraftReflection.getNetServerHandlerClass().isAssignableFrom(handler.getClass())) {
updatedPlayer = (Player) MinecraftReflection.getBukkitEntity(getEntityPlayer(handler)); setUpdatedPlayer(
(Player) MinecraftReflection.getBukkitEntity(getEntityPlayer(handler))
);
} }
} catch (IllegalAccessException e) { } catch (IllegalAccessException e) {
reporter.reportDetailed(this, Report.newBuilder(REPORT_CANNOT_UPDATE_PLAYER).error(e).callerParam(packet)); reporter.reportDetailed(this, Report.newBuilder(REPORT_CANNOT_UPDATE_PLAYER).error(e).callerParam(packet));
@ -602,8 +611,10 @@ public abstract class PlayerInjector implements SocketInjector {
} }
// This will only occur in the NetLoginHandler injection // This will only occur in the NetLoginHandler injection
if (updatedPlayer != null) if (updatedPlayer != null) {
currentPlayer = updatedPlayer; currentPlayer = updatedPlayer;
updateOnLogin = false;
}
} }
// Make sure we're listening // Make sure we're listening