From a8fdd722174de2f6836b21f7cfb091ab88c7c594 Mon Sep 17 00:00:00 2001 From: nearfe Date: Mon, 17 Jun 2024 21:13:22 -0300 Subject: [PATCH] BEDFIGHTTTTTTTT --- .../land/battle/practice/arena/Arena.java | 2 +- .../java/land/battle/practice/kit/Kit.java | 2 + .../practice/listeners/MatchListener.java | 9 ++++- .../practice/listeners/MovementListener.java | 38 +++++++++++++++++++ .../practice/listeners/WorldListener.java | 28 ++++++++++++++ .../land/battle/practice/match/Match.java | 1 + .../practice/match/team/impl/MatchTeam.java | 10 +++++ .../battle/practice/player/PlayerData.java | 1 + 8 files changed, 89 insertions(+), 2 deletions(-) diff --git a/src/main/java/land/battle/practice/arena/Arena.java b/src/main/java/land/battle/practice/arena/Arena.java index 00c5013..4868add 100644 --- a/src/main/java/land/battle/practice/arena/Arena.java +++ b/src/main/java/land/battle/practice/arena/Arena.java @@ -29,7 +29,7 @@ public class Arena { private AsyncLocation min; private AsyncLocation max; - + private int deadZone; private boolean enabled = false; private Flag flag = Flag.DEFAULT; diff --git a/src/main/java/land/battle/practice/kit/Kit.java b/src/main/java/land/battle/practice/kit/Kit.java index a15a916..ab06b43 100644 --- a/src/main/java/land/battle/practice/kit/Kit.java +++ b/src/main/java/land/battle/practice/kit/Kit.java @@ -31,6 +31,8 @@ public class Kit { private Flag flag = Flag.DEFAULT; + + public void applyToPlayer(Player player) { player.getInventory().setContents(this.contents); player.getInventory().setArmorContents(this.armor); diff --git a/src/main/java/land/battle/practice/listeners/MatchListener.java b/src/main/java/land/battle/practice/listeners/MatchListener.java index 7a94322..e2a9d20 100644 --- a/src/main/java/land/battle/practice/listeners/MatchListener.java +++ b/src/main/java/land/battle/practice/listeners/MatchListener.java @@ -151,6 +151,13 @@ public class MatchListener implements Listener { @EventHandler public void onEntityDamage(EntityDamageByEntityEvent event) { + Player killer = (Player) event.getDamager(); + Match match = this.plugin.getMatchManager().getMatch(killer.getUniqueId()); + + if (match.getKit().getFlag().equals(Flag.BEDWARS)) { + if (killer == null) { + return; + } if (event.getEntity() instanceof Player && event.getDamager() instanceof Player) { Player defender = (Player) event.getEntity(); @@ -174,7 +181,7 @@ public class MatchListener implements Listener { } } } - + } @EventHandler public void onMatchStart(MatchStartEvent event) { diff --git a/src/main/java/land/battle/practice/listeners/MovementListener.java b/src/main/java/land/battle/practice/listeners/MovementListener.java index 418c268..213ee7f 100644 --- a/src/main/java/land/battle/practice/listeners/MovementListener.java +++ b/src/main/java/land/battle/practice/listeners/MovementListener.java @@ -1,20 +1,26 @@ package land.battle.practice.listeners; import land.battle.practice.Practice; +import land.battle.practice.event.match.MatchEndEvent; import land.battle.practice.flags.Flag; import land.battle.practice.match.Match; import land.battle.practice.match.MatchState; +import land.battle.practice.match.custom.CustomMatchRespawnRunnable; +import land.battle.practice.match.team.impl.MatchTeam; import land.battle.practice.player.PlayerData; import land.battle.practice.player.PlayerState; import land.battle.practice.util.BlockUtil; import io.papermc.lib.PaperLib; import land.battle.practice.util.cuboid.Cuboid; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.potion.PotionEffectType; /** * @author BattleLand Team @@ -55,6 +61,38 @@ public class MovementListener implements Listener { this.plugin.getMatchManager().removeFighter(startingOpponent, playerData, false); } } + if (match.getKit().getFlag().equals(Flag.BEDWARS)) { + MatchTeam playerTeam = match.getTeams().get(playerData.getTeamID()); + if (player.getLocation().getY() <= 50 + && !player.hasPotionEffect(PotionEffectType.WEAKNESS) + && match.getMatchState() != MatchState.ENDING) { + if (playerTeam.isHasBed()) { + match.broadcast( + (playerTeam.getTeamID() == 1 ? "&9" : "&c") + player.getName() + " &7has died.", Sound.ORB_PICKUP); + new CustomMatchRespawnRunnable(player, playerData, match, playerTeam, 4, + 4).runTaskTimer(plugin, 0L, 20L); + } else if (match.isPartyMatch()) { + if (!playerTeam.isHasBed()) { + this.plugin.getMatchManager().removeFighter(player, playerData, false); + } + } else if (match.getMatchState() == MatchState.ENDING) { + this.plugin.getPlayerManager().sendToSpawnAndReset(player); + } else { + match.setCanContinue(false); + if (!match.isCanContinue() && !match.getMatchState().equals(MatchState.ENDING)) { + MatchTeam opposingTeam = match.isFFA() ? match.getTeams().get(0) + : ((playerData.getTeamID() == 0) ? match.getTeams().get(1) + : match.getTeams().get(0)); + Bukkit.getPluginManager() + .callEvent(new MatchEndEvent(match, opposingTeam, playerTeam)); + player.teleport(playerTeam.getTeamID() == 1 ? match.getStandaloneArena().getPositionOne() + .toBukkitLocation() : match.getStandaloneArena().getPositionTwo().toBukkitLocation()); + match.broadcast("", Sound.FIREWORK_LAUNCH); + match.broadcast("", Sound.FIREWORK_TWINKLE2); + } + } + } + } if (match.getKit().getFlag().equals(Flag.SPLEEF) || match.getKit().getFlag().equals(Flag.SUMO)) { final Location location = player.getLocation(); diff --git a/src/main/java/land/battle/practice/listeners/WorldListener.java b/src/main/java/land/battle/practice/listeners/WorldListener.java index 0ee77ae..ce88f7b 100644 --- a/src/main/java/land/battle/practice/listeners/WorldListener.java +++ b/src/main/java/land/battle/practice/listeners/WorldListener.java @@ -5,11 +5,13 @@ import land.battle.practice.arena.type.StandaloneArena; import land.battle.practice.flags.Flag; import land.battle.practice.match.Match; import land.battle.practice.match.MatchState; +import land.battle.practice.match.team.impl.MatchTeam; import land.battle.practice.player.PlayerData; import land.battle.practice.player.PlayerState; import land.battle.practice.runnable.BlockRemoveRunnable; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.entity.Item; import org.bukkit.entity.Player; @@ -40,6 +42,32 @@ public class WorldListener implements Listener { return; } + if (event.getBlock().getType() == Material.BED_BLOCK) { + Match match = this.plugin.getMatchManager().getMatch(player.getUniqueId()); + + MatchTeam playerTeam = match.getTeams().get(playerData.getTeamID()); + MatchTeam opposingTeam = match.isFFA() ? match.getTeams().get(0) + : ((playerData.getTeamID() == 0) ? match.getTeams().get(1) + : match.getTeams().get(0)); + if ((playerTeam.getTeamID() == 1 ? match.getStandaloneArena().getPositionOne().toBukkitLocation() + : match.getStandaloneArena().getPositionTwo().toBukkitLocation()).distance( + event.getBlock().getLocation()) > 20.0) { + if (match.getKit().getFlag().equals(Flag.BEDWARS)) { + if (playerTeam.getPlayers().contains(player.getUniqueId()) && (!match.getMatchState().equals(MatchState.ENDING)) + && opposingTeam.isHasBed()) { + opposingTeam.destroyBed(); + match.broadcast(playerTeam.getTeamID() == 1 ? "&9" + : "&c" + player.getName() + " &7destroyed the bed of " + ( + playerTeam.getTeamID() == 1 ? "&cRed" : "&9Blue") + "&7!"); + match.broadcast( + playerTeam.getTeamID() == 1 ? "&cRed's" : "&9Blue's" + " destroyed", + "&7By " + (playerTeam.getTeamID() == 1 ? "&9" : "&c") + player.getName()); + match.broadcast("", Sound.ENDERDRAGON_GROWL); + return; + } + } + } + } if (playerData.getPlayerState() == PlayerState.FIGHTING) { Match match = this.plugin.getMatchManager().getMatch(player.getUniqueId()); diff --git a/src/main/java/land/battle/practice/match/Match.java b/src/main/java/land/battle/practice/match/Match.java index 5929894..03cfa35 100644 --- a/src/main/java/land/battle/practice/match/Match.java +++ b/src/main/java/land/battle/practice/match/Match.java @@ -40,6 +40,7 @@ public class Match { private final UUID matchId = UUID.randomUUID(); private final String shortMatchId = SaltUtil.getRandomSaltedString(7); + private boolean canContinue = true; private final Set entitiesToRemove = new HashSet<>(); diff --git a/src/main/java/land/battle/practice/match/team/impl/MatchTeam.java b/src/main/java/land/battle/practice/match/team/impl/MatchTeam.java index cf16cb5..6ac5e04 100644 --- a/src/main/java/land/battle/practice/match/team/impl/MatchTeam.java +++ b/src/main/java/land/battle/practice/match/team/impl/MatchTeam.java @@ -2,6 +2,8 @@ package land.battle.practice.match.team.impl; import land.battle.practice.match.team.KillableTeam; import lombok.Getter; +import lombok.Setter; +import org.bukkit.Bukkit; import java.util.List; import java.util.UUID; @@ -10,6 +12,14 @@ import java.util.UUID; public class MatchTeam extends KillableTeam { private final int teamID; + private boolean hasBed = true; + @Setter + private int lives; + + + public void destroyBed() { + this.hasBed = false; + } public MatchTeam(UUID leader, List players, int teamID) { super(leader, players); diff --git a/src/main/java/land/battle/practice/player/PlayerData.java b/src/main/java/land/battle/practice/player/PlayerData.java index 505f75b..8c5847a 100644 --- a/src/main/java/land/battle/practice/player/PlayerData.java +++ b/src/main/java/land/battle/practice/player/PlayerData.java @@ -37,6 +37,7 @@ public class PlayerData { private final Map highestKillStreaks = new HashMap<>(); private final Map kitKillStreaks = new HashMap<>(); + private final Map rankedDivisionBooleanMap = new HashMap<>(); private final List matchIds = new ArrayList<>();