BingoRufus

Disable Sweep Attack

May 5th, 2020
1,566
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.63 KB | None | 0 0
  1. import java.lang.reflect.Field;
  2.  
  3. import org.bukkit.Bukkit;
  4. import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer;
  5. import org.bukkit.entity.Player;
  6. import org.bukkit.event.EventHandler;
  7. import org.bukkit.event.Listener;
  8. import org.bukkit.event.player.PlayerJoinEvent;
  9. import org.bukkit.event.player.PlayerQuitEvent;
  10. import org.bukkit.plugin.java.JavaPlugin;
  11.  
  12. import io.netty.channel.Channel;
  13. import io.netty.channel.ChannelDuplexHandler;
  14. import io.netty.channel.ChannelHandlerContext;
  15. import io.netty.channel.ChannelPipeline;
  16. import io.netty.channel.ChannelPromise;
  17. import net.minecraft.server.v1_14_R1.PacketPlayOutWorldParticles;
  18. import net.minecraft.server.v1_14_R1.ParticleParam;
  19.  
  20. public class Main extends JavaPlugin implements Listener {
  21.  
  22.     @Override
  23.     public void onEnable() {
  24.         for (Player p : Bukkit.getOnlinePlayers()) {
  25.             injectPlayer(p);
  26.         }
  27.     }
  28.  
  29.     @Override
  30.     public void onDisable() {
  31.         for (Player p : Bukkit.getOnlinePlayers()) {
  32.             removePlayer(p);
  33.         }
  34.     }
  35.  
  36.     @EventHandler
  37.     public void onjoin(PlayerJoinEvent event) {
  38.         injectPlayer(event.getPlayer());
  39.     }
  40.  
  41.     @EventHandler
  42.     public void onleave(PlayerQuitEvent event) {
  43.         removePlayer(event.getPlayer());
  44.     }
  45.  
  46.     private void removePlayer(Player player) {
  47.         Channel channel = ((CraftPlayer) player).getHandle().playerConnection.networkManager.channel;
  48.         channel.eventLoop().submit(() -> {
  49.             channel.pipeline().remove(player.getName());
  50.             return null;
  51.         });
  52.     }
  53.  
  54.     private void injectPlayer(Player player) {
  55.         ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
  56.  
  57.             @Override
  58.             public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
  59.                 super.channelRead(channelHandlerContext, packet);
  60.             }
  61.  
  62.             @Override
  63.             public void write(ChannelHandlerContext channelHandlerContext, Object packet, ChannelPromise channelPromise)
  64.                     throws Exception {
  65.  
  66.                 if (packet instanceof PacketPlayOutWorldParticles) {
  67.                     PacketPlayOutWorldParticles particlePacket = (PacketPlayOutWorldParticles) packet;
  68.                     Field particleField = particlePacket.getClass().getDeclaredField("j");
  69.                     particleField.setAccessible(true);
  70.                     ParticleParam packetParticleFieldParam = (ParticleParam) particleField.get(particlePacket);
  71.                     if (packetParticleFieldParam.a().equals("minecraft:sweep_attack")) {
  72.                         return;
  73.                     }
  74.                 }
  75.                 super.write(channelHandlerContext, packet, channelPromise);
  76.             }
  77.  
  78.         };
  79.  
  80.         ChannelPipeline pipeline = ((CraftPlayer) player).getHandle().playerConnection.networkManager.channel
  81.                 .pipeline();
  82.         pipeline.addBefore("packet_handler", player.getName(), channelDuplexHandler);
  83.  
  84.     }
  85. }
Advertisement
Add Comment
Please, Sign In to add comment