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