diff --git a/ProtocolLib/src/com/comphenix/protocol/injector/NetworkFieldInjector.java b/ProtocolLib/src/com/comphenix/protocol/injector/NetworkFieldInjector.java index d6f56ec3..7275d5e1 100644 --- a/ProtocolLib/src/com/comphenix/protocol/injector/NetworkFieldInjector.java +++ b/ProtocolLib/src/com/comphenix/protocol/injector/NetworkFieldInjector.java @@ -83,6 +83,13 @@ class NetworkFieldInjector extends PlayerInjector { } } + + @Override + public boolean canInject() { + // Probably + return true; + } + @Override public void injectManager() { diff --git a/ProtocolLib/src/com/comphenix/protocol/injector/NetworkObjectInjector.java b/ProtocolLib/src/com/comphenix/protocol/injector/NetworkObjectInjector.java index 02efd317..c9bb001d 100644 --- a/ProtocolLib/src/com/comphenix/protocol/injector/NetworkObjectInjector.java +++ b/ProtocolLib/src/com/comphenix/protocol/injector/NetworkObjectInjector.java @@ -42,6 +42,14 @@ class NetworkObjectInjector extends PlayerInjector { } } + @Override + public boolean canInject() { + // We only support 1.3.0 at the moment. Fixing it require us to + // add jMock, which would add another dependency. + return networkManager != null && + networkManagerField.getType().isInterface(); + } + @Override public void injectManager() { diff --git a/ProtocolLib/src/com/comphenix/protocol/injector/PacketFilterManager.java b/ProtocolLib/src/com/comphenix/protocol/injector/PacketFilterManager.java index 0bac1231..a74b0853 100644 --- a/ProtocolLib/src/com/comphenix/protocol/injector/PacketFilterManager.java +++ b/ProtocolLib/src/com/comphenix/protocol/injector/PacketFilterManager.java @@ -67,7 +67,7 @@ public final class PacketFilterManager implements ProtocolManager { /** * Override the network handler object itself. */ - NETWORK_MANAGER_OBJECT + NETWORK_MANAGER_OBJECT, } // Create a concurrent set @@ -362,16 +362,20 @@ public final class PacketFilterManager implements ProtocolManager { * @throws IllegalAccessException Unable to do our reflection magic. */ protected PlayerInjector getPlayerHookInstance(Player player) throws IllegalAccessException { - + return getHookInstance(player, playerHook); + } + + // Helper + private PlayerInjector getHookInstance(Player player, PlayerInjectHooks hook) throws IllegalAccessException { // Construct the correct player hook - switch (playerHook) { + switch (hook) { case NETWORK_HANDLER_FIELDS: return new NetworkFieldInjector(player, this, sendingFilters); case NETWORK_MANAGER_OBJECT: return new NetworkObjectInjector(player, this, sendingFilters); + default: + throw new IllegalArgumentException("Cannot construct a player injector."); } - - throw new IllegalArgumentException("Cannot construct a player injector."); } /** diff --git a/ProtocolLib/src/com/comphenix/protocol/injector/PlayerInjector.java b/ProtocolLib/src/com/comphenix/protocol/injector/PlayerInjector.java index 79842052..b57baa09 100644 --- a/ProtocolLib/src/com/comphenix/protocol/injector/PlayerInjector.java +++ b/ProtocolLib/src/com/comphenix/protocol/injector/PlayerInjector.java @@ -190,6 +190,12 @@ abstract class PlayerInjector { */ public abstract void cleanupAll(); + /** + * Determine if we actually can inject. + * @return TRUE if this injector is compatible with the current CraftBukkit version, FALSE otherwise. + */ + public abstract boolean canInject(); + /** * Allows a packet to be recieved by the listeners. * @param packet - packet to recieve.