I am trying to make a basic chess AI. I have the class "Schach" that stores ArrayLists of the white Figures and the black Figures. When it's the AI's turn to make a move i first add all the moves and in teh next step I want to remove the ones that put itself in check. But for some reason The AI just executes every single possible move it has. I am not even updating the lists in the main class, the problem relies on the lists always having a reference to the ones in the AI class.
ALSO I already tried the clone() method and it didn't work. Any suggestions??
public class Ai {
    public static final Ai ai = new Ai();
    private static int maxY = 8;
    private static int maxX = 7;
    private static int minY = 1;
    private static int minX = 0;
    private static ArrayList<Entity> whiteFigures;
    private static ArrayList<Entity> blackFigures;
    private static ArrayList<Move> moves;
    public void processMoves() {
        moves = new ArrayList<Move>();
        resetLists();
        for (Entity e : blackFigures) {
            moves.addAll(calcMoves(e.getFigure(), blackFigures, whiteFigures));
        }
        System.out.println(moves.size());
        //removeCheckMoves();
        System.out.println(moves.size());
        executeMove(moves.get((int) (Math.random() * moves.size())));
        resetLists();
        Schach.turn = true;
    }
    private void removeCheckMoves() {
        Figure king = null;
        for (Entity e : blackFigures) {
            if (e.getFigure().type == Figure.king) {
                king = e.getFigure();
                break;
            }
        }
        ArrayList<Move> legalMoves = new ArrayList<Move>();
        for (Move m : moves) {
            resetLists();
            executeMove(m);
            if(!isLegal(king)) {
                legalMoves.add(m);
            }
        }
        
        moves = legalMoves;
    }
    
    private boolean isLegal(Figure king) {
        
        boolean check = false;
        for (Entity w : whiteFigures) {
            for (Move move : Utils.calcMoves(w.getFigure(), whiteFigures, blackFigures)) {
                if (Utils.numToPos(move.to).x == king.x && Utils.numToPos(move.to).y == king.y) {
                    check = true;
                    break;
                }
            }
            if(check) break;
        }
        return check;
        
    }
    private void executeMove(Move m) {
        for (Entity e : blackFigures) {
            if (e.getFigure().x == Utils.numToPos(m.from).x && e.getFigure().y == Utils.numToPos(m.from).y) {
                e.getFigure().x = Utils.numToPos(m.to).x;
                e.getFigure().y = Utils.numToPos(m.to).y;
                e.gotoSquare(Utils.posToNum(e.getFigure()) - 8);
                for (Entity w : whiteFigures) {
                    if (w.getFigure().x == e.getFigure().x && w.getFigure().y == e.getFigure().y) {
                        whiteFigures.remove(w);
                        break;
                    }
                }
                break;
            }
        }
    }
    private void resetLists() {
        
        whiteFigures = new ArrayList<Entity>();
        whiteFigures.clear();
        whiteFigures.addAll(Schach.whiteFigures);
        blackFigures = new ArrayList<Entity>();
        blackFigures.clear();
        blackFigures.addAll(Schach.blackFigures);
    }
//calcMoves function (works fine no reference here for sure)
}
EDIT
with this setup the ai shouldnt execute a move at all just calculate them...
EDIT 2 The resetLists function is the main issue (I guess)
