aboutsummaryrefslogtreecommitdiffhomepage
path: root/patch-remap/og/net/minecraft/world/entity/projectile/EntityArrow.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patch-remap/og/net/minecraft/world/entity/projectile/EntityArrow.patch')
-rw-r--r--patch-remap/og/net/minecraft/world/entity/projectile/EntityArrow.patch63
1 files changed, 63 insertions, 0 deletions
diff --git a/patch-remap/og/net/minecraft/world/entity/projectile/EntityArrow.patch b/patch-remap/og/net/minecraft/world/entity/projectile/EntityArrow.patch
new file mode 100644
index 0000000000..eef2007b80
--- /dev/null
+++ b/patch-remap/og/net/minecraft/world/entity/projectile/EntityArrow.patch
@@ -0,0 +1,63 @@
+--- a/net/minecraft/world/entity/projectile/EntityArrow.java
++++ b/net/minecraft/world/entity/projectile/EntityArrow.java
+@@ -47,6 +47,12 @@
+ import net.minecraft.world.phys.Vec3D;
+ import net.minecraft.world.phys.shapes.VoxelShape;
+
++// CraftBukkit start
++import net.minecraft.world.entity.item.EntityItem;
++import org.bukkit.event.entity.EntityCombustByEntityEvent;
++import org.bukkit.event.player.PlayerPickupArrowEvent;
++// CraftBukkit end
++
+ public abstract class EntityArrow extends IProjectile {
+
+ private static final double ARROW_BASE_DAMAGE = 2.0D;
+@@ -219,7 +225,7 @@
+ }
+
+ if (object != null && !flag) {
+- this.onHit((MovingObjectPosition) object);
++ this.preOnHit((MovingObjectPosition) object); // CraftBukkit - projectile hit event
+ this.hasImpulse = true;
+ }
+
+@@ -367,7 +373,13 @@
+ boolean flag1 = entity.getType().is(TagsEntity.DEFLECTS_ARROWS);
+
+ if (this.isOnFire() && !flag && !flag1) {
+- entity.setSecondsOnFire(5);
++ // CraftBukkit start
++ EntityCombustByEntityEvent combustEvent = new EntityCombustByEntityEvent(this.getBukkitEntity(), entity.getBukkitEntity(), 5);
++ org.bukkit.Bukkit.getPluginManager().callEvent(combustEvent);
++ if (!combustEvent.isCancelled()) {
++ entity.setSecondsOnFire(combustEvent.getDuration(), false);
++ }
++ // CraftBukkit end
+ }
+
+ if (entity.hurt(damagesource, (float) i)) {
+@@ -545,7 +557,22 @@
+ @Override
+ public void playerTouch(EntityHuman entityhuman) {
+ if (!this.level().isClientSide && (this.inGround || this.isNoPhysics()) && this.shakeTime <= 0) {
+- if (this.tryPickup(entityhuman)) {
++ // CraftBukkit start
++ ItemStack itemstack = this.getPickupItem();
++ if (this.pickup == PickupStatus.ALLOWED && !itemstack.isEmpty() && entityhuman.getInventory().canHold(itemstack) > 0) {
++ EntityItem item = new EntityItem(this.level(), this.getX(), this.getY(), this.getZ(), itemstack);
++ PlayerPickupArrowEvent event = new PlayerPickupArrowEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), new org.bukkit.craftbukkit.entity.CraftItem(this.level().getCraftServer(), item), (org.bukkit.entity.AbstractArrow) this.getBukkitEntity());
++ // event.setCancelled(!entityhuman.canPickUpLoot); TODO
++ this.level().getCraftServer().getPluginManager().callEvent(event);
++
++ if (event.isCancelled()) {
++ return;
++ }
++ itemstack = item.getItem();
++ }
++
++ if ((this.pickup == EntityArrow.PickupStatus.ALLOWED && entityhuman.getInventory().add(itemstack)) || (this.pickup == EntityArrow.PickupStatus.CREATIVE_ONLY && entityhuman.getAbilities().instabuild)) {
++ // CraftBukkit end
+ entityhuman.take(this, 1);
+ this.discard();
+ }