P2P-Develop/PeyangSuperbAntiCheat

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

Summary

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

import ml.peya.plugins.Enum.EnumCheatType;
import ml.peya.plugins.Utils.SQL;
import ml.peya.plugins.Utils.Utils;
import org.bukkit.entity.Player;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Date;
import java.util.HashMap;
import java.util.UUID;

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

/**
 * WatchEyeの管理をするクラス。
 */
public class WatchEyeManagement
{
    /**
     * WatchEyeにカラムに入れるべきもの含めて追加する。
     *
     * @param target   ターゲット。
     * @param fromName 名前。
     * @param fromUUID UUID。
     * @param level    レベル。
     * @return 管理ID。エラーが発生したら空白。
     */
    public static String add(Player target, String fromName, String fromUUID, int level)
    {
        final String manageId = UUID.randomUUID().toString().replace("-", "");
        try (Connection connection = eye.getConnection())
        {
            SQL.insert(connection, "watcheye",
                target.getUniqueId().toString().replace("-", ""),
                target.getName(),
                new Date().getTime(),
                fromName,
                fromUUID,
                manageId,
                level
            );
            return manageId;
        }
        catch (Exception e)
        {
            e.printStackTrace();
            Utils.errorNotification(Utils.getStackTrace(e));
            return "";
        }
    }

    /**
     * 事由を設定する。
     *
     * @param id     管理ID。
     * @param reason 事由。
     * @param vl     VL。
     * @return 設定が成功したかどうか。
     */
    public static boolean setReason(String id, EnumCheatType reason, int vl)
    {
        try (Connection connection = eye.getConnection())
        {
            String reasonString = reason.getSysName();
            if (reasonString.endsWith(" "))
                reasonString = reasonString.substring(0, reasonString.length() - 1);

            SQL.insert(connection, "watchreason",
                id,
                reasonString,
                vl
            );
            return true;
        }
        catch (Exception e)
        {
            e.printStackTrace();
            Utils.errorNotification(Utils.getStackTrace(e));
            return false;
        }
    }

    /**
     * レコードが存在するかチェックする
     *
     * @param targetUuid ターゲットのUUID。
     * @param fromUuid   普通のUUID。
     * @return 同じレコードであるかどうか。
     */
    public static boolean isExistsRecord(String targetUuid, String fromUuid)
    {
        try (Connection connection = eye.getConnection();
             PreparedStatement statement = connection.prepareStatement("SELECT MNGID FROM watcheye WHERE UUID=? AND ISSUEBYUUID=?"))
        {
            statement.setString(1, targetUuid);
            statement.setString(2, fromUuid);
            return statement.executeQuery().isBeforeFirst();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            Utils.errorNotification(Utils.getStackTrace(e));
            return false;
        }
    }

    /**
     * レコードが存在するかチェックする
     *
     * @param id 管理ID。
     * @return レコードが存在するかどうか
     */
    public static boolean isExistsRecord(String id) //メソッドの名前的に反転しなくておk
    {
        try (Connection connection = eye.getConnection();
             PreparedStatement statement = connection.prepareStatement("SELECT MNGID FROM watcheye WHERE MNGID=?"))
        {
            statement.setString(1, id);

            return statement.executeQuery().isBeforeFirst();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            Utils.errorNotification(Utils.getStackTrace(e));
            return false;
        }
    }

    /**
     * レコードを削除する
     *
     * @param uuid プレイヤーUUID
     */
    public static void deleteReportWithPlayerID(String uuid)
    {
        try (Connection report = eye.getConnection();
             PreparedStatement statement = report.prepareStatement("SELECT MNGID FROM watcheye WHERE UUID=?"))
        {
            statement.setString(1, uuid.replace("-", ""));

            ResultSet result = statement.executeQuery();
            while (result.next())
                SQL.delete(report, "watchreason", new HashMap<String, String>()
                    {{
                        put("MNGID", result.getString("MNGID"));
                    }}
                );

            SQL.delete(report, "watcheye",
                new HashMap<String, String>()
                {{
                    put("UUID", uuid.replace("-", ""));
                }}
            );

        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}