P2P-Develop/PeyangSuperbAntiCheat

View on GitHub
src/main/java/ml/peya/plugins/DetectClasses/Packets.java

Summary

Maintainability
A
0 mins
Test Coverage
package ml.peya.plugins.DetectClasses;

import com.comphenix.protocol.events.*;
import com.comphenix.protocol.wrappers.*;
import net.minecraft.server.v1_12_R1.*;

import java.lang.reflect.*;

import static ml.peya.plugins.Variables.cheatMeta;

/**
 * サーバーとプラグイン間とのパケットを管理します。
 * たまに編集します。
 */
public class Packets
{

    /**
     * プレイヤーからのNPC攻撃イベントを元に、VLを追加
     *
     * @param e 餌食にするパケットイベント。
     */
    public static void useEntity(PacketEvent e)
    {
        try
        {
            if (e.getPacket().getEntityUseActions().readSafely(0) != EnumWrappers.EntityUseAction.ATTACK)
                return;

            final PacketPlayInUseEntity entity = (PacketPlayInUseEntity) e.getPacket().getHandle();
            Field field = entity.getClass().getDeclaredField("a");
            field.setAccessible(true);

            cheatMeta.getMetas()
                .stream()
                .filter(meta ->
                {
                    try
                    {
                        return meta.getId() == field.getInt(entity) &&
                            meta.getTarget().getUniqueId() == e.getPlayer().getUniqueId();
                    }
                    catch (IllegalAccessException ex)
                    {
                        ex.printStackTrace();
                    }
                    return false;
                }).forEachOrdered(meta -> {
                if (meta.getNpcLocation() != null)
                    meta.addAngle(meta.getTarget().getEyeLocation().getDirection().angle(meta.getNpcLocation().subtract(meta.getTarget().getEyeLocation().toVector())));

                System.out.println(meta.addVL());
            });
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }

}