Add survival score
This commit is contained in:
parent
b6407a6b59
commit
ce5af1bffd
8 changed files with 71 additions and 9 deletions
|
@ -4,6 +4,9 @@ import gent.zeus.mc13dtl.gamestate.*;
|
||||||
import gent.zeus.mc13dtl.group.GroupAddCommand;
|
import gent.zeus.mc13dtl.group.GroupAddCommand;
|
||||||
import gent.zeus.mc13dtl.group.GroupRemoveCommand;
|
import gent.zeus.mc13dtl.group.GroupRemoveCommand;
|
||||||
import gent.zeus.mc13dtl.group.SetScoreCommand;
|
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.Plugin;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.bukkit.scheduler.BukkitScheduler;
|
import org.bukkit.scheduler.BukkitScheduler;
|
||||||
|
@ -21,6 +24,7 @@ public class MC13DTL extends JavaPlugin {
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
instance = this;
|
instance = this;
|
||||||
getServer().getPluginManager().registerEvents(new GameStateHandler(), this);
|
getServer().getPluginManager().registerEvents(new GameStateHandler(), this);
|
||||||
|
getServer().getPluginManager().registerEvents(new SurvivalHandler(), this);
|
||||||
LifecycleEventManager<Plugin> manager = this.getLifecycleManager();
|
LifecycleEventManager<Plugin> manager = this.getLifecycleManager();
|
||||||
manager.registerEventHandler(LifecycleEvents.COMMANDS, event -> {
|
manager.registerEventHandler(LifecycleEvents.COMMANDS, event -> {
|
||||||
Commands commands = event.registrar();
|
Commands commands = event.registrar();
|
||||||
|
@ -36,6 +40,7 @@ public class MC13DTL extends JavaPlugin {
|
||||||
scheduler.runTask(this, () -> {
|
scheduler.runTask(this, () -> {
|
||||||
board = new TeamScoreBoard();
|
board = new TeamScoreBoard();
|
||||||
});
|
});
|
||||||
scheduler.runTaskTimer(this, new EventRunner(), 0, 200);
|
scheduler.runTaskTimer(this, new EventRunner(), 0, 100);
|
||||||
|
scheduler.runTaskTimer(this, new SurvivalRunner(), 0, 100);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ public class TeamScoreBoard {
|
||||||
private final Scoreboard scoreboard;
|
private final Scoreboard scoreboard;
|
||||||
|
|
||||||
private Objective objective;
|
private Objective objective;
|
||||||
|
private Objective daysAliveObjective;
|
||||||
|
|
||||||
public TeamScoreBoard() {
|
public TeamScoreBoard() {
|
||||||
sm = Bukkit.getScoreboardManager();
|
sm = Bukkit.getScoreboardManager();
|
||||||
|
@ -25,7 +26,10 @@ public class TeamScoreBoard {
|
||||||
if (objective == null) {
|
if (objective == null) {
|
||||||
objective = scoreboard.registerNewObjective("scores", Criteria.DUMMY, Component.text("Scores"));
|
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);
|
objective.setDisplaySlot(DisplaySlot.SIDEBAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,10 +41,19 @@ public class TeamScoreBoard {
|
||||||
score_obj.setScore(score);
|
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) {
|
public int getScore(Team team) {
|
||||||
return objective.getScore(team.getName()).getScore();
|
return objective.getScore(team.getName()).getScore();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getDaysAlive(Team team) {
|
||||||
|
return daysAliveObjective.getScore(team.getName()).getScore();
|
||||||
|
}
|
||||||
|
|
||||||
public void addScore(Team team, int score) {
|
public void addScore(Team team, int score) {
|
||||||
int current_score = getScore(team);
|
int current_score = getScore(team);
|
||||||
setScore(team, current_score + score);
|
setScore(team, current_score + score);
|
||||||
|
|
|
@ -10,7 +10,6 @@ import org.bukkit.World;
|
||||||
import org.bukkit.persistence.PersistentDataType;
|
import org.bukkit.persistence.PersistentDataType;
|
||||||
import org.bukkit.scoreboard.Team;
|
import org.bukkit.scoreboard.Team;
|
||||||
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.OptionalDouble;
|
import java.util.OptionalDouble;
|
||||||
|
|
|
@ -33,6 +33,7 @@ public class ClimbEvent extends Event {
|
||||||
Location location = new Location(Bukkit.getWorld("world"), player.getX(), -50, player.getZ());
|
Location location = new Location(Bukkit.getWorld("world"), player.getX(), -50, player.getZ());
|
||||||
location.getBlock().setType(Material.AIR);
|
location.getBlock().setType(Material.AIR);
|
||||||
location.add(0, -1, 0).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)) {
|
for (Player p : MC13DTL.board.getPlayers(team)) {
|
||||||
p.teleport(location);
|
p.teleport(location);
|
||||||
|
|
|
@ -8,19 +8,16 @@ import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.event.entity.EntityDeathEvent;
|
import org.bukkit.event.entity.EntityDeathEvent;
|
||||||
import org.bukkit.scoreboard.Team;
|
import org.bukkit.scoreboard.Team;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class KillMobs1Event extends Event implements Listener {
|
public class KillMobs1Event extends Event {
|
||||||
|
|
||||||
private int killsLeft;
|
private int killsLeft;
|
||||||
private final EntityType monster;
|
private final EntityType monster;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public KillMobs1Event(Team team, Difficulty difficulty, int scoreOnSuccess) {
|
public KillMobs1Event(Team team, Difficulty difficulty, int scoreOnSuccess) {
|
||||||
super(team, difficulty, scoreOnSuccess);
|
super(team, difficulty, scoreOnSuccess);
|
||||||
Map<Difficulty, Pair<EntityType, Integer>> monsters = Map.of(
|
Map<Difficulty, Pair<EntityType, Integer>> monsters = Map.of(
|
||||||
|
@ -28,8 +25,7 @@ public class KillMobs1Event extends Event implements Listener {
|
||||||
Difficulty.EASY, new Pair<>(EntityType.ZOMBIE, 3),
|
Difficulty.EASY, new Pair<>(EntityType.ZOMBIE, 3),
|
||||||
Difficulty.MEDIUM, new Pair<>(EntityType.ZOMBIE, 6),
|
Difficulty.MEDIUM, new Pair<>(EntityType.ZOMBIE, 6),
|
||||||
Difficulty.HARD, new Pair<>(EntityType.SKELETON, 5),
|
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();
|
monster = monsters.get(difficulty).getFirst();
|
||||||
killsLeft = monsters.get(difficulty).getSecond();
|
killsLeft = monsters.get(difficulty).getSecond();
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,8 @@ public class GameStateUtil {
|
||||||
world.getPersistentDataContainer().set(key, PersistentDataType.STRING, "lobby");
|
world.getPersistentDataContainer().set(key, PersistentDataType.STRING, "lobby");
|
||||||
NamespacedKey eventKey = new NamespacedKey(MC13DTL.instance, "last-event-day");
|
NamespacedKey eventKey = new NamespacedKey(MC13DTL.instance, "last-event-day");
|
||||||
world.getPersistentDataContainer().set(eventKey, PersistentDataType.LONG, -1L);
|
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);
|
String gameStateStr = world.getPersistentDataContainer().get(key, PersistentDataType.STRING);
|
||||||
switch (gameStateStr) {
|
switch (gameStateStr) {
|
||||||
|
|
19
src/main/java/gent/zeus/mc13dtl/group/SurvivalHandler.java
Normal file
19
src/main/java/gent/zeus/mc13dtl/group/SurvivalHandler.java
Normal file
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
27
src/main/java/gent/zeus/mc13dtl/group/SurvivalRunner.java
Normal file
27
src/main/java/gent/zeus/mc13dtl/group/SurvivalRunner.java
Normal file
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue