Skip to content

Commit 47bcd53

Browse files
authored
Improve/cleanup injector (#2992)
1 parent 2cad996 commit 47bcd53

28 files changed

+526
-851
lines changed

src/main/java/com/comphenix/protocol/async/AsyncListenerHandler.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -607,8 +607,6 @@ private void processPacket(int workerID, PacketEvent packet, String methodName)
607607

608608
} catch (OutOfMemoryError e) {
609609
throw e;
610-
} catch (ThreadDeath e) {
611-
throw e;
612610
} catch (Throwable e) {
613611
// Minecraft doesn't want your Exception.
614612
filterManager.getErrorReporter().reportMinimal(listener.getPlugin(), methodName, e);

src/main/java/com/comphenix/protocol/error/DetailedErrorReporter.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,12 @@
3030
import java.util.logging.Level;
3131
import java.util.logging.Logger;
3232

33+
import org.apache.commons.lang.builder.ToStringBuilder;
34+
import org.apache.commons.lang.builder.ToStringStyle;
35+
import org.bukkit.Bukkit;
36+
import org.bukkit.plugin.Plugin;
37+
3338
import com.comphenix.protocol.ProtocolConfig;
34-
import com.comphenix.protocol.ProtocolLib;
3539
import com.comphenix.protocol.ProtocolLibrary;
3640
import com.comphenix.protocol.ProtocolLogger;
3741
import com.comphenix.protocol.collections.ExpireHashMap;
@@ -41,11 +45,6 @@
4145
import com.google.common.base.Preconditions;
4246
import com.google.common.primitives.Primitives;
4347

44-
import org.apache.commons.lang.builder.ToStringBuilder;
45-
import org.apache.commons.lang.builder.ToStringStyle;
46-
import org.bukkit.Bukkit;
47-
import org.bukkit.plugin.Plugin;
48-
4948
/**
5049
* Internal class used to handle exceptions.
5150
*
@@ -479,7 +478,7 @@ public static String getStringDescription(Object value) {
479478
} catch (LinkageError ex) {
480479
// Apache is probably missing
481480
apacheCommonsMissing = true;
482-
} catch (ThreadDeath | OutOfMemoryError e) {
481+
} catch (OutOfMemoryError e) {
483482
throw e;
484483
} catch (Throwable ex) {
485484
// Don't use the error logger to log errors in error logging (that could lead to infinite loops)

src/main/java/com/comphenix/protocol/events/ListenerOptions.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public enum ListenerOptions {
1313
* Disable the automatic game phase detection that will normally force {@link GamePhase#LOGIN} when a packet ID is
1414
* known to be transmitted during login.
1515
*/
16+
@Deprecated
1617
DISABLE_GAMEPHASE_DETECTION,
1718

1819
/**

src/main/java/com/comphenix/protocol/events/ListeningWhitelist.java

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,12 @@
1717

1818
package com.comphenix.protocol.events;
1919

20-
import java.util.*;
20+
import java.util.Arrays;
21+
import java.util.Collection;
22+
import java.util.Collections;
23+
import java.util.EnumSet;
24+
import java.util.HashSet;
25+
import java.util.Set;
2126

2227
import com.comphenix.protocol.PacketType;
2328
import com.comphenix.protocol.injector.GamePhase;
@@ -90,20 +95,6 @@ public static Builder newBuilder(ListeningWhitelist template) {
9095
return new Builder(template);
9196
}
9297

93-
/**
94-
* Construct a copy of a given enum.
95-
*
96-
* @param options - the options to copy, or NULL to indicate the empty set.
97-
* @return A copy of the enum set.
98-
*/
99-
private static <T extends Enum<T>> EnumSet<T> safeEnumSet(Collection<T> options, Class<T> enumClass) {
100-
if (options != null && !options.isEmpty()) {
101-
return EnumSet.copyOf(options);
102-
} else {
103-
return EnumSet.noneOf(enumClass);
104-
}
105-
}
106-
10798
/**
10899
* Construct a copy of a given set.
109100
*
@@ -311,6 +302,7 @@ public Builder types(Collection<PacketType> types) {
311302
* @param gamePhase - the gamephase.
312303
* @return This builder, for chaining.
313304
*/
305+
@Deprecated
314306
public Builder gamePhase(GamePhase gamePhase) {
315307
this.gamePhase = gamePhase;
316308
return this;
@@ -321,6 +313,7 @@ public Builder gamePhase(GamePhase gamePhase) {
321313
*
322314
* @return This builder, for chaining.
323315
*/
316+
@Deprecated
324317
public Builder gamePhaseBoth() {
325318
return gamePhase(GamePhase.BOTH);
326319
}

src/main/java/com/comphenix/protocol/injector/GamePhase.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
*
2323
* @author Kristian
2424
*/
25+
@Deprecated
2526
public enum GamePhase {
2627
/**
2728
* Only listen for packets sent or received before a player has logged in.

src/main/java/com/comphenix/protocol/injector/NetworkProcessor.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package com.comphenix.protocol.injector;
22

3+
import java.util.Deque;
4+
35
import com.comphenix.protocol.ProtocolLibrary;
46
import com.comphenix.protocol.ProtocolManager;
57
import com.comphenix.protocol.error.ErrorReporter;
68
import com.comphenix.protocol.events.NetworkMarker;
79
import com.comphenix.protocol.events.PacketEvent;
810
import com.comphenix.protocol.events.PacketPostListener;
911
import com.comphenix.protocol.events.ScheduledPacket;
10-
import java.util.Deque;
1112

1213
/**
1314
* Represents a processor for network markers.
@@ -43,7 +44,7 @@ public void invokePostEvent(PacketEvent event, NetworkMarker marker) {
4344
for (PacketPostListener listener : marker.getPostListeners()) {
4445
try {
4546
listener.onPostEvent(event);
46-
} catch (OutOfMemoryError | ThreadDeath e) {
47+
} catch (OutOfMemoryError e) {
4748
throw e;
4849
} catch (Throwable e) {
4950
this.reporter.reportMinimal(listener.getPlugin(), "SentListener.run()", e);

src/main/java/com/comphenix/protocol/injector/PacketConstructor.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,6 @@ public PacketConstructor withPacket(PacketType type, Object[] values) {
172172
result = unwrapper.unwrapItem(values[i]);
173173
} catch (OutOfMemoryError e) {
174174
throw e;
175-
} catch (ThreadDeath e) {
176-
throw e;
177175
} catch (Throwable e) {
178176
lastException = e;
179177
}

src/main/java/com/comphenix/protocol/injector/PacketFilterManager.java

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,10 @@
4646
import com.comphenix.protocol.injector.netty.WirePacket;
4747
import com.comphenix.protocol.injector.netty.manager.NetworkManagerInjector;
4848
import com.comphenix.protocol.injector.packet.PacketRegistry;
49-
import com.comphenix.protocol.injector.player.PlayerInjectionHandler;
50-
import com.comphenix.protocol.injector.player.PlayerInjectionHandler.ConflictStrategy;
5149
import com.comphenix.protocol.utility.MinecraftReflection;
5250
import com.comphenix.protocol.utility.MinecraftVersion;
5351
import com.google.common.collect.ImmutableSet;
5452

55-
import io.netty.channel.Channel;
56-
5753
public class PacketFilterManager implements ListenerInvoker, InternalManager {
5854

5955
// plugin verifier reports
@@ -80,7 +76,6 @@ public class PacketFilterManager implements ListenerInvoker, InternalManager {
8076
private final Set<PacketListener> registeredListeners;
8177

8278
// injectors
83-
private final PlayerInjectionHandler playerInjectionHandler;
8479
private final NetworkManagerInjector networkManagerInjector;
8580

8681
// status of this manager
@@ -111,18 +106,16 @@ public PacketFilterManager(PacketFilterBuilder builder) {
111106
// injectors
112107
this.networkManagerInjector = new NetworkManagerInjector(
113108
builder.getLibrary(),
114-
builder.getServer(),
115109
this,
116110
builder.getReporter());
117-
this.playerInjectionHandler = this.networkManagerInjector.getPlayerInjectionHandler();
118111

119112
// ensure that all packet types are loaded and synced
120113
PacketRegistry.getClientPacketTypes();
121114
PacketRegistry.getServerPacketTypes();
122115

123116
// hook into all connected players
124117
for (Player player : this.server.getOnlinePlayers()) {
125-
this.playerInjectionHandler.injectPlayer(player, ConflictStrategy.BAIL_OUT);
118+
this.networkManagerInjector.getInjector(player).inject();
126119
}
127120
}
128121

@@ -180,7 +173,7 @@ public void sendServerPacket(Player receiver, PacketContainer packet, NetworkMar
180173
}
181174

182175
// process outbound
183-
this.playerInjectionHandler.sendServerPacket(receiver, packet, marker, filters);
176+
this.networkManagerInjector.getInjector(receiver).sendServerPacket(packet.getHandle(), marker, filters);
184177
}
185178
}
186179

@@ -192,13 +185,7 @@ public void sendWirePacket(Player receiver, int id, byte[] bytes) {
192185
@Override
193186
public void sendWirePacket(Player receiver, WirePacket packet) {
194187
if (!this.closed) {
195-
// special case - we just throw the wire packet down the pipeline without processing it
196-
Channel outboundChannel = this.playerInjectionHandler.getChannel(receiver);
197-
if (outboundChannel == null) {
198-
throw new IllegalArgumentException("Unable to obtain connection of player " + receiver);
199-
}
200-
201-
outboundChannel.writeAndFlush(packet);
188+
this.networkManagerInjector.getInjector(receiver).sendWirePacket(packet);
202189
}
203190
}
204191

@@ -240,13 +227,13 @@ public void receiveClientPacket(Player sender, PacketContainer packet, NetworkMa
240227
}
241228

242229
// post to the player inject, reset our cancel state change
243-
this.playerInjectionHandler.receiveClientPacket(sender, nmsPacket);
230+
this.networkManagerInjector.getInjector(sender).receiveClientPacket(nmsPacket);
244231
}
245232
}
246233

247234
@Override
248235
public int getProtocolVersion(Player player) {
249-
return this.playerInjectionHandler.getProtocolVersion(player);
236+
return this.networkManagerInjector.getInjector(player).getProtocolVersion();
250237
}
251238

252239
@Override
@@ -447,12 +434,12 @@ public void registerEvents(PluginManager manager, Plugin plugin) {
447434

448435
@EventHandler(priority = EventPriority.LOWEST)
449436
public void handleLogin(PlayerLoginEvent event) {
450-
PacketFilterManager.this.playerInjectionHandler.updatePlayer(event.getPlayer());
437+
networkManagerInjector.getInjector(event.getPlayer()).inject();
451438
}
452439

453440
@EventHandler(priority = EventPriority.LOWEST)
454441
public void handleJoin(PlayerJoinEvent event) {
455-
PacketFilterManager.this.playerInjectionHandler.updatePlayer(event.getPlayer());
442+
networkManagerInjector.getInjector(event.getPlayer()).inject();
456443
}
457444

458445
@EventHandler(priority = EventPriority.MONITOR)

src/main/java/com/comphenix/protocol/injector/netty/Injector.java

Lines changed: 9 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package com.comphenix.protocol.injector.netty;
22

3+
import java.net.SocketAddress;
4+
5+
import org.bukkit.entity.Player;
6+
37
import com.comphenix.protocol.PacketType;
48
import com.comphenix.protocol.PacketType.Protocol;
59
import com.comphenix.protocol.events.NetworkMarker;
6-
import org.bukkit.entity.Player;
710

811
/**
912
* Represents an injected client connection.
@@ -23,12 +26,8 @@ public interface Injector {
2326
* Inject the current channel.
2427
* <p>
2528
* Note that only active channels can be injected.
26-
*
27-
* @return TRUE if we injected the channel, false if we could not inject or it was already injected.
2829
*/
29-
boolean inject();
30-
31-
void uninject();
30+
void inject();
3231

3332
/**
3433
* Close the current injector.
@@ -46,16 +45,7 @@ public interface Injector {
4645

4746
void receiveClientPacket(Object packet);
4847

49-
/**
50-
* Retrieve the current protocol state.
51-
*
52-
* @return The current protocol.
53-
* @deprecated use {@link #getCurrentProtocol(PacketType.Sender)} instead.
54-
*/
55-
@Deprecated
56-
default Protocol getCurrentProtocol() {
57-
return this.getCurrentProtocol(PacketType.Sender.SERVER);
58-
}
48+
void sendWirePacket(WirePacket packet);
5949

6050
/**
6151
* Retrieve the current protocol state. Note that since 1.20.2 the client and server direction can be in different
@@ -66,21 +56,7 @@ default Protocol getCurrentProtocol() {
6656
*/
6757
Protocol getCurrentProtocol(PacketType.Sender sender);
6858

69-
/**
70-
* Retrieve the network marker associated with a given packet.
71-
*
72-
* @param packet - the packet.
73-
* @return The network marker.
74-
*/
75-
NetworkMarker getMarker(Object packet);
76-
77-
/**
78-
* Associate a given network marker with a specific packet.
79-
*
80-
* @param packet - the NMS packet.
81-
* @param marker - the associated marker.
82-
*/
83-
void saveMarker(Object packet, NetworkMarker marker);
59+
SocketAddress getAddress();
8460

8561
/**
8662
* Retrieve the current player or temporary player associated with the injector.
@@ -98,6 +74,8 @@ default Protocol getCurrentProtocol() {
9874

9975
void disconnect(String message);
10076

77+
boolean isConnected();
78+
10179
/**
10280
* Determine if the channel has already been injected.
10381
*

src/main/java/com/comphenix/protocol/injector/netty/channel/EmptyInjector.java

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package com.comphenix.protocol.injector.netty.channel;
22

3+
import java.net.SocketAddress;
4+
5+
import org.bukkit.entity.Player;
6+
37
import com.comphenix.protocol.PacketType;
48
import com.comphenix.protocol.PacketType.Protocol;
59
import com.comphenix.protocol.events.NetworkMarker;
610
import com.comphenix.protocol.injector.netty.Injector;
7-
import org.bukkit.entity.Player;
11+
import com.comphenix.protocol.injector.netty.WirePacket;
812

913
final class EmptyInjector implements Injector {
1014

@@ -17,17 +21,20 @@ public EmptyInjector(Player player) {
1721
}
1822

1923
@Override
20-
public int getProtocolVersion() {
21-
return Integer.MIN_VALUE;
24+
public SocketAddress getAddress() {
25+
if (this.player != null) {
26+
return this.player.getAddress();
27+
}
28+
return null;
2229
}
2330

2431
@Override
25-
public boolean inject() {
26-
return false;
32+
public int getProtocolVersion() {
33+
return Integer.MIN_VALUE;
2734
}
2835

2936
@Override
30-
public void uninject() {
37+
public void inject() {
3138
}
3239

3340
@Override
@@ -43,17 +50,12 @@ public void receiveClientPacket(Object packet) {
4350
}
4451

4552
@Override
46-
public Protocol getCurrentProtocol(PacketType.Sender sender) {
47-
return Protocol.HANDSHAKING;
48-
}
49-
50-
@Override
51-
public NetworkMarker getMarker(Object packet) {
52-
return null;
53+
public void sendWirePacket(WirePacket packet) {
5354
}
5455

5556
@Override
56-
public void saveMarker(Object packet, NetworkMarker marker) {
57+
public Protocol getCurrentProtocol(PacketType.Sender sender) {
58+
return Protocol.HANDSHAKING;
5759
}
5860

5961
@Override
@@ -70,6 +72,11 @@ public void setPlayer(Player player) {
7072
public void disconnect(String message) {
7173
}
7274

75+
@Override
76+
public boolean isConnected() {
77+
return false;
78+
}
79+
7380
@Override
7481
public boolean isInjected() {
7582
return false;

0 commit comments

Comments
 (0)