[OFFTOPIC]Цифры в коде поставлены в целях отладки[/OFFTOPIC]
Сап спигот. Имею почти рабочий плагин, который подсчитывает проведенное игроком время на сервере.
Дополнительный класс-считалочка:
Проверили код со знакомым джавером, всё должно работать... Но оно не работает. Именно тогда я и добавил циферки. Итак, лог:
То есть код тормозит на
PS. В целях теста скрипт считает минуты, а не часы
Сап спигот. Имею почти рабочий плагин, который подсчитывает проведенное игроком время на сервере.
Java:
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
public final class SapphireTimer extends JavaPlugin implements Listener {
private final Map<UUID, PlayTime> playerTime = new HashMap<>();
@Override
public void onEnable() {
getLogger().info(ChatColor.AQUA + "Successfully enabled.");
Bukkit.getPluginManager().registerEvents(this, this);
Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> {
getLogger().info("3");
playerTime.forEach((player, playTime) -> {
long now = System.currentTimeMillis();
long differenceInHours = TimeUnit.MILLISECONDS.toMinutes(now - playTime.getStart());
Player p = Bukkit.getPlayer(player);
getLogger().info("4");
switch ((int) differenceInHours) {
case 1:
p.sendMessage("1");
break;
case 2:
p.sendMessage("2");
break;
default:
break;
}
});
}, 0L, 1200L);
}
@Override
public void onDisable() {
getLogger().info(ChatColor.AQUA + "Successfully disabled.");
}
@EventHandler
public void onJoin(PlayerJoinEvent e) {
getLogger().info("1");
Player p = e.getPlayer();
UUID uuid = p.getUniqueId();
if (!playerTime.containsKey(uuid)) {
playerTime.put(uuid, new PlayTime());
}
getLogger().info("2");
}
@EventHandler
void onQuit(PlayerQuitEvent e) {
getLogger().info("5");
Player p = e.getPlayer();
UUID uuid = p.getUniqueId();
playerTime.remove(uuid);
getLogger().info("6");
}
}
Дополнительный класс-считалочка:
Java:
public class PlayTime {
private final long start = System.currentTimeMillis();
public long getStart() {
return start;
}
}
Проверили код со знакомым джавером, всё должно работать... Но оно не работает. Именно тогда я и добавил циферки. Итак, лог:
Java:
[22:19:21] [Server thread/INFO]: [SapphireTimer] 1
[22:19:21] [Server thread/INFO]: [SapphireTimer] 2
[22:19:22] [Server thread/INFO]: Black_Baroness[/127.0.0.1:50365] logged in with entity id 200 at ([world]-187.68818107282408, 68.24124201567889, -171.5977566799813)
[22:20:11] [Craft Scheduler Thread - 4/INFO]: [SapphireTimer] 3
[22:20:11] [Craft Scheduler Thread - 4/INFO]: [SapphireTimer] 4
То есть код тормозит на
switch ((int) differenceInHours)
. Почему - понятия не имею.PS. В целях теста скрипт считает минуты, а не часы