Update to 1.7.10, update readme, organize imports
Dieser Commit ist enthalten in:
Ursprung
d8181b7bf3
Commit
cfb5944990
@ -1,11 +1,12 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.comphenix.protocol</groupId>
|
||||
<artifactId>ProtocolLib</artifactId>
|
||||
<version>3.5.0-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
<description>Provides read/write access to the Minecraft protocol.</description>
|
||||
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>cp1252</project.build.sourceEncoding>
|
||||
<powermock.version>1.5</powermock.version>
|
||||
@ -23,11 +24,11 @@
|
||||
<url>http://repo.comphenix.net/content/repositories/snapshots/</url>
|
||||
</snapshotRepository>
|
||||
</distributionManagement>
|
||||
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>bukkit-rep</id>
|
||||
<url>http://repo.bukkit.org/content/groups/public</url>
|
||||
<id>md_5-repo</id>
|
||||
<url>http://repo.md-5.net/content/repositories/public/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>comphenix-releases</id>
|
||||
@ -35,7 +36,7 @@
|
||||
<url>http://repo.comphenix.net/content/repositories/releases/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
|
||||
<build>
|
||||
<defaultGoal>clean install</defaultGoal>
|
||||
<sourceDirectory>src/main/java</sourceDirectory>
|
||||
@ -49,7 +50,7 @@
|
||||
</excludes>
|
||||
</resource>
|
||||
</resources>
|
||||
|
||||
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
@ -71,7 +72,7 @@
|
||||
<shadedPattern>com.comphenix.net.sf</shadedPattern>
|
||||
</relocation>
|
||||
</relocations>
|
||||
|
||||
|
||||
<artifactSet>
|
||||
<excludes>
|
||||
<exclude>org.bukkit:craftbukkit</exclude>
|
||||
@ -82,7 +83,7 @@
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>2.3.2</version>
|
||||
@ -92,108 +93,108 @@
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-failsafe-plugin</artifactId>
|
||||
<version>2.12.4</version>
|
||||
<configuration>
|
||||
<workingDirectory>${basedir}/target/server/</workingDirectory>
|
||||
<argLine>-Xmx1024m -Xms1024M -Dnojline=true</argLine>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-failsafe-plugin</artifactId>
|
||||
<version>2.12.4</version>
|
||||
<configuration>
|
||||
<workingDirectory>${basedir}/target/server/</workingDirectory>
|
||||
<argLine>-Xmx1024m -Xms1024M -Dnojline=true</argLine>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>integration-test</goal>
|
||||
<goal>verify</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>integration-test</goal>
|
||||
<goal>verify</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
||||
<reporting>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>findbugs-maven-plugin</artifactId>
|
||||
<version>2.5.2</version>
|
||||
<configuration>
|
||||
<threshold>High</threshold>
|
||||
<effort>Default</effort>
|
||||
</configuration>
|
||||
<configuration>
|
||||
<threshold>High</threshold>
|
||||
<effort>Default</effort>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</reporting>
|
||||
|
||||
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>release-sign-artifacts</id>
|
||||
<activation>
|
||||
<property>
|
||||
<name>performRelease</name>
|
||||
<value>true</value>
|
||||
</property>
|
||||
</activation>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
<version>2.2</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>attach-sources</id>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<version>2.9</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>attach-javadocs</id>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-gpg-plugin</artifactId>
|
||||
<version>1.4</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>sign-artifacts</id>
|
||||
<phase>verify</phase>
|
||||
<goals>
|
||||
<goal>sign</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>release-sign-artifacts</id>
|
||||
<activation>
|
||||
<property>
|
||||
<name>performRelease</name>
|
||||
<value>true</value>
|
||||
</property>
|
||||
</activation>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
<version>2.2</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>attach-sources</id>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<version>2.9</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>attach-javadocs</id>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-gpg-plugin</artifactId>
|
||||
<version>1.4</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>sign-artifacts</id>
|
||||
<phase>verify</phase>
|
||||
<goals>
|
||||
<goal>sign</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
</profiles>
|
||||
|
||||
|
||||
<url>http://dev.bukkit.org/server-mods/protocollib/</url>
|
||||
<name>ProtocolLib</name>
|
||||
|
||||
|
||||
<scm>
|
||||
<connection>scm:git:git://github.com/aadnk/ProtocolLib.git</connection>
|
||||
<developerConnection>scm:git:git@github.com:aadnk/ProtocolLib.git</developerConnection>
|
||||
<url>https://github.com/aadnk/ProtocolLib</url>
|
||||
</scm>
|
||||
|
||||
|
||||
<licenses>
|
||||
<license>
|
||||
<name>GNU GENERAL PUBLIC LICENSE - Version 2, June 1991</name>
|
||||
@ -201,63 +202,75 @@
|
||||
<distribution>repo</distribution>
|
||||
</license>
|
||||
</licenses>
|
||||
|
||||
|
||||
<developers>
|
||||
<developer>
|
||||
<id>dmulloy2</id>
|
||||
<name>Dan Mulloy</name>
|
||||
<url>http://shadowvolt.com/</url>
|
||||
<roles>
|
||||
<role>developer</role>
|
||||
<role>maintainer</role>
|
||||
</roles>
|
||||
</developer>
|
||||
<developer>
|
||||
<id>aadnk</id>
|
||||
<name>Kristian S. Stangeland</name>
|
||||
<email>kr_stang@hotmail.com</email>
|
||||
<url>http://comphenix.net/</url>
|
||||
<roles>
|
||||
<role>developer</role>
|
||||
<role>maintainer</role>
|
||||
<role>former author</role>
|
||||
</roles>
|
||||
<timezone>1</timezone>
|
||||
</developer>
|
||||
</developers>
|
||||
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>cglib</groupId>
|
||||
<artifactId>cglib-nodep</artifactId>
|
||||
<version>2.2.2</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.comphenix.executors</groupId>
|
||||
<artifactId>BukkitExecutors</artifactId>
|
||||
<version>1.0.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.bukkit</groupId>
|
||||
<artifactId>craftbukkit</artifactId>
|
||||
<version>1.7.8-R0.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.10</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-all</artifactId>
|
||||
<version>1.8.4</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.powermock</groupId>
|
||||
<artifactId>powermock-module-junit4</artifactId>
|
||||
<version>${powermock.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.powermock</groupId>
|
||||
<artifactId>powermock-api-mockito</artifactId>
|
||||
<version>${powermock.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cglib</groupId>
|
||||
<artifactId>cglib-nodep</artifactId>
|
||||
<version>2.2.2</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.comphenix.executors</groupId>
|
||||
<artifactId>BukkitExecutors</artifactId>
|
||||
<version>1.0.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot-api</artifactId>
|
||||
<version>1.7.10-R0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot</artifactId>
|
||||
<version>1.7.10-R0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.10</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-all</artifactId>
|
||||
<version>1.8.4</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.powermock</groupId>
|
||||
<artifactId>powermock-module-junit4</artifactId>
|
||||
<version>${powermock.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.powermock</groupId>
|
||||
<artifactId>powermock-api-mockito</artifactId>
|
||||
<version>${powermock.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -19,6 +19,7 @@ package com.comphenix.protocol;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
@ -9,12 +9,12 @@ import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
import com.comphenix.protocol.events.ConnectionSide;
|
||||
import com.comphenix.protocol.injector.packet.PacketRegistry;
|
||||
import com.comphenix.protocol.reflect.ObjectEnum;
|
||||
import com.comphenix.protocol.utility.MinecraftReflection;
|
||||
import com.comphenix.protocol.utility.MinecraftVersion;
|
||||
|
||||
import com.google.common.base.Objects;
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.ComparisonChain;
|
||||
|
@ -8,10 +8,10 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
import com.comphenix.protocol.utility.SafeCacheBuilder;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.comphenix.protocol.utility.SafeCacheBuilder;
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.cache.CacheLoader;
|
||||
import com.google.common.cache.RemovalListener;
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.comphenix.protocol.error;
|
||||
|
||||
import java.io.PrintStream;
|
||||
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import com.comphenix.protocol.error.Report.ReportBuilder;
|
||||
|
@ -26,7 +26,6 @@ import java.util.Set;
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.injector.GamePhase;
|
||||
import com.comphenix.protocol.injector.packet.PacketRegistry;
|
||||
|
||||
import com.google.common.base.Objects;
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
|
@ -23,10 +23,6 @@ import java.util.logging.Logger;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import com.comphenix.protocol.Packets;
|
||||
import com.comphenix.protocol.events.ConnectionSide;
|
||||
import com.comphenix.protocol.events.ListenerPriority;
|
||||
import com.comphenix.protocol.events.ListeningWhitelist;
|
||||
import com.comphenix.protocol.events.PacketListener;
|
||||
import com.comphenix.protocol.injector.GamePhase;
|
||||
import com.comphenix.protocol.injector.packet.PacketRegistry;
|
||||
import com.comphenix.protocol.reflect.FieldAccessException;
|
||||
|
@ -12,6 +12,8 @@ import java.util.PriorityQueue;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.ProtocolManager;
|
||||
import com.comphenix.protocol.utility.ByteBufferInputStream;
|
||||
|
@ -49,20 +49,19 @@ import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.PacketType.Protocol;
|
||||
import com.comphenix.protocol.PacketType.Sender;
|
||||
import com.comphenix.protocol.injector.StructureCache;
|
||||
import com.comphenix.protocol.reflect.EquivalentConverter;
|
||||
import com.comphenix.protocol.reflect.FuzzyReflection;
|
||||
import com.comphenix.protocol.reflect.ObjectWriter;
|
||||
import com.comphenix.protocol.reflect.StructureModifier;
|
||||
import com.comphenix.protocol.reflect.cloning.AggregateCloner;
|
||||
import com.comphenix.protocol.reflect.cloning.AggregateCloner.BuilderParameters;
|
||||
import com.comphenix.protocol.reflect.cloning.BukkitCloner;
|
||||
import com.comphenix.protocol.reflect.cloning.Cloner;
|
||||
import com.comphenix.protocol.reflect.cloning.CollectionCloner;
|
||||
import com.comphenix.protocol.reflect.cloning.FieldCloner;
|
||||
import com.comphenix.protocol.reflect.cloning.ImmutableDetector;
|
||||
import com.comphenix.protocol.reflect.cloning.SerializableCloner;
|
||||
import com.comphenix.protocol.reflect.cloning.AggregateCloner.BuilderParameters;
|
||||
import com.comphenix.protocol.reflect.fuzzy.FuzzyMethodContract;
|
||||
import com.comphenix.protocol.reflect.instances.DefaultInstances;
|
||||
import com.comphenix.protocol.utility.MinecraftMethods;
|
||||
@ -72,7 +71,11 @@ import com.comphenix.protocol.wrappers.BukkitConverters;
|
||||
import com.comphenix.protocol.wrappers.ChunkCoordIntPair;
|
||||
import com.comphenix.protocol.wrappers.ChunkPosition;
|
||||
import com.comphenix.protocol.wrappers.EnumWrappers;
|
||||
import com.comphenix.protocol.wrappers.EnumWrappers.ChatVisibility;
|
||||
import com.comphenix.protocol.wrappers.EnumWrappers.ClientCommand;
|
||||
import com.comphenix.protocol.wrappers.EnumWrappers.Difficulty;
|
||||
import com.comphenix.protocol.wrappers.EnumWrappers.EntityUseAction;
|
||||
import com.comphenix.protocol.wrappers.EnumWrappers.NativeGameMode;
|
||||
import com.comphenix.protocol.wrappers.WrappedAttribute;
|
||||
import com.comphenix.protocol.wrappers.WrappedChatComponent;
|
||||
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
|
||||
@ -80,10 +83,6 @@ import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
||||
import com.comphenix.protocol.wrappers.WrappedServerPing;
|
||||
import com.comphenix.protocol.wrappers.WrappedStatistic;
|
||||
import com.comphenix.protocol.wrappers.WrappedWatchableObject;
|
||||
import com.comphenix.protocol.wrappers.EnumWrappers.ChatVisibility;
|
||||
import com.comphenix.protocol.wrappers.EnumWrappers.ClientCommand;
|
||||
import com.comphenix.protocol.wrappers.EnumWrappers.EntityUseAction;
|
||||
import com.comphenix.protocol.wrappers.EnumWrappers.NativeGameMode;
|
||||
import com.comphenix.protocol.wrappers.nbt.NbtBase;
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Preconditions;
|
||||
|
@ -5,9 +5,10 @@ import java.lang.reflect.InvocationTargetException;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.comphenix.protocol.PacketStream;
|
||||
import com.comphenix.protocol.ProtocolLibrary;
|
||||
import com.comphenix.protocol.PacketType.Sender;
|
||||
import com.google.common.base.Preconditions;import com.google.common.base.Objects;
|
||||
import com.comphenix.protocol.ProtocolLibrary;
|
||||
import com.google.common.base.Objects;
|
||||
import com.google.common.base.Preconditions;
|
||||
|
||||
/**
|
||||
* Represents a packet that is scheduled for transmission at a later stage.
|
||||
|
@ -5,6 +5,7 @@ import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import org.bukkit.Location;
|
||||
@ -16,8 +17,8 @@ import org.bukkit.plugin.PluginManager;
|
||||
|
||||
import com.comphenix.protocol.AsynchronousManager;
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.ProtocolManager;
|
||||
import com.comphenix.protocol.PacketType.Sender;
|
||||
import com.comphenix.protocol.ProtocolManager;
|
||||
import com.comphenix.protocol.error.ErrorReporter;
|
||||
import com.comphenix.protocol.error.Report;
|
||||
import com.comphenix.protocol.error.ReportType;
|
||||
|
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
@ -25,8 +25,8 @@ import com.comphenix.protocol.events.ListenerPriority;
|
||||
import com.comphenix.protocol.events.PacketEvent;
|
||||
import com.comphenix.protocol.events.PacketListener;
|
||||
import com.comphenix.protocol.timing.TimedListenerManager;
|
||||
import com.comphenix.protocol.timing.TimedTracker;
|
||||
import com.comphenix.protocol.timing.TimedListenerManager.ListenerType;
|
||||
import com.comphenix.protocol.timing.TimedTracker;
|
||||
|
||||
/**
|
||||
* Registry of synchronous packet listeners.
|
||||
|
@ -6,14 +6,13 @@ import java.util.List;
|
||||
import java.util.ListIterator;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import net.minecraft.util.io.netty.channel.Channel;
|
||||
|
||||
// Hopefully, CB won't version these as well
|
||||
import net.minecraft.util.io.netty.channel.ChannelFuture;
|
||||
import net.minecraft.util.io.netty.channel.ChannelHandler;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
class BootstrapList implements List<Object> {
|
||||
private List<Object> delegate;
|
||||
private ChannelHandler handler;
|
||||
|
@ -35,7 +35,6 @@ import com.comphenix.protocol.PacketType.Protocol;
|
||||
import com.comphenix.protocol.ProtocolLibrary;
|
||||
import com.comphenix.protocol.error.Report;
|
||||
import com.comphenix.protocol.error.ReportType;
|
||||
import com.comphenix.protocol.error.Report.ReportBuilder;
|
||||
import com.comphenix.protocol.events.ConnectionSide;
|
||||
import com.comphenix.protocol.events.NetworkMarker;
|
||||
import com.comphenix.protocol.events.PacketEvent;
|
||||
|
@ -5,10 +5,6 @@ import java.net.SocketAddress;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import com.comphenix.protocol.reflect.accessors.Accessors;
|
||||
import com.comphenix.protocol.reflect.accessors.FieldAccessor;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import net.minecraft.util.io.netty.buffer.ByteBufAllocator;
|
||||
import net.minecraft.util.io.netty.channel.Channel;
|
||||
import net.minecraft.util.io.netty.channel.ChannelConfig;
|
||||
@ -21,6 +17,10 @@ import net.minecraft.util.io.netty.channel.EventLoop;
|
||||
import net.minecraft.util.io.netty.util.Attribute;
|
||||
import net.minecraft.util.io.netty.util.AttributeKey;
|
||||
|
||||
import com.comphenix.protocol.reflect.accessors.Accessors;
|
||||
import com.comphenix.protocol.reflect.accessors.FieldAccessor;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
abstract class ChannelProxy implements Channel {
|
||||
// Mark that a certain object does not contain a message field
|
||||
private static final FieldAccessor MARK_NO_MESSAGE = new FieldAccessor() {
|
||||
|
@ -3,7 +3,9 @@ package com.comphenix.protocol.injector.netty;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import net.minecraft.util.io.netty.channel.Channel;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
@ -7,8 +7,6 @@ import java.lang.reflect.Method;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import net.minecraft.util.io.netty.channel.Channel;
|
||||
import net.minecraft.util.io.netty.channel.ChannelFuture;
|
||||
@ -18,12 +16,19 @@ import net.minecraft.util.io.netty.channel.ChannelInboundHandler;
|
||||
import net.minecraft.util.io.netty.channel.ChannelInboundHandlerAdapter;
|
||||
import net.minecraft.util.io.netty.channel.ChannelInitializer;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.concurrency.PacketTypeSet;
|
||||
import com.comphenix.protocol.error.ErrorReporter;
|
||||
import com.comphenix.protocol.error.Report;
|
||||
import com.comphenix.protocol.error.ReportType;
|
||||
import com.comphenix.protocol.events.*;
|
||||
import com.comphenix.protocol.events.ConnectionSide;
|
||||
import com.comphenix.protocol.events.ListenerOptions;
|
||||
import com.comphenix.protocol.events.NetworkMarker;
|
||||
import com.comphenix.protocol.events.PacketContainer;
|
||||
import com.comphenix.protocol.events.PacketEvent;
|
||||
import com.comphenix.protocol.injector.ListenerInvoker;
|
||||
import com.comphenix.protocol.injector.packet.PacketInjector;
|
||||
import com.comphenix.protocol.injector.packet.PacketRegistry;
|
||||
|
@ -5,6 +5,7 @@ import java.io.DataInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
|
@ -4,8 +4,8 @@ import java.lang.reflect.Field;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
@ -19,7 +19,6 @@ import com.comphenix.protocol.reflect.fuzzy.FuzzyFieldContract;
|
||||
import com.comphenix.protocol.reflect.fuzzy.FuzzyMethodContract;
|
||||
import com.comphenix.protocol.utility.MinecraftReflection;
|
||||
import com.comphenix.protocol.wrappers.TroveWrapper;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
@ -24,14 +24,15 @@ import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import net.sf.cglib.proxy.Callback;
|
||||
import net.sf.cglib.proxy.CallbackFilter;
|
||||
import net.sf.cglib.proxy.Enhancer;
|
||||
import net.sf.cglib.proxy.Factory;
|
||||
import net.sf.cglib.proxy.CallbackFilter;
|
||||
import net.sf.cglib.proxy.NoOp;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.PacketType.Sender;
|
||||
import com.comphenix.protocol.error.ErrorReporter;
|
||||
|
@ -23,6 +23,9 @@ import java.io.InputStream;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Map;
|
||||
|
||||
import net.sf.cglib.proxy.MethodInterceptor;
|
||||
import net.sf.cglib.proxy.MethodProxy;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.PacketType.Sender;
|
||||
import com.comphenix.protocol.error.ErrorReporter;
|
||||
@ -34,9 +37,6 @@ import com.comphenix.protocol.events.PacketEvent;
|
||||
import com.comphenix.protocol.injector.NetworkProcessor;
|
||||
import com.google.common.collect.MapMaker;
|
||||
|
||||
import net.sf.cglib.proxy.MethodInterceptor;
|
||||
import net.sf.cglib.proxy.MethodProxy;
|
||||
|
||||
class ReadPacketModifier implements MethodInterceptor {
|
||||
public static final ReportType REPORT_CANNOT_HANDLE_CLIENT_PACKET = new ReportType("Cannot handle client packet.");
|
||||
|
||||
|
@ -22,20 +22,18 @@ import java.io.DataOutput;
|
||||
import java.io.DataOutputStream;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Map;
|
||||
import java.util.PriorityQueue;
|
||||
|
||||
import net.sf.cglib.proxy.MethodInterceptor;
|
||||
import net.sf.cglib.proxy.MethodProxy;
|
||||
|
||||
import com.comphenix.protocol.error.ErrorReporter;
|
||||
import com.comphenix.protocol.error.Report;
|
||||
import com.comphenix.protocol.error.ReportType;
|
||||
import com.comphenix.protocol.events.NetworkMarker;
|
||||
import com.comphenix.protocol.events.PacketEvent;
|
||||
import com.comphenix.protocol.events.PacketOutputHandler;
|
||||
import com.comphenix.protocol.injector.NetworkProcessor;
|
||||
import com.google.common.collect.MapMaker;
|
||||
|
||||
import net.sf.cglib.proxy.MethodInterceptor;
|
||||
import net.sf.cglib.proxy.MethodProxy;
|
||||
|
||||
public class WritePacketModifier implements MethodInterceptor {
|
||||
public static final ReportType REPORT_CANNOT_WRITE_SERVER_PACKET = new ReportType("Cannot write server packet.");
|
||||
|
||||
|
@ -23,6 +23,11 @@ import java.util.ArrayList;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
||||
import net.sf.cglib.proxy.Callback;
|
||||
import net.sf.cglib.proxy.Enhancer;
|
||||
import net.sf.cglib.proxy.MethodInterceptor;
|
||||
import net.sf.cglib.proxy.MethodProxy;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.ProtocolLibrary;
|
||||
import com.comphenix.protocol.error.Report;
|
||||
@ -33,11 +38,6 @@ import com.comphenix.protocol.utility.EnhancerFactory;
|
||||
import com.comphenix.protocol.utility.MinecraftReflection;
|
||||
import com.google.common.collect.MapMaker;
|
||||
|
||||
import net.sf.cglib.proxy.Callback;
|
||||
import net.sf.cglib.proxy.Enhancer;
|
||||
import net.sf.cglib.proxy.MethodInterceptor;
|
||||
import net.sf.cglib.proxy.MethodProxy;
|
||||
|
||||
/**
|
||||
* The array list that notifies when packets are sent by the server.
|
||||
*
|
||||
|
@ -18,6 +18,7 @@
|
||||
package com.comphenix.protocol.injector.player;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import net.sf.cglib.proxy.Callback;
|
||||
import net.sf.cglib.proxy.CallbackFilter;
|
||||
@ -26,8 +27,6 @@ import net.sf.cglib.proxy.LazyLoader;
|
||||
import net.sf.cglib.proxy.MethodInterceptor;
|
||||
import net.sf.cglib.proxy.MethodProxy;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
@ -22,7 +22,13 @@ import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Arrays;
|
||||
|
||||
import net.sf.cglib.proxy.*;
|
||||
import net.sf.cglib.proxy.Callback;
|
||||
import net.sf.cglib.proxy.CallbackFilter;
|
||||
import net.sf.cglib.proxy.Enhancer;
|
||||
import net.sf.cglib.proxy.Factory;
|
||||
import net.sf.cglib.proxy.MethodInterceptor;
|
||||
import net.sf.cglib.proxy.MethodProxy;
|
||||
import net.sf.cglib.proxy.NoOp;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
@ -25,6 +25,7 @@ import java.lang.reflect.Method;
|
||||
import java.net.Socket;
|
||||
import java.net.SocketAddress;
|
||||
import java.util.Map;
|
||||
|
||||
import net.sf.cglib.proxy.Factory;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
@ -26,7 +26,6 @@ import java.net.Socket;
|
||||
import java.net.SocketAddress;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.TreeMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@ -36,7 +35,6 @@ import org.bukkit.Server;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.ProtocolLibrary;
|
||||
import com.comphenix.protocol.PacketType.Sender;
|
||||
import com.comphenix.protocol.Packets;
|
||||
import com.comphenix.protocol.concurrency.BlockingHashMap;
|
||||
@ -52,8 +50,8 @@ import com.comphenix.protocol.events.PacketEvent;
|
||||
import com.comphenix.protocol.events.PacketListener;
|
||||
import com.comphenix.protocol.injector.GamePhase;
|
||||
import com.comphenix.protocol.injector.ListenerInvoker;
|
||||
import com.comphenix.protocol.injector.PlayerLoggedOutException;
|
||||
import com.comphenix.protocol.injector.PacketFilterManager.PlayerInjectHooks;
|
||||
import com.comphenix.protocol.injector.PlayerLoggedOutException;
|
||||
import com.comphenix.protocol.injector.packet.PacketRegistry;
|
||||
import com.comphenix.protocol.injector.server.AbstractInputStreamLookup;
|
||||
import com.comphenix.protocol.injector.server.BukkitSocketInjector;
|
||||
|
@ -3,6 +3,7 @@ package com.comphenix.protocol.injector.server;
|
||||
import java.io.InputStream;
|
||||
import java.net.Socket;
|
||||
import java.net.SocketAddress;
|
||||
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
@ -7,7 +7,6 @@ import java.net.InetSocketAddress;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.ProtocolLibrary;
|
||||
import com.comphenix.protocol.concurrency.PacketTypeSet;
|
||||
import com.comphenix.protocol.events.NetworkMarker;
|
||||
import com.comphenix.protocol.events.PacketContainer;
|
||||
|
@ -9,11 +9,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import net.sf.cglib.proxy.Callback;
|
||||
import net.sf.cglib.proxy.CallbackFilter;
|
||||
import net.sf.cglib.proxy.Enhancer;
|
||||
@ -22,9 +17,13 @@ import net.sf.cglib.proxy.MethodInterceptor;
|
||||
import net.sf.cglib.proxy.MethodProxy;
|
||||
import net.sf.cglib.proxy.NoOp;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.PacketType.Sender;
|
||||
import com.comphenix.protocol.ProtocolLibrary;
|
||||
import com.comphenix.protocol.concurrency.PacketTypeSet;
|
||||
import com.comphenix.protocol.error.DelegatedErrorReporter;
|
||||
import com.comphenix.protocol.error.ErrorReporter;
|
||||
@ -35,7 +34,6 @@ import com.comphenix.protocol.events.NetworkMarker;
|
||||
import com.comphenix.protocol.events.PacketContainer;
|
||||
import com.comphenix.protocol.events.PacketEvent;
|
||||
import com.comphenix.protocol.injector.ListenerInvoker;
|
||||
import com.comphenix.protocol.injector.PacketFilterBuilder;
|
||||
import com.comphenix.protocol.injector.PacketFilterManager;
|
||||
import com.comphenix.protocol.injector.PlayerLoggedOutException;
|
||||
import com.comphenix.protocol.injector.packet.LegacyNetworkMarker;
|
||||
@ -48,7 +46,6 @@ import com.comphenix.protocol.reflect.MethodInfo;
|
||||
import com.comphenix.protocol.reflect.fuzzy.FuzzyMethodContract;
|
||||
import com.comphenix.protocol.utility.EnhancerFactory;
|
||||
import com.comphenix.protocol.utility.MinecraftReflection;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.MapMaker;
|
||||
|
@ -2,16 +2,16 @@
|
||||
* ProtocolLib - Bukkit server library that allows access to the Minecraft protocol.
|
||||
* Copyright (C) 2012 Kristian S. Stangeland
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
||||
* GNU General Public License as published by the Free Software Foundation; either version 2 of
|
||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
||||
* GNU General Public License as published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with this program;
|
||||
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
* You should have received a copy of the GNU General Public License along with this program;
|
||||
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
* 02111-1307 USA
|
||||
*/
|
||||
|
||||
@ -45,14 +45,6 @@ package com.comphenix.protocol.metrics;
|
||||
* either expressed or implied, of anybody else.
|
||||
*/
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.PluginDescriptionFile;
|
||||
|
||||
import com.comphenix.protocol.utility.WrappedScheduler;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@ -71,6 +63,15 @@ import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.PluginDescriptionFile;
|
||||
|
||||
import com.comphenix.protocol.utility.BukkitUtil;
|
||||
import com.comphenix.protocol.utility.WrappedScheduler;
|
||||
|
||||
/**
|
||||
* <p> The metrics class obtains data about a plugin and submits statistics about it to the metrics backend. </p> <p>
|
||||
* Public methods provided by this class: </p>
|
||||
@ -243,7 +244,8 @@ public class Metrics {
|
||||
|
||||
private boolean firstPost = true;
|
||||
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
// This has to be synchronized or it can collide with the disable method.
|
||||
synchronized (optOutLock) {
|
||||
@ -373,7 +375,7 @@ public class Metrics {
|
||||
boolean onlineMode = Bukkit.getServer().getOnlineMode(); // TRUE if online mode is enabled
|
||||
String pluginVersion = description.getVersion();
|
||||
String serverVersion = Bukkit.getVersion();
|
||||
int playersOnline = Bukkit.getServer().getOnlinePlayers().length;
|
||||
int playersOnline = BukkitUtil.getOnlinePlayers().size();
|
||||
|
||||
// END server software specific section -- all code below does not use any code outside of this class / Java
|
||||
|
||||
|
@ -7,7 +7,13 @@
|
||||
// Somewhat modified by aadnk.
|
||||
package com.comphenix.protocol.metrics;
|
||||
|
||||
import java.io.*;
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
@ -28,7 +34,6 @@ import com.comphenix.protocol.error.Report;
|
||||
import com.comphenix.protocol.error.ReportType;
|
||||
import com.comphenix.protocol.utility.MinecraftVersion;
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.io.Files;
|
||||
|
||||
/**
|
||||
* Check dev.bukkit.org to find updates for a given plugin, and download the updates if needed.
|
||||
|
@ -4,16 +4,16 @@ import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.List;
|
||||
|
||||
import com.comphenix.protocol.reflect.ClassAnalyser.AsmMethod.AsmOpcodes;
|
||||
import com.comphenix.protocol.reflect.compiler.EmptyClassVisitor;
|
||||
import com.comphenix.protocol.reflect.compiler.EmptyMethodVisitor;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import net.sf.cglib.asm.ClassReader;
|
||||
import net.sf.cglib.asm.MethodVisitor;
|
||||
import net.sf.cglib.asm.Opcodes;
|
||||
import net.sf.cglib.asm.Type;
|
||||
|
||||
import com.comphenix.protocol.reflect.ClassAnalyser.AsmMethod.AsmOpcodes;
|
||||
import com.comphenix.protocol.reflect.compiler.EmptyClassVisitor;
|
||||
import com.comphenix.protocol.reflect.compiler.EmptyMethodVisitor;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
public class ClassAnalyser {
|
||||
/**
|
||||
* Represents a method in ASM.
|
||||
|
@ -17,7 +17,9 @@
|
||||
|
||||
package com.comphenix.protocol.reflect.compiler;
|
||||
|
||||
import net.sf.cglib.asm.*;
|
||||
import net.sf.cglib.asm.MethodVisitor;
|
||||
import net.sf.cglib.asm.Opcodes;
|
||||
import net.sf.cglib.asm.Type;
|
||||
|
||||
/**
|
||||
* Used by the compiler to automatically box and unbox values.
|
||||
|
@ -25,6 +25,13 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import net.sf.cglib.asm.ClassWriter;
|
||||
import net.sf.cglib.asm.FieldVisitor;
|
||||
import net.sf.cglib.asm.Label;
|
||||
import net.sf.cglib.asm.MethodVisitor;
|
||||
import net.sf.cglib.asm.Opcodes;
|
||||
import net.sf.cglib.asm.Type;
|
||||
|
||||
import com.comphenix.protocol.ProtocolLibrary;
|
||||
import com.comphenix.protocol.error.Report;
|
||||
import com.comphenix.protocol.error.ReportType;
|
||||
@ -32,8 +39,6 @@ import com.comphenix.protocol.reflect.StructureModifier;
|
||||
import com.google.common.base.Objects;
|
||||
import com.google.common.primitives.Primitives;
|
||||
|
||||
import net.sf.cglib.asm.*;
|
||||
|
||||
// public class CompiledStructureModifierPacket20<TField> extends CompiledStructureModifier<TField> {
|
||||
//
|
||||
// private Packet20NamedEntitySpawn typedTarget;
|
||||
|
@ -18,7 +18,8 @@
|
||||
package com.comphenix.protocol.reflect.instances;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.util.*;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
|
@ -6,6 +6,7 @@ import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.timing.TimedListenerManager.ListenerType;
|
||||
import com.google.common.base.Charsets;
|
||||
|
@ -0,0 +1,37 @@
|
||||
package com.comphenix.protocol.utility;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
* Utility methods relating to Bukkit.
|
||||
* @author dmulloy2
|
||||
*/
|
||||
|
||||
public class BukkitUtil {
|
||||
|
||||
private static Method getOnlinePlayers;
|
||||
|
||||
/**
|
||||
* Gets a list of online {@link Player}s. This also provides backwards
|
||||
* compatibility as Bukkit changed <code>getOnlinePlayers</code>.
|
||||
*
|
||||
* @return A list of online Players
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static List<Player> getOnlinePlayers() {
|
||||
try {
|
||||
if (getOnlinePlayers == null)
|
||||
getOnlinePlayers = Bukkit.class.getMethod("getOnlinePlayers");
|
||||
if (getOnlinePlayers.getReturnType() != Collection.class)
|
||||
return Arrays.asList((Player[]) getOnlinePlayers.invoke(null));
|
||||
} catch (Throwable ex) {
|
||||
}
|
||||
return (List<Player>) Bukkit.getOnlinePlayers();
|
||||
}
|
||||
}
|
@ -12,15 +12,15 @@ import java.nio.channels.GatheringByteChannel;
|
||||
import java.nio.channels.ScatteringByteChannel;
|
||||
import java.nio.channels.WritableByteChannel;
|
||||
|
||||
import net.minecraft.util.io.netty.buffer.AbstractByteBuf;
|
||||
import net.minecraft.util.io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.util.io.netty.buffer.ByteBufAllocator;
|
||||
|
||||
import com.comphenix.protocol.reflect.accessors.Accessors;
|
||||
import com.comphenix.protocol.reflect.accessors.FieldAccessor;
|
||||
import com.google.common.io.ByteStreams;
|
||||
import com.google.common.io.LimitInputStream;
|
||||
|
||||
import net.minecraft.util.io.netty.buffer.AbstractByteBuf;
|
||||
import net.minecraft.util.io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.util.io.netty.buffer.ByteBufAllocator;
|
||||
|
||||
/**
|
||||
* Construct a ByteBuf around an input stream and an output stream.
|
||||
* <p>
|
||||
|
@ -24,8 +24,8 @@ import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.bukkit.Server;
|
||||
import com.comphenix.protocol.ProtocolLibrary;
|
||||
|
||||
import com.comphenix.protocol.ProtocolLibrary;
|
||||
import com.google.common.base.Objects;
|
||||
import com.google.common.collect.ComparisonChain;
|
||||
import com.google.common.collect.Ordering;
|
||||
|
@ -22,6 +22,7 @@ package com.comphenix.protocol.utility;
|
||||
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
import com.comphenix.protocol.reflect.FieldUtils;
|
||||
|
@ -7,6 +7,7 @@ import java.io.DataInputStream;
|
||||
import java.io.DataOutput;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
@ -7,11 +7,8 @@ import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.List;
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.entity.Player;
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
import net.minecraft.util.com.mojang.authlib.GameProfile;
|
||||
import net.minecraft.util.io.netty.buffer.ByteBuf;
|
||||
@ -19,6 +16,10 @@ import net.minecraft.util.io.netty.buffer.Unpooled;
|
||||
import net.minecraft.util.io.netty.handler.codec.base64.Base64;
|
||||
import net.minecraft.util.io.netty.util.IllegalReferenceCountException;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.ProtocolLibrary;
|
||||
import com.comphenix.protocol.ProtocolManager;
|
||||
@ -28,6 +29,7 @@ import com.comphenix.protocol.reflect.accessors.Accessors;
|
||||
import com.comphenix.protocol.reflect.accessors.ConstructorAccessor;
|
||||
import com.comphenix.protocol.reflect.accessors.FieldAccessor;
|
||||
import com.comphenix.protocol.reflect.accessors.MethodAccessor;
|
||||
import com.comphenix.protocol.utility.BukkitUtil;
|
||||
import com.comphenix.protocol.utility.MinecraftReflection;
|
||||
import com.comphenix.protocol.utility.MinecraftVersion;
|
||||
import com.google.common.base.Charsets;
|
||||
@ -46,13 +48,13 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
/**
|
||||
* Lookup of Minecraft versions and ping version numbers.
|
||||
*/
|
||||
private static ImmutableMap<MinecraftVersion, Integer> VERSION_NUMBERS =
|
||||
private static ImmutableMap<MinecraftVersion, Integer> VERSION_NUMBERS =
|
||||
ImmutableMap.<MinecraftVersion, Integer>builder().
|
||||
put(MinecraftVersion.WORLD_UPDATE, 4).
|
||||
put(MinecraftVersion.SKIN_UPDATE, 5).
|
||||
build();
|
||||
private static MinecraftVersion LAST_VERSION = MinecraftVersion.SKIN_UPDATE;
|
||||
|
||||
|
||||
// Server ping fields
|
||||
private static Class<?> SERVER_PING = MinecraftReflection.getServerPingClass();
|
||||
private static ConstructorAccessor SERVER_PING_CONSTRUCTOR = Accessors.getConstructorAccessor(SERVER_PING);
|
||||
@ -60,11 +62,11 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
private static FieldAccessor PLAYERS = Accessors.getFieldAccessor(SERVER_PING, MinecraftReflection.getServerPingPlayerSampleClass(), true);
|
||||
private static FieldAccessor VERSION = Accessors.getFieldAccessor(SERVER_PING, MinecraftReflection.getServerPingServerDataClass(), true);
|
||||
private static FieldAccessor FAVICON = Accessors.getFieldAccessor(SERVER_PING, String.class, true);
|
||||
|
||||
|
||||
// For converting to the underlying array
|
||||
private static EquivalentConverter<Iterable<? extends WrappedGameProfile>> PROFILE_CONVERT =
|
||||
private static EquivalentConverter<Iterable<? extends WrappedGameProfile>> PROFILE_CONVERT =
|
||||
BukkitConverters.getArrayConverter(GameProfile.class, BukkitConverters.getWrappedGameProfileConverter());
|
||||
|
||||
|
||||
// Server ping player sample fields
|
||||
private static Class<?> PLAYERS_CLASS = MinecraftReflection.getServerPingPlayerSampleClass();
|
||||
private static ConstructorAccessor PLAYERS_CONSTRUCTOR = Accessors.getConstructorAccessor(PLAYERS_CLASS, int.class, int.class);
|
||||
@ -72,7 +74,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
private static FieldAccessor PLAYERS_PROFILES = Accessors.getFieldAccessor(PLAYERS_CLASS, GameProfile[].class, true);
|
||||
private static FieldAccessor PLAYERS_MAXIMUM = PLAYERS_INTS[0];
|
||||
private static FieldAccessor PLAYERS_ONLINE = PLAYERS_INTS[1];
|
||||
|
||||
|
||||
// Server ping serialization
|
||||
private static Class<?> GSON_CLASS = MinecraftReflection.getMinecraftGsonClass();
|
||||
private static MethodAccessor GSON_TO_JSON = Accessors.getMethodAccessor(GSON_CLASS, "toJson", Object.class);
|
||||
@ -80,23 +82,23 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
private static FieldAccessor PING_GSON = Accessors.getCached(Accessors.getFieldAccessor(
|
||||
PacketType.Status.Server.OUT_SERVER_INFO.getPacketClass(), GSON_CLASS, true
|
||||
));
|
||||
|
||||
|
||||
// Server data fields
|
||||
private static Class<?> VERSION_CLASS = MinecraftReflection.getServerPingServerDataClass();
|
||||
private static ConstructorAccessor VERSION_CONSTRUCTOR = Accessors.getConstructorAccessor(VERSION_CLASS, String.class, int.class);
|
||||
private static FieldAccessor VERSION_NAME = Accessors.getFieldAccessor(VERSION_CLASS, String.class, true);
|
||||
private static FieldAccessor VERSION_PROTOCOL = Accessors.getFieldAccessor(VERSION_CLASS, int.class, true);
|
||||
|
||||
|
||||
// Get profile from player
|
||||
private static FieldAccessor ENTITY_HUMAN_PROFILE = Accessors.getFieldAccessor(
|
||||
MinecraftReflection.getEntityPlayerClass().getSuperclass(), GameProfile.class, true);
|
||||
|
||||
|
||||
// Inner class
|
||||
private Object players; // may be NULL
|
||||
private Object version;
|
||||
|
||||
|
||||
/**
|
||||
* Construct a new server ping initialized with a zero player count, and zero maximum.
|
||||
* Construct a new server ping initialized with a zero player count, and zero maximum.
|
||||
* <p>
|
||||
* Note that the version string is set to 1.7.2.
|
||||
*/
|
||||
@ -106,14 +108,14 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
resetPlayers();
|
||||
resetVersion();
|
||||
}
|
||||
|
||||
|
||||
private WrappedServerPing(Object handle) {
|
||||
super(MinecraftReflection.getServerPingClass());
|
||||
setHandle(handle);
|
||||
this.players = PLAYERS.get(handle);
|
||||
this.version = VERSION.get(handle);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the player count and player maximum to the default values.
|
||||
*/
|
||||
@ -121,14 +123,14 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
players = PLAYERS_CONSTRUCTOR.invoke(0, 0);
|
||||
PLAYERS.set(handle, players);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Reset the version string to the default state.
|
||||
*/
|
||||
protected void resetVersion() {
|
||||
ProtocolManager manager = ProtocolLibrary.getProtocolManager();
|
||||
MinecraftVersion minecraftVersion = LAST_VERSION;
|
||||
|
||||
|
||||
// Fetch the latest known version
|
||||
if (manager != null) {
|
||||
minecraftVersion = manager.getMinecraftVersion();
|
||||
@ -136,7 +138,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
version = VERSION_CONSTRUCTOR.invoke(minecraftVersion.toString(), VERSION_NUMBERS.get(minecraftVersion));
|
||||
VERSION.set(handle, version);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Construct a wrapped server ping from a native NMS object.
|
||||
* @param handle - the native object.
|
||||
@ -145,7 +147,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
public static WrappedServerPing fromHandle(Object handle) {
|
||||
return new WrappedServerPing(handle);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Construct a wrapper server ping from an encoded JSON string.
|
||||
* @param json - the JSON string.
|
||||
@ -154,7 +156,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
public static WrappedServerPing fromJson(String json) {
|
||||
return fromHandle(GSON_FROM_JSON.invoke(PING_GSON.get(null), json, SERVER_PING));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve the message of the day.
|
||||
* @return The messge of the day.
|
||||
@ -162,7 +164,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
public WrappedChatComponent getMotD() {
|
||||
return WrappedChatComponent.fromHandle(DESCRIPTION.get(handle));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the message of the day.
|
||||
* @param description - message of the day.
|
||||
@ -178,7 +180,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
public void setMotD(String message) {
|
||||
setMotD(WrappedChatComponent.fromText(message));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve the compressed PNG file that is being displayed as a favicon.
|
||||
* @return The favicon, or NULL if no favicon will be displayed.
|
||||
@ -187,7 +189,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
String favicon = (String) FAVICON.get(handle);
|
||||
return (favicon != null) ? CompressedImage.fromEncodedText(favicon) : null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the compressed PNG file that is being displayed.
|
||||
* @param image - the new compressed image or NULL if no favicon should be displayed.
|
||||
@ -195,7 +197,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
public void setFavicon(CompressedImage image) {
|
||||
FAVICON.set(handle, (image != null) ? image.toEncodedText() : null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve the displayed number of online players.
|
||||
* @see {@link #setPlayersOnline(int)} for more information.
|
||||
@ -207,11 +209,11 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
throw new IllegalStateException("The player count has been hidden.");
|
||||
return (Integer) PLAYERS_ONLINE.get(players);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the displayed number of online players.
|
||||
* <p>
|
||||
* As of 1.7.2, this is completely unrestricted, and can be both positive and
|
||||
* As of 1.7.2, this is completely unrestricted, and can be both positive and
|
||||
* negative, as well as higher than the player maximum.
|
||||
* @param online - online players.
|
||||
*/
|
||||
@ -220,7 +222,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
resetPlayers();
|
||||
PLAYERS_ONLINE.set(players, online);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve the displayed maximum number of players.
|
||||
* @see {@link #setPlayersMaximum(int)} for more information.
|
||||
@ -232,7 +234,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
throw new IllegalStateException("The player maximum has been hidden.");
|
||||
return (Integer) PLAYERS_MAXIMUM.get(players);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the displayed maximum number of players.
|
||||
* <p>
|
||||
@ -245,7 +247,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
resetPlayers();
|
||||
PLAYERS_MAXIMUM.set(players, maximum);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set whether or not the player count and player maximum is visible.
|
||||
* <p>
|
||||
@ -258,13 +260,13 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
// Recreate the count and maximum
|
||||
Server server = Bukkit.getServer();
|
||||
setPlayersMaximum(server.getMaxPlayers());
|
||||
setPlayersOnline(server.getOnlinePlayers().length);
|
||||
setPlayersOnline(BukkitUtil.getOnlinePlayers().size());
|
||||
} else {
|
||||
PLAYERS.set(handle, players = null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Determine if the player count and maximum is visible.
|
||||
* <p>
|
||||
@ -274,7 +276,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
public boolean isPlayersVisible() {
|
||||
return players != null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve a copy of all the logged in players.
|
||||
* @return Logged in players or an empty list if no player names will be displayed.
|
||||
@ -287,7 +289,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
return ImmutableList.of();
|
||||
return ImmutableList.copyOf(PROFILE_CONVERT.getSpecific(playerProfiles));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the displayed list of logged in players.
|
||||
* @param profile - every logged in player.
|
||||
@ -297,21 +299,21 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
resetPlayers();
|
||||
PLAYERS_PROFILES.set(players, (profile != null) ? PROFILE_CONVERT.getGeneric(GameProfile[].class, profile) : null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the displayed lst of logged in players.
|
||||
* @param players - the players to display.
|
||||
*/
|
||||
public void setBukkitPlayers(Iterable<? extends Player> players) {
|
||||
List<WrappedGameProfile> profiles = Lists.newArrayList();
|
||||
|
||||
|
||||
for (Player player : players) {
|
||||
GameProfile profile = (GameProfile) ENTITY_HUMAN_PROFILE.get(BukkitUnwrapper.getInstance().unwrapItem(player));
|
||||
profiles.add(WrappedGameProfile.fromHandle(profile));
|
||||
}
|
||||
setPlayers(profiles);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve the version name of the current server.
|
||||
* @return The version name.
|
||||
@ -319,7 +321,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
public String getVersionName() {
|
||||
return (String) VERSION_NAME.get(version);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the version name of the current server.
|
||||
* @param name - the new version name.
|
||||
@ -327,7 +329,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
public void setVersionName(String name) {
|
||||
VERSION_NAME.set(version, name);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve the protocol number.
|
||||
* @return The protocol.
|
||||
@ -335,7 +337,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
public int getVersionProtocol() {
|
||||
return (Integer) VERSION_PROTOCOL.get(version);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the version protocol
|
||||
* @param protocol - the protocol number.
|
||||
@ -343,7 +345,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
public void setVersionProtocol(int protocol) {
|
||||
VERSION_PROTOCOL.set(version, protocol);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve a deep copy of the current wrapper object.
|
||||
* @return The current object.
|
||||
@ -351,13 +353,13 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
public WrappedServerPing deepClone() {
|
||||
WrappedServerPing copy = new WrappedServerPing();
|
||||
WrappedChatComponent motd = getMotD();
|
||||
|
||||
|
||||
copy.setPlayers(getPlayers());
|
||||
copy.setFavicon(getFavicon());
|
||||
copy.setMotD(motd != null ? motd.deepClone() : null);
|
||||
copy.setVersionName(getVersionName());
|
||||
copy.setVersionProtocol(getVersionProtocol());
|
||||
|
||||
|
||||
if (isPlayersVisible()) {
|
||||
copy.setPlayersMaximum(getPlayersMaximum());
|
||||
copy.setPlayersOnline(getPlayersOnline());
|
||||
@ -366,7 +368,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
}
|
||||
return copy;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve the underlying JSON representation of this server ping.
|
||||
* @return The JSON representation.
|
||||
@ -374,12 +376,12 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
public String toJson() {
|
||||
return (String) GSON_TO_JSON.invoke(PING_GSON.get(null), handle);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "WrappedServerPing< " + toJson() + ">";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Represents a compressed favicon.
|
||||
* @author Kristian
|
||||
@ -389,14 +391,14 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
protected volatile String mime;
|
||||
protected volatile byte[] data;
|
||||
protected volatile String encoded;
|
||||
|
||||
|
||||
/**
|
||||
* Represents a compressed image with no content.
|
||||
*/
|
||||
protected CompressedImage() {
|
||||
// Derived class should initialize some of the fields
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Construct a new compressed image.
|
||||
* @param mime - the mime type.
|
||||
@ -416,7 +418,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
public static CompressedImage fromPng(InputStream input) throws IOException {
|
||||
return new CompressedImage("image/png", ByteStreams.toByteArray(input));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve a compressed image from a byte array of a PNG file.
|
||||
* @param data - the file as a byte array.
|
||||
@ -425,7 +427,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
public static CompressedImage fromPng(byte[] data) {
|
||||
return new CompressedImage("image/png", data);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve a compressed image from a base-64 encoded PNG file.
|
||||
* @param base64 - the base 64-encoded PNG.
|
||||
@ -439,7 +441,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
throw new IllegalReferenceCountException("Must be a pure base64 encoded string. Cannot be an encoded text.", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve a compressed image from an image.
|
||||
* @param image - the image.
|
||||
@ -450,7 +452,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
ImageIO.write(image, "png", output);
|
||||
return new CompressedImage("image/png", output.toByteArray());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve a compressed image from an encoded text.
|
||||
* @param text - the encoded text.
|
||||
@ -459,17 +461,17 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
public static CompressedImage fromEncodedText(String text) {
|
||||
return new EncodedCompressedImage(text);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve the MIME type of the image.
|
||||
* <p>
|
||||
* <p>
|
||||
* This is image/png in vanilla Minecraft.
|
||||
* @return The MIME type.
|
||||
*/
|
||||
public String getMime() {
|
||||
return mime;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve a copy of the underlying data array.
|
||||
* @return The underlying compressed image.
|
||||
@ -477,7 +479,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
public byte[] getDataCopy() {
|
||||
return getData().clone();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve the underlying data, with no copying.
|
||||
* @return The underlying data.
|
||||
@ -485,7 +487,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
protected byte[] getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Uncompress and return the stored image.
|
||||
* @return The image.
|
||||
@ -494,7 +496,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
public BufferedImage getImage() throws IOException {
|
||||
return ImageIO.read(new ByteArrayInputStream(getData()));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Convert the compressed image to encoded text.
|
||||
* @return The encoded text.
|
||||
@ -502,15 +504,15 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
public String toEncodedText() {
|
||||
if (encoded == null) {
|
||||
final ByteBuf buffer = Unpooled.wrappedBuffer(getData());
|
||||
String computed = "data:" + mime + ";base64," +
|
||||
String computed = "data:" + mime + ";base64," +
|
||||
Base64.encode(buffer).toString(Charsets.UTF_8);
|
||||
|
||||
|
||||
encoded = computed;
|
||||
}
|
||||
return encoded;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Represents a compressed image that starts out as an encoded base 64 string.
|
||||
* @author Kristian
|
||||
@ -519,7 +521,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
public EncodedCompressedImage(String encoded) {
|
||||
this.encoded = Preconditions.checkNotNull(encoded, "encoded favicon cannot be NULL");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Ensure that we have decoded the content of the encoded text.
|
||||
*/
|
||||
@ -528,7 +530,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
decode();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Decode the encoded text.
|
||||
*/
|
||||
@ -539,7 +541,7 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
} else if (segment.startsWith("base64,")) {
|
||||
byte[] encoded = segment.substring(7).getBytes(Charsets.UTF_8);
|
||||
ByteBuf decoded = Base64.decode(Unpooled.wrappedBuffer(encoded));
|
||||
|
||||
|
||||
// Read into a byte array
|
||||
byte[] data = new byte[decoded.readableBytes()];
|
||||
decoded.readBytes(data);
|
||||
@ -549,19 +551,19 @@ public class WrappedServerPing extends AbstractWrapper {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected byte[] getData() {
|
||||
initialize();
|
||||
return super.getData();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getMime() {
|
||||
initialize();
|
||||
return super.getMime();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String toEncodedText() {
|
||||
return encoded;
|
||||
|
@ -3,6 +3,7 @@ package com.comphenix.protocol.wrappers;
|
||||
import java.security.PublicKey;
|
||||
|
||||
import net.minecraft.util.com.mojang.authlib.properties.Property;
|
||||
|
||||
import com.google.common.base.Objects;
|
||||
|
||||
/**
|
||||
|
@ -17,8 +17,6 @@
|
||||
|
||||
package com.comphenix.protocol.wrappers.nbt;
|
||||
|
||||
import com.comphenix.protocol.wrappers.nbt.NbtBase;
|
||||
import com.comphenix.protocol.wrappers.nbt.NbtType;
|
||||
|
||||
/**
|
||||
* Represents a generic container for an NBT element.
|
||||
|
@ -4,8 +4,6 @@ import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
||||
import net.minecraft.server.v1_7_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_7_R3.TileEntityChest;
|
||||
import net.sf.cglib.asm.ClassReader;
|
||||
import net.sf.cglib.asm.MethodVisitor;
|
||||
import net.sf.cglib.asm.Opcodes;
|
||||
@ -34,24 +32,24 @@ class TileEntityAccessor<T extends BlockState> {
|
||||
* Token indicating that the given block state doesn't contany any tile entities.
|
||||
*/
|
||||
private static final TileEntityAccessor<BlockState> EMPTY_ACCESSOR = new TileEntityAccessor<BlockState>();
|
||||
|
||||
|
||||
/**
|
||||
* Cached field accessors - {@link #EMPTY_ACCESSOR} represents no valid tile entity.
|
||||
*/
|
||||
private static final ConcurrentMap<Class<?>, TileEntityAccessor<?>> cachedAccessors = Maps.newConcurrentMap();
|
||||
|
||||
|
||||
private FieldAccessor tileEntityField;
|
||||
private MethodAccessor readCompound;
|
||||
private MethodAccessor writeCompound;
|
||||
|
||||
|
||||
// For CGLib detection
|
||||
private boolean writeDetected;
|
||||
private boolean readDetected;
|
||||
|
||||
|
||||
private TileEntityAccessor() {
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Construct a new tile entity accessor.
|
||||
* @param tileEntityField - the tile entity field.
|
||||
@ -63,7 +61,7 @@ class TileEntityAccessor<T extends BlockState> {
|
||||
if (tileEntityField != null) {
|
||||
this.tileEntityField = tileEntityField;
|
||||
Class<?> type = tileEntityField.getField().getType();
|
||||
|
||||
|
||||
// Possible read/write methods
|
||||
try {
|
||||
findMethodsUsingASM(type);
|
||||
@ -75,7 +73,7 @@ class TileEntityAccessor<T extends BlockState> {
|
||||
throw new RuntimeException("Cannot find read/write methods in " + type, ex2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Ensure we found them
|
||||
if (readCompound == null)
|
||||
throw new RuntimeException("Unable to find read method in " + type);
|
||||
@ -93,36 +91,37 @@ class TileEntityAccessor<T extends BlockState> {
|
||||
private void findMethodsUsingASM(final Class<?> tileEntityClass) throws IOException {
|
||||
final Class<?> nbtCompoundClass = MinecraftReflection.getNBTCompoundClass();
|
||||
final ClassReader reader = new ClassReader(tileEntityClass.getCanonicalName());
|
||||
|
||||
|
||||
final String tagCompoundName = getJarName(MinecraftReflection.getNBTCompoundClass());
|
||||
final String expectedDesc = "(L" + tagCompoundName + ";)V";
|
||||
|
||||
|
||||
reader.accept(new EmptyClassVisitor() {
|
||||
@Override
|
||||
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
|
||||
final String methodName = name;
|
||||
|
||||
|
||||
// Detect read/write calls to NBTTagCompound
|
||||
if (expectedDesc.equals(desc)) {
|
||||
return new EmptyMethodVisitor() {
|
||||
private int readMethods;
|
||||
private int writeMethods;
|
||||
|
||||
|
||||
@Override
|
||||
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
|
||||
// This must be a virtual call on NBTTagCompound that accepts a String
|
||||
if (opcode == Opcodes.INVOKEVIRTUAL &&
|
||||
tagCompoundName.equals(owner) &&
|
||||
if (opcode == Opcodes.INVOKEVIRTUAL &&
|
||||
tagCompoundName.equals(owner) &&
|
||||
desc.startsWith("(Ljava/lang/String")) {
|
||||
|
||||
|
||||
// Is this a write call?
|
||||
if (desc.endsWith(")V")) {
|
||||
writeMethods++;
|
||||
} else {
|
||||
readMethods++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void visitEnd() {
|
||||
if (readMethods > writeMethods) {
|
||||
@ -138,7 +137,7 @@ class TileEntityAccessor<T extends BlockState> {
|
||||
}
|
||||
}, 0);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Find the read/write methods in TileEntity.
|
||||
* @param blockState - the block state.
|
||||
@ -146,7 +145,7 @@ class TileEntityAccessor<T extends BlockState> {
|
||||
*/
|
||||
private void findMethodUsingCGLib(T blockState) throws IOException {
|
||||
final Class<?> nbtCompoundClass = MinecraftReflection.getNBTCompoundClass();
|
||||
|
||||
|
||||
// This is a much slower method, but it is necessary in MCPC
|
||||
Enhancer enhancer = EnhancerFactory.getInstance().createEnhancer();
|
||||
enhancer.setSuperclass(nbtCompoundClass);
|
||||
@ -165,11 +164,11 @@ class TileEntityAccessor<T extends BlockState> {
|
||||
});
|
||||
Object compound = enhancer.create();
|
||||
Object tileEntity = tileEntityField.get(blockState);
|
||||
|
||||
|
||||
// Look in every read/write like method
|
||||
for (Method method : FuzzyReflection.fromObject(tileEntity, true).
|
||||
getMethodListByParameters(Void.TYPE, new Class<?>[] { nbtCompoundClass })) {
|
||||
|
||||
|
||||
try {
|
||||
readDetected = false;
|
||||
writeDetected = false;
|
||||
@ -183,7 +182,7 @@ class TileEntityAccessor<T extends BlockState> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve the JAR name (slash instead of dots) of the given clas.
|
||||
* @param clazz - the class.
|
||||
@ -192,7 +191,7 @@ class TileEntityAccessor<T extends BlockState> {
|
||||
private static String getJarName(Class<?> clazz) {
|
||||
return clazz.getCanonicalName().replace('.', '/');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Read the NBT compound that represents a given tile entity.
|
||||
* @param state - tile entity represented by a block state.
|
||||
@ -201,12 +200,12 @@ class TileEntityAccessor<T extends BlockState> {
|
||||
public NbtCompound readBlockState(T state) {
|
||||
NbtCompound output = NbtFactory.ofCompound("");
|
||||
Object tileEntity = tileEntityField.get(state);
|
||||
|
||||
|
||||
// Write the block state to the output compound
|
||||
writeCompound.invoke(tileEntity, NbtFactory.fromBase(output).getHandle());
|
||||
return output;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Write the NBT compound as a tile entity.
|
||||
* @param state - target block state.
|
||||
@ -214,11 +213,11 @@ class TileEntityAccessor<T extends BlockState> {
|
||||
*/
|
||||
public void writeBlockState(T state, NbtCompound compound) {
|
||||
Object tileEntity = tileEntityField.get(state);
|
||||
|
||||
|
||||
// Ensure the block state is set to the compound
|
||||
readCompound.invoke(tileEntity, NbtFactory.fromBase(compound).getHandle());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve an accessor for the tile entity at a specific location.
|
||||
* @param state - the block state.
|
||||
@ -228,22 +227,22 @@ class TileEntityAccessor<T extends BlockState> {
|
||||
public static <T extends BlockState> TileEntityAccessor<T> getAccessor(T state) {
|
||||
Class<?> craftBlockState = state.getClass();
|
||||
TileEntityAccessor<?> accessor = cachedAccessors.get(craftBlockState);
|
||||
|
||||
|
||||
// Attempt to construct the accessor
|
||||
if (accessor == null ) {
|
||||
TileEntityAccessor<?> created = null;
|
||||
FieldAccessor field = null;
|
||||
|
||||
|
||||
try {
|
||||
field = Accessors.getFieldAccessor(craftBlockState, MinecraftReflection.getTileEntityClass(), true);
|
||||
} catch (Exception e) {
|
||||
created = EMPTY_ACCESSOR;
|
||||
}
|
||||
}
|
||||
if (field != null) {
|
||||
created = new TileEntityAccessor<T>(field, state);
|
||||
}
|
||||
accessor = cachedAccessors.putIfAbsent(craftBlockState, created);
|
||||
|
||||
|
||||
// We won the race
|
||||
if (accessor == null) {
|
||||
accessor = created;
|
||||
|
@ -8,6 +8,7 @@ import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
||||
|
@ -8,7 +8,6 @@ import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
|
@ -3,30 +3,29 @@ package com.comphenix.protocol;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import net.minecraft.server.v1_7_R3.Block;
|
||||
import net.minecraft.server.v1_7_R3.Item;
|
||||
import net.minecraft.server.v1_7_R3.StatisticList;
|
||||
|
||||
// Will have to be updated for every version though
|
||||
import org.bukkit.craftbukkit.v1_7_R3.inventory.CraftItemFactory;
|
||||
import net.minecraft.server.v1_7_R4.Block;
|
||||
import net.minecraft.server.v1_7_R4.Item;
|
||||
import net.minecraft.server.v1_7_R4.StatisticList;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftItemFactory;
|
||||
import org.bukkit.inventory.ItemFactory;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import com.comphenix.protocol.reflect.FieldUtils;
|
||||
import com.comphenix.protocol.utility.MinecraftReflection;
|
||||
// Will have to be updated for every version though
|
||||
|
||||
/**
|
||||
* Used to ensure that ProtocolLib and Bukkit is prepared to be tested.
|
||||
*
|
||||
*
|
||||
* @author Kristian
|
||||
*/
|
||||
public class BukkitInitialization {
|
||||
private static boolean initialized;
|
||||
|
||||
|
||||
/**
|
||||
* Initialize Bukkit and ProtocolLib such that we can perfrom unit testing.
|
||||
* @throws IllegalAccessException If we are unable to initialize Bukkit.
|
||||
@ -35,9 +34,9 @@ public class BukkitInitialization {
|
||||
if (!initialized) {
|
||||
// Denote that we're done
|
||||
initialized = true;
|
||||
|
||||
|
||||
initializePackage();
|
||||
|
||||
|
||||
try {
|
||||
Block.p();
|
||||
Item.l();
|
||||
@ -46,24 +45,24 @@ public class BukkitInitialization {
|
||||
// Swallow
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
// Mock the server object
|
||||
Server mockedServer = mock(Server.class);
|
||||
ItemFactory mockedFactory = mock(CraftItemFactory.class);
|
||||
ItemMeta mockedMeta = mock(ItemMeta.class);
|
||||
|
||||
|
||||
when(mockedServer.getItemFactory()).thenReturn(mockedFactory);
|
||||
when(mockedServer.isPrimaryThread()).thenReturn(true);
|
||||
when(mockedFactory.getItemMeta(any(Material.class))).thenReturn(mockedMeta);
|
||||
|
||||
|
||||
// Inject this fake server
|
||||
FieldUtils.writeStaticField(Bukkit.class, "server", mockedServer, true);
|
||||
|
||||
|
||||
// And the fake item factory
|
||||
FieldUtils.writeStaticField(CraftItemFactory.class, "instance", mockedFactory, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Ensure that package names are correctly set up.
|
||||
*/
|
||||
|
@ -17,7 +17,9 @@
|
||||
|
||||
package com.comphenix.protocol;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.comphenix.protocol;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
package com.comphenix.protocol.concurrency;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
@ -2,39 +2,43 @@
|
||||
* ProtocolLib - Bukkit server library that allows access to the Minecraft protocol.
|
||||
* Copyright (C) 2012 Kristian S. Stangeland
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
||||
* GNU General Public License as published by the Free Software Foundation; either version 2 of
|
||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
||||
* GNU General Public License as published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with this program;
|
||||
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
* You should have received a copy of the GNU General Public License along with this program;
|
||||
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
* 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.comphenix.protocol.events;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertArrayEquals;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import java.lang.reflect.Array;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import net.minecraft.server.v1_7_R3.AttributeModifier;
|
||||
import net.minecraft.server.v1_7_R3.AttributeSnapshot;
|
||||
import net.minecraft.server.v1_7_R3.PacketPlayOutUpdateAttributes;
|
||||
import net.minecraft.server.v1_7_R4.AttributeModifier;
|
||||
import net.minecraft.server.v1_7_R4.AttributeSnapshot;
|
||||
import net.minecraft.server.v1_7_R4.PacketPlayOutUpdateAttributes;
|
||||
|
||||
import org.apache.commons.lang.SerializationUtils;
|
||||
import org.apache.commons.lang.builder.ToStringBuilder;
|
||||
import org.apache.commons.lang.builder.ToStringStyle;
|
||||
// Will have to be updated for every version though
|
||||
import org.bukkit.craftbukkit.v1_7_R3.inventory.CraftItemFactory;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.WorldType;
|
||||
import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftItemFactory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
@ -59,8 +63,8 @@ import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
||||
import com.comphenix.protocol.wrappers.WrappedWatchableObject;
|
||||
import com.comphenix.protocol.wrappers.nbt.NbtCompound;
|
||||
import com.comphenix.protocol.wrappers.nbt.NbtFactory;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
// Will have to be updated for every version though
|
||||
|
||||
// Ensure that the CraftItemFactory is mockable
|
||||
@RunWith(org.powermock.modules.junit4.PowerMockRunner.class)
|
||||
@ -70,12 +74,12 @@ public class PacketContainerTest {
|
||||
// Helper converters
|
||||
private EquivalentConverter<WrappedDataWatcher> watchConvert = BukkitConverters.getDataWatcherConverter();
|
||||
private EquivalentConverter<ItemStack> itemConvert = BukkitConverters.getItemStackConverter();
|
||||
|
||||
|
||||
@BeforeClass
|
||||
public static void initializeBukkit() throws IllegalAccessException {
|
||||
BukkitInitialization.initializeItemMeta();
|
||||
}
|
||||
|
||||
|
||||
private <T> void testPrimitive(StructureModifier<T> modifier, int index, T initialValue, T testValue) {
|
||||
// Check initial value
|
||||
assertEquals(initialValue, modifier.read(index));
|
||||
@ -84,7 +88,7 @@ public class PacketContainerTest {
|
||||
modifier.write(index, testValue);
|
||||
assertEquals(testValue, modifier.read(0));
|
||||
}
|
||||
|
||||
|
||||
private <T> void testObjectArray(StructureModifier<T[]> modifier, int index, T[] initialValue, T[] testValue) {
|
||||
// Check initial value
|
||||
assertNull(modifier.read(index));
|
||||
@ -92,7 +96,7 @@ public class PacketContainerTest {
|
||||
|
||||
// Test initial
|
||||
assertArrayEquals(initialValue, modifier.read(index));
|
||||
|
||||
|
||||
// Test assignment
|
||||
modifier.write(index, testValue);
|
||||
assertArrayEquals(testValue, modifier.read(0));
|
||||
@ -104,25 +108,25 @@ public class PacketContainerTest {
|
||||
PacketContainer customPayload = new PacketContainer(PacketType.Play.Server.CUSTOM_PAYLOAD);
|
||||
StructureModifier<byte[]> bytes = customPayload.getByteArrays();
|
||||
byte[] testArray = new byte[] { 1, 2, 3 };
|
||||
|
||||
|
||||
// It's NULL at first
|
||||
assertArrayEquals(null, (byte[]) bytes.read(0));
|
||||
assertArrayEquals(null, bytes.read(0));
|
||||
customPayload.getModifier().writeDefaults();
|
||||
|
||||
|
||||
// Then it should create an empty array
|
||||
assertArrayEquals(new byte[0], (byte[]) bytes.read(0));
|
||||
|
||||
assertArrayEquals(new byte[0], bytes.read(0));
|
||||
|
||||
// Check and see if we can write to it
|
||||
bytes.write(0, testArray);
|
||||
assertArrayEquals(testArray, (byte[]) bytes.read(0));
|
||||
assertArrayEquals(testArray, bytes.read(0));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testGetBytes() {
|
||||
PacketContainer spawnMob = new PacketContainer(PacketType.Play.Server.SPAWN_ENTITY_LIVING);
|
||||
testPrimitive(spawnMob.getBytes(), 0, (byte)0, (byte)1);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testGetShorts() {
|
||||
PacketContainer itemData = new PacketContainer(PacketType.Play.Server.TRANSACTION);
|
||||
@ -132,7 +136,7 @@ public class PacketContainerTest {
|
||||
@Test
|
||||
public void testGetIntegers() {
|
||||
PacketContainer updateSign = new PacketContainer(PacketType.Play.Server.UPDATE_SIGN);
|
||||
testPrimitive(updateSign.getIntegers(), 0, (int)0, (int)1);
|
||||
testPrimitive(updateSign.getIntegers(), 0, 0, 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -150,7 +154,7 @@ public class PacketContainerTest {
|
||||
@Test
|
||||
public void testGetDoubles() {
|
||||
PacketContainer explosion = new PacketContainer(PacketType.Play.Server.EXPLOSION);
|
||||
testPrimitive(explosion.getDoubles(), 0, (double)0, (double)0.8);
|
||||
testPrimitive(explosion.getDoubles(), 0, (double)0, 0.8);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -171,57 +175,57 @@ public class PacketContainerTest {
|
||||
PacketContainer mapChunkBulk = new PacketContainer(PacketType.Play.Server.MAP_CHUNK_BULK);
|
||||
StructureModifier<int[]> integers = mapChunkBulk.getIntegerArrays();
|
||||
int[] testArray = new int[] { 1, 2, 3 };
|
||||
|
||||
|
||||
// Pre and post conditions
|
||||
assertArrayEquals(null, (int[]) integers.read(0));
|
||||
assertArrayEquals(null, integers.read(0));
|
||||
mapChunkBulk.getModifier().writeDefaults();
|
||||
assertArrayEquals(new int[0], (int[]) integers.read(0));
|
||||
|
||||
assertArrayEquals(new int[0], integers.read(0));
|
||||
|
||||
integers.write(0, testArray);
|
||||
assertArrayEquals(testArray, (int[]) integers.read(0));
|
||||
assertArrayEquals(testArray, integers.read(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetItemModifier() {
|
||||
PacketContainer windowClick = new PacketContainer(PacketType.Play.Client.WINDOW_CLICK);
|
||||
|
||||
|
||||
StructureModifier<ItemStack> items = windowClick.getItemModifier();
|
||||
ItemStack goldAxe = new ItemStack(Material.GOLD_AXE);
|
||||
|
||||
|
||||
assertNotNull(goldAxe.getType());
|
||||
assertNull(items.read(0));
|
||||
|
||||
|
||||
// Insert the goldaxe and check if it's there
|
||||
items.write(0, goldAxe);
|
||||
assertTrue("Item " + goldAxe + " != " + items.read(0), equivalentItem(goldAxe, items.read(0)));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testGetItemArrayModifier() {
|
||||
PacketContainer windowItems = new PacketContainer(PacketType.Play.Server.WINDOW_ITEMS);
|
||||
StructureModifier<ItemStack[]> itemAccess = windowItems.getItemArrayModifier();
|
||||
|
||||
ItemStack[] itemArray = new ItemStack[] {
|
||||
|
||||
ItemStack[] itemArray = new ItemStack[] {
|
||||
new ItemStack(Material.GOLD_AXE),
|
||||
new ItemStack(Material.DIAMOND_AXE)
|
||||
};
|
||||
|
||||
|
||||
assertNull(itemAccess.read(0));
|
||||
|
||||
|
||||
// Insert and check that it was succesful
|
||||
itemAccess.write(0, itemArray);
|
||||
|
||||
|
||||
// Read back array
|
||||
ItemStack[] comparision = itemAccess.read(0);
|
||||
assertEquals(itemArray.length, comparision.length);
|
||||
|
||||
|
||||
// Check that it is equivalent
|
||||
for (int i = 0; i < itemArray.length; i++) {
|
||||
assertTrue(String.format("Array element %s is not the same: %s != %s",
|
||||
i, itemArray[i], comparision[i]), equivalentItem(itemArray[i], comparision[i]));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private boolean equivalentItem(ItemStack first, ItemStack second) {
|
||||
if (first == null) {
|
||||
return second == null;
|
||||
@ -231,20 +235,20 @@ public class PacketContainerTest {
|
||||
return first.getType().equals(second.getType());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testGetWorldTypeModifier() {
|
||||
// Not used in Netty
|
||||
if (MinecraftReflection.isUsingNetty())
|
||||
return;
|
||||
|
||||
|
||||
PacketContainer loginPacket = new PacketContainer(PacketType.Play.Server.LOGIN);
|
||||
StructureModifier<WorldType> worldAccess = loginPacket.getWorldTypeModifier();
|
||||
|
||||
|
||||
WorldType testValue = WorldType.LARGE_BIOMES;
|
||||
|
||||
|
||||
assertNull(worldAccess.read(0));
|
||||
|
||||
|
||||
// Insert and read back
|
||||
worldAccess.write(0, testValue);
|
||||
assertEquals(testValue, worldAccess.read(0));
|
||||
@ -253,30 +257,30 @@ public class PacketContainerTest {
|
||||
@Test
|
||||
public void testGetNbtModifier() {
|
||||
PacketContainer updateTileEntity = new PacketContainer(PacketType.Play.Server.TILE_ENTITY_DATA);
|
||||
|
||||
|
||||
NbtCompound compound = NbtFactory.ofCompound("test");
|
||||
compound.put("test", "name");
|
||||
compound.put(NbtFactory.ofList("ages", 1, 2, 3));
|
||||
|
||||
|
||||
updateTileEntity.getNbtModifier().write(0, compound);
|
||||
|
||||
|
||||
NbtCompound result = (NbtCompound) updateTileEntity.getNbtModifier().read(0);
|
||||
|
||||
|
||||
assertEquals(compound.getString("test"), result.getString("test"));
|
||||
assertEquals(compound.getList("ages"), result.getList("ages"));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testGetDataWatcherModifier() {
|
||||
PacketContainer mobSpawnPacket = new PacketContainer(PacketType.Play.Server.SPAWN_ENTITY_LIVING);
|
||||
StructureModifier<WrappedDataWatcher> watcherAccessor = mobSpawnPacket.getDataWatcherModifier();
|
||||
|
||||
|
||||
WrappedDataWatcher dataWatcher = new WrappedDataWatcher();
|
||||
dataWatcher.setObject(1, 100);
|
||||
dataWatcher.setObject(2, 125);
|
||||
|
||||
|
||||
assertNull(watcherAccessor.read(0));
|
||||
|
||||
|
||||
// Insert and read back
|
||||
watcherAccessor.write(0, dataWatcher);
|
||||
assertEquals(dataWatcher, watcherAccessor.read(0));
|
||||
@ -285,7 +289,7 @@ public class PacketContainerTest {
|
||||
// Unfortunately, it might be too difficult to mock this one
|
||||
//
|
||||
// @Test
|
||||
// public void testGetEntityModifier() { }
|
||||
// public void testGetEntityModifier() { }
|
||||
|
||||
// No packet expose this type directly.
|
||||
//
|
||||
@ -296,94 +300,94 @@ public class PacketContainerTest {
|
||||
public void testGetPositionCollectionModifier() {
|
||||
PacketContainer explosionPacket = new PacketContainer(PacketType.Play.Server.EXPLOSION);
|
||||
StructureModifier<List<ChunkPosition>> positionAccessor = explosionPacket.getPositionCollectionModifier();
|
||||
|
||||
|
||||
assertNull(positionAccessor.read(0));
|
||||
|
||||
|
||||
List<ChunkPosition> positions = Lists.newArrayList();
|
||||
positions.add(new ChunkPosition(1, 2, 3));
|
||||
positions.add(new ChunkPosition(3, 4, 5));
|
||||
|
||||
|
||||
// Insert and read back
|
||||
positionAccessor.write(0, positions);
|
||||
List<ChunkPosition> cloned = positionAccessor.read(0);
|
||||
|
||||
|
||||
assertEquals(positions, cloned);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetWatchableCollectionModifier() {
|
||||
PacketContainer entityMetadata = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA);
|
||||
StructureModifier<List<WrappedWatchableObject>> watchableAccessor =
|
||||
StructureModifier<List<WrappedWatchableObject>> watchableAccessor =
|
||||
entityMetadata.getWatchableCollectionModifier();
|
||||
|
||||
|
||||
assertNull(watchableAccessor.read(0));
|
||||
|
||||
|
||||
WrappedDataWatcher watcher = new WrappedDataWatcher();
|
||||
watcher.setObject(1, 10);
|
||||
watcher.setObject(8, 10);
|
||||
|
||||
|
||||
List<WrappedWatchableObject> list = watcher.getWatchableObjects();
|
||||
|
||||
|
||||
// Insert and read back
|
||||
watchableAccessor.write(0, list);
|
||||
assertEquals(list, watchableAccessor.read(0));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testGameProfiles() {
|
||||
PacketContainer spawnEntity = new PacketContainer(PacketType.Play.Server.NAMED_ENTITY_SPAWN);
|
||||
WrappedGameProfile profile = new WrappedGameProfile("d7047a08-3150-4aa8-a2f2-7c1e2b17e298", "name");
|
||||
spawnEntity.getGameProfiles().write(0, profile);
|
||||
|
||||
|
||||
assertEquals(profile, spawnEntity.getGameProfiles().read(0));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testChatComponents() {
|
||||
PacketContainer chatPacket = new PacketContainer(PacketType.Play.Server.CHAT);
|
||||
chatPacket.getChatComponents().write(0,
|
||||
chatPacket.getChatComponents().write(0,
|
||||
WrappedChatComponent.fromChatMessage("You shall not " + ChatColor.ITALIC + "pass!")[0]);
|
||||
|
||||
assertEquals("{\"extra\":[\"You shall not \",{\"italic\":true,\"text\":\"pass!\"}],\"text\":\"\"}",
|
||||
|
||||
assertEquals("{\"extra\":[\"You shall not \",{\"italic\":true,\"text\":\"pass!\"}],\"text\":\"\"}",
|
||||
chatPacket.getChatComponents().read(0).getJson());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testSerialization() {
|
||||
PacketContainer chat = new PacketContainer(PacketType.Play.Client.CHAT);
|
||||
chat.getStrings().write(0, "Test");
|
||||
|
||||
|
||||
PacketContainer copy = (PacketContainer) SerializationUtils.clone(chat);
|
||||
|
||||
|
||||
assertEquals(PacketType.Play.Client.CHAT, copy.getType());
|
||||
assertEquals("Test", copy.getStrings().read(0));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testAttributeList() {
|
||||
PacketContainer attribute = new PacketContainer(PacketType.Play.Server.UPDATE_ATTRIBUTES);
|
||||
attribute.getIntegers().write(0, 123); // Entity ID
|
||||
|
||||
|
||||
// Initialize some test data
|
||||
List<AttributeModifier> modifiers = Lists.newArrayList(
|
||||
new AttributeModifier(UUID.randomUUID(), "Unknown synced attribute modifier", 10, 0));
|
||||
AttributeSnapshot snapshot = new AttributeSnapshot(
|
||||
(PacketPlayOutUpdateAttributes) attribute.getHandle(), "generic.Maxhealth", 20.0, modifiers);
|
||||
|
||||
|
||||
attribute.getSpecificModifier(List.class).write(0, Lists.newArrayList(snapshot));
|
||||
PacketContainer cloned = attribute.deepClone();
|
||||
AttributeSnapshot clonedSnapshot = (AttributeSnapshot) cloned.getSpecificModifier(List.class).read(0).get(0);
|
||||
|
||||
|
||||
assertEquals(
|
||||
ToStringBuilder.reflectionToString(snapshot, ToStringStyle.SHORT_PREFIX_STYLE),
|
||||
ToStringBuilder.reflectionToString(clonedSnapshot, ToStringStyle.SHORT_PREFIX_STYLE));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testBlocks() {
|
||||
PacketContainer blockAction = new PacketContainer(PacketType.Play.Server.BLOCK_ACTION);
|
||||
blockAction.getBlocks().write(0, Material.STONE);
|
||||
|
||||
|
||||
assertEquals(Material.STONE, blockAction.getBlocks().read(0));
|
||||
}
|
||||
|
||||
@ -391,38 +395,38 @@ public class PacketContainerTest {
|
||||
@Test
|
||||
public void testPotionEffect() {
|
||||
PotionEffect effect = new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 20 * 60, 1);
|
||||
|
||||
|
||||
// The constructor we want to call
|
||||
PacketConstructor creator = PacketConstructor.DEFAULT.withPacket(
|
||||
PacketType.Play.Server.ENTITY_EFFECT, new Class<?>[] { int.class, PotionEffect.class });
|
||||
PacketType.Play.Server.ENTITY_EFFECT, new Class<?>[] { int.class, PotionEffect.class });
|
||||
PacketContainer packet = creator.createPacket(1, effect);
|
||||
|
||||
|
||||
assertEquals(1, (int) packet.getIntegers().read(0));
|
||||
assertEquals(effect.getType().getId(), (byte) packet.getBytes().read(0));
|
||||
assertEquals(effect.getAmplifier(), (byte) packet.getBytes().read(1));
|
||||
assertEquals(effect.getDuration(), (short) packet.getShorts().read(0));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testDeepClone() {
|
||||
// Try constructing all the packets
|
||||
for (PacketType type : PacketType.values()) {
|
||||
// Whether or not this packet has been registered
|
||||
boolean registered = type.isSupported();
|
||||
|
||||
|
||||
try {
|
||||
PacketContainer constructed = new PacketContainer(type);
|
||||
|
||||
|
||||
if (!registered) {
|
||||
fail("Expected IllegalArgumentException(Packet " + type + " not registered");
|
||||
}
|
||||
|
||||
|
||||
// Initialize default values
|
||||
constructed.getModifier().writeDefaults();
|
||||
|
||||
|
||||
// Clone the packet
|
||||
PacketContainer cloned = constructed.deepClone();
|
||||
|
||||
|
||||
// Make sure they're equivalent
|
||||
StructureModifier<Object> firstMod = constructed.getModifier(), secondMod = cloned.getModifier();
|
||||
assertEquals(firstMod.size(), secondMod.size());
|
||||
@ -439,7 +443,7 @@ public class PacketContainerTest {
|
||||
testEquality(firstMod.read(i), secondMod.read(i));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} catch (IllegalArgumentException e) {
|
||||
if (!registered) {
|
||||
// Check the same
|
||||
@ -451,12 +455,12 @@ public class PacketContainerTest {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testPacketType() {
|
||||
assertEquals(PacketType.Legacy.Server.SET_CREATIVE_SLOT, PacketType.findLegacy(107, Sender.SERVER));
|
||||
}
|
||||
|
||||
|
||||
// Convert to objects that support equals()
|
||||
private void testEquality(Object a, Object b) {
|
||||
if (a != null && b != null) {
|
||||
@ -468,10 +472,10 @@ public class PacketContainerTest {
|
||||
b = itemConvert.getSpecific(b);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
assertEquals(a, b);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the underlying array as an object array.
|
||||
* @param val - array wrapped as an Object.
|
||||
@ -485,7 +489,7 @@ public class PacketContainerTest {
|
||||
|
||||
int arrlength = Array.getLength(val);
|
||||
Object[] outputArray = new Object[arrlength];
|
||||
|
||||
|
||||
for (int i = 0; i < arrlength; ++i)
|
||||
outputArray[i] = Array.get(val, i);
|
||||
return outputArray;
|
||||
|
@ -1,25 +1,25 @@
|
||||
package com.comphenix.protocol.injector;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.mockito.Matchers.anyString;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.PluginDescriptionFile;
|
||||
import org.bukkit.plugin.PluginLoadOrder;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
import org.mockito.stubbing.Answer;
|
||||
import org.powermock.core.classloader.annotations.PowerMockIgnore;
|
||||
import org.powermock.core.classloader.annotations.PrepareForTest;
|
||||
|
||||
import com.comphenix.protocol.injector.PluginVerifier.VerificationResult;
|
||||
import com.google.common.base.Objects;
|
||||
import com.google.common.collect.Lists;
|
||||
|
@ -17,7 +17,8 @@
|
||||
|
||||
package com.comphenix.protocol.injector;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.comphenix.protocol.reflect.accessors;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.comphenix.protocol.reflect.cloning;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
@ -1,17 +1,18 @@
|
||||
package com.comphenix.protocol.utility;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
import net.minecraft.server.v1_7_R3.ChatComponentText;
|
||||
import net.minecraft.server.v1_7_R3.ChatSerializer;
|
||||
import net.minecraft.server.v1_7_R3.ChunkCoordIntPair;
|
||||
import net.minecraft.server.v1_7_R3.IChatBaseComponent;
|
||||
import net.minecraft.server.v1_7_R3.NBTCompressedStreamTools;
|
||||
import net.minecraft.server.v1_7_R3.ServerPing;
|
||||
import net.minecraft.server.v1_7_R3.ServerPingPlayerSample;
|
||||
import net.minecraft.server.v1_7_R3.ServerPingServerData;
|
||||
import net.minecraft.server.v1_7_R3.WatchableObject;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import net.minecraft.server.v1_7_R4.ChatComponentText;
|
||||
import net.minecraft.server.v1_7_R4.ChatSerializer;
|
||||
import net.minecraft.server.v1_7_R4.ChunkCoordIntPair;
|
||||
import net.minecraft.server.v1_7_R4.IChatBaseComponent;
|
||||
import net.minecraft.server.v1_7_R4.NBTCompressedStreamTools;
|
||||
import net.minecraft.server.v1_7_R4.ServerPing;
|
||||
import net.minecraft.server.v1_7_R4.ServerPingPlayerSample;
|
||||
import net.minecraft.server.v1_7_R4.ServerPingServerData;
|
||||
import net.minecraft.server.v1_7_R4.WatchableObject;
|
||||
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Entity;
|
||||
@ -27,40 +28,40 @@ public class MinecraftReflectionTest {
|
||||
private interface FakeEntity {
|
||||
public Entity getBukkitEntity();
|
||||
}
|
||||
|
||||
|
||||
private interface FakeBlock {
|
||||
public Block getBukkitEntity();
|
||||
}
|
||||
|
||||
|
||||
@BeforeClass
|
||||
public static void initializeReflection() throws IllegalAccessException {
|
||||
BukkitInitialization.initializePackage();
|
||||
|
||||
|
||||
// Set up a package with no class loader knowledge
|
||||
MinecraftReflection.minecraftPackage = new CachedPackage(
|
||||
MinecraftReflection.getMinecraftPackage(),
|
||||
MinecraftReflection.getMinecraftPackage(),
|
||||
ClassSource.fromMap(Maps.<String, Class<?>>newHashMap())
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@AfterClass
|
||||
public static void undoMocking() {
|
||||
// NOP
|
||||
MinecraftReflection.minecraftPackage = null;
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testBukkitMethod() {
|
||||
FakeEntity entity = mock(FakeEntity.class);
|
||||
FakeBlock block = mock(FakeBlock.class);
|
||||
|
||||
|
||||
MinecraftReflection.getBukkitEntity(entity);
|
||||
MinecraftReflection.getBukkitEntity(block);
|
||||
|
||||
|
||||
verify(entity, times(1)).getBukkitEntity();
|
||||
verify(block, times(1)).getBukkitEntity();
|
||||
}
|
||||
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void testIllegalClass() {
|
||||
MinecraftReflection.getBukkitEntity("Hello");
|
||||
@ -70,42 +71,42 @@ public class MinecraftReflectionTest {
|
||||
public void testNbtStreamTools() {
|
||||
assertEquals(NBTCompressedStreamTools.class, MinecraftReflection.getNbtCompressedStreamToolsClass());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testChatComponent() {
|
||||
assertEquals(IChatBaseComponent.class, MinecraftReflection.getIChatBaseComponentClass());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testChatComponentText() {
|
||||
assertEquals(ChatComponentText.class, MinecraftReflection.getChatComponentTextClass());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testChatSerializer() {
|
||||
assertEquals(ChatSerializer.class, MinecraftReflection.getChatSerializerClass());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testServerPing() {
|
||||
assertEquals(ServerPing.class, MinecraftReflection.getServerPingClass());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testServerPingPlayerSample() {
|
||||
assertEquals(ServerPingPlayerSample.class, MinecraftReflection.getServerPingPlayerSampleClass());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testServerPingServerData() {
|
||||
assertEquals(ServerPingServerData.class, MinecraftReflection.getServerPingServerDataClass());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testChunkCoordIntPair() {
|
||||
assertEquals(ChunkCoordIntPair.class, MinecraftReflection.getChunkCoordIntPair());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testWatchableObject() {
|
||||
assertEquals(WatchableObject.class, MinecraftReflection.getWatchableObjectClass());
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.comphenix.protocol.utility;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.comphenix.protocol.utility;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
@ -8,10 +8,10 @@ import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import net.minecraft.server.v1_7_R3.IntHashMap;
|
||||
import net.minecraft.server.v1_7_R4.IntHashMap;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.craftbukkit.v1_7_R3.inventory.CraftItemFactory;
|
||||
import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftItemFactory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.comphenix.protocol.wrappers;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
@ -15,16 +15,16 @@ public class ChunkCoordIntPairTest {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
net.minecraft.server.v1_7_R3.ChunkCoordIntPair pair = new net.minecraft.server.v1_7_R3.ChunkCoordIntPair(1, 2);
|
||||
net.minecraft.server.v1_7_R4.ChunkCoordIntPair pair = new net.minecraft.server.v1_7_R4.ChunkCoordIntPair(1, 2);
|
||||
ChunkCoordIntPair specific = ChunkCoordIntPair.getConverter().getSpecific(pair);
|
||||
|
||||
|
||||
assertEquals(1, specific.getChunkX());
|
||||
assertEquals(2, specific.getChunkZ());
|
||||
|
||||
net.minecraft.server.v1_7_R3.ChunkCoordIntPair roundtrip =
|
||||
(net.minecraft.server.v1_7_R3.ChunkCoordIntPair) ChunkCoordIntPair.getConverter().
|
||||
getGeneric(net.minecraft.server.v1_7_R3.ChunkCoordIntPair.class, specific);
|
||||
|
||||
|
||||
net.minecraft.server.v1_7_R4.ChunkCoordIntPair roundtrip =
|
||||
(net.minecraft.server.v1_7_R4.ChunkCoordIntPair) ChunkCoordIntPair.getConverter().
|
||||
getGeneric(net.minecraft.server.v1_7_R4.ChunkCoordIntPair.class, specific);
|
||||
|
||||
assertEquals(1, roundtrip.x);
|
||||
assertEquals(2, roundtrip.z);
|
||||
}
|
||||
|
@ -1,10 +1,10 @@
|
||||
package com.comphenix.protocol.wrappers;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import com.comphenix.protocol.BukkitInitialization;
|
||||
import com.comphenix.protocol.reflect.cloning.AggregateCloner;
|
||||
|
||||
|
@ -1,13 +1,12 @@
|
||||
package com.comphenix.protocol.wrappers;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import net.minecraft.server.v1_7_R3.EnumChatVisibility;
|
||||
import net.minecraft.server.v1_7_R3.EnumClientCommand;
|
||||
import net.minecraft.server.v1_7_R3.EnumDifficulty;
|
||||
import net.minecraft.server.v1_7_R3.EnumEntityUseAction;
|
||||
import net.minecraft.server.v1_7_R3.EnumGamemode;
|
||||
import net.minecraft.server.v1_7_R3.EnumProtocol;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import net.minecraft.server.v1_7_R4.EnumChatVisibility;
|
||||
import net.minecraft.server.v1_7_R4.EnumClientCommand;
|
||||
import net.minecraft.server.v1_7_R4.EnumDifficulty;
|
||||
import net.minecraft.server.v1_7_R4.EnumEntityUseAction;
|
||||
import net.minecraft.server.v1_7_R4.EnumGamemode;
|
||||
import net.minecraft.server.v1_7_R4.EnumProtocol;
|
||||
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
@ -1,12 +1,14 @@
|
||||
package com.comphenix.protocol.wrappers;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotSame;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.server.v1_7_R3.AttributeModifier;
|
||||
import net.minecraft.server.v1_7_R3.AttributeSnapshot;
|
||||
import net.minecraft.server.v1_7_R3.PacketPlayOutUpdateAttributes;
|
||||
import net.minecraft.server.v1_7_R4.AttributeModifier;
|
||||
import net.minecraft.server.v1_7_R4.AttributeSnapshot;
|
||||
import net.minecraft.server.v1_7_R4.PacketPlayOutUpdateAttributes;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.BeforeClass;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.comphenix.protocol.wrappers;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.comphenix.protocol.wrappers;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.comphenix.protocol.wrappers;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.comphenix.protocol.wrappers;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNull;
|
||||
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.comphenix.protocol.wrappers;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertArrayEquals;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
package com.comphenix.protocol.wrappers;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.craftbukkit.v1_7_R3.inventory.CraftItemFactory;
|
||||
import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftItemFactory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
@ -17,10 +17,11 @@
|
||||
|
||||
package com.comphenix.protocol.wrappers.nbt;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.comphenix.protocol.BukkitInitialization;
|
||||
|
||||
public class NbtCompoundTest {
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
package com.comphenix.protocol.wrappers.nbt;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
@ -27,7 +27,7 @@ import java.io.DataOutput;
|
||||
import java.io.DataOutputStream;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.craftbukkit.v1_7_R3.inventory.CraftItemFactory;
|
||||
import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftItemFactory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.comphenix.protocol.wrappers.nbt.io;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.junit.BeforeClass;
|
||||
|
@ -11,6 +11,8 @@ Critically, different plugins that use this approach may _hook_ into the same cl
|
||||
with unpredictable outcomes. More than often this causes plugins to crash, but it may also
|
||||
lead to more subtle bugs.
|
||||
|
||||
Currently maintained by dmulloy2 on behalf of [SpigotMC](http://www.spigotmc.org/)
|
||||
|
||||
|
||||
### Resources
|
||||
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren