summaryrefslogtreecommitdiffstats
path: root/nms-patches/EntityPotion.patch
diff options
context:
space:
mode:
Diffstat (limited to 'nms-patches/EntityPotion.patch')
-rw-r--r--nms-patches/EntityPotion.patch142
1 files changed, 94 insertions, 48 deletions
diff --git a/nms-patches/EntityPotion.patch b/nms-patches/EntityPotion.patch
index d16a99c9..8d6ccdb5 100644
--- a/nms-patches/EntityPotion.patch
+++ b/nms-patches/EntityPotion.patch
@@ -1,8 +1,8 @@
--- a/net/minecraft/server/EntityPotion.java
+++ b/net/minecraft/server/EntityPotion.java
-@@ -3,6 +3,13 @@
- import java.util.Iterator;
- import java.util.List;
+@@ -6,6 +6,13 @@
+ import org.apache.logging.log4j.LogManager;
+ import org.apache.logging.log4j.Logger;
+// CraftBukkit start
+import java.util.HashMap;
@@ -13,59 +13,105 @@
+
public class EntityPotion extends EntityProjectile {
- public ItemStack item;
-@@ -57,13 +64,16 @@
- if (!this.world.isClientSide) {
- List list = Items.POTION.h(this.item);
+ private static final DataWatcherObject<Optional<ItemStack>> d = DataWatcher.a(EntityItem.class, DataWatcherRegistry.f);
+@@ -77,7 +84,7 @@
+ this.world.triggerEffect(2002, new BlockPosition(this), PotionRegistry.a(potionregistry));
+ this.die();
+ } else {
+- if (!list.isEmpty()) {
++ if (true || !list.isEmpty()) { // CraftBukkit - Call event even if no effects to apply
+ if (this.n()) {
+ EntityAreaEffectCloud entityareaeffectcloud = new EntityAreaEffectCloud(this.world, this.locX, this.locY, this.locZ);
-- if (list != null && !list.isEmpty()) {
-+ if (true || list != null && !list.isEmpty()) { // CraftBukkit - Call event even if no effects to apply
- AxisAlignedBB axisalignedbb = this.getBoundingBox().grow(4.0D, 2.0D, 4.0D);
- List list1 = this.world.a(EntityLiving.class, axisalignedbb);
+@@ -89,6 +96,7 @@
+ entityareaeffectcloud.a(potionregistry);
+ iterator = PotionUtil.b(itemstack).iterator();
-- if (!list1.isEmpty()) {
-+ if (true || !list1.isEmpty()) { // CraftBukkit - Run code even if there are no entities around
- Iterator iterator = list1.iterator();
++ // PAIL: Add events
+ while (iterator.hasNext()) {
+ MobEffect mobeffect = (MobEffect) iterator.next();
-+ // CraftBukkit
-+ HashMap<LivingEntity, Double> affected = new HashMap<LivingEntity, Double>();
+@@ -100,6 +108,9 @@
+ AxisAlignedBB axisalignedbb = this.getBoundingBox().grow(4.0D, 2.0D, 4.0D);
+ List list1 = this.world.a(EntityLiving.class, axisalignedbb);
+
++ // CraftBukkit
++ HashMap<LivingEntity, Double> affected = new HashMap<LivingEntity, Double>();
+
- while (iterator.hasNext()) {
- EntityLiving entityliving = (EntityLiving) iterator.next();
- double d0 = this.h(entityliving);
-@@ -75,12 +85,35 @@
- d1 = 1.0D;
- }
+ if (!list1.isEmpty()) {
+ Iterator iterator1 = list1.iterator();
+
+@@ -116,21 +127,45 @@
+ d1 = 1.0D;
+ }
-+ // CraftBukkit start
-+ affected.put((LivingEntity) entityliving.getBukkitEntity(), d1);
+- Iterator iterator2 = list.iterator();
++ // CraftBukkit start
++ affected.put((LivingEntity) entityliving.getBukkitEntity(), d1);
++ }
++ }
++ }
+ }
-+ }
+
-+ org.bukkit.event.entity.PotionSplashEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPotionSplashEvent(this, affected);
-+ if (!event.isCancelled() && list != null && !list.isEmpty()) { // do not process effects if there are no effects to process
-+ for (LivingEntity victim : event.getAffectedEntities()) {
-+ if (!(victim instanceof CraftLivingEntity)) {
-+ continue;
-+ }
++ org.bukkit.event.entity.PotionSplashEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPotionSplashEvent(this, affected);
++ if (!event.isCancelled() && list != null && !list.isEmpty()) { // do not process effects if there are no effects to process
++ for (LivingEntity victim : event.getAffectedEntities()) {
++ if (!(victim instanceof CraftLivingEntity)) {
++ continue;
++ }
+
-+ EntityLiving entityliving = ((CraftLivingEntity) victim).getHandle();
-+ double d1 = event.getIntensity(victim);
-+ // CraftBukkit end
++ EntityLiving entityliving = ((CraftLivingEntity) victim).getHandle();
++ double d1 = event.getIntensity(victim);
++ // CraftBukkit end
+
- Iterator iterator1 = list.iterator();
-
- while (iterator1.hasNext()) {
- MobEffect mobeffect = (MobEffect) iterator1.next();
- int i = mobeffect.getEffectId();
++ Iterator iterator2 = list.iterator();
++
++ while (iterator2.hasNext()) {
++ MobEffect mobeffect1 = (MobEffect) iterator2.next();
++ MobEffectList mobeffectlist = mobeffect1.getMobEffect();
++ // CraftBukkit start - Abide by PVP settings - for players only!
++ if (!this.world.pvpMode && this.getShooter() instanceof EntityPlayer && entityliving instanceof EntityPlayer && entityliving != this.getShooter()) {
++ int i = MobEffectList.getId(mobeffectlist);
++ // Block SLOWER_MOVEMENT, SLOWER_DIG, HARM, BLINDNESS, HUNGER, WEAKNESS and POISON potions
++ if (i == 2 || i == 4 || i == 7 || i == 15 || i == 17 || i == 18 || i == 19) {
++ continue;
++ }
++ }
++ // CraftBukkit end
++ if (mobeffectlist.isInstant()) {
++ mobeffectlist.applyInstantEffect(this, this.getShooter(), entityliving, mobeffect1.getAmplifier(), d1);
++ } else {
++ int i = (int) (d1 * (double) mobeffect1.getDuration() + 0.5D);
-+ // CraftBukkit start - Abide by PVP settings - for players only!
-+ if (!this.world.pvpMode && this.getShooter() instanceof EntityPlayer && entityliving instanceof EntityPlayer && entityliving != this.getShooter()) {
-+ // Block SLOWER_MOVEMENT, SLOWER_DIG, HARM, BLINDNESS, HUNGER, WEAKNESS and POISON potions
-+ if (i == 2 || i == 4 || i == 7 || i == 15 || i == 17 || i == 18 || i == 19) continue;
-+ }
-+ // CraftBukkit end
+- while (iterator2.hasNext()) {
+- MobEffect mobeffect1 = (MobEffect) iterator2.next();
+- MobEffectList mobeffectlist = mobeffect1.getMobEffect();
+-
+- if (mobeffectlist.isInstant()) {
+- mobeffectlist.applyInstantEffect(this, this.getShooter(), entityliving, mobeffect1.getAmplifier(), d1);
+- } else {
+- int i = (int) (d1 * (double) mobeffect1.getDuration() + 0.5D);
+-
+- if (i > 20) {
+- entityliving.addEffect(new MobEffect(mobeffectlist, i, mobeffect1.getAmplifier()));
+- }
+- }
++ if (i > 20) {
++ entityliving.addEffect(new MobEffect(mobeffectlist, i, mobeffect1.getAmplifier()));
+ }
+ }
+ }
+@@ -138,10 +173,10 @@
+ }
+ }
+ }
+-
+- this.world.triggerEffect(2002, new BlockPosition(this), PotionRegistry.a(potionregistry));
+- this.die();
+ }
+
- if (MobEffectList.byId[i].isInstant()) {
- MobEffectList.byId[i].applyInstantEffect(this, this.getShooter(), entityliving, mobeffect.getAmplifier(), d1);
- } else {
++ this.world.triggerEffect(2002, new BlockPosition(this), PotionRegistry.a(potionregistry));
++ this.die();
+ }
+ }
+