Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.lang.reflect.Field;
- import org.bukkit.Bukkit;
- import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer;
- import org.bukkit.entity.Player;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.player.PlayerJoinEvent;
- import org.bukkit.event.player.PlayerQuitEvent;
- import org.bukkit.plugin.java.JavaPlugin;
- import io.netty.channel.Channel;
- import io.netty.channel.ChannelDuplexHandler;
- import io.netty.channel.ChannelHandlerContext;
- import io.netty.channel.ChannelPipeline;
- import io.netty.channel.ChannelPromise;
- import net.minecraft.server.v1_14_R1.PacketPlayOutWorldParticles;
- import net.minecraft.server.v1_14_R1.ParticleParam;
- public class Main extends JavaPlugin implements Listener {
- @Override
- public void onEnable() {
- for (Player p : Bukkit.getOnlinePlayers()) {
- injectPlayer(p);
- }
- }
- @Override
- public void onDisable() {
- for (Player p : Bukkit.getOnlinePlayers()) {
- removePlayer(p);
- }
- }
- @EventHandler
- public void onjoin(PlayerJoinEvent event) {
- injectPlayer(event.getPlayer());
- }
- @EventHandler
- public void onleave(PlayerQuitEvent event) {
- removePlayer(event.getPlayer());
- }
- private void removePlayer(Player player) {
- Channel channel = ((CraftPlayer) player).getHandle().playerConnection.networkManager.channel;
- channel.eventLoop().submit(() -> {
- channel.pipeline().remove(player.getName());
- return null;
- });
- }
- private void injectPlayer(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- @Override
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- }
- @Override
- public void write(ChannelHandlerContext channelHandlerContext, Object packet, ChannelPromise channelPromise)
- throws Exception {
- if (packet instanceof PacketPlayOutWorldParticles) {
- PacketPlayOutWorldParticles particlePacket = (PacketPlayOutWorldParticles) packet;
- Field particleField = particlePacket.getClass().getDeclaredField("j");
- particleField.setAccessible(true);
- ParticleParam packetParticleFieldParam = (ParticleParam) particleField.get(particlePacket);
- if (packetParticleFieldParam.a().equals("minecraft:sweep_attack")) {
- return;
- }
- }
- super.write(channelHandlerContext, packet, channelPromise);
- }
- };
- ChannelPipeline pipeline = ((CraftPlayer) player).getHandle().playerConnection.networkManager.channel
- .pipeline();
- pipeline.addBefore("packet_handler", player.getName(), channelDuplexHandler);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment