Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getPlugin(), new Runnable() { @Override public void run() { try { Statement stmt = DatabaseManager.getCon().createStatement(); String sql = ("SELECT uuid, money FROM Accounts"); stmt.executeUpdate("USE " + ConfigManager.getConf().getString("Database.DBName")); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { uids.add(rs.getString(1)); money.put(rs.getString(1), rs.getInt(2)); } if (!ConfigManager.getConf().getBoolean("Settings.PayInterestOffline")) { try { for (String uid : uids) { Player pl = Bukkit.getPlayer(UUID.fromString(uid)); if (pl == null) { uids.remove(IndexIdentifier.getIndex(uid, uids)); money.remove(uid); } } } catch (Exception e) { } } for (int i = 0; i < uids.size(); i++) { try { String puid = uids.get(i); double doubleMoney = money.get(puid); if (doubleMoney > ConfigManager.getConf().getInt("Settings.MaximumMoney")) { continue; } else { doubleMoney = (((doubleMoney / 100) * percent) + doubleMoney); int intMoney = (int) Math.ceil(doubleMoney); stmt.executeUpdate("UPDATE Accounts SET money = " + intMoney + " WHERE uuid = '" + puid + "';"); Player p = Bukkit.getPlayer(UUID.fromString(puid)); if (p.isOnline() && p != null) { p.sendMessage( "§aYou've credited an interest of §6" + (int) Math.ceil((intMoney / 100) * percent) + ".0 " + ConfigManager.getConf().getString("Settings.currency")); } } money.remove(puid); uids.remove(i); } catch (NullPointerException e) { } } } catch (SQLException e) { e.printStackTrace(); } } }, 0, period);

问题描述 投票:0回答:1
有一种方法可以为每个在线玩家创建倒数计时。这意味着当玩家离开服务器时,倒计时停止,并在重新加入后恢复。

我正在寻找一种方法来为Java中的BankSystem插件创建特定于播放器的倒计时。目前,每个人都在同一时间引起他们的兴趣,因为我使用的是Bukkit调度程序。 Bukkit ....

java minecraft countdown bukkit
1个回答
0
投票
playersAndTimes.put(player.getUniqueId(), time)

现在,您只需在插件启用在线循环播放每个播放器时运行此功能,如果它们在HashMap中(对它们进行倒计时),它将每秒从其值中删除1:

Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getPlugin(Main.class), new Runnable() { @Override public void run() { for (Player player : Bukkit.getOnlinePlayers()) { if (playersAndTimes.containsKey(player.getUniqueId())) { if (playersAndTimes.get(player.getUniqueId()) >= 1) { playersAndTimes.put(player.getUniqueId(), playersAndTimes.get(player.getUniqueId()) - 1); } else { //The Player's Time Has Expired As The Number Associated With Their UUID In The Hashmap Is Now Equal To 0. //DO SOMETHING } } } } }, 0, 20);

© www.soinside.com 2019 - 2024. All rights reserved.