diff --git a/src/main/java/gent/zeus/mc13dtl/MC13DTL.java b/src/main/java/gent/zeus/mc13dtl/MC13DTL.java index c83965c..345da5a 100644 --- a/src/main/java/gent/zeus/mc13dtl/MC13DTL.java +++ b/src/main/java/gent/zeus/mc13dtl/MC13DTL.java @@ -4,6 +4,9 @@ import gent.zeus.mc13dtl.gamestate.*; import gent.zeus.mc13dtl.group.GroupAddCommand; import gent.zeus.mc13dtl.group.GroupRemoveCommand; import gent.zeus.mc13dtl.group.SetScoreCommand; +import gent.zeus.mc13dtl.group.SurvivalHandler; +import gent.zeus.mc13dtl.group.SurvivalRunner; + import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitScheduler; @@ -21,6 +24,7 @@ public class MC13DTL extends JavaPlugin { public void onEnable() { instance = this; getServer().getPluginManager().registerEvents(new GameStateHandler(), this); + getServer().getPluginManager().registerEvents(new SurvivalHandler(), this); LifecycleEventManager manager = this.getLifecycleManager(); manager.registerEventHandler(LifecycleEvents.COMMANDS, event -> { Commands commands = event.registrar(); @@ -36,6 +40,7 @@ public class MC13DTL extends JavaPlugin { scheduler.runTask(this, () -> { board = new TeamScoreBoard(); }); - scheduler.runTaskTimer(this, new EventRunner(), 0, 200); + scheduler.runTaskTimer(this, new EventRunner(), 0, 100); + scheduler.runTaskTimer(this, new SurvivalRunner(), 0, 100); } } diff --git a/src/main/java/gent/zeus/mc13dtl/TeamScoreBoard.java b/src/main/java/gent/zeus/mc13dtl/TeamScoreBoard.java index c8ab40a..b327391 100644 --- a/src/main/java/gent/zeus/mc13dtl/TeamScoreBoard.java +++ b/src/main/java/gent/zeus/mc13dtl/TeamScoreBoard.java @@ -16,6 +16,7 @@ public class TeamScoreBoard { private final Scoreboard scoreboard; private Objective objective; + private Objective daysAliveObjective; public TeamScoreBoard() { sm = Bukkit.getScoreboardManager(); @@ -25,7 +26,10 @@ public class TeamScoreBoard { if (objective == null) { objective = scoreboard.registerNewObjective("scores", Criteria.DUMMY, Component.text("Scores")); } - + daysAliveObjective = scoreboard.getObjective("days-alive"); + if (daysAliveObjective == null) { + daysAliveObjective = scoreboard.registerNewObjective("days-alive", Criteria.DUMMY, Component.text("Days alive")); + } objective.setDisplaySlot(DisplaySlot.SIDEBAR); } @@ -37,10 +41,19 @@ public class TeamScoreBoard { score_obj.setScore(score); } + public void setDaysAlive(Team team, int days) { + Score score_obj = daysAliveObjective.getScore(team.getName()); + score_obj.setScore(days); + } + public int getScore(Team team) { return objective.getScore(team.getName()).getScore(); } + public int getDaysAlive(Team team) { + return daysAliveObjective.getScore(team.getName()).getScore(); + } + public void addScore(Team team, int score) { int current_score = getScore(team); setScore(team, current_score + score); diff --git a/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java b/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java index 77d5e37..1e2819d 100644 --- a/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java +++ b/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java @@ -10,7 +10,6 @@ import org.bukkit.World; import org.bukkit.persistence.PersistentDataType; import org.bukkit.scoreboard.Team; -import java.util.Iterator; import java.util.List; import java.util.ArrayList; import java.util.OptionalDouble; diff --git a/src/main/java/gent/zeus/mc13dtl/events/catalog/ClimbEvent.java b/src/main/java/gent/zeus/mc13dtl/events/catalog/ClimbEvent.java index d56d6f5..bff058b 100644 --- a/src/main/java/gent/zeus/mc13dtl/events/catalog/ClimbEvent.java +++ b/src/main/java/gent/zeus/mc13dtl/events/catalog/ClimbEvent.java @@ -33,6 +33,7 @@ public class ClimbEvent extends Event { Location location = new Location(Bukkit.getWorld("world"), player.getX(), -50, player.getZ()); location.getBlock().setType(Material.AIR); location.add(0, -1, 0).getBlock().setType(Material.AIR); + location.add(0, -2, 0).getBlock().setType(Material.STONE); for (Player p : MC13DTL.board.getPlayers(team)) { p.teleport(location); diff --git a/src/main/java/gent/zeus/mc13dtl/events/catalog/KillMobs1Event.java b/src/main/java/gent/zeus/mc13dtl/events/catalog/KillMobs1Event.java index d5849d2..2198dc4 100644 --- a/src/main/java/gent/zeus/mc13dtl/events/catalog/KillMobs1Event.java +++ b/src/main/java/gent/zeus/mc13dtl/events/catalog/KillMobs1Event.java @@ -8,19 +8,16 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.entity.EntityType; import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.scoreboard.Team; import java.util.Map; -public class KillMobs1Event extends Event implements Listener { +public class KillMobs1Event extends Event { private int killsLeft; private final EntityType monster; - - public KillMobs1Event(Team team, Difficulty difficulty, int scoreOnSuccess) { super(team, difficulty, scoreOnSuccess); Map> monsters = Map.of( @@ -28,8 +25,7 @@ public class KillMobs1Event extends Event implements Listener { Difficulty.EASY, new Pair<>(EntityType.ZOMBIE, 3), Difficulty.MEDIUM, new Pair<>(EntityType.ZOMBIE, 6), Difficulty.HARD, new Pair<>(EntityType.SKELETON, 5), - Difficulty.IMPOSSIBLE, new Pair<>(EntityType.ENDERMAN, 4) - ); + Difficulty.IMPOSSIBLE, new Pair<>(EntityType.ENDERMAN, 4)); monster = monsters.get(difficulty).getFirst(); killsLeft = monsters.get(difficulty).getSecond(); } diff --git a/src/main/java/gent/zeus/mc13dtl/gamestate/GameStateUtil.java b/src/main/java/gent/zeus/mc13dtl/gamestate/GameStateUtil.java index 739d05e..1fc30a0 100644 --- a/src/main/java/gent/zeus/mc13dtl/gamestate/GameStateUtil.java +++ b/src/main/java/gent/zeus/mc13dtl/gamestate/GameStateUtil.java @@ -25,6 +25,8 @@ public class GameStateUtil { world.getPersistentDataContainer().set(key, PersistentDataType.STRING, "lobby"); NamespacedKey eventKey = new NamespacedKey(MC13DTL.instance, "last-event-day"); world.getPersistentDataContainer().set(eventKey, PersistentDataType.LONG, -1L); + NamespacedKey survivalKey = new NamespacedKey(MC13DTL.instance, "last-survival-check-day"); + world.getPersistentDataContainer().set(survivalKey, PersistentDataType.LONG, 0L); } String gameStateStr = world.getPersistentDataContainer().get(key, PersistentDataType.STRING); switch (gameStateStr) { diff --git a/src/main/java/gent/zeus/mc13dtl/group/SurvivalHandler.java b/src/main/java/gent/zeus/mc13dtl/group/SurvivalHandler.java new file mode 100644 index 0000000..b1bdc48 --- /dev/null +++ b/src/main/java/gent/zeus/mc13dtl/group/SurvivalHandler.java @@ -0,0 +1,19 @@ +package gent.zeus.mc13dtl.group; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.scoreboard.Team; + +import gent.zeus.mc13dtl.MC13DTL; + +public class SurvivalHandler implements Listener { + @EventHandler + public void onPlayerDeath(PlayerDeathEvent event) { + for (Team team : MC13DTL.board.getTeams().stream().toList()) { + if (MC13DTL.board.getPlayers(team).contains(event.getPlayer())) { + MC13DTL.board.setDaysAlive(team, 0); + } + } + } +} diff --git a/src/main/java/gent/zeus/mc13dtl/group/SurvivalRunner.java b/src/main/java/gent/zeus/mc13dtl/group/SurvivalRunner.java new file mode 100644 index 0000000..0abf102 --- /dev/null +++ b/src/main/java/gent/zeus/mc13dtl/group/SurvivalRunner.java @@ -0,0 +1,27 @@ +package gent.zeus.mc13dtl.group; + +import org.bukkit.Bukkit; +import org.bukkit.NamespacedKey; +import org.bukkit.World; +import org.bukkit.persistence.PersistentDataType; +import org.bukkit.scoreboard.Team; + +import gent.zeus.mc13dtl.MC13DTL; + +public class SurvivalRunner implements Runnable { + @Override + public void run() { + World world = Bukkit.getWorld("world"); + NamespacedKey eventKey = new NamespacedKey(MC13DTL.instance, "last-survival-check-day"); + long lastRunDay = world.getPersistentDataContainer().get(eventKey, PersistentDataType.LONG); + long day = Bukkit.getWorld("world").getFullTime() / 24000; + if (day > lastRunDay) { + for (Team team : MC13DTL.board.getTeams().stream().toList()) { + int currentDays = MC13DTL.board.getDaysAlive(team) + 1; + MC13DTL.board.setDaysAlive(team, currentDays); + MC13DTL.board.addScore(team, (int) Math.pow(2, currentDays)); + } + } + world.getPersistentDataContainer().set(eventKey, PersistentDataType.LONG, day); + } +}