Update the player reference (from TemporaryPlayer) as soon as possible.
Dieser Commit ist enthalten in:
Ursprung
154d73ae51
Commit
b70c7fa775
@ -922,9 +922,13 @@ public final class PacketFilterManager implements ProtocolManager, ListenerInvok
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
manager.registerEvents(new Listener() {
|
manager.registerEvents(new Listener() {
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
public void onPrePlayerJoin(PlayerJoinEvent event) {
|
public void onPrePlayerJoin(PlayerJoinEvent event) {
|
||||||
PacketFilterManager.this.onPrePlayerJoin(event);
|
PacketFilterManager.this.onPrePlayerJoin(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
|
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||||
PacketFilterManager.this.onPlayerJoin(event);
|
PacketFilterManager.this.onPlayerJoin(event);
|
||||||
}
|
}
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
@ -945,20 +949,13 @@ public final class PacketFilterManager implements ProtocolManager, ListenerInvok
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void onPrePlayerJoin(PlayerJoinEvent event) {
|
private void onPrePlayerJoin(PlayerJoinEvent event) {
|
||||||
try {
|
|
||||||
// Let's clean up the other injection first.
|
|
||||||
playerInjection.uninjectPlayer(event.getPlayer().getAddress());
|
|
||||||
playerInjection.updatePlayer(event.getPlayer());
|
playerInjection.updatePlayer(event.getPlayer());
|
||||||
} catch (Exception e) {
|
|
||||||
reporter.reportDetailed(PacketFilterManager.this,
|
|
||||||
Report.newBuilder(REPORT_CANNOT_UNINJECT_PLAYER).callerParam(event).error(e)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onPlayerJoin(PlayerJoinEvent event) {
|
private void onPlayerJoin(PlayerJoinEvent event) {
|
||||||
try {
|
try {
|
||||||
// This call will be ignored if no listeners are registered
|
// Let's clean up the other injection first.
|
||||||
|
playerInjection.uninjectPlayer(event.getPlayer().getAddress());
|
||||||
playerInjection.injectPlayer(event.getPlayer(), ConflictStrategy.OVERRIDE);
|
playerInjection.injectPlayer(event.getPlayer(), ConflictStrategy.OVERRIDE);
|
||||||
} catch (ServerHandlerNull e) {
|
} catch (ServerHandlerNull e) {
|
||||||
// Caused by logged out players, or fake login events in MCPC++. Ignore it.
|
// Caused by logged out players, or fake login events in MCPC++. Ignore it.
|
||||||
@ -1064,6 +1061,7 @@ public final class PacketFilterManager implements ProtocolManager, ListenerInvok
|
|||||||
Class eventPriority = loader.loadClass("org.bukkit.event.Event$Priority");
|
Class eventPriority = loader.loadClass("org.bukkit.event.Event$Priority");
|
||||||
|
|
||||||
// Get the priority
|
// Get the priority
|
||||||
|
Object priorityLowest = Enum.valueOf(eventPriority, "Lowest");
|
||||||
Object priorityMonitor = Enum.valueOf(eventPriority, "Monitor");
|
Object priorityMonitor = Enum.valueOf(eventPriority, "Monitor");
|
||||||
|
|
||||||
// Get event types
|
// Get event types
|
||||||
@ -1079,9 +1077,28 @@ public final class PacketFilterManager implements ProtocolManager, ListenerInvok
|
|||||||
Method registerEvent = FuzzyReflection.fromObject(manager).getMethodByParameters("registerEvent",
|
Method registerEvent = FuzzyReflection.fromObject(manager).getMethodByParameters("registerEvent",
|
||||||
eventTypes, Listener.class, eventPriority, Plugin.class);
|
eventTypes, Listener.class, eventPriority, Plugin.class);
|
||||||
|
|
||||||
|
Enhancer playerLow = new Enhancer();
|
||||||
Enhancer playerEx = new Enhancer();
|
Enhancer playerEx = new Enhancer();
|
||||||
Enhancer serverEx = new Enhancer();
|
Enhancer serverEx = new Enhancer();
|
||||||
|
|
||||||
|
playerLow.setSuperclass(playerListener);
|
||||||
|
playerLow.setClassLoader(classLoader);
|
||||||
|
playerLow.setCallback(new MethodInterceptor() {
|
||||||
|
@Override
|
||||||
|
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy)
|
||||||
|
throws Throwable {
|
||||||
|
// Must have a parameter
|
||||||
|
if (args.length == 1) {
|
||||||
|
Object event = args[0];
|
||||||
|
|
||||||
|
if (event instanceof PlayerJoinEvent) {
|
||||||
|
onPrePlayerJoin((PlayerJoinEvent) event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
playerEx.setSuperclass(playerListener);
|
playerEx.setSuperclass(playerListener);
|
||||||
playerEx.setClassLoader(classLoader);
|
playerEx.setClassLoader(classLoader);
|
||||||
playerEx.setCallback(new MethodInterceptor() {
|
playerEx.setCallback(new MethodInterceptor() {
|
||||||
@ -1092,7 +1109,6 @@ public final class PacketFilterManager implements ProtocolManager, ListenerInvok
|
|||||||
|
|
||||||
// Check for the correct event
|
// Check for the correct event
|
||||||
if (event instanceof PlayerJoinEvent) {
|
if (event instanceof PlayerJoinEvent) {
|
||||||
onPrePlayerJoin((PlayerJoinEvent) event);
|
|
||||||
onPlayerJoin((PlayerJoinEvent) event);
|
onPlayerJoin((PlayerJoinEvent) event);
|
||||||
} else if (event instanceof PlayerQuitEvent) {
|
} else if (event instanceof PlayerQuitEvent) {
|
||||||
onPlayerQuit((PlayerQuitEvent) event);
|
onPlayerQuit((PlayerQuitEvent) event);
|
||||||
@ -1120,9 +1136,11 @@ public final class PacketFilterManager implements ProtocolManager, ListenerInvok
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Create our listener
|
// Create our listener
|
||||||
|
Object playerProxyLow = playerLow.create();
|
||||||
Object playerProxy = playerEx.create();
|
Object playerProxy = playerEx.create();
|
||||||
Object serverProxy = serverEx.create();
|
Object serverProxy = serverEx.create();
|
||||||
|
|
||||||
|
registerEvent.invoke(manager, playerJoinType, playerProxyLow, priorityLowest, plugin);
|
||||||
registerEvent.invoke(manager, playerJoinType, playerProxy, priorityMonitor, plugin);
|
registerEvent.invoke(manager, playerJoinType, playerProxy, priorityMonitor, plugin);
|
||||||
registerEvent.invoke(manager, playerQuitType, playerProxy, priorityMonitor, plugin);
|
registerEvent.invoke(manager, playerQuitType, playerProxy, priorityMonitor, plugin);
|
||||||
registerEvent.invoke(manager, pluginDisabledType, serverProxy, priorityMonitor, plugin);
|
registerEvent.invoke(manager, pluginDisabledType, serverProxy, priorityMonitor, plugin);
|
||||||
|
@ -273,7 +273,12 @@ public class NettyProtocolInjector implements ChannelListener {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updatePlayer(Player player) {
|
public void updatePlayer(Player player) {
|
||||||
// Ignore it
|
ChannelInjector.fromPlayer(player, listener).inject();
|
||||||
|
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void injectPlayer(Player player, ConflictStrategy strategy) {
|
||||||
|
ChannelInjector.fromPlayer(player, listener).inject();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -313,11 +318,6 @@ public class NettyProtocolInjector implements ChannelListener {
|
|||||||
recieveClientPacket(mcPacket, null, true);
|
recieveClientPacket(mcPacket, null, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void injectPlayer(Player player, ConflictStrategy strategy) {
|
|
||||||
ChannelInjector.fromPlayer(player, listener).inject();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PacketEvent handlePacketRecieved(PacketContainer packet, InputStream input, byte[] buffered) {
|
public PacketEvent handlePacketRecieved(PacketContainer packet, InputStream input, byte[] buffered) {
|
||||||
// Ignore this
|
// Ignore this
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren