diff --git a/Challenge/pom.xml b/Challenge/pom.xml index b2be180..8908b6e 100644 --- a/Challenge/pom.xml +++ b/Challenge/pom.xml @@ -30,6 +30,12 @@ 0.0.1-SNAPSHOT provided + + com.github.Jumper251 + AdvancedReplay + master-SNAPSHOT + provided + diff --git a/Challenge/src/main/java/de/fanta/challenge/Challenge.java b/Challenge/src/main/java/de/fanta/challenge/Challenge.java index ebb3d72..c8a3ba2 100644 --- a/Challenge/src/main/java/de/fanta/challenge/Challenge.java +++ b/Challenge/src/main/java/de/fanta/challenge/Challenge.java @@ -26,6 +26,8 @@ import de.iani.playerUUIDCache.PlayerUUIDCache; import de.speedy64.globalport.GlobalApi; import io.papermc.paper.ban.BanListType; +import me.jumper251.replay.api.ReplayAPI; +import me.jumper251.replay.replaysystem.Replay; import net.kyori.adventure.key.Key; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; @@ -325,6 +327,14 @@ @Override public void onDisable() { + if (plugin.getServer().getPluginManager().isPluginEnabled("AdvancedReplay")) { + ReplayAPI replayAPI = ReplayAPI.getInstance(); + Replay replay = DeathrunChallengeEventMonth.currentReplay; + if (replay != null) { + replayAPI.stopReplay(replay.getId(), true); + } + } + BanList banList = Bukkit.getBanList(BanListType.PROFILE); banList.getEntries().forEach(banEntry -> banList.pardon((PlayerProfile) banEntry)); if (!getConfig().getBoolean("World_Reset")) { diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/DeathrunChallengeEventMonth.java b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/DeathrunChallengeEventMonth.java index 025477d..3431410 100644 --- a/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/DeathrunChallengeEventMonth.java +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/DeathrunChallengeEventMonth.java @@ -13,7 +13,10 @@ import de.fanta.challenge.utils.Statistics; import de.fanta.challengeutils.Color; import de.iani.cubesideutils.FontUtil; +import de.iani.cubesideutils.StringUtil; import de.iani.cubesideutils.bukkit.items.ItemGroups; +import me.jumper251.replay.api.ReplayAPI; +import me.jumper251.replay.replaysystem.Replay; import net.kyori.adventure.bossbar.BossBar; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; @@ -21,7 +24,6 @@ import net.kyori.adventure.text.format.Style; import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.text.format.TextDecoration; -import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Location; @@ -29,8 +31,10 @@ import org.bukkit.NamespacedKey; import org.bukkit.World; import org.bukkit.block.Block; +import org.bukkit.entity.Animals; import org.bukkit.entity.Boat; import org.bukkit.entity.ChestBoat; +import org.bukkit.entity.Monster; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -38,6 +42,7 @@ import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityMountEvent; import org.bukkit.event.entity.EntityPlaceEvent; +import org.bukkit.event.entity.EntitySpawnEvent; import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerJoinEvent; @@ -58,6 +63,7 @@ import java.io.IOException; import java.text.SimpleDateFormat; import java.time.LocalDateTime; +import java.time.LocalTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -99,6 +105,9 @@ private static ChallengeScoreboard challengeScoreboard; private static final HashMap positionColors = new HashMap<>(); + private static ReplayAPI replayAPI; + public static Replay currentReplay; + @EventHandler public void onTimerChange(TimerChangedEvent e) { if (Objects.equals(Config.getString("event.type"), "deathrunMonth")) { @@ -345,9 +354,32 @@ } } - public static void load(World playerWold) { - world = playerWold; + @EventHandler + public void onEntitySpawn(EntitySpawnEvent e) { + if (Objects.equals(Config.getString("event.type"), "deathrunMonth")) { + if (e.getEntity() instanceof Monster) { + if (e.getLocation().getX() <= 200) { + e.setCancelled(true); + } + } + if (e.getEntity() instanceof Animals) { + int z = e.getLocation().getBlockZ(); + if (z < -150 || z > 150) { + e.setCancelled(true); + } + } + } + } + public static void load(World playerWold) { + if (plugin.getServer().getPluginManager().isPluginEnabled("AdvancedReplay")) { + replayAPI = ReplayAPI.getInstance(); + startNewReplay(); + startReplayScheduler(); + } + + + world = playerWold; positionColors.put(1, TextColor.fromHexString("#09FF00")); positionColors.put(2, TextColor.fromHexString("#61FF5C")); @@ -391,6 +423,30 @@ }); } + private static void startReplayScheduler() { + long delay = getTicksUntilNextHour(); + long oneHourInTicks = 20 * 60 * 60; + plugin.getServer().getScheduler().runTaskTimer(plugin, DeathrunChallengeEventMonth::saveAndStartNewReplay, delay, oneHourInTicks); + } + + private static long getTicksUntilNextHour() { + LocalTime now = LocalTime.now(); + LocalTime nextHour = now.plusHours(1).withMinute(0).withSecond(0).withNano(0); + long secondsUntilNextHour = now.until(nextHour, java.time.temporal.ChronoUnit.SECONDS); + return secondsUntilNextHour * 20; + } + + private static void saveAndStartNewReplay() { + if (currentReplay != null) { + replayAPI.stopReplay(currentReplay.getId(), true, true); + } + startNewReplay(); + } + + private static void startNewReplay() { + currentReplay = replayAPI.recordReplay(StringUtil.formatDate(System.currentTimeMillis()).replace(" ", "-")); + } + private void resetBarrier(Player p, World world, List locations) { for (Location location : locations) { p.sendBlockChange(location, world.getBlockAt(location).getBlockData()); diff --git a/Challenge/src/main/resources/plugin.yml b/Challenge/src/main/resources/plugin.yml index cbd9599..ec8ad37 100644 --- a/Challenge/src/main/resources/plugin.yml +++ b/Challenge/src/main/resources/plugin.yml @@ -4,7 +4,7 @@ author: ${project.author} api-version: 1.16 depend: [CubesideUtils, VanishNoPacket, GlobalPort, CubesideNMSUtils, PlayerUUIDCache, ChallengeUtils] -softdepend: [CubesideStatistics] +softdepend: [CubesideStatistics, AdvancedReplay] commands: hp: description: Verwalte die HP eines Spielers