arena: leaving the box during a fight (e.g. ender pearl glitch) counts as knocked out
This commit is contained in:
1 parent
4a87bb3fad
commit
77a740edb7
2 files changed
+27
-2
No files matched your search
@@ -237,11 +237,22 @@ final class Fight {
|
|||||||
* The player took lethal damage: out of the fight and back to the tribune.
|
* The player took lethal damage: out of the fight and back to the tribune.
|
||||||
*/
|
*/
|
||||||
void defeated(Player player) {
|
void defeated(Player player) {
|
||||||
|
this.knockOut(player, Component.empty(), "ist ausgeschieden");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The player got out of the box, for example by glitching through a wall with an ender pearl.
|
||||||
|
*/
|
||||||
|
void leftBox(Player player) {
|
||||||
|
this.knockOut(player, Component.text("Du hast die Arena verlassen", NamedTextColor.GRAY), "hat die Arena verlassen");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void knockOut(Player player, Component subtitle, String what) {
|
||||||
if(this.over || !this.eliminate(player.getUniqueId())) return;
|
if(this.over || !this.eliminate(player.getUniqueId())) return;
|
||||||
player.showTitle(Title.title(Component.text("Ausgeschieden", NamedTextColor.RED), Component.empty()));
|
player.showTitle(Title.title(Component.text("Ausgeschieden", NamedTextColor.RED), subtitle));
|
||||||
Style.play(player, Sound.BLOCK_BEACON_DEACTIVATE, 1f);
|
Style.play(player, Sound.BLOCK_BEACON_DEACTIVATE, 1f);
|
||||||
this.arena.toTribune(player);
|
this.arena.toTribune(player);
|
||||||
this.announceElimination(player.getUniqueId(), "ist ausgeschieden");
|
this.announceElimination(player.getUniqueId(), what);
|
||||||
this.checkEnd();
|
this.checkEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+14
@@ -12,6 +12,7 @@ import org.bukkit.event.EventPriority;
|
|||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
|
import org.bukkit.event.player.PlayerMoveEvent;
|
||||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
@@ -94,4 +95,17 @@ class FightListener extends ApplianceListener<Arena> {
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whoever ends up outside the box anyway (ender pearl through a wall or corner) loses.
|
||||||
|
*/
|
||||||
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
|
public void onMove(PlayerMoveEvent event) {
|
||||||
|
if(!event.hasChangedBlock()) return;
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
if(this.getAppliance().state(player) != Arena.PlayerState.FIGHT || !this.isFighting(player)) return;
|
||||||
|
Fight fight = this.getAppliance().fightOf(player);
|
||||||
|
if(event.getTo().getWorld() == this.getAppliance().worlds().play() && fight.region().contains(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ())) return;
|
||||||
|
fight.leftBox(player);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user