1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Идея Кто в MySQL шарит? Помогите

Тема в разделе "Запросы на разработку плагинов", создана пользователем DaniroCraft, 14 фев 2020.

  1. Автор темы
    DaniroCraft

    DaniroCraft Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Danirod_Gaming
    Мне нужно реализовать экономику на сервере с BungeeCord. Решил через MySQL делать с подключением от каждого Spigot сервера. Но сколько я не пытался сделать подключение или даже простую работу с MySQL. Я не смог. Может кто-то сказать, что делать. Как примерно реализовать это дело? Для нужна простая таблица Users. У неё 2 колонки Player, Money. И туда должны вноситься значения. Нужно сделать какие-то методы, чтобы когда я писал простой код, я просто всталял что-то типо такого:

    String player ...
    int balance ...
    set(player, balance);

    и такое:

    String player ...
    int bal = get(player);


    Что-то типо такого нужно написать. Для подробной информации можете обратиться сюда: https://vk.com/danirodplay! Я готов заплатить, но не очень много. Так что просьба отписать. Спасибо.
     
  2. _PhAnToM_

    _PhAnToM_ Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    DarkPhantom1337
    Этот класс когда-то работал, что сейчас хз по идеи должен
    Здесь в базу заносились доступные игроку эффекты.
    А там по примеру под себя подделаешь если робит
    package me.darkphantom1337.modules;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.ArrayList;

    public class MySQL {

    private Connection conn;
    private Statement statmt;
    private PreparedStatement preparedStatement = null;

    public MySQL(String url, String dbName, String user, String pass) {
    try {
    Class.forName("com.mysql.jdbc.Driver");
    conn = DriverManager.getConnection(
    "jdbc:mysql://" + url + "/" + dbName + "?useUnicode=true&characterEncoding=utf8&autoReconnect=true",user, pass);
    statmt = conn.createStatement();
    statmt.execute(
    "CREATE TABLE IF NOT EXISTS `users_trails` (`user` varchar(16) PRIMARY KEY,"
    + "`Flame` BOOLEAN NOT NULL,"
    + "`Slime` BOOLEAN NOT NULL,"
    + "`Heart` BOOLEAN NOT NULL,"
    + "`Smoke` BOOLEAN NOT NULL,"
    + "`EnchTable` BOOLEAN NOT NULL,"
    + "`Crit` BOOLEAN NOT NULL,"
    + "`Note` BOOLEAN NOT NULL,"
    + "`Cloud` BOOLEAN NOT NULL,"
    + "`VHappy` BOOLEAN NOT NULL,"
    + "`VAngry` BOOLEAN NOT NULL,"
    + "`Portal` BOOLEAN NOT NULL,"
    + "`RStone` BOOLEAN NOT NULL,"
    + "`Totem` BOOLEAN NOT NULL,"
    + "`DrBreath` BOOLEAN NOT NULL)");
    Utils.sendMesSucc();
    } catch (Exception e) {
    Utils.sendMesWarn();;
    }
    }

    public void insert(String user, Boolean Flame,Boolean Slime,Boolean Heart,Boolean Smoke,Boolean EnchTable, Boolean Crit, Boolean Note, Boolean Cloud,Boolean VHappy,Boolean VAngry,Boolean Portal,Boolean RStone,Boolean Totem,Boolean DrBreath) {
    try {
    PreparedStatement e = conn.prepareStatement(
    "INSERT INTO users_trails (user,Flame,Slime,Heart,Smoke,EnchTable,Crit,Note,Cloud,VHappy,VAngry,Portal,RStone,Totem,DrBreath) "
    + "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ON DUPLICATE KEY UPDATE Flame = ?, Slime = ?, Heart = ?, Smoke = ?,"
    + " EnchTable = ?, Crit = ?, Note = ?, Cloud = ?, VHappy = ?, VAngry = ?, Portal = ?, RStone = ?, Totem = ?, DrBreath = ?;");
    e.setString(1, user);
    e.setBoolean(2, Flame);
    e.setBoolean(3, Slime);
    e.setBoolean(4, Heart);
    e.setBoolean(5, Smoke);
    e.setBoolean(6, EnchTable);
    e.setBoolean(7, Crit);
    e.setBoolean(8, Note);
    e.setBoolean(9, Cloud);
    e.setBoolean(10, VHappy);
    e.setBoolean(11, VAngry);
    e.setBoolean(12, Portal);
    e.setBoolean(13, RStone);
    e.setBoolean(14, Totem);
    e.setBoolean(15, DrBreath);
    e.setBoolean(16, Flame);
    e.setBoolean(17, Slime);
    e.setBoolean(18, Heart);
    e.setBoolean(19, Smoke);
    e.setBoolean(20, EnchTable);
    e.setBoolean(21, Crit);
    e.setBoolean(22, Note);
    e.setBoolean(23, Cloud);
    e.setBoolean(24, VHappy);
    e.setBoolean(25, VAngry);
    e.setBoolean(26, Portal);
    e.setBoolean(27, RStone);
    e.setBoolean(28, Totem);
    e.setBoolean(29, DrBreath);
    e.executeUpdate();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    public ArrayList<Boolean> select(String user) {
    try {
    preparedStatement = conn.prepareStatement("SELECT Flame,Slime,Heart,Smoke,EnchTable,Crit,Note,Cloud,VHappy,VAngry,Portal,RStone,Totem,DrBreath FROM users_trails WHERE user = ?;");
    preparedStatement.setString(1, user);
    ResultSet e = preparedStatement.executeQuery();
    ArrayList<Boolean> item = new ArrayList<Boolean>();
    if (e.next()) {
    item.add(e.getBoolean("Flame"));
    item.add(e.getBoolean("Slime"));
    item.add(e.getBoolean("Heart"));
    item.add(e.getBoolean("Smoke"));
    item.add(e.getBoolean("EnchTable"));
    item.add(e.getBoolean("Crit"));
    item.add(e.getBoolean("Note"));
    item.add(e.getBoolean("Cloud"));
    item.add(e.getBoolean("VHappy"));
    item.add(e.getBoolean("VAngry"));
    item.add(e.getBoolean("Portal"));
    item.add(e.getBoolean("RStone"));
    item.add(e.getBoolean("Totem"));
    item.add(e.getBoolean("DrBreath"));
    e.close();
    return item;
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    return null;
    }
    }
     
  3. mine88

    mine88 Старожил Пользователь

    Баллы:
    143
    Пили плагин, который будет стоять на каждом сервере, чтобы собирать данные и вносить их в таблицу{server| player | money}
    Далее на банже плагин, который будет выводить сумму
    {server | player |money
    +
    {server | player |money2}
     
  4. gummi_anka

    gummi_anka Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    gummi_anka
    Делай объект аккаунта экономики аля Account в нём 2 поля
    String name
    double balance
    и геттерысеттеры для них

    Далее какой-нить менеджер экономики EconomyManager, и тут уже на выбор, либо делаешь мапу с игроками и при загрузке сервера загружаешь туда всю инфу, либо какой-нить кэш, когда при заходе загружаешь, а при выходе через пару мин удаляешь, но вообще х** там плавал с вашим кэшированием! у нас энтерпрайз а значит оперативки всегда хватит!

    юзаем простую утилиту https://hastebin.com/ohekuwoyak.java

    создаём таблицу
    CREATE TABLE IF NOT EXISTS users (ID INT NOT NULL AUTO_INCREMENT, name VARCHAR(10) (а больше и не надо, кто юзает вообще ники длинною больше 10 символов?) NOT NULL UNIQUE, balance DOUBLE, PRIMARY KEY (ID)) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4 COLLATE utf8mb4_bin"

    при старте сервака загружаем всё из бд в мапу
    rsSync("SELECT * FROM users", rs -> {
    while(rs.next()) {
    var name = rs.getString("name");
    var balance = rs.getDouble("balance");
    map.put(name, new Account(name, balance));
    }

    return null;
    });

    далее делаешь методы создания и сохранения пользователя и юзаешь простые запросы

    создать пользователя:
    updateSync("INSERT INTO users (name, balance) VALUES (имя, баланс));

    обновить его баланс еще проще:
    updateSync("UPDATE users SET balance = баланс WHERE name = имя");

    для синхронизации пиши кор

    всё твоя экономика готова, теперь можно спать спокойно

    [​IMG]
     
  5. Автор темы
    DaniroCraft

    DaniroCraft Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Danirod_Gaming
    Ну я примерно понял. Постараюсь что-то такое написать.
     
  6. Автор темы
    DaniroCraft

    DaniroCraft Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Danirod_Gaming
  7. Bananakk

    Bananakk Активный участник

    Баллы:
    61
    Вы так и делали в AnkaEssentials?
     
  8. SashaBrine

    SashaBrine Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    IJustFortiLive
    За такое палками бить надо
     
  9. Sturm_PT

    Sturm_PT Активный участник Пользователь

    Баллы:
    76
    А за некропостинг не надо?
     

Поделиться этой страницей