JDBC - java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

Доброго времени суток друзья. У меня стоит задача подключить к моду базу данных, и выводить из нее на экран игрока различные данные
Я ознакомился с тотуриалом на форуме а именно этот. Делал все как описано, делал все по своему, менял версию коннектора, менял способы включения его в проект, но все идет крахом. Клиент то вылетает, то пишет что не найден драйвер, то еще что то, то запрос конyект возвращает null.

Пожалуйста ознакомьтесь с кодом, и помогите разобраться что не так. может у кого то есть рабочий пример?
к слову я делаю запросы со стороны клиента, это возможно не правильно, но пока пытаюсь просто разобраться, в SQL я не новичек, но java для меня темный лес пока что. Все остальное у меня получается, вот стоит проблема только с JDBC.

gradle build на данный момент
sourse:
buildscript {
    repositories {
        // These repositories are only for Gradle plugins, put any other repositories in the repository block further below
        maven { url = 'https://maven.minecraftforge.net' }
        mavenCentral()
    }
    dependencies {
        classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true
        classpath 'mysql:mysql-connector-java:5.1.44'
    }
}
**********************
dependencies {
    minecraft 'net.minecraftforge:forge:1.18.2-40.0.13'
    implementation group: 'mysql', name: 'mysql-connector-java', version: '5.1.44'
    }

а вот весь класс в котором я пытаюсь реализовать банальное подключение к БД
тапками не кидайтесь, я уже перепробовал кучу способов запустить этот код, и с сервера, и без него, и в событии игрок зашел на сервер, и при инициализации мода. что я только не пробовал, помогите пожалуйста найти решение, ткните носом откуда этот код должен запускаться

item unteact:
package com.bodryk.gothic.item;

import net.minecraft.world.level.Level;
import net.minecraft.world.item.Rarity;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.InteractionHand;

import java.sql.*;


public class QweItem extends Item {
    private static final String user = "ee";
    private static final String password = "ee";
    private static final String url = "jdbc:mysql://localhost:3306/gothic";

    public static Connection connection;
    public static Statement statement = null;
    public static ResultSet resSet;

    public QweItem() {
        super(new Item.Properties().tab(CreativeModeTab.TAB_MISC).stacksTo(64).rarity(Rarity.COMMON));
    }

    @Override
    public int getUseDuration(ItemStack itemstack) {
        return 0;
    }

    @Override
    public InteractionResultHolder<ItemStack> use(Level world, Player entity, InteractionHand hand){
        InteractionResultHolder<ItemStack> ar = super.use(world, entity, hand);
        ItemStack itemstack = ar.getObject();
        double x = entity.getX();
        double y = entity.getY();
        double z = entity.getZ();

        try {
            sqlcod();
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        }


        return ar;
    }

    public void sqlcod() throws SQLException, ClassNotFoundException {
        String user = "u73600_ClYjqLjJ56";
        String pass = "YKiN@5Tyrb=qDf^Al8fWs2y4";
        String url = "jdbc:mysql://mysql2.joinserver.xyz:3306/s73600_gothic";

        Connection connection;
        Statement statement;
        ResultSet resSet;

        System.out.println(user);
        System.out.println(pass);
        System.out.println(url);
        Class.forName("com.mysql.jdbc.Driver");
        connection = DriverManager.getConnection(url, user, pass);
        statement = connection.createStatement();
        System.out.println("СТАТМЕНТ СОЗДАН НО ЭТО НЕ ТОЧНО");
        resSet = statement.executeQuery("select * from players");
        resSet.next();
        System.out.println(resSet.getString("name"));
        statement.close();
        connection.close();
    }
}



console:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    at [email protected]/cpw.mods.cl.ModuleClassLoader.loadClass(ModuleClassLoader.java:134)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    at [email protected]/cpw.mods.cl.ModuleClassLoader.loadClass(ModuleClassLoader.java:134)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:375)
    at TRANSFORMER/[email protected]/com.bodryk.gothic.item.QweItem.sqlcod(QweItem.java:63)
    at TRANSFORMER/[email protected]/com.bodryk.gothic.item.QweItem.use(QweItem.java:42)
    at TRANSFORMER/[email protected]/net.minecraft.world.item.ItemStack.use(ItemStack.java:252)
    at TRANSFORMER/[email protected]/net.minecraft.server.level.ServerPlayerGameMode.useItem(ServerPlayerGameMode.java:293)
    at TRANSFORMER/[email protected]/net.minecraft.server.network.ServerGamePacketListenerImpl.handleUseItem(ServerGamePacketListenerImpl.java:1017)
    at TRANSFORMER/[email protected]/net.minecraft.network.protocol.game.ServerboundUseItemPacket.handle(ServerboundUseItemPacket.java:23)
    at TRANSFORMER/[email protected]/net.minecraft.network.protocol.game.ServerboundUseItemPacket.handle(ServerboundUseItemPacket.java:7)
    at TRANSFORMER/[email protected]/net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$0(PacketUtils.java:22)
    at TRANSFORMER/[email protected]/net.minecraft.server.TickTask.run(TickTask.java:17)
    at TRANSFORMER/[email protected]/net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:143)
    at TRANSFORMER/[email protected]/net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:22)
    at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:799)
    at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:164)
    at TRANSFORMER/[email protected]/net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:116)
    at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:782)
    at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:776)
    at TRANSFORMER/[email protected]/net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:126)
    at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:762)
    at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:689)
    at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:261)
    at java.base/java.lang.Thread.run(Thread.java:833)

При всем этом, данный код, корректно работает вне проекта
 
1,074
72
372
Всё крайне просто: система сборки использует библиотеки только для сборки и запуска, подключая их в classpath. Создание fat jar нужно прописывать самому. Из секции buildscript убери зависимость, эта секция предназначена для подключения плагинов к Gradle.
В случае Forge библиотеки можно просто бросать в папку mods - ругнётся, что не мод, но в classpath подключит.

С клиента нельзя работать с MySQL! Это серверное решение. На клиенте максимум это встраиваемые файловые БД вроде SQLite и H2.
 
Сверху