From 9e402a3ab4cb3e509383e7597495b8ffebc371a2 Mon Sep 17 00:00:00 2001 From: "Kristian S. Stangeland" Date: Wed, 26 Sep 2012 02:01:44 +0200 Subject: [PATCH] Added a "canInject" property in the injectors. --- .../protocol/injector/NetworkFieldInjector.java | 7 +++++++ .../protocol/injector/NetworkObjectInjector.java | 8 ++++++++ .../protocol/injector/PacketFilterManager.java | 14 +++++++++----- .../protocol/injector/PlayerInjector.java | 6 ++++++ 4 files changed, 30 insertions(+), 5 deletions(-) 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.