Пример #1
0
 public boolean handlePlayerLeaveZone(WarPlayer player, WarLocation from, WarLocation to) {
   Optional<WarGame> game = warzone.getGame();
   if (game.isPresent() && game.get().isPlaying(player)) {
     player.sendMessage("Please use /warleave to exit the game before leaving.");
     warzone.mask(player);
     plugin.delayTask(3, () -> warzone.unmask(player));
     return true;
   }
   return false;
 }
Пример #2
0
 public boolean handlePlayerEnterZone(WarPlayer player, WarLocation from, WarLocation to) {
   Optional<WarGame> game = warzone.getGame();
   if (game.isPresent() && !game.get().isPlaying(player) || !player.isZoneMaker()) {
     player.sendMessage("Please join a team first.");
     player.setLocation(warzone.getTeleport());
     warzone.mask(player);
     plugin.delayTask(3, () -> warzone.unmask(player));
     return false;
   }
   return false;
 }
Пример #3
0
 public boolean handleDeath(WarPlayer player, String deathMessage) {
   WarGame game = warzone.getGame().orElseThrow(IllegalStateException::new);
   plugin.delayTask(
       3,
       () -> {
         if (player.isPlayingWar()) game.resetPlayerState(player);
       });
   return true;
 }
Пример #4
0
 public boolean handleDamage(WarPlayer defender, double damage, WarDamageCause cause) {
   WarGame game = warzone.getGame().orElseThrow(IllegalStateException::new);
   if (cause instanceof WarDamageCause.Combat) {
     WarPlayer attacker = ((WarDamageCause.Combat) cause).getAttacker();
     if (game.getPlayerTeam(defender) == game.getPlayerTeam(attacker)) {
       attacker.sendMessage("Do not target your own team!");
       return true;
     }
     game.addAttack(attacker, defender);
   }
   // prevent skeletons from shooting players in zones
   if (cause instanceof WarDamageCause.Creature) {
     return true;
   }
   // player would die by this blow
   if (defender.getHealth() - damage < 1) {
     // send the death message for the most recent damage cause
     game.broadcast(cause.getDeathMessage());
     // find a recent attack from a player
     Optional<WarGame.Attack> first =
         game.getAttacks()
             .stream()
             .filter(a -> a.getDefender() == defender)
             .filter(a -> System.currentTimeMillis() - a.getTime() < LAST_ATTACK_DELAY_MS)
             .findFirst();
     if (first.isPresent()) {
       WarGame.Team beneficiary = game.getPlayerTeam(first.get().getAttacker());
       beneficiary.addPoints(1);
       game.broadcast(MessageFormat.format("Team {0} gains 1 point.", beneficiary.getName()));
     }
     game.checkForEndRound();
     game.resetPlayerState(defender);
     game.resetPlayerState(defender);
     return true;
   }
   return false;
 }