diff --git a/src/main/java/com/comandante/creeper/command/commands/FightKillCommand.java b/src/main/java/com/comandante/creeper/command/commands/FightKillCommand.java index 3bdc017d0a9cf26513628328e708b5472d72915c..30f59565b354d5dfb4bd31d24f54943a8429a607 100644 --- a/src/main/java/com/comandante/creeper/command/commands/FightKillCommand.java +++ b/src/main/java/com/comandante/creeper/command/commands/FightKillCommand.java @@ -3,13 +3,16 @@ package com.comandante.creeper.command.commands; import com.comandante.creeper.core_game.GameManager; import com.comandante.creeper.npc.Npc; import com.comandante.creeper.player.CoolDownType; +import com.comandante.creeper.player.Player; import com.google.common.base.Joiner; import org.jboss.netty.channel.ChannelHandlerContext; import org.jboss.netty.channel.MessageEvent; import java.util.Arrays; import java.util.List; +import java.util.Optional; import java.util.Set; +import java.util.function.Predicate; public class FightKillCommand extends Command { @@ -48,14 +51,19 @@ public class FightKillCommand extends Command { if (npcEntity.getValidTriggers().contains(target)) { if (player.addActiveFight(npcEntity)) { writeToRoom(player.getPlayerName() + " has attacked a " + npcEntity.getColorName()); - // player.addActiveFight(npcEntity); - return; - } else { return; } } } - write("There's no NPC here to fight by that name."); + Optional<Player> targetedPlayerOptional = currentRoom.getPresentPlayers().stream().filter(player -> player.getPlayerName().equals(target)).findFirst(); + if (targetedPlayerOptional.isPresent()) { + Player targetedPlayer = targetedPlayerOptional.get(); + if (player.addActiveFight(targetedPlayer)) { + writeToRoom(player.getPlayerName() + " has attacked a " + targetedPlayer.getPlayerName()); + return; + } + } + write("There's no one here to fight by that name."); }); } } diff --git a/src/main/java/com/comandante/creeper/player/Player.java b/src/main/java/com/comandante/creeper/player/Player.java index af34ff10b26ba68d237e21873cc5599b656b603b..704e5caa5e3a2068253bd73646e0adfb5f0d2d3e 100644 --- a/src/main/java/com/comandante/creeper/player/Player.java +++ b/src/main/java/com/comandante/creeper/player/Player.java @@ -121,7 +121,8 @@ public class Player extends CreeperEntity { DamageProcessor playerDamageProcesor = getPlayerClass().getDamageProcessor(); Set<Map.Entry<Long, ActiveFight>> entries = activeFights.entrySet(); for (Map.Entry<Long, ActiveFight> next : entries) { - Optional<String> npcIdOptional = next.getValue().getNpcId(); + ActiveFight activeFight = next.getValue(); + Optional<String> npcIdOptional = activeFight.getNpcId(); if (npcIdOptional.isPresent()) { // If the NPC has died- bail out. String npcId = npcIdOptional.get(); @@ -130,7 +131,15 @@ public class Player extends CreeperEntity { if (npc == null) { continue; } - doFightRound(playerDamageProcesor, npc.getDamageProcessor(), next.getValue()); + doFightRound(playerDamageProcesor, npc.getDamageProcessor(), activeFight); + return; + } + + Optional<String> targetPlayerOptional = activeFight.getPlayerId(); + if (targetPlayerOptional.isPresent()) { + addCoolDown(new CoolDown(CoolDownType.PVP_FIGHT)); + DamageProcessor targetPlayerDamageProcessor = gameManager.getPlayerManager().getPlayer(targetPlayerOptional.get()).getPlayerClass().getDamageProcessor(); + doFightRound(playerDamageProcesor, targetPlayerDamageProcessor, activeFight); } } } @@ -1373,6 +1382,21 @@ public class Player extends CreeperEntity { return false; } + public boolean addActiveFight(Player player) { + synchronized (interner.intern(playerId)) { + if (!doesActiveFightExist(player)) { + addCoolDown(new CoolDown(CoolDownType.PVP_FIGHT)); + ActiveFight activeFight = ActiveFight.builder() + .playerId(player.getPlayerId()) + .isPrimary(false) + .create(); + activeFights.put(System.nanoTime(), activeFight); + return true; + } + return false; + } + } + public boolean doesActiveFightExist(Npc npc) { synchronized (interner.intern(playerId)) { if (gameManager.getEntityManager().getNpcEntity(npc.getEntityId()) == null) { @@ -1613,10 +1637,10 @@ public class Player extends CreeperEntity { addCoolDown(new CoolDown(CoolDownType.PVP_FIGHT)); } else { Optional<PlayerMetadata> playerMetadataOptional = getPlayerMetadata(); - if (!playerMetadataOptional.isPresent()){ + if (!playerMetadataOptional.isPresent()) { return; } - for (CoolDown coolDown: playerMetadataOptional.get().getCoolDowns()) { + for (CoolDown coolDown : playerMetadataOptional.get().getCoolDowns()) { if (coolDown.getCoolDownType().equals(CoolDownType.NPC_FIGHT)) { coolDown.setNumberOfTicks(coolDown.getOriginalNumberOfTicks()); }