Posts by Vamp

    Code
    Style chatStyle = new Style();
    chatStyle.font.set(Font.Mono);
    @EventMethod
    public void onPlayerConnect(PlayerConnectEvent event) {
    Internals.overwriteUIStyle(event.getPlayer(),"HudLayer/hudContainer/chatContainer/chatElement",chatStyle);
    }

    I'm going to share a couple of functions I use to save/get data, which also takes in account attributes.
    With these you can simply call get/set data, if it exists returns the value and if not it returns 0.

    //Call InitDB() when plugin starts, to create a player database

    void InitDB() throws SQLException {

    db = getSQLiteConnection(getPath() + "/players.db");

    String query = "CREATE TABLE IF NOT EXISTS `userdata` " +

    "(`id` INTEGER PRIMARY KEY, " +

    "`userid` TEXT, " +

    "`key` TEXT, " +

    "`value` TEXT)";

    db.execute(query);}

    //Usage: int stepsTaken = Integer.parseInt(getData(player,"stepsTaken"));

    String getData(Player player, String key) {

    if(player.hasAttribute(key)) return player.getAttribute(key).toString();

    String ret = "0";

    String userid = player.getUID();

    String query = "SELECT `value` FROM `userdata` WHERE `key`='%s' AND `userid`='%s' LIMIT 1".formatted(key,userid);

    try(ResultSet res = db.executeQuery(query))

    {

    while(res.next())

    {

    ret = res.getString("value");

    if(ret == null) ret = "0";

    //if(key.equals("level") && ret.equals("0")) ret = "1";

    return ret;

    }

    }

    catch (SQLException e)

    {

    System.out.println(e.getMessage());

    }

    //if(key.equals("level") && ret.equals("0")) ret = "1";

    return ret;

    }

    //usage: int steps = 200;

    //setData(player, "stepsTaken", steps);

    void setData(Player player, String key, Object obVal)

    {

    if(!player.isConnected()) return;

    String val = obVal.toString();

    if(player.hasAttribute(key))

    {

    String at = (String)player.getAttribute(key);

    if(at.equals(val)) return;

    }

    player.setAttribute(key,val);

    String userid = player.getUID();

    String delquery = "DELETE FROM `userdata` WHERE `userid`='%s' AND `key`='%s;'".formatted(userid,key);

    if(val.equals("false"))

    {

    db.execute(delquery);

    //player.setAttribute(key,null);

    player.deleteAttribute(key);

    return;

    }

    db.execute(delquery);

    String query =

    "INSERT OR IGNORE INTO `userdata` (`userid`, `key`, `value`) VALUES ('%s','%s','%s');"

    .formatted(userid,key,

    val);

    db.execute(query);

    query = "UPDATE `userdata` SET `value`='%s' WHERE `key`='%s' AND `userid`='%s'".formatted(val,key,userid);

    db.execute(query);

    }


    With those set up, you can persist attribute data on the go. You can also modify them for npcs, plants, etc.