diff --git a/patches/server/0027-Fixes-creative-killing-potion-effects-and-certain-po.patch b/patches/server/0027-Fixes-creative-killing-potion-effects-and-certain-po.patch new file mode 100644 index 0000000..7ddbe0b --- /dev/null +++ b/patches/server/0027-Fixes-creative-killing-potion-effects-and-certain-po.patch @@ -0,0 +1,53 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Video +Date: Mon, 11 Apr 2022 13:33:52 -0600 +Subject: [PATCH] Fixes creative-killing potion effects and certain potion + effect overflows + + +diff --git a/src/main/java/net/minecraft/world/effect/MobEffect.java b/src/main/java/net/minecraft/world/effect/MobEffect.java +index 79e036d79dec2ec4404baf02c23ba5ccad20cdce..506be74453c6ecc52f05a48b1d95f82175fa6159 100644 +--- a/src/main/java/net/minecraft/world/effect/MobEffect.java ++++ b/src/main/java/net/minecraft/world/effect/MobEffect.java +@@ -47,6 +47,7 @@ public class MobEffect { + } + + public void applyEffectTick(LivingEntity entity, int amplifier) { ++ boolean god = entity instanceof Player player && (player.isCreative() || player.isInvulnerable()); // Scissors + if (this == MobEffects.REGENERATION) { + if (entity.getHealth() < entity.getMaxHealth()) { + entity.heal(1.0F, RegainReason.MAGIC_REGEN); // CraftBukkit +@@ -75,17 +76,31 @@ public class MobEffect { + // CraftBukkit end + } + } else if ((this != MobEffects.HEAL || entity.isInvertedHealAndHarm()) && (this != MobEffects.HARM || !entity.isInvertedHealAndHarm())) { +- if (this == MobEffects.HARM && !entity.isInvertedHealAndHarm() || this == MobEffects.HEAL && entity.isInvertedHealAndHarm()) { ++ // Scissors start ++ amplifier = Math.min(Math.abs(amplifier), 124); ++ if (!god && (this == MobEffects.HARM && !entity.isInvertedHealAndHarm() || this == MobEffects.HEAL && entity.isInvertedHealAndHarm())) { + entity.hurt(DamageSource.MAGIC, (float) (6 << amplifier)); + } ++ // Scissors end + } else { +- entity.heal((float) Math.max(4 << amplifier, 0), RegainReason.MAGIC); // CraftBukkit ++ // Scissors start ++ if (!god) { ++ amplifier = Math.min(Math.abs(amplifier), 124); ++ entity.heal((float) Math.max(4 << amplifier, 0), RegainReason.MAGIC); // CraftBukkit ++ } ++ // Scissors end + } + + } + + public void applyInstantenousEffect(@Nullable Entity source, @Nullable Entity attacker, LivingEntity target, int amplifier, double proximity) { + int j; ++ // Scissors start - Don't apply any healing/harming effects for Creative/Invulnerable players and cap the amplifier for those who aren't. ++ if (target instanceof Player player && (player.isCreative() || player.isInvulnerable())) { ++ return; ++ } ++ amplifier = Math.min(Math.abs(amplifier), 124); ++ // Scissors end + + if ((this != MobEffects.HEAL || target.isInvertedHealAndHarm()) && (this != MobEffects.HARM || !target.isInvertedHealAndHarm())) { + if ((this != MobEffects.HARM || target.isInvertedHealAndHarm()) && (this != MobEffects.HEAL || !target.isInvertedHealAndHarm())) {