This commit is contained in:
Luca
2021-11-22 13:05:43 +01:00
parent ff6c6cf8ec
commit a7e07a123b
56 changed files with 1479 additions and 195 deletions

View File

@ -0,0 +1,49 @@
package rip.tilly.bedwars.runnables;
import lombok.RequiredArgsConstructor;
import org.bukkit.Sound;
import org.bukkit.entity.Entity;
import org.bukkit.scheduler.BukkitRunnable;
import rip.tilly.bedwars.BedWars;
import rip.tilly.bedwars.game.Game;
import rip.tilly.bedwars.game.GameState;
@RequiredArgsConstructor
public class GameRunnable extends BukkitRunnable {
private final BedWars plugin = BedWars.getInstance();
private final Game game;
@Override
public void run() {
switch (this.game.getGameState()) {
case STARTING:
if (this.game.decrementCountdown() == 0) {
this.game.setGameState(GameState.FIGHTING);
this.game.broadcastWithSound("&aThe match has started, good luck!", Sound.FIREWORK_BLAST);
} else {
this.game.broadcastWithSound("&eStarting match in &d" + this.game.getCountdown() + " &eseconds...", Sound.NOTE_PLING);
this.game.broadcastTitle("&d&lStarting Match In...", "&e" + this.game.getCountdown());
}
break;
case FIGHTING:
this.game.incrementDuration();
break;
case ENDING:
if (this.game.decrementCountdown() == 0) {
this.game.getEntitiesToRemove().forEach(Entity::remove);
this.game.getRunnables().forEach(runnable -> this.plugin.getServer().getScheduler().cancelTask(runnable));
this.game.getTeams().forEach(team -> team.playingPlayers().forEach(player -> this.plugin.getPlayerDataManager().resetPlayer(player, true)));
this.game.spectatorPlayers().forEach(this.plugin.getGameManager()::removeSpectator);
this.plugin.getChunkClearingManager().resetArena(this.game.getCopiedArena());
this.game.getArena().addAvailableArena(this.game.getCopiedArena());
this.plugin.getArenaManager().removeArenaGameUUID(this.game.getCopiedArena());
this.plugin.getGameManager().removeGame(this.game);
this.cancel();
}
break;
}
}
}

View File

@ -0,0 +1,85 @@
package rip.tilly.bedwars.runnables;
import lombok.AllArgsConstructor;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;
import org.github.paperspigot.Title;
import rip.tilly.bedwars.BedWars;
import rip.tilly.bedwars.game.Game;
import rip.tilly.bedwars.game.GameTeam;
import rip.tilly.bedwars.playerdata.PlayerData;
import rip.tilly.bedwars.playerdata.PlayerState;
import rip.tilly.bedwars.utils.CC;
@AllArgsConstructor
public class RespawnRunnable extends BukkitRunnable {
private final BedWars plugin;
private final Player player;
private final PlayerData playerData;
private final Game game;
private final GameTeam gameTeam;
private final int startingTime;
private int respawnTime;
private boolean isInGame(PlayerData playerData) {
return playerData.getPlayerState() == PlayerState.PLAYING;
}
@Override
public void run() {
if (!this.isInGame(this.playerData)) {
cancel();
return;
}
if (this.respawnTime <= 1) {
this.playerData.setPlayerState(PlayerState.PLAYING);
this.game.getTeams().forEach(team -> team.playingPlayers().forEach(gamePlayer -> gamePlayer.showPlayer(this.player)));
this.player.teleport(this.gameTeam.getId() == 1 ? this.game.getCopiedArena().getA().toBukkitLocation() : this.game.getCopiedArena().getB().toBukkitLocation());
this.player.sendTitle(new Title(CC.translate("&aRespawning..."), "", 1, 20, 0));
this.player.sendMessage(CC.translate("&aYou have respawned!"));
this.player.playSound(this.player.getLocation(), Sound.ORB_PICKUP, 10F, 1F);
for (ItemStack stack : this.plugin.getGameManager().getGameItems()) {
this.player.getInventory().addItem(stack);
}
this.game.getTeams().forEach(team -> team.playingPlayers().filter(player1 -> !this.player.equals(player1))
.forEach(matchplayer -> matchplayer.sendMessage(CC.translate(this.gameTeam.getPlayerTeam().getChatColor() + this.player.getName() + " &ehas respawned!"))));
this.player.setHealth(this.player.getMaxHealth());
this.player.setFoodLevel(20);
this.playerData.setLastDamager(null);
cancel();
return;
}
if (this.respawnTime == this.startingTime) {
this.playerData.setPlayerState(PlayerState.RESPAWNING);
this.game.getTeams().forEach(team -> team.playingPlayers().forEach(gamePlayer -> gamePlayer.hidePlayer(this.player)));
this.player.getInventory().clear();
this. player.updateInventory();
this.player.setHealth(this.player.getMaxHealth());
this.player.setFoodLevel(20);
this. player.setVelocity(this.player.getVelocity().add(new Vector(0, 0.25, 0)));
this.player.setAllowFlight(true);
this.player.setFlying(true);
this.player.setVelocity(this.player.getVelocity().add(new Vector(0, 0.15, 0)));
this. player.setAllowFlight(true);
this. player.setFlying(true);
}
this.respawnTime--;
this.player.sendTitle(new Title(CC.translate("&e" + this.respawnTime), " ", 5, 20, 5));
this.player.playSound(this.player.getLocation(), Sound.NOTE_PLING, 0.7F, 1.0F);
}
}