diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/DeathrunChallengeEventMonth.java b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/DeathrunChallengeEventMonth.java index c82a470..6519400 100644 --- a/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/DeathrunChallengeEventMonth.java +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/DeathrunChallengeEventMonth.java @@ -49,8 +49,15 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; +import org.bukkit.potion.PotionEffect; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; @@ -60,8 +67,11 @@ import java.util.Objects; import java.util.Optional; import java.util.Random; +import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +import java.util.logging.Level; +import java.util.stream.Collectors; public class DeathrunChallengeEventMonth implements Listener { @@ -449,6 +459,13 @@ int currentRun = Math.subtractExact(playerX, spawnX) - 1000; if (!Double.isInfinite(distance) && distance > 0) { scoreManager.updateScore(cp, distance); + try { + if (distance >= 10) { + logPlayerSpeed(player, distance); + } + } catch (Exception e) { + plugin.getLogger().log(Level.SEVERE, "Error while log Player Speed", e); + } statistics.setDeathrunTotaleStats(playerUUID, scoreManager.getScore(cp)); currentScore.put(playerUUID, currentRun); @@ -664,4 +681,74 @@ Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command); } + + private static void logPlayerSpeed(Player player, int speed) { + String gamemode = "Gamemode: " + player.getGameMode(); + String sprinting = "Sprinting: " + player.isSprinting(); + String sneaking = "Sneaking: " + player.isSneaking(); + String flying = "Flying: " + player.isFlying(); + String frozen = "Frozen: " + player.isFrozen(); + String blocking = "Blocking: " + player.isBlocking(); + String climbing = "Climbing: " + player.isClimbing(); + String gliding = "Gliding: " + player.isGliding(); + String swimming = "Swimming: " + player.isSwimming(); + String riptiding = "Riptiding: " + player.isRiptiding(); + String insideVehicle = "InsideVehicle: " + player.isInsideVehicle() + (player.isInsideVehicle() ? "Vehicle: " + player.getVehicle().getType() : ""); + String activeEffects = getActiveEffects(player); + + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(player.getName()).append(" ").append(speed).append("/s "); + stringBuilder.append(gamemode).append(" "); + stringBuilder.append(sprinting).append(" "); + stringBuilder.append(sneaking).append(" "); + stringBuilder.append(flying).append(" "); + stringBuilder.append(frozen).append(" "); + stringBuilder.append(blocking).append(" "); + stringBuilder.append(climbing).append(" "); + stringBuilder.append(gliding).append(" "); + stringBuilder.append(swimming).append(" "); + stringBuilder.append(riptiding).append(" "); + stringBuilder.append(insideVehicle).append(" "); + stringBuilder.append(activeEffects).append(" "); + logToFile(player.getUniqueId().toString(), stringBuilder.toString()); + } + + public static String getActiveEffects(Player player) { + Collection effects = player.getActivePotionEffects(); + + if (effects.isEmpty()) { + return "Keine"; + } + + return effects.stream() + .map(effect -> formatEffect(effect)) + .collect(Collectors.joining(", ")); + } + + private static String formatEffect(PotionEffect effect) { + String effectName = effect.getType().getName(); + int amplifier = effect.getAmplifier() + 1; + int duration = effect.getDuration() / 20; + + return effectName + " " + amplifier + " (" + duration + "s)"; + } + + private static void logToFile(String fileName, String logMessage) { + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"); + String timestamp = LocalDateTime.now().format(dateTimeFormatter); + + File logDir = new File(plugin.getDataFolder(), "logs"); + if (!logDir.exists()) { + logDir.mkdirs(); + } + + File logFile = new File(logDir, fileName + ".log"); + + try (BufferedWriter writer = new BufferedWriter(new FileWriter(logFile, true))) { + writer.write("[" + timestamp + "] " + logMessage); + writer.newLine(); + } catch (IOException e) { + e.printStackTrace(); + } + } }