summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nms-patches/EntityAreaEffectCloud.patch39
-rw-r--r--nms-patches/EntityPotion.patch31
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java15
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftLingeringPotion.java3
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftSplashPotion.java3
-rw-r--r--src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java16
6 files changed, 93 insertions, 14 deletions
diff --git a/nms-patches/EntityAreaEffectCloud.patch b/nms-patches/EntityAreaEffectCloud.patch
index 0be2ccd8..08cb2e41 100644
--- a/nms-patches/EntityAreaEffectCloud.patch
+++ b/nms-patches/EntityAreaEffectCloud.patch
@@ -1,6 +1,17 @@
--- a/net/minecraft/server/EntityAreaEffectCloud.java
+++ b/net/minecraft/server/EntityAreaEffectCloud.java
-@@ -91,6 +91,22 @@
+@@ -8,6 +8,10 @@
+ import java.util.List;
+ import java.util.Map;
+ import java.util.UUID;
++
++import org.bukkit.craftbukkit.entity.CraftLivingEntity; // CraftBukkit
++import org.bukkit.entity.LivingEntity; // CraftBukkit
++
+ import java.util.Map.Entry;
+
+ public class EntityAreaEffectCloud extends Entity {
+@@ -91,6 +95,22 @@
}
@@ -23,3 +34,29 @@
public int getColor() {
return ((Integer) this.getDataWatcher().get(EntityAreaEffectCloud.b)).intValue();
}
+@@ -237,6 +257,7 @@
+ if (!list.isEmpty()) {
+ Iterator iterator2 = list.iterator();
+
++ List<LivingEntity> entities = new ArrayList<LivingEntity>(); // CraftBukkit
+ while (iterator2.hasNext()) {
+ EntityLiving entityliving = (EntityLiving) iterator2.next();
+
+@@ -246,6 +267,17 @@
+ double d2 = d0 * d0 + d1 * d1;
+
+ if (d2 <= (double) (f * f)) {
++ // CraftBukkit start
++ entities.add((LivingEntity) entityliving.getBukkitEntity());
++ }
++ }
++ }
++ org.bukkit.event.entity.AreaEffectCloudApplyEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callAreaEffectCloudApplyEvent(this, entities);
++ if (true) { // Preserve NMS spacing and bracket count for smallest diff
++ for (LivingEntity entity : event.getAffectedEntities()) {
++ if (entity instanceof CraftLivingEntity) {
++ EntityLiving entityliving = ((CraftLivingEntity) entity).getHandle();
++ // CraftBukkit end
+ this.g.put(entityliving, Integer.valueOf(this.ticksLived + this.reapplicationDelay));
+ Iterator iterator3 = arraylist.iterator();
+
diff --git a/nms-patches/EntityPotion.patch b/nms-patches/EntityPotion.patch
index f4731684..e7574eba 100644
--- a/nms-patches/EntityPotion.patch
+++ b/nms-patches/EntityPotion.patch
@@ -14,7 +14,7 @@
public class EntityPotion extends EntityProjectile {
private static final DataWatcherObject<Optional<ItemStack>> d = DataWatcher.a(EntityItem.class, DataWatcherRegistry.f);
-@@ -77,7 +84,7 @@
+@@ -77,10 +84,11 @@
this.world.triggerEffect(2002, new BlockPosition(this), PotionRegistry.a(potionregistry));
this.die();
} else {
@@ -23,15 +23,24 @@
if (this.n()) {
EntityAreaEffectCloud entityareaeffectcloud = new EntityAreaEffectCloud(this.world, this.locX, this.locY, this.locZ);
-@@ -89,6 +96,7 @@
- entityareaeffectcloud.a(potionregistry);
- iterator = PotionUtil.b(itemstack).iterator();
-
-+ // PAIL: Add events
- while (iterator.hasNext()) {
- MobEffect mobeffect = (MobEffect) iterator.next();
++ entityareaeffectcloud.projectileSource = this.projectileSource; // CraftBukkit
+ entityareaeffectcloud.a(this.getShooter());
+ entityareaeffectcloud.setRadius(3.0F);
+ entityareaeffectcloud.setRadiusOnUse(-0.5F);
+@@ -95,11 +103,21 @@
+ entityareaeffectcloud.a(new MobEffect(mobeffect.getMobEffect(), mobeffect.getDuration(), mobeffect.getAmplifier()));
+ }
-@@ -100,6 +108,9 @@
+- this.world.addEntity(entityareaeffectcloud);
++ // CraftBukkit start
++ org.bukkit.event.entity.LingeringPotionSplashEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callLingeringPotionSplashEvent(this, entityareaeffectcloud);
++ if (!(event.isCancelled() || entityareaeffectcloud.dead)) {
++ this.world.addEntity(entityareaeffectcloud);
++ } else {
++ entityareaeffectcloud.dead = true;
++ }
++ // CraftBukkit end
+ } else {
AxisAlignedBB axisalignedbb = this.getBoundingBox().grow(4.0D, 2.0D, 4.0D);
List list1 = this.world.a(EntityLiving.class, axisalignedbb);
@@ -41,7 +50,7 @@
if (!list1.isEmpty()) {
Iterator iterator1 = list1.iterator();
-@@ -116,21 +127,45 @@
+@@ -116,21 +134,45 @@
d1 = 1.0D;
}
@@ -101,7 +110,7 @@
}
}
}
-@@ -138,19 +173,20 @@
+@@ -138,19 +180,20 @@
}
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java
index e8b8787b..f8d6a7b3 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java
@@ -2,6 +2,7 @@ package org.bukkit.craftbukkit.entity;
import java.util.List;
import net.minecraft.server.EntityAreaEffectCloud;
+import net.minecraft.server.EntityLiving;
import net.minecraft.server.MobEffect;
import net.minecraft.server.MobEffectList;
@@ -15,6 +16,7 @@ import org.bukkit.entity.AreaEffectCloud;
import org.bukkit.entity.EntityType;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
+import org.bukkit.projectiles.ProjectileSource;
import org.bukkit.potion.PotionData;
import com.google.common.collect.ImmutableList;
@@ -202,4 +204,17 @@ public class CraftAreaEffectCloud extends CraftEntity implements AreaEffectCloud
public PotionData getBasePotionData() {
return CraftPotionUtil.toBukkit(getHandle().getType());
}
+
+ public ProjectileSource getSource() {
+ return getHandle().projectileSource;
+ }
+
+ public void setSource(ProjectileSource shooter) {
+ if (shooter instanceof CraftLivingEntity) {
+ getHandle().a((EntityLiving) ((CraftLivingEntity) shooter).getHandle()); // PAIL rename setSource
+ } else {
+ getHandle().a((EntityLiving) null);
+ }
+ getHandle().projectileSource = shooter;
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLingeringPotion.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLingeringPotion.java
index 52cd654a..2a5482ff 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLingeringPotion.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLingeringPotion.java
@@ -6,9 +6,10 @@ import org.bukkit.Material;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.inventory.CraftItemStack;
import org.bukkit.entity.EntityType;
+import org.bukkit.entity.LingeringPotion;
import org.bukkit.inventory.ItemStack;
-public class CraftLingeringPotion extends CraftThrownPotion {
+public class CraftLingeringPotion extends CraftThrownPotion implements LingeringPotion {
public CraftLingeringPotion(CraftServer server, EntityPotion entity) {
super(server, entity);
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSplashPotion.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSplashPotion.java
index 863a6c27..1ef057b8 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSplashPotion.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSplashPotion.java
@@ -6,9 +6,10 @@ import org.bukkit.Material;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.inventory.CraftItemStack;
import org.bukkit.entity.EntityType;
+import org.bukkit.entity.SplashPotion;
import org.bukkit.inventory.ItemStack;
-public class CraftSplashPotion extends CraftThrownPotion {
+public class CraftSplashPotion extends CraftThrownPotion implements SplashPotion {
public CraftSplashPotion(CraftServer server, EntityPotion entity) {
super(server, entity);
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
index 0abfc608..646ee2bb 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -31,6 +31,7 @@ import org.bukkit.craftbukkit.inventory.CraftItemStack;
import org.bukkit.craftbukkit.inventory.CraftMetaBook;
import org.bukkit.craftbukkit.util.CraftDamageSource;
import org.bukkit.craftbukkit.util.CraftMagicNumbers;
+import org.bukkit.entity.AreaEffectCloud;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Creeper;
import org.bukkit.entity.EntityType;
@@ -344,6 +345,15 @@ public class CraftEventFactory {
return event;
}
+ public static LingeringPotionSplashEvent callLingeringPotionSplashEvent(EntityPotion potion, EntityAreaEffectCloud cloud) {
+ ThrownPotion thrownPotion = (ThrownPotion) potion.getBukkitEntity();
+ AreaEffectCloud effectCloud = (AreaEffectCloud) cloud.getBukkitEntity();
+
+ LingeringPotionSplashEvent event = new LingeringPotionSplashEvent(thrownPotion, effectCloud);
+ Bukkit.getPluginManager().callEvent(event);
+ return event;
+ }
+
/**
* BlockFadeEvent
*/
@@ -993,4 +1003,10 @@ public class CraftEventFactory {
entity.world.getServer().getPluginManager().callEvent(event);
return event;
}
+
+ public static AreaEffectCloudApplyEvent callAreaEffectCloudApplyEvent(EntityAreaEffectCloud cloud, List<LivingEntity> entities) {
+ AreaEffectCloudApplyEvent event = new AreaEffectCloudApplyEvent((AreaEffectCloud) cloud.getBukkitEntity(), entities);
+ cloud.world.getServer().getPluginManager().callEvent(event);
+ return event;
+ }
}