diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/countdown/Countdown.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/countdown/Countdown.java index ed3f0c2..c9d171a 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/countdown/Countdown.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/countdown/Countdown.java @@ -9,9 +9,11 @@ import eu.mhsl.craftattack.spawn.appliances.countdown.command.ProjectStartResetC import eu.mhsl.craftattack.spawn.appliances.countdown.listener.PlayerInvincibleListener; import eu.mhsl.craftattack.spawn.config.Configuration; import eu.mhsl.craftattack.spawn.util.ComponentUtil; +import net.kyori.adventure.sound.Sound; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.*; +import org.bukkit.block.Block; import org.bukkit.event.Listener; import org.jetbrains.annotations.NotNull; @@ -29,8 +31,16 @@ public class Countdown extends Appliance { private int taskId = -1; private boolean isRunning = false; + private final int countDownLength = localConfig().getInt("countdown"); private int countDown; + private int cycleState = 0; + + private World world = Bukkit.getWorld("world"); + private List<Material> glassColors = List.of(Material.RED_STAINED_GLASS, Material.YELLOW_STAINED_GLASS, Material.GREEN_STAINED_GLASS, Material.BLUE_STAINED_GLASS); + private Material defaultGlassColor = Material.ORANGE_STAINED_GLASS; + private Location glassLocation = new Location(world, -224, 67, -368); + // private final Map<GameRule<Boolean>, Boolean> gamerulesAfterStart = Map.ofEntries( entry(GameRule.DO_DAYLIGHT_CYCLE, true), entry(GameRule.DO_INSOMNIA, true), @@ -49,7 +59,8 @@ public class Countdown extends Appliance { if(!isEnabled()) return; if(isRunning) return; - this.countDown = localConfig().getInt("countdown"); + this.countDown = countDownLength; + int startMusicAfter = 43; this.isRunning = true; this.taskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.instance(), () -> { if(this.countDown <= 0) { @@ -58,20 +69,39 @@ public class Countdown extends Appliance { return; } - if(countDown <= 10 || countDown % 10 == 0) { - Bukkit.getOnlinePlayers().forEach(player -> player.sendMessage( - Component.text() - .append(ComponentUtil.createRainbowText("CraftAttack", 10)) - .append(Component.text(" startet in ", NamedTextColor.GOLD)) - .append(Component.text(this.countDown, NamedTextColor.AQUA)) - .append(Component.text(" sekunden.", NamedTextColor.GOLD)) - )); + if(countDown == countDownLength - startMusicAfter) { + world.playSound(glassLocation, org.bukkit.Sound.MUSIC_DISC_PIGSTEP, SoundCategory.RECORDS, 500f, 1f); + } + + if(countDown > 60 && countDown % 60 == 0) { + sendStartMessage(countDown / 60, "Minuten"); + } + + if(countDown <= 60 && (countDown <= 10 || countDown % 10 == 0)) { + sendStartMessage(countDown, "Sekunden"); } this.countDown--; }, 20, 20); } + private void sendStartMessage(int timeLeft, String unit) { + cycleBeacon(); + Bukkit.getOnlinePlayers().forEach(player -> player.sendMessage( + Component.text() + .append(ComponentUtil.createRainbowText("CraftAttack", 10)) + .append(Component.text(" startet in ", NamedTextColor.GOLD)) + .append(Component.text(timeLeft, NamedTextColor.AQUA)) + .append(Component.text(" " + unit + "!", NamedTextColor.GOLD)) + )); + } + + private void cycleBeacon() { + glassLocation.getBlock().setType(glassColors.get(cycleState)); + cycleState++; + if(cycleState >= glassColors.size()) cycleState = 0; + } + public void cancelCountdown() { if(taskId == -1) return; Bukkit.getScheduler().cancelTask(this.taskId); @@ -97,14 +127,14 @@ public class Countdown extends Appliance { Bukkit.getOnlinePlayers().forEach(player -> { player.setFoodLevel(20); player.setHealth(20); - player.playerListName(player.playerListName().color(NamedTextColor.AQUA)); - player.getPlayerProfile().clearProperties(); player.getInventory().clear(); player.setGameMode(GameMode.SURVIVAL); player.setExp(0); player.setLevel(0); - player.sendMessage(Component.text("Viel Spaß!", NamedTextColor.GREEN)); + player.playSound(Sound.sound(org.bukkit.Sound.ITEM_GOAT_HORN_SOUND_5, Sound.Source.MASTER, 500f, 1f)); + + player.sendMessage(Component.text("Viel Spaß bei CraftAttack!", NamedTextColor.GREEN)); }); Bukkit.getServer().advancementIterator().forEachRemaining( @@ -115,6 +145,7 @@ public class Countdown extends Appliance { ) ); + glassLocation.getBlock().setType(defaultGlassColor); } public void restoreBeforeStart() { @@ -127,6 +158,8 @@ public class Countdown extends Appliance { }); worldIterator(world -> world, world -> setGamerules(gamerulesAfterStart, true)); + + glassLocation.getBlock().setType(defaultGlassColor); } private void setGamerules(Map<GameRule<Boolean>, Boolean> rules, boolean inverse) { diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/report/Report.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/report/Report.java index 05a4c4d..bf67c88 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/report/Report.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/report/Report.java @@ -115,6 +115,7 @@ public class Report extends Appliance { case 401: default: + Bukkit.getLogger().warning("Failed to request Report: " + httpResponse.statusCode()); issuer.sendMessage( Component.text() .append(Component.text("Interner Serverfehler beim anlegen des Reports.", NamedTextColor.RED))