Compare commits

...
3 Commits
11 changed files with 1056 additions and 300 deletions

No files matched your search

+4 -4
View File
@@ -21,7 +21,7 @@ allprojects {
}
dependencies {
implementation 'com.github.purplexdev:packetevents:1.0.6'
implementation 'com.github.purplexdev:packetevents:1.0.8'
}
```
@@ -40,7 +40,7 @@ dependencies {
<dependency>
<groupId>com.github.purplexdev</groupId>
<artifactId>packetevents</artifactId>
<version>1.0.6</version>
<version>1.0.8</version>
</dependency>
</dependencies>
```
@@ -50,14 +50,14 @@ dependencies {
```
resolvers += "jitpack" at "https://jitpack.io"
libraryDependencies += "com.github.purplexdev" % "packetevents" % "1.0.6"
libraryDependencies += "com.github.purplexdev" % "packetevents" % "1.0.8"
```
# leiningen
```
:repositories [["jitpack" "https://jitpack.io"]]
:dependencies [[com.github.purplexdev/packetevents "1.0.6"]]
:dependencies [[com.github.purplexdev/packetevents "1.0.8"]]
```
+134 -32
View File
@@ -4,13 +4,11 @@
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>me.retrooper</groupId>
<groupId>me.purplex</groupId>
<artifactId>packetevents</artifactId>
<version>1.0.6</version>
<version>1.0.9</version>
<packaging>jar</packaging>
<name>PacketEvents</name>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -19,6 +17,14 @@
<build>
<defaultGoal>clean package</defaultGoal>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
@@ -28,22 +34,6 @@
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
@@ -55,28 +45,140 @@
<repositories>
<repository>
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/groups/public/</url>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
<repository>
<id>libraries-mojang</id>
<url>https://libraries.minecraft.net/</url>
<id>funkemunky-releases</id>
<url>https://nexus.funkemunky.cc/content/repositories/releases/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.mojang</groupId>
<artifactId>authlib</artifactId>
<version>1.5.21</version>
<scope>compile</scope>
<groupId>org.github.spigot</groupId>
<artifactId>1.14.1</artifactId>
<version>1.14.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.42.Final</version>
<scope>compile</scope>
<groupId>org.github.spigot</groupId>
<artifactId>1.15.1</artifactId>
<version>1.15.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.14.3</artifactId>
<version>1.14.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.14.2</artifactId>
<version>1.14.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.15</artifactId>
<version>1.15</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.15.2</artifactId>
<version>1.15.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.13.2</artifactId>
<version>1.13.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.7.10</artifactId>
<version>1.7.10</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.8</artifactId>
<version>1.8</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.8.3</artifactId>
<version>1.8.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.8.8</artifactId>
<version>1.8.8</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.9</artifactId>
<version>1.9</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.9.4</artifactId>
<version>1.9.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.10.2</artifactId>
<version>1.10.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.11.1</artifactId>
<version>1.11.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.11.2</artifactId>
<version>1.11.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.12.1</artifactId>
<version>1.12.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.12.2</artifactId>
<version>1.12.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.13</artifactId>
<version>1.13</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.14</artifactId>
<version>1.14</version>
<scope>provided</scope>
</dependency>
<!--Bukkit-->
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId>
@@ -3,6 +3,7 @@ package me.purplex.packetevents;
import com.comphenix.tinyprotocol.Reflection.*;
import com.comphenix.tinyprotocol.Reflection;
import io.netty.channel.Channel;
import me.purplex.packetevents.enums.ServerVersion;
import me.purplex.packetevents.events.manager.PacketManager;
import me.purplex.packetevents.packets.Packet;
import org.bukkit.entity.Player;
@@ -10,6 +11,10 @@ import org.bukkit.entity.Player;
public class PacketEvents {
private static PacketManager packetManager;
public static ServerVersion getServerVersion() {
return ServerVersion.getVersion();
}
public static PacketManager getPacketManager() {
if (packetManager == null) {
@@ -1,5 +1,5 @@
package me.purplex.packetevents.enums;
public enum EntityUseAction {
INTERACT, INTERACT_AT, ATTACK, INVALID, WRONG_PACKET;
INTERACT, INTERACT_AT, ATTACK, INVALID;
}
@@ -17,5 +17,5 @@ public enum PlayerAction {
OPEN_INVENTORY,
START_FALL_FLYING, WRONG_PACKET;
START_FALL_FLYING;
}
@@ -0,0 +1,24 @@
package me.purplex.packetevents.enums;
import org.apache.commons.lang.ArrayUtils;
import org.bukkit.Bukkit;
public enum ServerVersion
{
v_1_8, v_1_8_3, v_1_8_8, v_1_9, v_1_9_4, v_1_10_2, v_1_11_1, v_1_11_2, v_1_12_1, v_1_12_2, v_1_13, v_1_13_2, v_1_14, v_1_14_1, v_1_15_1,
ERROR;
public static ServerVersion getVersion() {
ServerVersion[] vals = values();
ArrayUtils.reverse(vals);
for(ServerVersion val : vals) {
String valName = val.name().substring(2).replace("_", ".");
if(Bukkit.getVersion().contains(valName)) {
return val;
}
}
return ERROR;
}
}
@@ -6,7 +6,6 @@ import me.purplex.packetevents.events.handler.PacketHandler;
import me.purplex.packetevents.events.listener.PacketListener;
import me.purplex.packetevents.events.packetevent.PacketReceiveEvent;
import me.purplex.packetevents.events.packetevent.PacketSendEvent;
import java.lang.reflect.Method;
public class PacketManager implements PacketEventManager {
@@ -1,27 +1,21 @@
package me.purplex.packetevents.events.packetevent;
import com.comphenix.tinyprotocol.Reflection;
import com.comphenix.tinyprotocol.Reflection.*;
import me.purplex.packetevents.enums.EntityUseAction;
import me.purplex.packetevents.enums.PlayerAction;
import me.purplex.packetevents.enums.PlayerDigType;
import me.purplex.packetevents.enums.ServerVersion;
import me.purplex.packetevents.events.PacketEvent;
import me.purplex.packetevents.packets.Packet;
import org.apache.commons.lang3.reflect.FieldUtils;
import org.bukkit.Bukkit;
import org.bukkit.World;
import me.purplex.packetevents.exceptions.VersionNotFoundException;
import org.bukkit.entity.*;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
public class PacketReceiveEvent extends PacketEvent {
private Player player;
private String name;
private Object packet;
private long timestamp;
private final Player player;
private final String name;
private final Object packet;
private final long timestamp;
private boolean cancelled;
private final ServerVersion version = ServerVersion.getVersion();
public PacketReceiveEvent(Player player, String packetName, Object packet) {
this.player = player;
@@ -34,6 +28,7 @@ public class PacketReceiveEvent extends PacketEvent {
/**
* Get the player sending the packet
*
* @return
*/
public Player getPlayer() {
@@ -41,7 +36,8 @@ public class PacketReceiveEvent extends PacketEvent {
}
/**
* Get the packet object's class name, aka. Packet Name
* Get the packet's name (NMS packet class simple name)
*
* @return
*/
public String getPacketName() {
@@ -49,7 +45,8 @@ public class PacketReceiveEvent extends PacketEvent {
}
/**
* Get the raw packet object
* Get the NMS packet object
*
* @return
*/
public Object getPacket() {
@@ -58,6 +55,7 @@ public class PacketReceiveEvent extends PacketEvent {
/**
* The time the packet was received(ms)
*
* @return
*/
public long getTimestamp() {
@@ -66,6 +64,7 @@ public class PacketReceiveEvent extends PacketEvent {
/**
* Cancel the packet
*
* @param cancelled
*/
public void setCancelled(boolean cancelled) {
@@ -74,7 +73,8 @@ public class PacketReceiveEvent extends PacketEvent {
/**
* Returns if the packet has been cancelled
* @return
*
* @return cancelled
*/
public boolean isCancelled() {
return cancelled;
@@ -83,15 +83,57 @@ public class PacketReceiveEvent extends PacketEvent {
/**
* Get the type of dig
* PacketPlayInBlockDig
*
* @return
*/
public PlayerDigType getPlayerDigType() {
String c = String.valueOf(Reflection.getMethod(packet.getClass(), "c").invoke(packet));
public PlayerDigType getPlayerDigType() throws VersionNotFoundException {
PlayerDigType type;
try {
type = PlayerDigType.valueOf(c);
} catch (IllegalArgumentException e) {
type = PlayerDigType.WRONG_PACKET;
if (version == ServerVersion.v_1_8) {
net.minecraft.server.v1_8_R1.PacketPlayInBlockDig p = (net.minecraft.server.v1_8_R1.PacketPlayInBlockDig) packet;
type = PlayerDigType.valueOf(p.c().name());
} else if (version == ServerVersion.v_1_8_3) {
net.minecraft.server.v1_8_R2.PacketPlayInBlockDig p = (net.minecraft.server.v1_8_R2.PacketPlayInBlockDig) packet;
type = PlayerDigType.valueOf(p.c().name());
} else if (version == ServerVersion.v_1_8_8) {
net.minecraft.server.v1_8_R3.PacketPlayInBlockDig p = (net.minecraft.server.v1_8_R3.PacketPlayInBlockDig) packet;
type = PlayerDigType.valueOf(p.c().name());
} else if (version == ServerVersion.v_1_9) {
net.minecraft.server.v1_9_R1.PacketPlayInBlockDig p = (net.minecraft.server.v1_9_R1.PacketPlayInBlockDig) packet;
type = PlayerDigType.valueOf(p.c().name());
} else if (version == ServerVersion.v_1_9_4) {
net.minecraft.server.v1_9_R2.PacketPlayInBlockDig p = (net.minecraft.server.v1_9_R2.PacketPlayInBlockDig) packet;
type = PlayerDigType.valueOf(p.c().name());
} else if (version == ServerVersion.v_1_10_2) {
net.minecraft.server.v1_10_R1.PacketPlayInBlockDig p = (net.minecraft.server.v1_10_R1.PacketPlayInBlockDig) packet;
type = PlayerDigType.valueOf(p.c().name());
} else if (version == ServerVersion.v_1_11_1) {
net.minecraft.server.v1_11_R1.PacketPlayInBlockDig p = (net.minecraft.server.v1_11_R1.PacketPlayInBlockDig) packet;
type = PlayerDigType.valueOf(p.c().name());
} else if (version == ServerVersion.v_1_11_2) {
net.minecraft.server.v1_11_R1.PacketPlayInBlockDig p = (net.minecraft.server.v1_11_R1.PacketPlayInBlockDig) packet;
type = PlayerDigType.valueOf(p.c().name());
} else if (version == ServerVersion.v_1_12_1 || version == ServerVersion.v_1_12_2) {
net.minecraft.server.v1_12_R1.PacketPlayInBlockDig p = (net.minecraft.server.v1_12_R1.PacketPlayInBlockDig) packet;
type = PlayerDigType.valueOf(p.c().name());
} else if (version == ServerVersion.v_1_13) {
net.minecraft.server.v1_13_R1.PacketPlayInBlockDig p = (net.minecraft.server.v1_13_R1.PacketPlayInBlockDig) packet;
type = PlayerDigType.valueOf(p.c().name());
}
else if(version == ServerVersion.v_1_13_2) {
net.minecraft.server.v1_13_R2.PacketPlayInBlockDig p = (net.minecraft.server.v1_13_R2.PacketPlayInBlockDig) packet;
type = PlayerDigType.valueOf(p.c().name());
}
else if (version == ServerVersion.v_1_14) {
net.minecraft.server.v1_14_R1.PacketPlayInBlockDig p = (net.minecraft.server.v1_14_R1.PacketPlayInBlockDig) packet;
type = PlayerDigType.valueOf(p.c().name());
} else if (version == ServerVersion.v_1_14_1) {
net.minecraft.server.v1_14_R1.PacketPlayInBlockDig p = (net.minecraft.server.v1_14_R1.PacketPlayInBlockDig) packet;
type = PlayerDigType.valueOf(p.c().name());
} else if (version == ServerVersion.v_1_15_1) {
net.minecraft.server.v1_15_R1.PacketPlayInBlockDig p = (net.minecraft.server.v1_15_R1.PacketPlayInBlockDig) packet;
type = PlayerDigType.valueOf(p.c().name());
} else {
throw new VersionNotFoundException();
}
return type;
}
@@ -99,174 +141,455 @@ public class PacketReceiveEvent extends PacketEvent {
/**
* Get the entity interact action
* PacketPlayInUseEntity
* @return
*
* @return me.purplex.packetevents.enums.EntityUseAction
*/
public EntityUseAction getEntityUseAction() {
Object action = null;
try {
action = FieldUtils.readDeclaredField(packet, "action", true);
} catch (IllegalAccessException e) {
e.printStackTrace();
public EntityUseAction getEntityUseAction() throws VersionNotFoundException {
EntityUseAction entityUseAction;
if (version == ServerVersion.v_1_8) {
net.minecraft.server.v1_8_R1.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_8_R1.PacketPlayInUseEntity) packet;
entityUseAction = EntityUseAction.valueOf(useEntity.a().name());
} else if (version == ServerVersion.v_1_8_3) {
net.minecraft.server.v1_8_R2.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_8_R2.PacketPlayInUseEntity) packet;
entityUseAction = EntityUseAction.valueOf(useEntity.a().name());
} else if (version == ServerVersion.v_1_8_8) {
net.minecraft.server.v1_8_R3.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_8_R3.PacketPlayInUseEntity) packet;
entityUseAction = EntityUseAction.valueOf(useEntity.a().name());
} else if (version == ServerVersion.v_1_9) {
net.minecraft.server.v1_9_R1.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_9_R1.PacketPlayInUseEntity) packet;
entityUseAction = EntityUseAction.valueOf(useEntity.a().name());
} else if (version == ServerVersion.v_1_9_4) {
net.minecraft.server.v1_9_R2.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_9_R2.PacketPlayInUseEntity) packet;
entityUseAction = EntityUseAction.valueOf(useEntity.a().name());
} else if (version == ServerVersion.v_1_10_2) {
net.minecraft.server.v1_10_R1.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_10_R1.PacketPlayInUseEntity) packet;
entityUseAction = EntityUseAction.valueOf(useEntity.a().name());
} else if (version == ServerVersion.v_1_11_1) {
net.minecraft.server.v1_11_R1.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_11_R1.PacketPlayInUseEntity) packet;
entityUseAction = EntityUseAction.valueOf(useEntity.a().name());
} else if (version == ServerVersion.v_1_11_2) {
net.minecraft.server.v1_11_R1.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_11_R1.PacketPlayInUseEntity) packet;
entityUseAction = EntityUseAction.valueOf(useEntity.a().name());
} else if (version == ServerVersion.v_1_12_1 || version == ServerVersion.v_1_12_2) {
net.minecraft.server.v1_12_R1.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_12_R1.PacketPlayInUseEntity) packet;
entityUseAction = EntityUseAction.valueOf(useEntity.a().name());
} else if (version == ServerVersion.v_1_13) {
net.minecraft.server.v1_13_R1.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_13_R1.PacketPlayInUseEntity) packet;
entityUseAction = EntityUseAction.valueOf(useEntity.b().name());
}
for (EntityUseAction a : EntityUseAction.values()) {
if (a.toString().equalsIgnoreCase(action.toString())) {
return a;
}
else if(version == ServerVersion.v_1_13_2) {
net.minecraft.server.v1_13_R2.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_13_R2.PacketPlayInUseEntity) packet;
entityUseAction = EntityUseAction.valueOf(useEntity.b().name());
}
return EntityUseAction.WRONG_PACKET;
else if (version == ServerVersion.v_1_14) {
net.minecraft.server.v1_14_R1.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_14_R1.PacketPlayInUseEntity) packet;
entityUseAction = EntityUseAction.valueOf(useEntity.b().name());
} else if (version == ServerVersion.v_1_14_1) {
net.minecraft.server.v1_14_R1.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_14_R1.PacketPlayInUseEntity) packet;
entityUseAction = EntityUseAction.valueOf(useEntity.b().name());
} else if (version == ServerVersion.v_1_15_1) {
net.minecraft.server.v1_15_R1.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_15_R1.PacketPlayInUseEntity) packet;
entityUseAction = EntityUseAction.valueOf(useEntity.b().name());
} else {
throw new VersionNotFoundException();
}
return entityUseAction;
}
/**
* Get the PlayerAction
* PacketPlayInEntityAction
* @return
*
* @return me.purplex.packetevents.enums.PlayerAction
*/
public PlayerAction getPlayerAction() {
Object animation = null;
try {
animation = FieldUtils.readDeclaredField(packet, "animation", true);
} catch (IllegalAccessException e) {
e.printStackTrace();
public PlayerAction getPlayerAction() throws VersionNotFoundException {
String animation;
if (version == ServerVersion.v_1_8) {
net.minecraft.server.v1_8_R1.PacketPlayInEntityAction action = (net.minecraft.server.v1_8_R1.PacketPlayInEntityAction) packet;
animation = action.b().name();
} else if (version == ServerVersion.v_1_8_3) {
net.minecraft.server.v1_8_R2.PacketPlayInEntityAction action = (net.minecraft.server.v1_8_R2.PacketPlayInEntityAction) packet;
animation = action.b().name();
} else if (version == ServerVersion.v_1_8_8) {
net.minecraft.server.v1_8_R3.PacketPlayInEntityAction action = (net.minecraft.server.v1_8_R3.PacketPlayInEntityAction) packet;
animation = action.b().name();
} else if (version == ServerVersion.v_1_9) {
net.minecraft.server.v1_9_R1.PacketPlayInEntityAction action = (net.minecraft.server.v1_9_R1.PacketPlayInEntityAction) packet;
animation = action.b().name();
} else if (version == ServerVersion.v_1_9_4) {
net.minecraft.server.v1_9_R2.PacketPlayInEntityAction action = (net.minecraft.server.v1_9_R2.PacketPlayInEntityAction) packet;
animation = action.b().name();
} else if (version == ServerVersion.v_1_10_2) {
net.minecraft.server.v1_10_R1.PacketPlayInEntityAction action = (net.minecraft.server.v1_10_R1.PacketPlayInEntityAction) packet;
animation = action.b().name();
} else if (version == ServerVersion.v_1_11_1) {
net.minecraft.server.v1_11_R1.PacketPlayInEntityAction action = (net.minecraft.server.v1_11_R1.PacketPlayInEntityAction) packet;
animation = action.b().name();
} else if (version == ServerVersion.v_1_11_2) {
net.minecraft.server.v1_11_R1.PacketPlayInEntityAction action = (net.minecraft.server.v1_11_R1.PacketPlayInEntityAction) packet;
animation = action.b().name();
} else if (version == ServerVersion.v_1_12_1) {
net.minecraft.server.v1_12_R1.PacketPlayInEntityAction action = (net.minecraft.server.v1_12_R1.PacketPlayInEntityAction) packet;
animation = action.b().name();
} else if (version == ServerVersion.v_1_12_2) {
net.minecraft.server.v1_12_R1.PacketPlayInEntityAction action = (net.minecraft.server.v1_12_R1.PacketPlayInEntityAction) packet;
animation = action.b().name();
} else if (version == ServerVersion.v_1_13) {
net.minecraft.server.v1_13_R1.PacketPlayInEntityAction action = (net.minecraft.server.v1_13_R1.PacketPlayInEntityAction) packet;
animation = action.c().name();
}
for (PlayerAction a : PlayerAction.values()) {
if (a.toString().equalsIgnoreCase(animation.toString())) {
return a;
}
else if(version == ServerVersion.v_1_13_2) {
net.minecraft.server.v1_13_R2.PacketPlayInEntityAction action = (net.minecraft.server.v1_13_R2.PacketPlayInEntityAction) packet;
animation = action.c().name();
}
return PlayerAction.WRONG_PACKET;
else if (version == ServerVersion.v_1_14) {
net.minecraft.server.v1_14_R1.PacketPlayInEntityAction action = (net.minecraft.server.v1_14_R1.PacketPlayInEntityAction) packet;
animation = action.c().name();
} else if (version == ServerVersion.v_1_14_1) {
net.minecraft.server.v1_14_R1.PacketPlayInEntityAction action = (net.minecraft.server.v1_14_R1.PacketPlayInEntityAction) packet;
animation = action.c().name();
} else if (version == ServerVersion.v_1_15_1) {
net.minecraft.server.v1_15_R1.PacketPlayInEntityAction action = (net.minecraft.server.v1_15_R1.PacketPlayInEntityAction) packet;
animation = action.c().name();
} else {
throw new VersionNotFoundException();
}
return PlayerAction.valueOf(animation);
}
/**
* Entity you interacted with
* PacketPlayInUseEntity
* @return
*
* @return org.bukkit.entity.Entity
*/
public Entity getInteractedEntity() {
try {
FieldAccessor<Integer> field = Reflection.getField(packet.getClass(), int.class, 0);
int id = field.get(packet);
for (Entity e : player.getWorld().getEntities()) {
if (e.getEntityId() == id) {
return e;
}
}
for(World w : Bukkit.getWorlds()) {
for(Entity e : w.getEntities()) {
if(e.getEntityId() == id) {
return e;
}
}
}
} catch (Exception ex) {
public Entity getInteractedEntity() throws VersionNotFoundException {
Entity entity;
if (version == ServerVersion.v_1_8) {
net.minecraft.server.v1_8_R1.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_8_R1.PacketPlayInUseEntity) packet;
net.minecraft.server.v1_8_R1.World world = ((org.bukkit.craftbukkit.v1_8_R1.CraftWorld) player.getWorld()).getHandle();
entity = useEntity.a(world).getBukkitEntity();
} else if (version == ServerVersion.v_1_8_3) {
net.minecraft.server.v1_8_R2.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_8_R2.PacketPlayInUseEntity) packet;
net.minecraft.server.v1_8_R2.World world = ((org.bukkit.craftbukkit.v1_8_R2.CraftWorld) player.getWorld()).getHandle();
entity = useEntity.a(world).getBukkitEntity();
} else if (version == ServerVersion.v_1_8_8) {
net.minecraft.server.v1_8_R3.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_8_R3.PacketPlayInUseEntity) packet;
net.minecraft.server.v1_8_R3.World world = ((org.bukkit.craftbukkit.v1_8_R3.CraftWorld) player.getWorld()).getHandle();
entity = useEntity.a(world).getBukkitEntity();
} else if (version == ServerVersion.v_1_9) {
net.minecraft.server.v1_9_R1.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_9_R1.PacketPlayInUseEntity) packet;
net.minecraft.server.v1_9_R1.World world = ((org.bukkit.craftbukkit.v1_9_R1.CraftWorld) player.getWorld()).getHandle();
entity = useEntity.a(world).getBukkitEntity();
} else if (version == ServerVersion.v_1_9_4) {
net.minecraft.server.v1_9_R2.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_9_R2.PacketPlayInUseEntity) packet;
net.minecraft.server.v1_9_R2.World world = ((org.bukkit.craftbukkit.v1_9_R2.CraftWorld) player.getWorld()).getHandle();
entity = useEntity.a(world).getBukkitEntity();
} else if (version == ServerVersion.v_1_10_2) {
net.minecraft.server.v1_10_R1.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_10_R1.PacketPlayInUseEntity) packet;
net.minecraft.server.v1_10_R1.World world = ((org.bukkit.craftbukkit.v1_10_R1.CraftWorld) player.getWorld()).getHandle();
entity = useEntity.a(world).getBukkitEntity();
} else if (version == ServerVersion.v_1_11_1) {
net.minecraft.server.v1_11_R1.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_11_R1.PacketPlayInUseEntity) packet;
net.minecraft.server.v1_11_R1.World world = ((org.bukkit.craftbukkit.v1_11_R1.CraftWorld) player.getWorld()).getHandle();
entity = useEntity.a(world).getBukkitEntity();
} else if (version == ServerVersion.v_1_11_2) {
net.minecraft.server.v1_11_R1.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_11_R1.PacketPlayInUseEntity) packet;
net.minecraft.server.v1_11_R1.World world = ((org.bukkit.craftbukkit.v1_11_R1.CraftWorld) player.getWorld()).getHandle();
entity = useEntity.a(world).getBukkitEntity();
} else if (version == ServerVersion.v_1_12_1 || version == ServerVersion.v_1_12_2) {
net.minecraft.server.v1_12_R1.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_12_R1.PacketPlayInUseEntity) packet;
net.minecraft.server.v1_12_R1.World world = ((org.bukkit.craftbukkit.v1_12_R1.CraftWorld) player.getWorld()).getHandle();
entity = useEntity.a(world).getBukkitEntity();
} else if (version == ServerVersion.v_1_13) {
net.minecraft.server.v1_13_R1.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_13_R1.PacketPlayInUseEntity) packet;
net.minecraft.server.v1_13_R1.World world = ((org.bukkit.craftbukkit.v1_13_R1.CraftWorld) player.getWorld()).getHandle();
entity = useEntity.a(world).getBukkitEntity();
}
return null;
else if(version == ServerVersion.v_1_13_2) {
net.minecraft.server.v1_13_R2.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_13_R2.PacketPlayInUseEntity) packet;
net.minecraft.server.v1_13_R2.World world = ((org.bukkit.craftbukkit.v1_13_R2.CraftWorld) player.getWorld()).getHandle();
entity = useEntity.a(world).getBukkitEntity();
}
else if (version == ServerVersion.v_1_14) {
net.minecraft.server.v1_14_R1.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_14_R1.PacketPlayInUseEntity) packet;
net.minecraft.server.v1_14_R1.World world = ((org.bukkit.craftbukkit.v1_14_R1.CraftWorld) player.getWorld()).getHandle();
entity = useEntity.a(world).getBukkitEntity();
} else if (version == ServerVersion.v_1_14_1) {
net.minecraft.server.v1_14_R1.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_14_R1.PacketPlayInUseEntity) packet;
net.minecraft.server.v1_14_R1.World world = ((org.bukkit.craftbukkit.v1_14_R1.CraftWorld) player.getWorld()).getHandle();
entity = useEntity.a(world).getBukkitEntity();
} else if (version == ServerVersion.v_1_15_1) {
net.minecraft.server.v1_15_R1.PacketPlayInUseEntity useEntity = (net.minecraft.server.v1_15_R1.PacketPlayInUseEntity) packet;
net.minecraft.server.v1_15_R1.World world = ((org.bukkit.craftbukkit.v1_15_R1.CraftWorld) player.getWorld()).getHandle();
entity = useEntity.a(world).getBukkitEntity();
} else {
throw new VersionNotFoundException();
}
return entity;
}
/**
* Get the string message
* PacketPlayInChat
* @return
*
* @return message
*/
public String getChatPacketMessage() {
FieldAccessor<String> field = Reflection.getField(packet.getClass(), String.class, 0);
String message = field.get(packet);
public String getChatPacketMessage() throws VersionNotFoundException {
String message;
if (version == ServerVersion.v_1_8) {
net.minecraft.server.v1_8_R1.PacketPlayInChat p = (net.minecraft.server.v1_8_R1.PacketPlayInChat) packet;
message = p.a();
} else if (version == ServerVersion.v_1_8_3) {
net.minecraft.server.v1_8_R2.PacketPlayInChat p = (net.minecraft.server.v1_8_R2.PacketPlayInChat) packet;
message = p.a();
} else if (version == ServerVersion.v_1_8_8) {
net.minecraft.server.v1_8_R3.PacketPlayInChat p = (net.minecraft.server.v1_8_R3.PacketPlayInChat) packet;
message = p.a();
} else if (version == ServerVersion.v_1_9) {
net.minecraft.server.v1_9_R1.PacketPlayInChat p = (net.minecraft.server.v1_9_R1.PacketPlayInChat) packet;
message = p.a();
} else if (version == ServerVersion.v_1_9_4) {
net.minecraft.server.v1_9_R2.PacketPlayInChat p = (net.minecraft.server.v1_9_R2.PacketPlayInChat) packet;
message = p.a();
} else if (version == ServerVersion.v_1_10_2) {
net.minecraft.server.v1_10_R1.PacketPlayInChat p = (net.minecraft.server.v1_10_R1.PacketPlayInChat) packet;
message = p.a();
} else if (version == ServerVersion.v_1_11_1) {
net.minecraft.server.v1_11_R1.PacketPlayInChat p = (net.minecraft.server.v1_11_R1.PacketPlayInChat) packet;
message = p.a();
} else if (version == ServerVersion.v_1_11_2) {
net.minecraft.server.v1_11_R1.PacketPlayInChat p = (net.minecraft.server.v1_11_R1.PacketPlayInChat) packet;
message = p.a();
} else if (version == ServerVersion.v_1_12_1 || version == ServerVersion.v_1_12_2) {
net.minecraft.server.v1_12_R1.PacketPlayInChat p = (net.minecraft.server.v1_12_R1.PacketPlayInChat) packet;
message = p.a();
} else if (version == ServerVersion.v_1_13) {
net.minecraft.server.v1_13_R1.PacketPlayInChat p = (net.minecraft.server.v1_13_R1.PacketPlayInChat) packet;
message = p.b();
}
else if(version == ServerVersion.v_1_13_2) {
net.minecraft.server.v1_13_R2.PacketPlayInChat p = (net.minecraft.server.v1_13_R2.PacketPlayInChat) packet;
message = p.b();
}
else if (version == ServerVersion.v_1_14) {
net.minecraft.server.v1_14_R1.PacketPlayInChat p = (net.minecraft.server.v1_14_R1.PacketPlayInChat) packet;
message = p.b();
} else if (version == ServerVersion.v_1_14_1) {
net.minecraft.server.v1_14_R1.PacketPlayInChat p = (net.minecraft.server.v1_14_R1.PacketPlayInChat) packet;
message = p.b();
} else if (version == ServerVersion.v_1_15_1) {
net.minecraft.server.v1_15_R1.PacketPlayInChat p = (net.minecraft.server.v1_15_R1.PacketPlayInChat) packet;
message = p.b();
} else {
throw new VersionNotFoundException();
}
return message;
}
public int getPing() {
int ping = 0;
try {
Object entityPlayer = player.getClass().getMethod("getHandle").invoke(player);
ping = (int) entityPlayer.getClass().getField("ping").get(entityPlayer);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException
| SecurityException | NoSuchFieldException e) {
e.printStackTrace();
/**
* Get the player's ping in the EntityPlayer's class
* @return ping
* @throws VersionNotFoundException
*/
public int getPing() throws VersionNotFoundException {
int ping;
if (version == ServerVersion.v_1_8) {
net.minecraft.server.v1_8_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
} else if (version == ServerVersion.v_1_8_3) {
net.minecraft.server.v1_8_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
} else if (version == ServerVersion.v_1_8_8) {
net.minecraft.server.v1_8_R3.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
} else if (version == ServerVersion.v_1_9) {
net.minecraft.server.v1_9_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
} else if (version == ServerVersion.v_1_9_4) {
net.minecraft.server.v1_9_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
} else if (version == ServerVersion.v_1_10_2) {
net.minecraft.server.v1_10_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
} else if (version == ServerVersion.v_1_11_1 || version == ServerVersion.v_1_11_2) {
net.minecraft.server.v1_11_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
} else if (version == ServerVersion.v_1_12_1 || version == ServerVersion.v_1_12_2) {
net.minecraft.server.v1_12_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
} else if (version == ServerVersion.v_1_13) {
net.minecraft.server.v1_13_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
}
else if(version == ServerVersion.v_1_13_2) {
net.minecraft.server.v1_13_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
}
else if (version == ServerVersion.v_1_14 || version == ServerVersion.v_1_14_1) {
net.minecraft.server.v1_14_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
} else if (version == ServerVersion.v_1_15_1) {
net.minecraft.server.v1_15_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
} else {
throw new VersionNotFoundException();
}
return ping;
}
/**
* Get the motX variable in the player's CraftPlayer class
* using Reflection
* @return
* Get the motX variable in the EntityPlayer class
*
* @return motX
*/
public double getMotionX() {
Reflection.MethodInvoker getPlayerHandle = Reflection.getMethod("{obc}.entity.CraftPlayer", "getHandle");
Object entityplayer = getPlayerHandle.invoke(player);
Field field = null;
try {
field = entityplayer.getClass().getField("motX");
} catch (NoSuchFieldException e1) {
e1.printStackTrace();
} catch (SecurityException e1) {
e1.printStackTrace();
public double getMotX() throws VersionNotFoundException {
double motX;
if (version == ServerVersion.v_1_8) {
net.minecraft.server.v1_8_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer)player).getHandle();
motX = ePlayer.motX;
} else if (version == ServerVersion.v_1_8_3) {
net.minecraft.server.v1_8_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer)player).getHandle();
motX = ePlayer.motX;
} else if (version == ServerVersion.v_1_8_8) {
net.minecraft.server.v1_8_R3.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer)player).getHandle();
motX = ePlayer.motX;
} else if (version == ServerVersion.v_1_9) {
net.minecraft.server.v1_9_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer)player).getHandle();
motX = ePlayer.motX;
} else if (version == ServerVersion.v_1_9_4) {
net.minecraft.server.v1_9_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer)player).getHandle();
motX = ePlayer.motX;
} else if (version == ServerVersion.v_1_10_2) {
net.minecraft.server.v1_10_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer)player).getHandle();
motX = ePlayer.motX;
} else if (version == ServerVersion.v_1_11_1 || version == ServerVersion.v_1_11_2) {
net.minecraft.server.v1_11_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer)player).getHandle();
motX = ePlayer.motX;
} else if (version == ServerVersion.v_1_12_1 || version == ServerVersion.v_1_12_2) {
net.minecraft.server.v1_12_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer)player).getHandle();
motX = ePlayer.motX;
} else if (version == ServerVersion.v_1_13) {
net.minecraft.server.v1_13_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer)player).getHandle();
motX = ePlayer.motX;
}
double mot = 0.0D;
try {
mot = field.getDouble(entityplayer);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
else if(version == ServerVersion.v_1_13_2) {
net.minecraft.server.v1_13_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer)player).getHandle();
motX = ePlayer.motX;
}
else if (version == ServerVersion.v_1_14 || version == ServerVersion.v_1_14_1) {
net.minecraft.server.v1_14_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer)player).getHandle();
motX = ePlayer.getMot().getX();
} else if (version == ServerVersion.v_1_15_1) {
net.minecraft.server.v1_15_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer)player).getHandle();
motX = ePlayer.getMot().getX();
} else {
throw new VersionNotFoundException();
}
return motX;
}
return mot;
/**
* Get the motY variable in the EntityPlayer class
*
* @return motY
*/
public double getMotY() throws VersionNotFoundException {
double motY;
if (version == ServerVersion.v_1_8) {
net.minecraft.server.v1_8_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer)player).getHandle();
motY = ePlayer.motY;
} else if (version == ServerVersion.v_1_8_3) {
net.minecraft.server.v1_8_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer)player).getHandle();
motY = ePlayer.motY;
} else if (version == ServerVersion.v_1_8_8) {
net.minecraft.server.v1_8_R3.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer)player).getHandle();
motY = ePlayer.motY;
} else if (version == ServerVersion.v_1_9) {
net.minecraft.server.v1_9_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer)player).getHandle();
motY = ePlayer.motY;
} else if (version == ServerVersion.v_1_9_4) {
net.minecraft.server.v1_9_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer)player).getHandle();
motY = ePlayer.motY;
} else if (version == ServerVersion.v_1_10_2) {
net.minecraft.server.v1_10_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer)player).getHandle();
motY = ePlayer.motY;
} else if (version == ServerVersion.v_1_11_1 || version == ServerVersion.v_1_11_2) {
net.minecraft.server.v1_11_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer)player).getHandle();
motY = ePlayer.motY;
} else if (version == ServerVersion.v_1_12_1 || version == ServerVersion.v_1_12_2) {
net.minecraft.server.v1_12_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer)player).getHandle();
motY = ePlayer.motY;
} else if (version == ServerVersion.v_1_13) {
net.minecraft.server.v1_13_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer)player).getHandle();
motY = ePlayer.motY;
}
else if(version == ServerVersion.v_1_13_2) {
net.minecraft.server.v1_13_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer)player).getHandle();
motY = ePlayer.motY;
}
else if (version == ServerVersion.v_1_14 || version == ServerVersion.v_1_14_1) {
net.minecraft.server.v1_14_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer)player).getHandle();
motY = ePlayer.getMot().getY();
} else if (version == ServerVersion.v_1_15_1) {
net.minecraft.server.v1_15_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer)player).getHandle();
motY = ePlayer.getMot().getY();
} else {
throw new VersionNotFoundException();
}
return motY;
}
/**
* Get the motY variable in the player's CraftPlayer class
* using Reflection
* @return
* Get the motZ variable in the EntityPlayer class
*
* @return motZ
*/
public double getMotionY() {
Reflection.MethodInvoker getPlayerHandle = Reflection.getMethod("{obc}.entity.CraftPlayer", "getHandle");
Object entityplayer = getPlayerHandle.invoke(player);
Field field = null;
try {
field = entityplayer.getClass().getField("motY");
} catch (NoSuchFieldException e1) {
e1.printStackTrace();
} catch (SecurityException e1) {
e1.printStackTrace();
public double getMotZ() throws VersionNotFoundException {
double motZ;
if (version == ServerVersion.v_1_8) {
net.minecraft.server.v1_8_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.motZ;
} else if (version == ServerVersion.v_1_8_3) {
net.minecraft.server.v1_8_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.motZ;
} else if (version == ServerVersion.v_1_8_8) {
net.minecraft.server.v1_8_R3.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.motZ;
} else if (version == ServerVersion.v_1_9) {
net.minecraft.server.v1_9_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.motZ;
} else if (version == ServerVersion.v_1_9_4) {
net.minecraft.server.v1_9_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.motZ;
} else if (version == ServerVersion.v_1_10_2) {
net.minecraft.server.v1_10_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.motZ;
} else if (version == ServerVersion.v_1_11_1 || version == ServerVersion.v_1_11_2) {
net.minecraft.server.v1_11_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.motZ;
} else if (version == ServerVersion.v_1_12_1 || version == ServerVersion.v_1_12_2) {
net.minecraft.server.v1_12_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.motZ;
} else if (version == ServerVersion.v_1_13) {
net.minecraft.server.v1_13_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.motZ;
}
double mot = 0.0D;
try {
mot = field.getDouble(entityplayer);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
else if(version == ServerVersion.v_1_13_2) {
net.minecraft.server.v1_13_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.motZ;
}
return mot;
}
/**
* Get the motZ variable in the player's CraftPlayer class
* using Reflection
* @return
*/
public double getMotionZ() {
Reflection.MethodInvoker getPlayerHandle = Reflection.getMethod("{obc}.entity.CraftPlayer", "getHandle");
Object entityplayer = getPlayerHandle.invoke(player);
Field field = null;
try {
field = entityplayer.getClass().getField("motZ");
} catch (NoSuchFieldException e1) {
e1.printStackTrace();
} catch (SecurityException e1) {
e1.printStackTrace();
else if (version == ServerVersion.v_1_14 || version == ServerVersion.v_1_14_1) {
net.minecraft.server.v1_14_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.getMot().getZ();
} else if (version == ServerVersion.v_1_15_1) {
net.minecraft.server.v1_15_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.getMot().getZ();
} else {
throw new VersionNotFoundException();
}
double mot = 0.0D;
try {
mot = field.getDouble(entityplayer);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return mot;
return motZ;
}
}
@@ -2,21 +2,25 @@ package me.purplex.packetevents.events.packetevent;
import com.comphenix.tinyprotocol.Reflection;
import com.comphenix.tinyprotocol.Reflection.*;
import me.purplex.packetevents.enums.ServerVersion;
import me.purplex.packetevents.events.PacketEvent;
import me.purplex.packetevents.exceptions.VersionNotFoundException;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
public class PacketSendEvent extends PacketEvent {
private Player player;
private String name;
private Object packet;
private long timestamp;
private final Player player;
private final String name;
private final Object packet;
private final long timestamp;
private boolean cancelled;
private final ServerVersion version = ServerVersion.getVersion();
private static FieldAccessor<Integer> velId;
private static FieldAccessor<Integer> velX;
private static FieldAccessor<Integer> velY;
private static FieldAccessor<Integer> velZ;
public PacketSendEvent(Player player, String packetName, Object packet) {
this.player = player;
@@ -53,28 +57,205 @@ public class PacketSendEvent extends PacketEvent {
}
/**
* Get Velocity entity
* Get Velocity entity (partly reflection)
* PacketPlayOutEntityVelocity
*
* @return
*/
public Entity getVelocityEntity() {
//WorldServer s;
FieldAccessor<Integer> field = Reflection.getField(packet.getClass(), int.class, 0);
int id = field.get(packet);
for (World w : Bukkit.getWorlds()) {
for (Entity e : w.getEntities()) {
if (e.getEntityId() == id) {
return e;
public Entity getVelocityEntity() throws VersionNotFoundException {
int entityId;
Object velPacket;
Entity entity = null;
if (version == ServerVersion.v_1_8) {
net.minecraft.server.v1_8_R1.PacketPlayOutEntityVelocity p = (net.minecraft.server.v1_8_R1.PacketPlayOutEntityVelocity) packet;
velPacket = p;
if (velId == null) {
velId = Reflection.getField(velPacket.getClass(), int.class, 0);
}
int id = velId.get(velPacket);
for (World bukkitWorld : Bukkit.getWorlds()) {
net.minecraft.server.v1_8_R1.World world = ((org.bukkit.craftbukkit.v1_8_R1.CraftWorld) bukkitWorld).getHandle();
net.minecraft.server.v1_8_R1.Entity nmsEntity = world.a(id);
if (nmsEntity != null) {
entity = nmsEntity.getBukkitEntity();
break;
}
}
} else if (version == ServerVersion.v_1_8_3) {
net.minecraft.server.v1_8_R2.PacketPlayOutEntityVelocity p = (net.minecraft.server.v1_8_R2.PacketPlayOutEntityVelocity) packet;
velPacket = p;
if (velId == null) {
velId = Reflection.getField(velPacket.getClass(), int.class, 0);
}
int id = velId.get(velPacket);
for (World bukkitWorld : Bukkit.getWorlds()) {
net.minecraft.server.v1_8_R2.World world = ((org.bukkit.craftbukkit.v1_8_R2.CraftWorld) bukkitWorld).getHandle();
net.minecraft.server.v1_8_R2.Entity nmsEntity = world.a(id);
if (nmsEntity != null) {
entity = nmsEntity.getBukkitEntity();
break;
}
}
} else if (version == ServerVersion.v_1_8_8) {
net.minecraft.server.v1_8_R3.PacketPlayOutEntityVelocity p = (net.minecraft.server.v1_8_R3.PacketPlayOutEntityVelocity) packet;
velPacket = p;
if (velId == null) {
velId = Reflection.getField(velPacket.getClass(), int.class, 0);
}
int id = velId.get(velPacket);
for (World bukkitWorld : Bukkit.getWorlds()) {
net.minecraft.server.v1_8_R3.World world = ((org.bukkit.craftbukkit.v1_8_R3.CraftWorld) bukkitWorld).getHandle();
net.minecraft.server.v1_8_R3.Entity nmsEntity = world.a(id);
if (nmsEntity != null) {
entity = nmsEntity.getBukkitEntity();
break;
}
}
} else if (version == ServerVersion.v_1_9) {
net.minecraft.server.v1_9_R1.PacketPlayOutEntityVelocity p = (net.minecraft.server.v1_9_R1.PacketPlayOutEntityVelocity) packet;
velPacket = p;
if (velId == null) {
velId = Reflection.getField(velPacket.getClass(), int.class, 0);
}
int id = velId.get(velPacket);
for (World bukkitWorld : Bukkit.getWorlds()) {
net.minecraft.server.v1_9_R1.World world = ((org.bukkit.craftbukkit.v1_9_R1.CraftWorld) bukkitWorld).getHandle();
net.minecraft.server.v1_9_R1.Entity nmsEntity = world.getEntity(id);
if (nmsEntity != null) {
entity = nmsEntity.getBukkitEntity();
break;
}
}
} else if (version == ServerVersion.v_1_9_4) {
net.minecraft.server.v1_9_R2.PacketPlayOutEntityVelocity p = (net.minecraft.server.v1_9_R2.PacketPlayOutEntityVelocity) packet;
velPacket = p;
if (velId == null) {
velId = Reflection.getField(velPacket.getClass(), int.class, 0);
}
int id = velId.get(velPacket);
for (World bukkitWorld : Bukkit.getWorlds()) {
net.minecraft.server.v1_9_R2.World world = ((org.bukkit.craftbukkit.v1_9_R2.CraftWorld) bukkitWorld).getHandle();
net.minecraft.server.v1_9_R2.Entity nmsEntity = world.getEntity(id);
if (nmsEntity != null) {
entity = nmsEntity.getBukkitEntity();
break;
}
}
} else if (version == ServerVersion.v_1_10_2) {
net.minecraft.server.v1_10_R1.PacketPlayOutEntityVelocity p = (net.minecraft.server.v1_10_R1.PacketPlayOutEntityVelocity) packet;
velPacket = p;
if (velId == null) {
velId = Reflection.getField(velPacket.getClass(), int.class, 0);
}
int id = velId.get(velPacket);
for (World bukkitWorld : Bukkit.getWorlds()) {
net.minecraft.server.v1_10_R1.World world = ((org.bukkit.craftbukkit.v1_10_R1.CraftWorld) bukkitWorld).getHandle();
net.minecraft.server.v1_10_R1.Entity nmsEntity = world.getEntity(id);
if (nmsEntity != null) {
entity = nmsEntity.getBukkitEntity();
break;
}
}
} else if (version == ServerVersion.v_1_11_1 || version == ServerVersion.v_1_11_2) {
net.minecraft.server.v1_11_R1.PacketPlayOutEntityVelocity p = (net.minecraft.server.v1_11_R1.PacketPlayOutEntityVelocity) packet;
velPacket = p;
if (velId == null) {
velId = Reflection.getField(velPacket.getClass(), int.class, 0);
}
int id = velId.get(velPacket);
for (World bukkitWorld : Bukkit.getWorlds()) {
net.minecraft.server.v1_11_R1.World world = ((org.bukkit.craftbukkit.v1_11_R1.CraftWorld) bukkitWorld).getHandle();
net.minecraft.server.v1_11_R1.Entity nmsEntity = world.getEntity(id);
if (nmsEntity != null) {
entity = nmsEntity.getBukkitEntity();
break;
}
}
} else if (version == ServerVersion.v_1_12_1 || version == ServerVersion.v_1_12_2) {
net.minecraft.server.v1_12_R1.PacketPlayOutEntityVelocity p = (net.minecraft.server.v1_12_R1.PacketPlayOutEntityVelocity) packet;
velPacket = p;
if (velId == null) {
velId = Reflection.getField(velPacket.getClass(), int.class, 0);
}
int id = velId.get(velPacket);
for (World bukkitWorld : Bukkit.getWorlds()) {
net.minecraft.server.v1_12_R1.World world = ((org.bukkit.craftbukkit.v1_12_R1.CraftWorld) bukkitWorld).getHandle();
net.minecraft.server.v1_12_R1.Entity nmsEntity = world.getEntity(id);
if (nmsEntity != null) {
entity = nmsEntity.getBukkitEntity();
break;
}
}
} else if (version == ServerVersion.v_1_13) {
net.minecraft.server.v1_13_R1.PacketPlayOutEntityVelocity p = (net.minecraft.server.v1_13_R1.PacketPlayOutEntityVelocity) packet;
velPacket = p;
if (velId == null) {
velId = Reflection.getField(velPacket.getClass(), int.class, 0);
}
int id = velId.get(velPacket);
for (World bukkitWorld : Bukkit.getWorlds()) {
net.minecraft.server.v1_13_R1.World world = ((org.bukkit.craftbukkit.v1_13_R1.CraftWorld) bukkitWorld).getHandle();
net.minecraft.server.v1_13_R1.Entity nmsEntity = world.getEntity(id);
if (nmsEntity != null) {
entity = nmsEntity.getBukkitEntity();
break;
}
}
} else if (version == ServerVersion.v_1_13_2) {
net.minecraft.server.v1_13_R2.PacketPlayOutEntityVelocity p = (net.minecraft.server.v1_13_R2.PacketPlayOutEntityVelocity) packet;
velPacket = p;
if (velId == null) {
velId = Reflection.getField(velPacket.getClass(), int.class, 0);
}
int id = velId.get(velPacket);
for (World bukkitWorld : Bukkit.getWorlds()) {
net.minecraft.server.v1_13_R2.World world = ((org.bukkit.craftbukkit.v1_13_R2.CraftWorld) bukkitWorld).getHandle();
net.minecraft.server.v1_13_R2.Entity nmsEntity = world.getEntity(id);
if (nmsEntity != null) {
entity = nmsEntity.getBukkitEntity();
break;
}
}
} else if (version == ServerVersion.v_1_14 || version == ServerVersion.v_1_14_1) {
net.minecraft.server.v1_14_R1.PacketPlayOutEntityVelocity p = (net.minecraft.server.v1_14_R1.PacketPlayOutEntityVelocity) packet;
velPacket = p;
if (velId == null) {
velId = Reflection.getField(velPacket.getClass(), int.class, 0);
}
int id = velId.get(velPacket);
for (World bukkitWorld : Bukkit.getWorlds()) {
net.minecraft.server.v1_14_R1.World world = ((org.bukkit.craftbukkit.v1_14_R1.CraftWorld) bukkitWorld).getHandle();
net.minecraft.server.v1_14_R1.Entity nmsEntity = world.getEntity(id);
if (nmsEntity != null) {
entity = nmsEntity.getBukkitEntity();
break;
}
}
} else if (version == ServerVersion.v_1_15_1) {
net.minecraft.server.v1_15_R1.PacketPlayOutEntityVelocity p = (net.minecraft.server.v1_15_R1.PacketPlayOutEntityVelocity) packet;
velPacket = p;
if (velId == null) {
velId = Reflection.getField(velPacket.getClass(), int.class, 0);
}
int id = velId.get(velPacket);
for (World bukkitWorld : Bukkit.getWorlds()) {
net.minecraft.server.v1_15_R1.World world = ((org.bukkit.craftbukkit.v1_15_R1.CraftWorld) bukkitWorld).getHandle();
net.minecraft.server.v1_15_R1.Entity nmsEntity = world.getEntity(id);
if (nmsEntity != null) {
entity = nmsEntity.getBukkitEntity();
break;
}
}
} else {
throw new VersionNotFoundException();
}
return null;
return entity;
}
/**
* Get X velocity
* Get X velocity (with reflection)
* PacketPlayOutEntityVelocity
*
* @return x
@@ -87,7 +268,7 @@ public class PacketSendEvent extends PacketEvent {
}
/**
* Get Y velocity
* Get Y velocity (with reflection)
* PacketPlayOutEntityVelocity
*
* @return y
@@ -100,7 +281,7 @@ public class PacketSendEvent extends PacketEvent {
}
/**
* Get Z velocity
* Get Z velocity (with reflection)
* PacketPlayOutEntityVelocity
*
* @return z
@@ -113,103 +294,211 @@ public class PacketSendEvent extends PacketEvent {
}
public int getPing() {
int ping = 0;
try {
Object entityPlayer = player.getClass().getMethod("getHandle").invoke(player);
ping = (int) entityPlayer.getClass().getField("ping").get(entityPlayer);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException
| SecurityException | NoSuchFieldException e) {
e.printStackTrace();
/**
* Get the player's ping in the EntityPlayer's class
* @return ping
* @throws VersionNotFoundException
*/
public int getPing() throws VersionNotFoundException {
int ping;
if (version == ServerVersion.v_1_8) {
net.minecraft.server.v1_8_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
} else if (version == ServerVersion.v_1_8_3) {
net.minecraft.server.v1_8_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
} else if (version == ServerVersion.v_1_8_8) {
net.minecraft.server.v1_8_R3.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
} else if (version == ServerVersion.v_1_9) {
net.minecraft.server.v1_9_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
} else if (version == ServerVersion.v_1_9_4) {
net.minecraft.server.v1_9_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
} else if (version == ServerVersion.v_1_10_2) {
net.minecraft.server.v1_10_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
} else if (version == ServerVersion.v_1_11_1 || version == ServerVersion.v_1_11_2) {
net.minecraft.server.v1_11_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
} else if (version == ServerVersion.v_1_12_1 || version == ServerVersion.v_1_12_2) {
net.minecraft.server.v1_12_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
} else if (version == ServerVersion.v_1_13) {
net.minecraft.server.v1_13_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
}
else if(version == ServerVersion.v_1_13_2) {
net.minecraft.server.v1_13_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
}
else if (version == ServerVersion.v_1_14 || version == ServerVersion.v_1_14_1) {
net.minecraft.server.v1_14_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
} else if (version == ServerVersion.v_1_15_1) {
net.minecraft.server.v1_15_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer)player).getHandle();
ping = ePlayer.ping;
} else {
throw new VersionNotFoundException();
}
return ping;
}
/**
* Get the motX variable in the player's CraftPlayer class
* using Reflection
*
* @return
*/
public double getMotionX() {
Reflection.MethodInvoker getPlayerHandle = Reflection.getMethod("{obc}.entity.CraftPlayer", "getHandle");
Object entityplayer = getPlayerHandle.invoke(player);
Field field = null;
try {
field = entityplayer.getClass().getField("motX");
} catch (NoSuchFieldException e1) {
e1.printStackTrace();
} catch (SecurityException e1) {
e1.printStackTrace();
}
double mot = 0.0D;
try {
mot = field.getDouble(entityplayer);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return mot;
/**
* Get the motX variable in the EntityPlayer class
*
* @return motX
*/
public double getMotX() throws VersionNotFoundException {
double motX;
if (version == ServerVersion.v_1_8) {
net.minecraft.server.v1_8_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer)player).getHandle();
motX = ePlayer.motX;
} else if (version == ServerVersion.v_1_8_3) {
net.minecraft.server.v1_8_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer)player).getHandle();
motX = ePlayer.motX;
} else if (version == ServerVersion.v_1_8_8) {
net.minecraft.server.v1_8_R3.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer)player).getHandle();
motX = ePlayer.motX;
} else if (version == ServerVersion.v_1_9) {
net.minecraft.server.v1_9_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer)player).getHandle();
motX = ePlayer.motX;
} else if (version == ServerVersion.v_1_9_4) {
net.minecraft.server.v1_9_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer)player).getHandle();
motX = ePlayer.motX;
} else if (version == ServerVersion.v_1_10_2) {
net.minecraft.server.v1_10_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer)player).getHandle();
motX = ePlayer.motX;
} else if (version == ServerVersion.v_1_11_1 || version == ServerVersion.v_1_11_2) {
net.minecraft.server.v1_11_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer)player).getHandle();
motX = ePlayer.motX;
} else if (version == ServerVersion.v_1_12_1 || version == ServerVersion.v_1_12_2) {
net.minecraft.server.v1_12_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer)player).getHandle();
motX = ePlayer.motX;
} else if (version == ServerVersion.v_1_13) {
net.minecraft.server.v1_13_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer)player).getHandle();
motX = ePlayer.motX;
}
else if(version == ServerVersion.v_1_13_2) {
net.minecraft.server.v1_13_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer)player).getHandle();
motX = ePlayer.motX;
}
else if (version == ServerVersion.v_1_14 || version == ServerVersion.v_1_14_1) {
net.minecraft.server.v1_14_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer)player).getHandle();
motX = ePlayer.getMot().getX();
} else if (version == ServerVersion.v_1_15_1) {
net.minecraft.server.v1_15_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer)player).getHandle();
motX = ePlayer.getMot().getX();
} else {
throw new VersionNotFoundException();
}
return motX;
}
/**
* Get the motY variable in the EntityPlayer class
*
* @return motY
*/
public double getMotY() throws VersionNotFoundException {
double motY;
if (version == ServerVersion.v_1_8) {
net.minecraft.server.v1_8_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer)player).getHandle();
motY = ePlayer.motY;
} else if (version == ServerVersion.v_1_8_3) {
net.minecraft.server.v1_8_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer)player).getHandle();
motY = ePlayer.motY;
} else if (version == ServerVersion.v_1_8_8) {
net.minecraft.server.v1_8_R3.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer)player).getHandle();
motY = ePlayer.motY;
} else if (version == ServerVersion.v_1_9) {
net.minecraft.server.v1_9_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer)player).getHandle();
motY = ePlayer.motY;
} else if (version == ServerVersion.v_1_9_4) {
net.minecraft.server.v1_9_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer)player).getHandle();
motY = ePlayer.motY;
} else if (version == ServerVersion.v_1_10_2) {
net.minecraft.server.v1_10_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer)player).getHandle();
motY = ePlayer.motY;
} else if (version == ServerVersion.v_1_11_1 || version == ServerVersion.v_1_11_2) {
net.minecraft.server.v1_11_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer)player).getHandle();
motY = ePlayer.motY;
} else if (version == ServerVersion.v_1_12_1 || version == ServerVersion.v_1_12_2) {
net.minecraft.server.v1_12_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer)player).getHandle();
motY = ePlayer.motY;
} else if (version == ServerVersion.v_1_13) {
net.minecraft.server.v1_13_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer)player).getHandle();
motY = ePlayer.motY;
}
else if(version == ServerVersion.v_1_13_2) {
net.minecraft.server.v1_13_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer)player).getHandle();
motY = ePlayer.motY;
}
else if (version == ServerVersion.v_1_14 || version == ServerVersion.v_1_14_1) {
net.minecraft.server.v1_14_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer)player).getHandle();
motY = ePlayer.getMot().getY();
} else if (version == ServerVersion.v_1_15_1) {
net.minecraft.server.v1_15_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer)player).getHandle();
motY = ePlayer.getMot().getY();
} else {
throw new VersionNotFoundException();
}
return motY;
}
/**
* Get the motY variable in the player's CraftPlayer class
* using Reflection
* Get the motZ variable in the EntityPlayer class
*
* @return
* @return motZ
*/
public double getMotionY() {
Reflection.MethodInvoker getPlayerHandle = Reflection.getMethod("{obc}.entity.CraftPlayer", "getHandle");
Object entityplayer = getPlayerHandle.invoke(player);
Field field = null;
try {
field = entityplayer.getClass().getField("motY");
} catch (NoSuchFieldException e1) {
e1.printStackTrace();
} catch (SecurityException e1) {
e1.printStackTrace();
public double getMotZ() throws VersionNotFoundException {
double motZ;
if (version == ServerVersion.v_1_8) {
net.minecraft.server.v1_8_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.motZ;
} else if (version == ServerVersion.v_1_8_3) {
net.minecraft.server.v1_8_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.motZ;
} else if (version == ServerVersion.v_1_8_8) {
net.minecraft.server.v1_8_R3.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.motZ;
} else if (version == ServerVersion.v_1_9) {
net.minecraft.server.v1_9_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.motZ;
} else if (version == ServerVersion.v_1_9_4) {
net.minecraft.server.v1_9_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.motZ;
} else if (version == ServerVersion.v_1_10_2) {
net.minecraft.server.v1_10_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.motZ;
} else if (version == ServerVersion.v_1_11_1 || version == ServerVersion.v_1_11_2) {
net.minecraft.server.v1_11_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.motZ;
} else if (version == ServerVersion.v_1_12_1 || version == ServerVersion.v_1_12_2) {
net.minecraft.server.v1_12_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.motZ;
} else if (version == ServerVersion.v_1_13) {
net.minecraft.server.v1_13_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.motZ;
}
double mot = 0.0D;
try {
mot = field.getDouble(entityplayer);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
else if(version == ServerVersion.v_1_13_2) {
net.minecraft.server.v1_13_R2.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.motZ;
}
return mot;
}
/**
* Get the motZ variable in the player's CraftPlayer class
* using Reflection
*
* @return
*/
public double getMotionZ() {
Reflection.MethodInvoker getPlayerHandle = Reflection.getMethod("{obc}.entity.CraftPlayer", "getHandle");
Object entityplayer = getPlayerHandle.invoke(player);
Field field = null;
try {
field = entityplayer.getClass().getField("motZ");
} catch (NoSuchFieldException e1) {
e1.printStackTrace();
} catch (SecurityException e1) {
e1.printStackTrace();
else if (version == ServerVersion.v_1_14 || version == ServerVersion.v_1_14_1) {
net.minecraft.server.v1_14_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.getMot().getZ();
} else if (version == ServerVersion.v_1_15_1) {
net.minecraft.server.v1_15_R1.EntityPlayer ePlayer = ((org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer)player).getHandle();
motZ = ePlayer.getMot().getZ();
} else {
throw new VersionNotFoundException();
}
double mot = 0.0D;
try {
mot = field.getDouble(entityplayer);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return mot;
return motZ;
}
}
@@ -3,12 +3,15 @@ package me.purplex.packetevents.example;
import me.purplex.packetevents.PacketEvents;
import me.purplex.packetevents.enums.EntityUseAction;
import me.purplex.packetevents.enums.PlayerDigType;
import me.purplex.packetevents.enums.ServerVersion;
import me.purplex.packetevents.events.packetevent.ServerTickEvent;
import me.purplex.packetevents.events.handler.PacketHandler;
import me.purplex.packetevents.events.listener.PacketListener;
import me.purplex.packetevents.events.packetevent.PacketReceiveEvent;
import me.purplex.packetevents.events.packetevent.PacketSendEvent;
import me.purplex.packetevents.exceptions.VersionNotFoundException;
import me.purplex.packetevents.packets.Packet;
import net.minecraft.server.v1_8_R1.*;
import org.bukkit.entity.Entity;
public class TestExample implements PacketListener {
@@ -20,15 +23,19 @@ public class TestExample implements PacketListener {
private int tick;
private static ServerVersion serverVersion = ServerVersion.getVersion();
@PacketHandler
public void onPacketReceive(PacketReceiveEvent e) {
public void onPacketReceive(PacketReceiveEvent e) throws VersionNotFoundException {
//ONLY CLIENT PACKETS ALLOWED HERE!
double motX = e.getMotX();
double motY = e.getMotY();
double motZ = e.getMotZ();
long timestamp = e.getTimestamp();
if (e.getPacketName().equals(Packet.Client.USE_ENTITY)) {
Entity entity = e.getInteractedEntity();
EntityUseAction entityUseAction = e.getEntityUseAction();
if(entityUseAction == EntityUseAction.ATTACK) {
if (entityUseAction == EntityUseAction.ATTACK) {
//LEFT CLICKED
e.getPlayer().sendMessage("Attacked an entity!");
}
@@ -37,25 +44,25 @@ public class TestExample implements PacketListener {
} else if (e.getPacketName().equals(Packet.Client.BLOCK_DIG)) {
PlayerDigType type = e.getPlayerDigType();
if(type == PlayerDigType.ABORT_DESTROY_BLOCK) {
if (type == PlayerDigType.ABORT_DESTROY_BLOCK) {
//aborted destroying a block
}
} else if (e.getPacketName().equals(Packet.Client.CHAT)) {
String message = e.getChatPacketMessage();
if(message.equals("pls jump")) {
if (message.equals("pls jump")) {
//shoot them in the air
PacketEvents.sendVelocity(e.getPlayer(), 0.0, 50.0, 0.0);
}
}
else if(e.getPacketName().equals(Packet.Client.POSITION)) {
double motX = e.getMotionX();
double motY = e.getMotionY();
double motZ= e.getMotionZ();
if (serverVersion == ServerVersion.v_1_8) {
if (e.getPacket() instanceof net.minecraft.server.v1_8_R1.PacketPlayInFlying) {
//flying packet, position, position_look extend the flying packet
}
}
}
@PacketHandler
public void onPacketSend(PacketSendEvent e) {
public void onPacketSend(PacketSendEvent e) throws VersionNotFoundException {
//ONLY SERVER PACKETS ALLOWED HERE!
if (e.getPacketName().equals(Packet.Server.ENTITY_VELOCITY)) {
int ping = e.getPing();
@@ -0,0 +1,7 @@
package me.purplex.packetevents.exceptions;
public class VersionNotFoundException extends Exception {
public VersionNotFoundException() {
super("VersionNotFound! Failed to access an NMS Field.");
}
}