Added IteratorUtil

This commit is contained in:
Elias Müller 2023-12-08 22:44:11 +01:00
parent 40d0950d22
commit 33e9e749a0
2 changed files with 28 additions and 12 deletions

View File

@ -9,18 +9,16 @@ 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 eu.mhsl.craftattack.spawn.util.IteratorUtil;
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;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Function;
import static java.util.Map.entry;
@ -121,8 +119,8 @@ public class Countdown extends Appliance {
public void projectStart() {
setEnabled(false);
worldIterator(World::getWorldBorder, worldBorder -> worldBorder.setSize(worldBorder.getMaxSize()));
worldIterator(world -> world, world -> setGamerules(gamerulesAfterStart, false));
IteratorUtil.worlds(World::getWorldBorder, worldBorder -> worldBorder.setSize(worldBorder.getMaxSize()));
IteratorUtil.worlds(world -> setGamerules(gamerulesAfterStart, false));
Bukkit.getOnlinePlayers().forEach(player -> {
player.setFoodLevel(20);
@ -151,23 +149,19 @@ public class Countdown extends Appliance {
public void restoreBeforeStart() {
setEnabled(true);
worldIterator(World::getWorldBorder, worldBorder -> {
IteratorUtil.worlds(World::getWorldBorder, worldBorder -> {
worldBorder.setSize(localConfig().getLong("worldborder-before"));
worldBorder.setWarningDistance(0);
worldBorder.setDamageAmount(0);
});
worldIterator(world -> world, world -> setGamerules(gamerulesAfterStart, true));
IteratorUtil.worlds(world -> world, world -> setGamerules(gamerulesAfterStart, true));
glassLocation.getBlock().setType(defaultGlassColor);
}
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)));
rules.forEach((gameRule, value) -> IteratorUtil.worlds(world -> world.setGameRule(gameRule, value ^ inverse)));
}
public boolean isRunning() {

View File

@ -0,0 +1,22 @@
package eu.mhsl.craftattack.spawn.util;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Player;
import java.util.function.Consumer;
import java.util.function.Function;
public class IteratorUtil {
public static void worlds(Consumer<World> world) {
worlds(w -> w, world);
}
public static <T> void worlds(Function<World, T> selector, Consumer<T> selected) {
Bukkit.getWorlds().forEach(world -> selected.accept(selector.apply(world)));
}
public static void onlinePlayers(Consumer<Player> player) {
Bukkit.getOnlinePlayers().forEach(player);
}
}