P2P-Develop/PeyangSuperbAntiCheat

View on GitHub
src/main/java/ml/peya/plugins/Gui/Items/Target/AuraBotItem.java

Summary

Maintainability
A
35 mins
Test Coverage
package ml.peya.plugins.Gui.Items.Target;

import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import ml.peya.plugins.Gui.IItems;
import ml.peya.plugins.Gui.Item;
import ml.peya.plugins.Utils.Utils;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import java.lang.reflect.Field;
import java.util.UUID;

import static ml.peya.plugins.Utils.MessageEngine.get;
import static ml.peya.plugins.Utils.MessageEngine.pair;

/**
 * 回るBot
 */
public class AuraBotItem implements IItems
{
    /**
     * このクラスのフィールドを取得します。
     *
     * @param target    this.
     * @param name      名前。
     * @param fieldType フィールドの種類。
     * @param index     インデックス。
     * @param <T>       どんな型も入るよ!
     * @return 取得できたフィールド。
     */
    private static <T> Field getField(Class<?> target, String name, Class<T> fieldType, int index)
    {
        int localIndex = index;

        for (final Field field : target.getDeclaredFields())
        {
            if ((name == null || field.getName().equals(name)) && fieldType.isAssignableFrom(field.getType()) && localIndex-- <= 0)
            {
                field.setAccessible(true);
                return field;
            }
        }

        if (target.getSuperclass() != null)
            return getField(target.getSuperclass(), name, fieldType, localIndex);
        throw new IllegalArgumentException("Cannot find field with type " + fieldType);
    }

    /**
     * イベント発動時の処理をオーバーライドします。
     *
     * @param player 実行しているプレイヤー。
     * @param target ターゲット。
     */
    @Override
    public void run(Player player, String target)
    {
        player.performCommand("aurabot " + target);
    }

    /**
     * アイテムを取得する関数のオーバーライド。どのようなアイテムを返すか、どのような動きをするか、などと言った詳細をこの関数で設定し、アイテムとして返す。
     *
     * @param target ターゲットが誰であるか。
     * @return 関数内の処理によって設定されたアイテム。
     */
    @Override
    public ItemStack getItem(String target)
    {

        ItemStack stack = new ItemStack(Material.SKULL_ITEM, 1, (short) 3);
        ItemMeta meta = stack.getItemMeta();
        meta.setDisplayName(get("item.execute", pair("command", "AuraBot")));

        GameProfile profile = new GameProfile(UUID.randomUUID(), "AURA_BOT");

        final String __DOG_SKIN = "ewogICJ0aW1lc3RhbXAiIDogMTU5MzUwOTE0MTgxNiwKICAicHJvZmlsZUlkIiA6ICI0YTc5MmE2YTVkYTI0ODUyODM4N2JkY2YyNjdjNjhkYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJBY3R1YWxseUp1c3RhZG9nIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2UwMzQ2YTQ4YjI4YjEzYWU2ZjkyZWQxOGI3MDRhZmFkY2IzMGIzMGJkZTFjYTk4Yzk4OGM1OTE1MjJiZTYyMzgiCiAgICB9CiAgfQp9";
        final String __SIGNATURE = "fuFok5TwMcvFBKhU+SeIgVUSugsAhqw/4kTF4ErZ5I/726goNMte6fDJmwy1rKSHsvRxtlZboNpJD96pRUOOLnVFXqaVkxEDJoH0VHvtTTcabw3EPMgC0HbjYxiC2X07Kwjrt/FlA1xezX2G6pd5/cvOnDwFBxDz0Na7adraJOclMlSaC/Yuo80IetIJUPjXkwUqeOFzQsZmokI8Bi4c34SbTzB93o2xVhv4Vft4A9oFxc1nik3uDFBqT59Slh9+vWdjpsF2gXLUkegpHJnZIaX/sG8u1MXurLlpvkwbm0/8u9PC6iAIOMuNReT+y0+nhulKEMp9rY0H36FIgqotJyCe3FboWwQfdrQh4UKwsSTUn46KyOFSmN2Ig6a1NyXSuHcFQQ+o3CRiByZwVuzphChvp/2rD3Dx1LsDw5zGgo72+KUQ9UZji+OswRfrLFhOKbzctwadFGp77JabmKMPAcGB2gv7bIeT0/NnzMLoGPC0VAxJAvF4nk3z/ywTAr0MtsZ6X5BDPHC0AWQIpz575GhGrjw/QdjIjncd+Ye1a993faSIsCvTam4amzORj7Vx705sqaepzweQXsDrY3S0EBAGaBe0nkItA+aTDCNGmKEyijZIYIaw05DoJKnrVeQUclPmtLHzBMnqfkY42vecF9W2pkDuBfA3Ev5VzoQ3HB0=";
        profile.getProperties().put("textures", new Property("textures", __DOG_SKIN, __SIGNATURE));

        meta.setLore(Item.getLore(this, target));

        try
        {
            getField(meta.getClass(), "profile", GameProfile.class, 0).set(meta, profile);

        }
        catch (Exception e)
        {
            e.printStackTrace();
            Utils.errorNotification(Utils.getStackTrace(e));
        }

        stack.setItemMeta(meta);
        return stack;
    }

    /**
     * インベントリに空きスペースがあるかどうかを確認する関数のオーバーライド。この関数は使わないため実装は不要。
     *
     * @return 実装は不要なためfalse。
     */
    @Override
    public boolean canSpace()
    {
        return false;
    }

    /**
     * どのようなIDであるか取得する。詳細はPSACドキュメントを参照。
     *
     * @return このアイテムの実行ID。
     */
    @Override
    public String getExecName()
    {
        return "AURA_BOT";
    }

    /**
     * どのようなタイプであるか取得する。
     *
     * @return 実はTARGETだった。
     */
    @Override
    public Type getType()
    {
        return Type.TARGET;
    }
}