Updated countdown to contain music and effetcs

This commit is contained in:
Elias Müller 2023-11-25 17:45:02 +01:00
parent efd228edfc
commit 7c76177cfb
2 changed files with 46 additions and 12 deletions

View File

@ -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) {

View File

@ -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))