diff --git a/modules/Plugin/src/daybreak/abilitywar/game/list/murdermystery/MurderMystery.java b/modules/Plugin/src/daybreak/abilitywar/game/list/murdermystery/MurderMystery.java index d6701cae..f5963239 100644 --- a/modules/Plugin/src/daybreak/abilitywar/game/list/murdermystery/MurderMystery.java +++ b/modules/Plugin/src/daybreak/abilitywar/game/list/murdermystery/MurderMystery.java @@ -442,8 +442,9 @@ private void onPickupItem(EntityPickupItemEvent e) { e.setCancelled(true); Participant participant = getParticipant(e.getEntity().getUniqueId()); if (getGold(participant) < 64 && e.getItem().getItemStack().isSimilar(Items.GOLD.getStack())) { + final int amount = e.getItem().getItemStack().getAmount(); e.getItem().remove(); - addGold(participant); + addGold(participant, amount); } } } diff --git a/modules/Plugin/src/daybreak/abilitywar/game/list/murdermystery/ability/AbstractMurderer.java b/modules/Plugin/src/daybreak/abilitywar/game/list/murdermystery/ability/AbstractMurderer.java index e603f08f..b1ef02ba 100644 --- a/modules/Plugin/src/daybreak/abilitywar/game/list/murdermystery/ability/AbstractMurderer.java +++ b/modules/Plugin/src/daybreak/abilitywar/game/list/murdermystery/ability/AbstractMurderer.java @@ -120,7 +120,7 @@ public static HandlerList getHandlerList() { private final AbstractMurderer murderer; private final Participant target; - private MurderEvent(final AbstractMurderer murderer, final Participant target) { + public MurderEvent(final AbstractMurderer murderer, final Participant target) { this.murderer = murderer; this.target = target; } diff --git a/modules/Plugin/src/daybreak/abilitywar/game/list/murdermystery/ability/jobs/innocent/Doctor.java b/modules/Plugin/src/daybreak/abilitywar/game/list/murdermystery/ability/jobs/innocent/Doctor.java index c2afbaff..57356b37 100644 --- a/modules/Plugin/src/daybreak/abilitywar/game/list/murdermystery/ability/jobs/innocent/Doctor.java +++ b/modules/Plugin/src/daybreak/abilitywar/game/list/murdermystery/ability/jobs/innocent/Doctor.java @@ -10,13 +10,14 @@ import daybreak.abilitywar.game.list.murdermystery.MurderMystery; import daybreak.abilitywar.game.list.murdermystery.MurderMystery.ArrowKillEvent; import daybreak.abilitywar.game.list.murdermystery.ability.AbstractInnocent; +import daybreak.abilitywar.game.list.murdermystery.ability.AbstractMurderer; import daybreak.abilitywar.game.list.murdermystery.ability.AbstractMurderer.MurderEvent; import daybreak.abilitywar.game.module.DeathManager; +import daybreak.abilitywar.utils.base.color.RGB; import daybreak.abilitywar.utils.base.concurrent.TimeUnit; import daybreak.abilitywar.utils.base.math.geometry.Circle; import daybreak.abilitywar.utils.base.minecraft.nms.NMS; import daybreak.abilitywar.utils.library.ParticleLib; -import daybreak.abilitywar.utils.base.color.RGB; import org.bukkit.Location; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -28,8 +29,8 @@ @AbilityManifest(name = "시민: 의사", rank = Rank.SPECIAL, species = Species.HUMAN, explain = { "금 우클릭으로 금 8개를 소모해 활과 화살을 얻을 수 있습니다.", - "금 좌클릭으로 금 6개를 소모해 2.5초간 y에 상관 없이 주변 5칸 이내에서", - "플레이어가 죽지 못하게 합니다." + "금 좌클릭으로 금 6개를 소모해 4초간 y에 상관 없이 주변 7칸 이내에서", + "시민이 죽지 못하게 합니다." }) public class Doctor extends AbstractInnocent { @@ -67,34 +68,40 @@ protected void onEnd() { @SubscribeEvent private void onArrowKill(final ArrowKillEvent e) { - if (duration.isRunning() && e.getTarget().getPlayer().getLocation().distanceSquared(getPlayer().getLocation()) <= 25) { - e.setCancelled(true); - new BukkitRunnable() { - @Override - public void run() { - NMS.broadcastEntityEffect(e.getTarget().getPlayer(), (byte) 35); - } - }.runTaskLater(AbilityWar.getPlugin(), 3L); + if (duration.isRunning() && e.getTarget().getPlayer().getLocation().distanceSquared(getPlayer().getLocation()) <= 49) { + final Participant target = getGame().getParticipant(e.getTarget().getPlayer()); + if (!(target.getAbility() instanceof AbstractMurderer)) { + e.setCancelled(true); + new BukkitRunnable() { + @Override + public void run() { + NMS.broadcastEntityEffect(e.getTarget().getPlayer(), (byte) 35); + } + }.runTaskLater(AbilityWar.getPlugin(), 3L); + } } } @SubscribeEvent private void onArrowKill(final MurderEvent e) { - if (duration.isRunning() && e.getTarget().getPlayer().getLocation().distanceSquared(getPlayer().getLocation()) <= 25) { - e.setCancelled(true); - new BukkitRunnable() { - @Override - public void run() { - NMS.broadcastEntityEffect(e.getTarget().getPlayer(), (byte) 35); - } - }.runTaskLater(AbilityWar.getPlugin(), 3L); + if (duration.isRunning() && e.getTarget().getPlayer().getLocation().distanceSquared(getPlayer().getLocation()) <= 49) { + final Participant target = e.getTarget(); + if (!(target.getAbility() instanceof AbstractMurderer)) { + e.setCancelled(true); + new BukkitRunnable() { + @Override + public void run() { + NMS.broadcastEntityEffect(e.getTarget().getPlayer(), (byte) 35); + } + }.runTaskLater(AbilityWar.getPlugin(), 3L); + } } } private static final Circle CIRCLE = Circle.of(5, 60); private static final RGB color = RGB.of(0, 0, 0); - private final Duration duration = new Duration(15) { + private final Duration duration = new Duration(20) { @Override protected void onDurationProcess(int count) { for (final Location loc : CIRCLE.toLocations(getPlayer().getLocation()).floor(getPlayer().getLocation().getY())) { diff --git a/modules/Plugin/src/daybreak/abilitywar/game/list/murdermystery/ability/jobs/murderer/AssassinMurderer.java b/modules/Plugin/src/daybreak/abilitywar/game/list/murdermystery/ability/jobs/murderer/AssassinMurderer.java index f6343f36..a25d2680 100644 --- a/modules/Plugin/src/daybreak/abilitywar/game/list/murdermystery/ability/jobs/murderer/AssassinMurderer.java +++ b/modules/Plugin/src/daybreak/abilitywar/game/list/murdermystery/ability/jobs/murderer/AssassinMurderer.java @@ -9,13 +9,18 @@ import daybreak.abilitywar.game.list.murdermystery.MurderMystery; import daybreak.abilitywar.game.list.murdermystery.ability.AbstractMurderer; import daybreak.abilitywar.utils.base.concurrent.TimeUnit; +import daybreak.abilitywar.utils.base.language.korean.KoreanUtil; +import daybreak.abilitywar.utils.base.language.korean.KoreanUtil.Josa; import daybreak.abilitywar.utils.base.math.FastMath; import daybreak.abilitywar.utils.base.math.LocationUtil; import daybreak.abilitywar.utils.base.minecraft.nms.NMS; import daybreak.abilitywar.utils.library.ParticleLib; import daybreak.abilitywar.utils.library.SoundLib; import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventPriority; import org.bukkit.event.block.Action; +import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerToggleSneakEvent; @@ -23,6 +28,7 @@ "모든 시민을 죽이세요!", "살인자의 검으로 상대를 죽일 경우 5초간 투명 효과를 받습니다.", "금 우클릭으로 금 8개를 소모해 활과 화살을 얻을 수 있습니다.", + "암살자가 시민을 죽일 때 킬 메시지가 뜨지 않습니다.", "웅크리면 투명해지고, 웅크리지 않으면 불투명해집니다." }) public class AssassinMurderer extends AbstractMurderer { @@ -95,6 +101,19 @@ private void onInteract(PlayerInteractEvent e) { } } + @SubscribeEvent(eventPriority = EventPriority.HIGHEST) + private void onPlayerDeath(final PlayerDeathEvent e) { + final Player dead = e.getEntity(); + if (getPlayer().equals(dead.getKiller())) { + e.setDeathMessage(null); + for (Participant participant : getGame().getParticipants()) { + if (participant.getAbility() instanceof AbstractMurderer) { + participant.getPlayer().sendMessage("§8" + dead.getName() + "§7" + KoreanUtil.getJosa(dead.getName(), Josa.이가) + " 죽었습니다."); + } + } + } + } + @SubscribeEvent(onlyRelevant = true) private void onToggleSneak(final PlayerToggleSneakEvent e) { if (e.isSneaking() && !skill.isRunning() && !cooldown.isRunning()) { diff --git a/pom.xml b/pom.xml index c3926f5b..86d598b2 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,7 @@ 1.8 ${java.version} ${java.version} - 3.3.6 + 3.3.7 1.15.2-R0.1-SNAPSHOT 30.1-jre 1.5.20