Advertisement
Guest User

Untitled

a guest
Jun 18th, 2021
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.13 KB | None | 0 0
  1. package net.wardensmp.plugins.dev.npc;
  2.  
  3. import io.netty.channel.Channel;
  4. import io.netty.channel.ChannelHandlerContext;
  5. import io.netty.handler.codec.MessageToMessageDecoder;
  6. import net.minecraft.server.v1_16_R3.EntityPlayer;
  7. import net.minecraft.server.v1_16_R3.Packet;
  8. import net.minecraft.server.v1_16_R3.PacketPlayInUseEntity;
  9. import org.bukkit.Bukkit;
  10. import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer;
  11. import org.bukkit.entity.Player;
  12.  
  13. import java.lang.reflect.Field;
  14. import java.util.HashMap;
  15. import java.util.List;
  16. import java.util.Map;
  17. import java.util.UUID;
  18.  
  19. public class PacketReader {
  20.  
  21. Channel channel;
  22. public static Map<UUID, Channel> channels = new HashMap<>();
  23.  
  24. public void inject(Player player) {
  25. channel = ((CraftPlayer) player).getHandle().playerConnection.networkManager.channel;
  26. channels.put(player.getUniqueId(), channel);
  27.  
  28. if (channel.pipeline().get("PacketInjector") != null) {
  29. return;
  30. }
  31. channel.pipeline().addAfter("decoder", "PacketInjector", new MessageToMessageDecoder<PacketPlayInUseEntity>() {
  32. @Override
  33. protected void decode(ChannelHandlerContext channel, PacketPlayInUseEntity packet, List<Object> arg) throws Exception {
  34. arg.add(packet);
  35. readPacket(player, packet);
  36. }
  37. });
  38. }
  39.  
  40. public void uninject(Player player) {
  41. channel = channels.get(player.getUniqueId());
  42. if (channel.pipeline().get("PacketInjector") != null) {
  43. channel.pipeline().remove("PacketInjector");
  44. }
  45. }
  46.  
  47. public void readPacket(Player player, Packet<?> packet) {
  48. System.out.println("Packet >> " + packet);
  49.  
  50. if (packet.getClass().getSimpleName().equalsIgnoreCase("PacketPlayInUseEntity")) {
  51. if (getValue(packet, "action").toString().equalsIgnoreCase("ATTACK")) {
  52. return;
  53. }
  54. if (getValue(packet, "d").toString().equalsIgnoreCase("OFF_HAND")) {
  55. return;
  56. }
  57. if (getValue(packet, "action").toString().equalsIgnoreCase("INTERACT_AT")) {
  58. return;
  59. }
  60. int id = (int) getValue(packet, "a");
  61. if (getValue(packet, "action").toString().equalsIgnoreCase("INTERACT")) {
  62. for (EntityPlayer npc : NPC.getNPCs()) {
  63. if (npc.getId() == id) {
  64. Bukkit.getScheduler().scheduleSyncDelayedTask(NPCPlugin.getPlugin(NPCPlugin.class), () -> {
  65. Bukkit.getPluginManager().callEvent(new RightClickNPC(player, npc));
  66. }, 0);
  67. }
  68. }
  69. }
  70. }
  71. }
  72.  
  73. private Object getValue(Object instance, String name) {
  74. Object result = null;
  75.  
  76. try {
  77. Field field = instance.getClass().getDeclaredField(name);
  78. field.setAccessible(true);
  79. result = field.get(instance);
  80. field.setAccessible(false);
  81. } catch (Exception e) {
  82. e.printStackTrace();
  83. }
  84.  
  85. return result;
  86. }
  87. }
  88.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement