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