Fix for handling damage event for invincible effect (#205)

* handle damage event for invincible effect

* Update comment to be more informative

---------

Co-authored-by: HSGamer <huynhqtienvtag@gmail.com>
Co-authored-by: TechnicallyCoded <technicallycoded@gmail.com>
This commit is contained in:
Yomamaeatstoes 2024-03-29 19:19:31 -04:00 committed by GitHub
parent 0afea8b3d5
commit f2b039b962
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 36 additions and 1 deletions

View File

@ -0,0 +1,27 @@
package me.SuperRonanCraft.BetterRTP.player.events;
import me.SuperRonanCraft.BetterRTP.references.player.HelperPlayer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageEvent;
public class Damage {
static boolean canCancel(EntityDamageEvent.DamageCause damageCause) {
return true; // TODO: Allow for filtering damage causes
}
static boolean isInInvincibleMode(Player player) {
return HelperPlayer.getData(player).getInvincibleEndTime() > System.currentTimeMillis();
}
static void onEntityDamage(EntityDamageEvent event) {
Entity entity = event.getEntity();
if (!(entity instanceof Player)) return;
Player player = (Player) entity;
if (!canCancel(event.getCause())) return;
if (!isInInvincibleMode(player)) return;
event.setCancelled(true);
}
}

View File

@ -5,6 +5,7 @@ import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_TeleportPostEven
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.*; import org.bukkit.event.player.*;
import org.bukkit.event.world.WorldLoadEvent; import org.bukkit.event.world.WorldLoadEvent;
@ -67,4 +68,9 @@ public class EventListener implements Listener {
private void onRespawn(PlayerRespawnEvent e) { private void onRespawn(PlayerRespawnEvent e) {
Death.respawnEvent(e); Death.respawnEvent(e);
} }
@EventHandler
private void onDamage(EntityDamageEvent e) {
Damage.onEntityDamage(e);
}
} }

View File

@ -2,6 +2,7 @@ package me.SuperRonanCraft.BetterRTP.player.rtp.effects;
import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.references.file.FileOther; import me.SuperRonanCraft.BetterRTP.references.file.FileOther;
import me.SuperRonanCraft.BetterRTP.references.player.HelperPlayer;
import me.SuperRonanCraft.BetterRTP.versions.AsyncHandler; import me.SuperRonanCraft.BetterRTP.versions.AsyncHandler;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
@ -52,7 +53,7 @@ public class RTPEffect_Potions { //Potions AND Invincibility
public void giveEffects(Player p) { public void giveEffects(Player p) {
AsyncHandler.syncAtEntity(p, () -> { AsyncHandler.syncAtEntity(p, () -> {
if (invincibleEnabled) if (invincibleEnabled)
p.setNoDamageTicks(invincibleTime * 20); HelperPlayer.getData(p).setInvincibleEndTime(System.currentTimeMillis() + (invincibleTime * 1000L));
if (potionEnabled) { if (potionEnabled) {
List<PotionEffect> effects = new ArrayList<>(); List<PotionEffect> effects = new ArrayList<>();
for (PotionEffectType e : potionEffects.keySet()) { for (PotionEffectType e : potionEffects.keySet()) {

View File

@ -22,6 +22,7 @@ public class PlayerData {
@Getter @Setter boolean rtping; @Getter @Setter boolean rtping;
@Getter @Setter int rtpCount; @Getter @Setter int rtpCount;
@Getter @Setter long globalCooldown; @Getter @Setter long globalCooldown;
@Getter @Setter long invincibleEndTime;
PlayerData(Player player) { PlayerData(Player player) {
this.player = player; this.player = player;