diff --git a/modules/rebirth/README.md b/modules/rebirth/README.md index 054c483..bcf7d5a 100644 --- a/modules/rebirth/README.md +++ b/modules/rebirth/README.md @@ -7,4 +7,5 @@ Der Skill hat eine Chance tödlichen Schaden zu verhindern und dann den Spieler | `chance` | `0.1` | Die Chance in % die der Spieler hat tödlichen Schaden zu verhindern und den Skill auszulösen. | | `heal` | `20` | Die Leben oder der Prozentsatz an Leben die der Spieler zurück bekommt. | | `heal_in_percent` | `false` | Wenn auf `true` zählt der Wert von `heal` als Prozentsatz, z.B. `heal: 0.1` ist 10%. | -| `message` | `Dein Skill {skill} hat tödlichen Schaden verhindert und du wurdest um {heal} Leben geheilt. Cooldown: {cooldown}` | Nachricht die kommt wenn der Skill ausgelöst wird. Platzhalter: `{skill}`, `{heal}`, `{cooldown}`, `{alias}` | \ No newline at end of file +| `message` | `Dein Skill {skill} hat tödlichen Schaden verhindert und du wurdest um {heal} Leben geheilt. Cooldown: {cooldown}` | Nachricht die kommt wenn der Skill ausgelöst wird. Platzhalter: `{skill}`, `{heal}`, `{cooldown}`, `{alias}` | +| `ignored-causes` | `[VOID, SUFFOCATION, SUICIDE, CUSTOM]` | A list of ignored [damage causes](https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/entity/EntityDamageEvent.DamageCause.html) that do not trigger the rebirth. | \ No newline at end of file diff --git a/modules/rebirth/src/main/java/de/raidcraft/skillsandeffects/skills/Rebirth.java b/modules/rebirth/src/main/java/de/raidcraft/skillsandeffects/skills/Rebirth.java index 68bfcd1..adee61e 100644 --- a/modules/rebirth/src/main/java/de/raidcraft/skillsandeffects/skills/Rebirth.java +++ b/modules/rebirth/src/main/java/de/raidcraft/skillsandeffects/skills/Rebirth.java @@ -1,11 +1,7 @@ package de.raidcraft.skillsandeffects.skills; import com.google.common.base.Strings; -import de.raidcraft.skills.AbstractSkill; -import de.raidcraft.skills.Messages; -import de.raidcraft.skills.SkillContext; -import de.raidcraft.skills.SkillFactory; -import de.raidcraft.skills.SkillInfo; +import de.raidcraft.skills.*; import de.raidcraft.skills.configmapper.ConfigOption; import de.raidcraft.skills.text.text.format.NamedTextColor; import de.raidcraft.skills.util.PseudoRandomGenerator; @@ -22,6 +18,9 @@ import org.bukkit.event.entity.EntityDamageEvent; import java.time.Instant; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import static de.raidcraft.skills.text.text.Component.text; @@ -49,6 +48,7 @@ public Class getSkillClass() { double heal = 20; @ConfigOption boolean healInPercent = false; + private Set ignoredCauses = new HashSet<>(); private PseudoRandomGenerator random; @@ -60,12 +60,28 @@ protected Rebirth(SkillContext context) { public void load(ConfigurationSection config) { this.random = PseudoRandomGenerator.create((float) config.getDouble("chance", 0.1)); + List stringList = config.getStringList("ignored-causes"); + if (stringList.isEmpty()) { + ignoredCauses.add(EntityDamageEvent.DamageCause.VOID); + ignoredCauses.add(EntityDamageEvent.DamageCause.SUFFOCATION); + ignoredCauses.add(EntityDamageEvent.DamageCause.SUICIDE); + ignoredCauses.add(EntityDamageEvent.DamageCause.CUSTOM); + } else { + for (String cause : stringList) { + try { + ignoredCauses.add(EntityDamageEvent.DamageCause.valueOf(cause.toUpperCase())); + } catch (IllegalArgumentException e) { + log.severe("invalid ignored damage cause " + cause + " in config of " + alias() + " (" + id() + ")"); + } + } + } } @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) public void onDamage(EntityDamageEvent event) { if (!(event.getEntity() instanceof Player)) return; + if (ignoredCauses.contains(event.getCause())) return; if (notApplicable((OfflinePlayer) event.getEntity())) return; Player player = (Player) event.getEntity();