craftbukkit/nms-patches/net/minecraft/world/entity/projectile/IProjectile.patch

62 lines
2.4 KiB
Diff
Raw Normal View History

2021-03-16 09:00:00 +11:00
--- a/net/minecraft/world/entity/projectile/IProjectile.java
+++ b/net/minecraft/world/entity/projectile/IProjectile.java
2023-12-06 03:40:00 +11:00
@@ -25,6 +25,10 @@
2021-03-16 09:00:00 +11:00
import net.minecraft.world.phys.MovingObjectPositionEntity;
import net.minecraft.world.phys.Vec3D;
2020-06-25 10:00:00 +10:00
+// CraftBukkit start
2020-07-06 08:50:27 +10:00
+import org.bukkit.projectiles.ProjectileSource;
2020-06-25 10:00:00 +10:00
+// CraftBukkit end
+
2023-03-15 03:30:00 +11:00
public abstract class IProjectile extends Entity implements TraceableEntity {
2020-06-25 10:00:00 +10:00
2021-06-11 15:00:00 +10:00
@Nullable
2023-12-06 03:40:00 +11:00
@@ -34,6 +38,10 @@
2021-06-11 15:00:00 +10:00
private boolean leftOwner;
private boolean hasBeenShot;
+ // CraftBukkit start
+ private boolean hitCancelled = false;
+ // CraftBukkit end
+
IProjectile(EntityTypes<? extends IProjectile> entitytypes, World world) {
super(entitytypes, world);
}
2023-12-06 03:40:00 +11:00
@@ -43,6 +51,7 @@
2021-11-22 09:00:00 +11:00
this.ownerUUID = entity.getUUID();
2021-06-11 15:00:00 +10:00
this.cachedOwner = entity;
2020-06-25 10:00:00 +10:00
}
+ this.projectileSource = (entity != null && entity.getBukkitEntity() instanceof ProjectileSource) ? (ProjectileSource) entity.getBukkitEntity() : null; // CraftBukkit
2020-06-25 10:00:00 +10:00
}
2023-12-06 03:40:00 +11:00
@@ -167,6 +176,16 @@
2023-06-08 01:30:00 +10:00
this.setDeltaMovement(this.getDeltaMovement().add(vec3d.x, entity.onGround() ? 0.0D : vec3d.y, vec3d.z));
2020-06-25 10:00:00 +10:00
}
+ // CraftBukkit start - call projectile hit event
+ protected void preOnHit(MovingObjectPosition movingobjectposition) {
+ org.bukkit.event.entity.ProjectileHitEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileHitEvent(this, movingobjectposition);
+ this.hitCancelled = event != null && event.isCancelled();
+ if (movingobjectposition.getType() == MovingObjectPosition.EnumMovingObjectType.BLOCK || !this.hitCancelled) {
2021-11-22 09:00:00 +11:00
+ this.onHit(movingobjectposition);
+ }
+ }
+ // CraftBukkit end
+
2021-11-22 09:00:00 +11:00
protected void onHit(MovingObjectPosition movingobjectposition) {
2020-06-25 10:00:00 +10:00
MovingObjectPosition.EnumMovingObjectType movingobjectposition_enummovingobjecttype = movingobjectposition.getType();
2023-12-06 03:40:00 +11:00
@@ -187,6 +206,11 @@
2021-11-22 09:00:00 +11:00
protected void onHitEntity(MovingObjectPositionEntity movingobjectpositionentity) {}
2021-11-22 09:00:00 +11:00
protected void onHitBlock(MovingObjectPositionBlock movingobjectpositionblock) {
+ // CraftBukkit start - cancellable hit event
+ if (hitCancelled) {
+ return;
+ }
+ // CraftBukkit end
2023-06-08 01:30:00 +10:00
IBlockData iblockdata = this.level().getBlockState(movingobjectpositionblock.getBlockPos());
2023-06-08 01:30:00 +10:00
iblockdata.onProjectileHit(this.level(), iblockdata, movingobjectpositionblock, this);