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 e708b2c987fac150c22b3367cec2e3e2bcb9914c..06872ee2d0eb9ea847568d328a95f60db7373be8 100644 --- a/src/main/java/net/minecraft/world/effect/MobEffect.java +++ b/src/main/java/net/minecraft/world/effect/MobEffect.java @@ -59,6 +59,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 @@ -87,17 +88,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())) {