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