From 3e5c4bc617d66f6ef03d5e3c82cf5b705a00ed66 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Wed, 23 Jan 2019 15:22:16 -0800 Subject: [PATCH] Fixing several issues related to Bleed/Rupture Rupture now keeps track of who applied the damage and attributes it correctly in events Rupture's bleed timer task no longer caps at the low value of 10 ticks internally Ruptures bleed check code has had some minor refactoring --- Changelog.txt | 5 +++-- .../nossr50/commands/skills/SwordsCommand.java | 5 ++--- src/main/java/com/gmail/nossr50/mcMMO.java | 2 +- .../runnables/skills/BleedTimerTask.java | 17 +++++++++++------ .../nossr50/skills/swords/SwordsManager.java | 9 ++------- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index ee8d35dcf..a917ee831 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -35,9 +35,10 @@ Version 2.1.0 + (Events) Starting an XP event will now use the title API (toggle this in advanced.yml) + (Sound) Volume and Pitch of sounds can now be configured in the new sounds.yml file + (MySQL) Added support for SSL for MySQL/MariaDB (On by default) - ! (Skills) Taming's Gore now uses Bleed Rank 1 for its DoT - ! (Skills) Sword's Rupture now ticks four times as fast + ! (Skills) Taming's Gore now uses Rupture Rank 1 for its DoT ! (Skills) Sword's Bleed has been renamed to Rupture + ! (Skills) Sword's Rupture now ticks four times as fast + = (Skills) Fixed a bug where Rupture would apply an incorrect amount of bleed ticks ! (Skills) Sword's Rupture now reaches its max proc chance at level 20 (200 in Retro) ! (Skills) Sword's Rupture now has a max chance to proc of 33% instead of 70% ! (Skills) Sword's Rupture now deals 50% more damage at above Rank 3 and can last much longer! The base damage for Bleed has been increased as well (update your advanced.yml admins) diff --git a/src/main/java/com/gmail/nossr50/commands/skills/SwordsCommand.java b/src/main/java/com/gmail/nossr50/commands/skills/SwordsCommand.java index 7a775baa2..3f3a1e7d8 100644 --- a/src/main/java/com/gmail/nossr50/commands/skills/SwordsCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/skills/SwordsCommand.java @@ -4,7 +4,6 @@ import com.gmail.nossr50.config.AdvancedConfig; import com.gmail.nossr50.datatypes.skills.PrimarySkillType; import com.gmail.nossr50.datatypes.skills.SubSkillType; import com.gmail.nossr50.locale.LocaleLoader; -import com.gmail.nossr50.skills.swords.Swords; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.TextComponentFactory; import com.gmail.nossr50.util.player.UserManager; @@ -43,7 +42,7 @@ public class SwordsCommand extends SkillCommand { // SWORDS_RUPTURE if (canBleed) { - bleedLength = UserManager.getPlayer(player).getSwordsManager().getBleedTicks(); + bleedLength = UserManager.getPlayer(player).getSwordsManager().getRuptureBleedTicks(); String[] bleedStrings = calculateAbilityDisplayValues(skillValue, SubSkillType.SWORDS_RUPTURE, isLucky); bleedChance = bleedStrings[0]; @@ -69,7 +68,7 @@ public class SwordsCommand extends SkillCommand { protected List statsDisplay(Player player, float skillValue, boolean hasEndurance, boolean isLucky) { List messages = new ArrayList(); - int ruptureTicks = UserManager.getPlayer(player).getSwordsManager().getBleedTicks(); + int ruptureTicks = UserManager.getPlayer(player).getSwordsManager().getRuptureBleedTicks(); double ruptureDamagePlayers = RankUtils.getRank(player, SubSkillType.SWORDS_RUPTURE) >= 3 ? AdvancedConfig.getInstance().getRuptureDamagePlayer() * 1.5D : AdvancedConfig.getInstance().getRuptureDamagePlayer(); double ruptureDamageMobs = RankUtils.getRank(player, SubSkillType.SWORDS_RUPTURE) >= 3 ? AdvancedConfig.getInstance().getRuptureDamageMobs() * 1.5D : AdvancedConfig.getInstance().getRuptureDamageMobs(); diff --git a/src/main/java/com/gmail/nossr50/mcMMO.java b/src/main/java/com/gmail/nossr50/mcMMO.java index d52a5934e..cf542db02 100644 --- a/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/src/main/java/com/gmail/nossr50/mcMMO.java @@ -511,7 +511,7 @@ public class mcMMO extends JavaPlugin { // Cleanup the backups folder new CleanBackupsTask().runTaskAsynchronously(mcMMO.p); - // Bleed timer (Runs every two seconds) + // Bleed timer (Runs every 0.5 seconds) new BleedTimerTask().runTaskTimer(this, 1 * Misc.TICK_CONVERSION_FACTOR, 1 * (Misc.TICK_CONVERSION_FACTOR / 2)); // Old & Powerless User remover diff --git a/src/main/java/com/gmail/nossr50/runnables/skills/BleedTimerTask.java b/src/main/java/com/gmail/nossr50/runnables/skills/BleedTimerTask.java index 60daa157e..e6f700022 100644 --- a/src/main/java/com/gmail/nossr50/runnables/skills/BleedTimerTask.java +++ b/src/main/java/com/gmail/nossr50/runnables/skills/BleedTimerTask.java @@ -17,9 +17,10 @@ import java.util.Map; import java.util.Map.Entry; public class BleedTimerTask extends BukkitRunnable { - private final static int MAX_BLEED_TICKS = 10; + private final static int MAX_BLEED_TICKS = 100; //The cap has been raised :) private static Map bleedList = new HashMap(); private static Map bleedDamage = new HashMap(); + private static Map attackerMap = new HashMap<>(); @Override public void run() { @@ -73,7 +74,8 @@ public class BleedTimerTask extends BukkitRunnable { bleedIterator.remove(); } - CombatUtils.dealNoInvulnerabilityTickDamage(entity, damage, null); + + CombatUtils.dealNoInvulnerabilityTickDamage(entity, damage, attackerMap.get(entity)); ParticleEffectUtils.playBleedEffect(entity); } } @@ -86,9 +88,10 @@ public class BleedTimerTask extends BukkitRunnable { */ public static void bleedOut(LivingEntity entity) { if (bleedList.containsKey(entity)) { - CombatUtils.dealNoInvulnerabilityTickDamage(entity, bleedList.get(entity) * 2, null); + CombatUtils.dealNoInvulnerabilityTickDamage(entity, bleedList.get(entity) * 2, attackerMap.get(entity)); bleedList.remove(entity); bleedDamage.remove(entity); + attackerMap.remove(entity); } } @@ -101,6 +104,7 @@ public class BleedTimerTask extends BukkitRunnable { if (bleedList.containsKey(entity)) { bleedList.remove(entity); bleedDamage.remove(entity); + attackerMap.remove(entity); } } @@ -110,20 +114,21 @@ public class BleedTimerTask extends BukkitRunnable { * @param entity LivingEntity to add * @param ticks Number of bleeding ticks */ - public static void add(LivingEntity entity, int ticks, int bleedRank) { + public static void add(LivingEntity entity, LivingEntity attacker, int ticks, int bleedRank) { int newTicks = ticks; if (bleedList.containsKey(entity)) { newTicks += bleedList.get(entity); - bleedList.put(entity, Math.min(newTicks, MAX_BLEED_TICKS)); + bleedList.put(entity, Math.min(MAX_BLEED_TICKS, newTicks)); //Override the current bleed rank only if this one is higher if(bleedDamage.get(entity) < bleedRank) bleedDamage.put(entity, bleedRank); } else { - bleedList.put(entity, Math.min(newTicks, MAX_BLEED_TICKS)); + bleedList.put(entity, Math.min(MAX_BLEED_TICKS, newTicks)); bleedDamage.put(entity, bleedRank); + attackerMap.put(entity, attacker); } } diff --git a/src/main/java/com/gmail/nossr50/skills/swords/SwordsManager.java b/src/main/java/com/gmail/nossr50/skills/swords/SwordsManager.java index 0ff20ac61..7f822c8d3 100644 --- a/src/main/java/com/gmail/nossr50/skills/swords/SwordsManager.java +++ b/src/main/java/com/gmail/nossr50/skills/swords/SwordsManager.java @@ -61,12 +61,7 @@ public class SwordsManager extends SkillManager { } } - if (getSkillLevel() >= AdvancedConfig.getInstance().getMaxBonusLevel(SubSkillType.SWORDS_RUPTURE)) { - BleedTimerTask.add(target, getBleedTicks(), RankUtils.getRank(getPlayer(), SubSkillType.SWORDS_RUPTURE)); - } - else { - BleedTimerTask.add(target, getBleedTicks(), RankUtils.getRank(getPlayer(), SubSkillType.SWORDS_RUPTURE)); - } + BleedTimerTask.add(target, getRuptureBleedTicks(), RankUtils.getRank(getPlayer(), SubSkillType.SWORDS_RUPTURE)); if (mcMMOPlayer.useChatNotifications()) { NotificationManager.sendPlayerInformation(getPlayer(), NotificationType.SUBSKILL_MESSAGE, "Swords.Combat.Bleeding"); @@ -74,7 +69,7 @@ public class SwordsManager extends SkillManager { } } - public int getBleedTicks() + public int getRuptureBleedTicks() { int bleedTicks = 2 * RankUtils.getRank(getPlayer(), SubSkillType.SWORDS_RUPTURE);