diff --git a/ProtocolLib/src/main/java/com/comphenix/protocol/ProtocolManager.java b/ProtocolLib/src/main/java/com/comphenix/protocol/ProtocolManager.java index a9da948f..f0d86d1a 100644 --- a/ProtocolLib/src/main/java/com/comphenix/protocol/ProtocolManager.java +++ b/ProtocolLib/src/main/java/com/comphenix/protocol/ProtocolManager.java @@ -32,6 +32,7 @@ import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketListener; import com.comphenix.protocol.injector.PacketConstructor; import com.comphenix.protocol.reflect.FieldAccessException; +import com.comphenix.protocol.utility.MinecraftVersion; import com.google.common.collect.ImmutableSet; /** @@ -169,6 +170,12 @@ public interface ProtocolManager extends PacketStream { */ public Set getReceivingFilters(); + /** + * Retrieve the current Minecraft version. + * @return The current version. + */ + public MinecraftVersion getMinecraftVersion(); + /** * Determines whether or not this protocol mananger has been disabled. * @return TRUE if it has, FALSE otherwise. diff --git a/ProtocolLib/src/main/java/com/comphenix/protocol/injector/DelayedPacketManager.java b/ProtocolLib/src/main/java/com/comphenix/protocol/injector/DelayedPacketManager.java index 48cbe4a6..f4d6dba4 100644 --- a/ProtocolLib/src/main/java/com/comphenix/protocol/injector/DelayedPacketManager.java +++ b/ProtocolLib/src/main/java/com/comphenix/protocol/injector/DelayedPacketManager.java @@ -24,6 +24,7 @@ import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketListener; import com.comphenix.protocol.injector.PacketFilterManager.PlayerInjectHooks; import com.comphenix.protocol.reflect.FieldAccessException; +import com.comphenix.protocol.utility.MinecraftVersion; import com.google.common.base.Objects; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; @@ -123,10 +124,14 @@ public class DelayedPacketManager implements ProtocolManager, InternalManager { private PluginManager queuedManager; private Plugin queuedPlugin; - public DelayedPacketManager(@Nonnull ErrorReporter reporter) { + private MinecraftVersion version; + + public DelayedPacketManager(@Nonnull ErrorReporter reporter, @Nonnull MinecraftVersion version) { Preconditions.checkNotNull(reporter, "reporter cannot be NULL."); + Preconditions.checkNotNull(version, "version cannot be NULL."); this.reporter = reporter; + this.version = version; } /** @@ -136,6 +141,14 @@ public class DelayedPacketManager implements ProtocolManager, InternalManager { public InternalManager getDelegate() { return delegate; } + + @Override + public MinecraftVersion getMinecraftVersion() { + if (delegate != null) + return delegate.getMinecraftVersion(); + else + return version; + } /** * Update the delegate to the underlying manager. diff --git a/ProtocolLib/src/main/java/com/comphenix/protocol/injector/PacketFilterBuilder.java b/ProtocolLib/src/main/java/com/comphenix/protocol/injector/PacketFilterBuilder.java index 1edad3c8..b781ba71 100644 --- a/ProtocolLib/src/main/java/com/comphenix/protocol/injector/PacketFilterBuilder.java +++ b/ProtocolLib/src/main/java/com/comphenix/protocol/injector/PacketFilterBuilder.java @@ -190,7 +190,7 @@ public class PacketFilterBuilder { // If the server hasn't loaded yet - wait if (InjectedServerConnection.getServerConnection(reporter, server) == null) { // We need to delay this until we know if Netty is enabled - final DelayedPacketManager delayed = new DelayedPacketManager(reporter); + final DelayedPacketManager delayed = new DelayedPacketManager(reporter, mcVersion); // They must reference each other delayed.setAsynchronousManager(asyncManager); diff --git a/ProtocolLib/src/main/java/com/comphenix/protocol/injector/PacketFilterManager.java b/ProtocolLib/src/main/java/com/comphenix/protocol/injector/PacketFilterManager.java index 68a60655..78e9190b 100644 --- a/ProtocolLib/src/main/java/com/comphenix/protocol/injector/PacketFilterManager.java +++ b/ProtocolLib/src/main/java/com/comphenix/protocol/injector/PacketFilterManager.java @@ -66,6 +66,7 @@ import com.comphenix.protocol.injector.spigot.SpigotPacketInjector; import com.comphenix.protocol.reflect.FieldAccessException; import com.comphenix.protocol.reflect.FuzzyReflection; import com.comphenix.protocol.utility.MinecraftReflection; +import com.comphenix.protocol.utility.MinecraftVersion; import com.google.common.base.Objects; import com.google.common.base.Predicate; import com.google.common.collect.ImmutableSet; @@ -179,6 +180,9 @@ public final class PacketFilterManager implements ProtocolManager, ListenerInvok // Plugin verifier private PluginVerifier pluginVerifier; + // The current Minecraft version + private MinecraftVersion minecraftVersion; + /** * Only create instances of this class if protocol lib is disabled. */ @@ -210,9 +214,10 @@ public final class PacketFilterManager implements ProtocolManager, ListenerInvok // The plugin verifier this.pluginVerifier = new PluginVerifier(builder.getLibrary()); + this.minecraftVersion = builder.getMinecraftVersion(); // The write packet interceptor - interceptWritePacket = new InterceptWritePacket(classLoader, reporter); + this.interceptWritePacket = new InterceptWritePacket(classLoader, reporter); // Use the correct injection type if (builder.isNettyEnabled()) { @@ -267,6 +272,11 @@ public final class PacketFilterManager implements ProtocolManager, ListenerInvok return new PacketFilterBuilder(); } + @Override + public MinecraftVersion getMinecraftVersion() { + return minecraftVersion; + } + @Override public AsynchronousManager getAsynchronousManager() { return asyncFilterManager; diff --git a/ProtocolLib/src/main/java/com/comphenix/protocol/utility/MinecraftVersion.java b/ProtocolLib/src/main/java/com/comphenix/protocol/utility/MinecraftVersion.java index e78dc266..04cbdf80 100644 --- a/ProtocolLib/src/main/java/com/comphenix/protocol/utility/MinecraftVersion.java +++ b/ProtocolLib/src/main/java/com/comphenix/protocol/utility/MinecraftVersion.java @@ -40,7 +40,7 @@ public class MinecraftVersion implements Comparable { private final int major; private final int minor; private final int build; - + // The development stage private final String development; @@ -141,10 +141,10 @@ public class MinecraftVersion implements Comparable { * @return A normal version string. */ public String getVersion() { - if (development == null) - return String.format("%s.%s.%s", major, minor, build); + if (getDevelopmentStage() == null) + return String.format("%s.%s.%s", getMajor(), getMinor(), getBuild()); else - return String.format("%s.%s.%s-%s", major, minor, build, development); + return String.format("%s.%s.%s-%s", getMajor(), getMinor(), getBuild(), getDevelopmentStage()); } @Override @@ -153,11 +153,11 @@ public class MinecraftVersion implements Comparable { return 1; return ComparisonChain.start(). - compare(major, o.major). - compare(minor, o.minor). - compare(build, o.build). + compare(getMajor(), o.getMajor()). + compare(getMinor(), o.getMinor()). + compare(getBuild(), o.getBuild()). // No development String means it's a release - compare(development, o.development, Ordering.natural().nullsLast()). + compare(getDevelopmentStage(), o.getDevelopmentStage(), Ordering.natural().nullsLast()). result(); } @@ -171,10 +171,10 @@ public class MinecraftVersion implements Comparable { if (obj instanceof MinecraftVersion) { MinecraftVersion other = (MinecraftVersion) obj; - return major == other.major && - minor == other.minor && - build == other.build && - Objects.equal(development, other.development); + return getMajor() == other.getMajor() && + getMinor() == other.getMinor() && + getBuild() == other.getBuild() && + Objects.equal(getDevelopmentStage(), other.getDevelopmentStage()); } return false; @@ -182,7 +182,7 @@ public class MinecraftVersion implements Comparable { @Override public int hashCode() { - return Objects.hashCode(major, minor, build); + return Objects.hashCode(getMajor(), getMinor(), getBuild()); } @Override