Updated countdown design and behavior
This commit is contained in:
parent
5786b2409e
commit
efd228edfc
src/main/java/eu/mhsl/craftattack/spawn
@ -7,12 +7,15 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
|
||||
public class AdminMarkerListener extends ApplianceListener<AdminMarker> {
|
||||
@EventHandler
|
||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||
Player p = event.getPlayer();
|
||||
|
||||
p.customName(Optional.ofNullable(p.customName()).orElse(p.displayName()).color(getPlayerColor(p)));
|
||||
p.displayName(p.displayName().color(getPlayerColor(p)));
|
||||
p.playerListName(p.playerListName().color(getPlayerColor(p)));
|
||||
}
|
||||
|
@ -8,14 +8,19 @@ import eu.mhsl.craftattack.spawn.appliances.countdown.command.ProjectStartComman
|
||||
import eu.mhsl.craftattack.spawn.appliances.countdown.command.ProjectStartResetCommand;
|
||||
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.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.WorldBorder;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
import static java.util.Map.entry;
|
||||
|
||||
public class Countdown extends Appliance {
|
||||
public Countdown() {
|
||||
@ -25,6 +30,21 @@ public class Countdown extends Appliance {
|
||||
private int taskId = -1;
|
||||
private boolean isRunning = false;
|
||||
private int countDown;
|
||||
|
||||
private final Map<GameRule<Boolean>, Boolean> gamerulesAfterStart = Map.ofEntries(
|
||||
entry(GameRule.DO_DAYLIGHT_CYCLE, true),
|
||||
entry(GameRule.DO_INSOMNIA, true),
|
||||
entry(GameRule.ANNOUNCE_ADVANCEMENTS, true),
|
||||
entry(GameRule.DISABLE_RAIDS, false),
|
||||
entry(GameRule.DO_FIRE_TICK, true),
|
||||
entry(GameRule.DO_ENTITY_DROPS, true),
|
||||
entry(GameRule.DO_PATROL_SPAWNING, true),
|
||||
entry(GameRule.DO_TRADER_SPAWNING, true),
|
||||
entry(GameRule.DO_WEATHER_CYCLE, true),
|
||||
entry(GameRule.FALL_DAMAGE, true),
|
||||
entry(GameRule.FIRE_DAMAGE, true)
|
||||
);
|
||||
|
||||
public void startCountdown() {
|
||||
if(!isEnabled()) return;
|
||||
if(isRunning) return;
|
||||
@ -35,9 +55,19 @@ public class Countdown extends Appliance {
|
||||
if(this.countDown <= 0) {
|
||||
this.cancelCountdown();
|
||||
this.projectStart();
|
||||
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))
|
||||
));
|
||||
}
|
||||
|
||||
Bukkit.getOnlinePlayers().forEach(player -> player.sendMessage("Sekunden:" + this.countDown));
|
||||
this.countDown--;
|
||||
}, 20, 20);
|
||||
}
|
||||
@ -61,26 +91,50 @@ public class Countdown extends Appliance {
|
||||
public void projectStart() {
|
||||
setEnabled(false);
|
||||
|
||||
worldBorderModifier(worldBorder -> worldBorder.setSize(worldBorder.getMaxSize()));
|
||||
worldIterator(World::getWorldBorder, worldBorder -> worldBorder.setSize(worldBorder.getMaxSize()));
|
||||
worldIterator(world -> world, world -> setGamerules(gamerulesAfterStart, false));
|
||||
|
||||
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));
|
||||
});
|
||||
|
||||
Bukkit.getServer().advancementIterator().forEachRemaining(
|
||||
advancement -> Bukkit.getOnlinePlayers().forEach(
|
||||
player -> player.getAdvancementProgress(advancement).getAwardedCriteria().forEach(
|
||||
criteria -> player.getAdvancementProgress(advancement).revokeCriteria(criteria)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
public void restoreBeforeStart() {
|
||||
setEnabled(true);
|
||||
|
||||
worldBorderModifier(worldBorder -> {
|
||||
worldIterator(World::getWorldBorder, worldBorder -> {
|
||||
worldBorder.setSize(localConfig().getLong("worldborder-before"));
|
||||
worldBorder.setWarningDistance(0);
|
||||
worldBorder.setDamageAmount(0);
|
||||
});
|
||||
|
||||
worldIterator(world -> world, world -> setGamerules(gamerulesAfterStart, true));
|
||||
}
|
||||
|
||||
private void worldBorderModifier(Consumer<WorldBorder> worldBorder) {
|
||||
Bukkit.getWorlds().forEach(world -> worldBorder.accept(world.getWorldBorder()));
|
||||
private void setGamerules(Map<GameRule<Boolean>, Boolean> rules, boolean inverse) {
|
||||
rules.forEach((gameRule, value) -> worldIterator(world -> world, world -> world.setGameRule(gameRule, value ^ inverse)));
|
||||
}
|
||||
|
||||
private <T> void worldIterator(Function<World, T> selector, Consumer<T> worldBorder) {
|
||||
Bukkit.getWorlds().forEach(world -> worldBorder.accept(selector.apply(world)));
|
||||
}
|
||||
|
||||
public boolean isRunning() {
|
||||
|
@ -66,13 +66,13 @@ public class ComponentUtil {
|
||||
.build();
|
||||
}
|
||||
|
||||
public static Component createRainbowText(String text) {
|
||||
public static Component createRainbowText(String text, int step) {
|
||||
Component builder = Component.empty();
|
||||
int hue = 0;
|
||||
for (char c : text.toCharArray()) {
|
||||
TextColor color = TextColor.color(Color.getHSBColor((float) hue / 360, 1, 1).getRGB());
|
||||
builder = builder.append(Component.text(c).color(color));
|
||||
hue += 30;
|
||||
hue += step;
|
||||
}
|
||||
|
||||
return builder;
|
||||
|
Loading…
x
Reference in New Issue
Block a user