More practical fix for #28
Dieser Commit ist enthalten in:
Ursprung
a1b989cb3a
Commit
09e2312d80
@ -87,6 +87,7 @@ class ChannelInjector extends ByteToMessageDecoder implements Injector {
|
|||||||
// The player, or temporary player
|
// The player, or temporary player
|
||||||
private Player player;
|
private Player player;
|
||||||
private Player updated;
|
private Player updated;
|
||||||
|
private String playerName;
|
||||||
|
|
||||||
// The player connection
|
// The player connection
|
||||||
private Object playerConnection;
|
private Object playerConnection;
|
||||||
@ -498,6 +499,7 @@ class ChannelInjector extends ByteToMessageDecoder implements Injector {
|
|||||||
byteBuffer.resetReaderIndex();
|
byteBuffer.resetReaderIndex();
|
||||||
marker = new NettyNetworkMarker(ConnectionSide.CLIENT_SIDE, getBytes(byteBuffer));
|
marker = new NettyNetworkMarker(ConnectionSide.CLIENT_SIDE, getBytes(byteBuffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
PacketEvent output = channelListener.onPacketReceiving(this, input, marker);
|
PacketEvent output = channelListener.onPacketReceiving(this, input, marker);
|
||||||
|
|
||||||
// Handle packet changes
|
// Handle packet changes
|
||||||
@ -579,7 +581,7 @@ class ChannelInjector extends ByteToMessageDecoder implements Injector {
|
|||||||
* @param buffer - the buffer.
|
* @param buffer - the buffer.
|
||||||
* @return The bytes.
|
* @return The bytes.
|
||||||
*/
|
*/
|
||||||
private byte[] getBytes(ByteBuf buffer){
|
private byte[] getBytes(ByteBuf buffer) {
|
||||||
byte[] data = new byte[buffer.readableBytes()];
|
byte[] data = new byte[buffer.readableBytes()];
|
||||||
|
|
||||||
buffer.readBytes(data);
|
buffer.readBytes(data);
|
||||||
@ -693,6 +695,10 @@ class ChannelInjector extends ByteToMessageDecoder implements Injector {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Player getPlayer() {
|
public Player getPlayer() {
|
||||||
|
if (player == null && playerName != null) {
|
||||||
|
return Bukkit.getPlayer(playerName);
|
||||||
|
}
|
||||||
|
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -703,6 +709,7 @@ class ChannelInjector extends ByteToMessageDecoder implements Injector {
|
|||||||
@Override
|
@Override
|
||||||
public void setPlayer(Player player) {
|
public void setPlayer(Player player) {
|
||||||
this.player = player;
|
this.player = player;
|
||||||
|
this.playerName = player.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -712,6 +719,7 @@ class ChannelInjector extends ByteToMessageDecoder implements Injector {
|
|||||||
@Override
|
@Override
|
||||||
public void setUpdatedPlayer(Player updated) {
|
public void setUpdatedPlayer(Player updated) {
|
||||||
this.updated = updated;
|
this.updated = updated;
|
||||||
|
this.playerName = updated.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -752,7 +760,7 @@ class ChannelInjector extends ByteToMessageDecoder implements Injector {
|
|||||||
// we end up with a deadlock. The main thread is waiting for the worker thread to process the task, and
|
// we end up with a deadlock. The main thread is waiting for the worker thread to process the task, and
|
||||||
// the worker thread is waiting for the main thread to finish executing PlayerQuitEvent.
|
// the worker thread is waiting for the main thread to finish executing PlayerQuitEvent.
|
||||||
//
|
//
|
||||||
// TLDR: Concurrenty is hard.
|
// TLDR: Concurrency is hard.
|
||||||
executeInChannelThread(new Runnable() {
|
executeInChannelThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
@ -771,8 +779,8 @@ class ChannelInjector extends ByteToMessageDecoder implements Injector {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// dmulloy2 - clear player instances
|
// Clear player instances
|
||||||
// Should fix memory leaks
|
// Should help fix memory leaks
|
||||||
this.player = null;
|
this.player = null;
|
||||||
this.updated = null;
|
this.updated = null;
|
||||||
}
|
}
|
||||||
@ -845,7 +853,7 @@ class ChannelInjector extends ByteToMessageDecoder implements Injector {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Player getPlayer() {
|
public Player getPlayer() {
|
||||||
return injector.player;
|
return injector.getPlayer();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -860,7 +868,7 @@ class ChannelInjector extends ByteToMessageDecoder implements Injector {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setUpdatedPlayer(Player updatedPlayer) {
|
public void setUpdatedPlayer(Player updatedPlayer) {
|
||||||
injector.player = updatedPlayer;
|
injector.setPlayer(updatedPlayer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChannelInjector getChannelInjector() {
|
public ChannelInjector getChannelInjector() {
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren