Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fa70848c0e | ||
|
|
0274014768 |
No files matched your search
@@ -2,8 +2,9 @@ package me.purplex.packetevents;
|
||||
|
||||
import com.comphenix.tinyprotocol.*;
|
||||
import io.netty.channel.Channel;
|
||||
import me.purplex.packetevents.bukkitevent.ServerTickEvent;
|
||||
import me.purplex.packetevents.events.PacketReceiveEvent;
|
||||
import me.purplex.packetevents.events.packetevent.PacketSendEvent;
|
||||
import me.purplex.packetevents.events.packetevent.ServerTickEvent;
|
||||
import me.purplex.packetevents.events.packetevent.PacketReceiveEvent;
|
||||
import me.purplex.packetevents.example.TestExample;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -24,7 +25,11 @@ public class Main extends JavaPlugin implements Listener {
|
||||
if(p == null) return super.onPacketInAsync(null, channel, packet);
|
||||
if(channel == null) return super.onPacketInAsync(p, null, packet);
|
||||
String packetName = packet.getClass().getSimpleName();
|
||||
PacketEvents.getPacketManager().callPacketReceiveEvent(new PacketReceiveEvent(p, packetName, packet));
|
||||
PacketReceiveEvent e = new PacketReceiveEvent(p, packetName, packet);
|
||||
PacketEvents.getPacketManager().callPacketReceiveEvent(e);
|
||||
if(e.isCancelled()) {
|
||||
return super.onPacketInAsync(null, null, null);
|
||||
}
|
||||
return super.onPacketInAsync(p, channel, packet);
|
||||
}
|
||||
|
||||
@@ -34,7 +39,11 @@ public class Main extends JavaPlugin implements Listener {
|
||||
if(p == null) return super.onPacketInAsync(null, channel, packet);
|
||||
if(channel == null) return super.onPacketInAsync(p, null, packet);
|
||||
String packetName = packet.getClass().getSimpleName();
|
||||
PacketEvents.getPacketManager().callPacketReceiveEvent(new PacketReceiveEvent(p, packetName, packet));
|
||||
PacketSendEvent e = new PacketSendEvent(p, packetName, packet);
|
||||
PacketEvents.getPacketManager().callPacketSendEvent(e);
|
||||
if(e.isCancelled()) {
|
||||
return super.onPacketOutAsync(null, null, null);
|
||||
}
|
||||
return super.onPacketOutAsync(p, channel, packet);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package me.purplex.packetevents;
|
||||
|
||||
import me.purplex.packetevents.events.PacketManager;
|
||||
import me.purplex.packetevents.events.manager.PacketManager;
|
||||
|
||||
public class PacketEvents {
|
||||
private static PacketManager packetManager;
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package me.purplex.packetevents.enums;
|
||||
|
||||
public enum EntityUseAction {
|
||||
INTERACT, INTERACT_AT, ATTACK, INVALID, WRONG_PACKET;
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package me.purplex.packetevents.enums;
|
||||
|
||||
public enum PlayerAction {
|
||||
START_SNEAKING,
|
||||
|
||||
STOP_SNEAKING,
|
||||
|
||||
STOP_SLEEPING,
|
||||
|
||||
START_SPRINTING,
|
||||
|
||||
STOP_SPRINTING,
|
||||
|
||||
START_RIDING_JUMP,
|
||||
|
||||
STOP_RIDING_JUMP,
|
||||
|
||||
OPEN_INVENTORY,
|
||||
|
||||
START_FALL_FLYING, WRONG_PACKET;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package me.purplex.packetevents.enums;
|
||||
|
||||
public enum PlayerDigType {
|
||||
|
||||
START_DESTROY_BLOCK,
|
||||
|
||||
ABORT_DESTROY_BLOCK,
|
||||
|
||||
STOP_DESTROY_BLOCK,
|
||||
|
||||
DROP_ALL_ITEMS,
|
||||
|
||||
DROP_ITEM,
|
||||
|
||||
RELEASE_USE_ITEM,
|
||||
|
||||
SWAP_HELD_ITEMS,
|
||||
|
||||
WRONG_PACKET;
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
package me.purplex.packetevents.events;
|
||||
|
||||
public interface PacketListener {
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
package me.purplex.packetevents.events;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class PacketReceiveEvent extends PacketEvent {
|
||||
|
||||
private Player player;
|
||||
private String name;
|
||||
private Object packet;
|
||||
private long timestamp;
|
||||
public PacketReceiveEvent(Player player, String packetName, Object packet) {
|
||||
this.player = player;
|
||||
this.name = packetName;
|
||||
this.packet = packet;
|
||||
this.timestamp = (System.nanoTime() / 1000000);
|
||||
}
|
||||
|
||||
|
||||
public Player getPlayer() {
|
||||
return this.player;
|
||||
}
|
||||
|
||||
public String getPacketName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public Object getPacket() {
|
||||
return this.packet;
|
||||
}
|
||||
|
||||
public long getTimestamp() {
|
||||
return timestamp;
|
||||
}
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
package me.purplex.packetevents.events;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class PacketSendEvent extends PacketEvent {
|
||||
|
||||
private Player player;
|
||||
private String name;
|
||||
private Object packet;
|
||||
private long timestamp;
|
||||
public PacketSendEvent(Player player, String packetName, Object packet) {
|
||||
this.player = player;
|
||||
this.name = packetName;
|
||||
this.packet = packet;
|
||||
this.timestamp = (System.nanoTime() / 1000000);
|
||||
}
|
||||
|
||||
|
||||
public Player getPlayer() {
|
||||
return this.player;
|
||||
}
|
||||
|
||||
public String getPacketName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public Object getPacket() {
|
||||
return this.packet;
|
||||
}
|
||||
|
||||
public long getTimestamp() {
|
||||
return timestamp;
|
||||
}
|
||||
}
|
||||
|
||||
+5
-2
@@ -1,6 +1,9 @@
|
||||
package me.purplex.packetevents.events;
|
||||
package me.purplex.packetevents.events.eventmanager;
|
||||
|
||||
import me.purplex.packetevents.bukkitevent.ServerTickEvent;
|
||||
import me.purplex.packetevents.events.packetevent.ServerTickEvent;
|
||||
import me.purplex.packetevents.events.listener.PacketListener;
|
||||
import me.purplex.packetevents.events.packetevent.PacketReceiveEvent;
|
||||
import me.purplex.packetevents.events.packetevent.PacketSendEvent;
|
||||
|
||||
import java.util.LinkedList;
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package me.purplex.packetevents.events;
|
||||
package me.purplex.packetevents.events.handler;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
@@ -0,0 +1,4 @@
|
||||
package me.purplex.packetevents.events.listener;
|
||||
|
||||
public interface PacketListener {
|
||||
}
|
||||
+7
-2
@@ -1,6 +1,11 @@
|
||||
package me.purplex.packetevents.events;
|
||||
package me.purplex.packetevents.events.manager;
|
||||
|
||||
import me.purplex.packetevents.bukkitevent.ServerTickEvent;
|
||||
import me.purplex.packetevents.events.packetevent.ServerTickEvent;
|
||||
import me.purplex.packetevents.events.eventmanager.PacketEventManager;
|
||||
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;
|
||||
|
||||
@@ -0,0 +1,148 @@
|
||||
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.events.PacketEvent;
|
||||
import org.apache.commons.lang3.reflect.FieldUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.*;
|
||||
|
||||
public class PacketReceiveEvent extends PacketEvent {
|
||||
|
||||
private Player player;
|
||||
private String name;
|
||||
private Object packet;
|
||||
private long timestamp;
|
||||
private boolean cancelled;
|
||||
|
||||
public PacketReceiveEvent(Player player, String packetName, Object packet) {
|
||||
this.player = player;
|
||||
this.name = packetName;
|
||||
this.packet = packet;
|
||||
this.timestamp = (System.nanoTime() / 1000000);
|
||||
this.cancelled = false;
|
||||
}
|
||||
|
||||
|
||||
public Player getPlayer() {
|
||||
return this.player;
|
||||
}
|
||||
|
||||
public String getPacketName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public Object getPacket() {
|
||||
return this.packet;
|
||||
}
|
||||
|
||||
public long getTimestamp() {
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
public void setCancelled(boolean cancelled) {
|
||||
this.cancelled = cancelled;
|
||||
}
|
||||
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the type of dig
|
||||
* PacketPlayInBlockDig
|
||||
* @return
|
||||
*/
|
||||
public PlayerDigType getPlayerDigType() {
|
||||
String c = String.valueOf(Reflection.getMethod(packet.getClass(), "c").invoke(packet));
|
||||
PlayerDigType type;
|
||||
try {
|
||||
type = PlayerDigType.valueOf(c);
|
||||
} catch (IllegalArgumentException e) {
|
||||
type = PlayerDigType.WRONG_PACKET;
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the entity interact action
|
||||
* PacketPlayInUseEntity
|
||||
* @return
|
||||
*/
|
||||
public EntityUseAction getEntityUseAction() {
|
||||
Object action = null;
|
||||
try {
|
||||
action = FieldUtils.readDeclaredField(packet, "action", true);
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
for (EntityUseAction a : EntityUseAction.values()) {
|
||||
if (a.toString().equalsIgnoreCase(action.toString())) {
|
||||
return a;
|
||||
}
|
||||
}
|
||||
return EntityUseAction.WRONG_PACKET;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the PlayerAction
|
||||
* PacketPlayInEntityAction
|
||||
* @return
|
||||
*/
|
||||
public PlayerAction getPlayerAction() {
|
||||
Object animation = null;
|
||||
try {
|
||||
animation = FieldUtils.readDeclaredField(packet, "animation", true);
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
for (PlayerAction a : PlayerAction.values()) {
|
||||
if (a.toString().equalsIgnoreCase(animation.toString())) {
|
||||
return a;
|
||||
}
|
||||
}
|
||||
return PlayerAction.WRONG_PACKET;
|
||||
}
|
||||
|
||||
/**
|
||||
* Entity you interacted with
|
||||
* PacketPlayInUseEntity
|
||||
* @return
|
||||
*/
|
||||
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) {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the string message
|
||||
* PacketPlayInChat
|
||||
* @return
|
||||
*/
|
||||
public String getChatPacketMessage() {
|
||||
FieldAccessor<String> field = Reflection.getField(packet.getClass(), String.class, 0);
|
||||
String message = field.get(packet);
|
||||
return message;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
package me.purplex.packetevents.events.packetevent;
|
||||
|
||||
import com.comphenix.tinyprotocol.Reflection;
|
||||
import com.comphenix.tinyprotocol.Reflection.*;
|
||||
import me.purplex.packetevents.events.PacketEvent;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class PacketSendEvent extends PacketEvent {
|
||||
|
||||
private Player player;
|
||||
private String name;
|
||||
private Object packet;
|
||||
private long timestamp;
|
||||
private boolean cancelled;
|
||||
public PacketSendEvent(Player player, String packetName, Object packet) {
|
||||
this.player = player;
|
||||
this.name = packetName;
|
||||
this.packet = packet;
|
||||
this.timestamp = (System.nanoTime() / 1000000);
|
||||
this.cancelled = false;
|
||||
}
|
||||
|
||||
|
||||
public Player getPlayer() {
|
||||
return this.player;
|
||||
}
|
||||
|
||||
public String getPacketName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public Object getPacket() {
|
||||
return this.packet;
|
||||
}
|
||||
|
||||
public long getTimestamp() {
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
|
||||
public void setCancelled(boolean cancelled) {
|
||||
this.cancelled = cancelled;
|
||||
}
|
||||
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Velocity entity
|
||||
* 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get X velocity
|
||||
* PacketPlayOutEntityVelocity
|
||||
* @return x
|
||||
*/
|
||||
public double getVelocityX() {
|
||||
FieldAccessor<Integer> field = Reflection.getField(packet.getClass(), int.class, 1);
|
||||
int i = field.get(packet);
|
||||
double x = i / 8000.0;
|
||||
return x;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Y velocity
|
||||
* PacketPlayOutEntityVelocity
|
||||
* @return y
|
||||
*/
|
||||
public double getVelocityY() {
|
||||
FieldAccessor<Integer> field = Reflection.getField(packet.getClass(), int.class, 2);
|
||||
int i = field.get(packet);
|
||||
double y = i / 8000.0;
|
||||
return y;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Z velocity
|
||||
* PacketPlayOutEntityVelocity
|
||||
* @return z
|
||||
*/
|
||||
public double getVelocityZ() {
|
||||
FieldAccessor<Integer> field = Reflection.getField(packet.getClass(), int.class, 3);
|
||||
int i = field.get(packet);
|
||||
double z = i / 8000.0;
|
||||
return z;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package me.purplex.packetevents.bukkitevent;
|
||||
package me.purplex.packetevents.events.packetevent;
|
||||
|
||||
import me.purplex.packetevents.events.PacketEvent;
|
||||
|
||||
@@ -1,19 +1,24 @@
|
||||
package me.purplex.packetevents.example;
|
||||
|
||||
import me.purplex.packetevents.bukkitevent.ServerTickEvent;
|
||||
import me.purplex.packetevents.events.PacketHandler;
|
||||
import me.purplex.packetevents.events.PacketListener;
|
||||
import me.purplex.packetevents.events.PacketReceiveEvent;
|
||||
import me.purplex.packetevents.events.PacketSendEvent;
|
||||
import me.purplex.packetevents.enums.EntityUseAction;
|
||||
import me.purplex.packetevents.enums.PlayerAction;
|
||||
import me.purplex.packetevents.enums.PlayerDigType;
|
||||
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.packets.Packet;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class TestExample implements PacketListener {
|
||||
/**
|
||||
* How to register a packet listener?
|
||||
*
|
||||
* PacketEvents.getPacketManager().registerPacketListener(new TestExample());
|
||||
* <p>
|
||||
* PacketEvents.getPacketManager().registerPacketListener(new TestExample());
|
||||
*/
|
||||
|
||||
private int tick;
|
||||
@@ -22,22 +27,27 @@ public class TestExample implements PacketListener {
|
||||
@PacketHandler
|
||||
public void onPacketReceive(PacketReceiveEvent e) {
|
||||
//ONLY CLIENT PACKETS ALLOWED HERE!
|
||||
if(e.getPacketName().equals(Packet.Client.USE_ENTITY)) {
|
||||
e.getPlayer().sendMessage("You have attacked an entity!");
|
||||
}
|
||||
else if(e.getPacketName().equals(Packet.Client.ARM_ANIMATION)) {
|
||||
if (e.getPacketName().equals(Packet.Client.USE_ENTITY)) {
|
||||
Entity entity = e.getInteractedEntity();
|
||||
EntityUseAction entityUseAction = e.getEntityUseAction();
|
||||
e.getPlayer().sendMessage("Dist: " + entity.getLocation().distanceSquared(e.getPlayer().getLocation()));
|
||||
} else if (e.getPacketName().equals(Packet.Client.ARM_ANIMATION)) {
|
||||
e.getPlayer().sendMessage("You swung your arm.");
|
||||
}
|
||||
else if(e.getPacketName().equals(Packet.Client.POSITION)) {
|
||||
e.getPlayer().sendMessage("You updated your position!");
|
||||
} else if (e.getPacketName().equals(Packet.Client.BLOCK_DIG)) {
|
||||
PlayerDigType type = e.getPlayerDigType();
|
||||
} else if (e.getPacketName().equals(Packet.Client.CHAT)) {
|
||||
String message = e.getChatPacketMessage();
|
||||
}
|
||||
}
|
||||
|
||||
@PacketHandler
|
||||
public void onPacketSend(PacketSendEvent e) {
|
||||
//ONLY SERVER PACKETS ALLOWED HERE!
|
||||
if(e.getPacketName().equals(Packet.Server.ENTITY_VELOCITY)) {
|
||||
e.getPlayer().sendMessage("You took velocity!");
|
||||
if (e.getPacketName().equals(Packet.Server.ENTITY_VELOCITY)) {
|
||||
System.out.println("preee");
|
||||
Entity entity = e.getVelocityEntity();
|
||||
System.out.println(entity.getName());
|
||||
System.out.println(e.getVelocityX());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,8 +55,8 @@ public class TestExample implements PacketListener {
|
||||
public void onServerTick(ServerTickEvent e) {
|
||||
//CALLED EVERY TICK
|
||||
tick++;
|
||||
if(tick % 20 == 0) {
|
||||
for(Player p : Bukkit.getOnlinePlayers()) {
|
||||
if (tick % 20 == 0) {
|
||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||
p.sendMessage("One second has passed!");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,8 @@ public abstract class Packet {
|
||||
public static class Client {
|
||||
private static final String CLIENT = "PacketPlayIn";
|
||||
public static final String KEEP_ALIVE = CLIENT + "KeepAlive";
|
||||
|
||||
@Deprecated
|
||||
public static final String FLYING = CLIENT + "Flying";
|
||||
public static final String POSITION = CLIENT + "Position";
|
||||
public static final String POSITION_LOOK = CLIENT + "PositionLook";
|
||||
|
||||
Reference in new issue
Block a user