--- a/net/minecraft/world/entity/Interaction.java
+++ b/net/minecraft/world/entity/Interaction.java
@@ -35,9 +_,9 @@
     private static final float DEFAULT_HEIGHT = 1.0F;
     private static final boolean DEFAULT_RESPONSE = false;
     @Nullable
-    private Interaction.PlayerAction attack;
+    public Interaction.PlayerAction attack;
     @Nullable
-    private Interaction.PlayerAction interaction;
+    public Interaction.PlayerAction interaction;
 
     public Interaction(EntityType<?> entityType, Level level) {
         super(entityType, level);
@@ -101,9 +_,16 @@
     @Override
     public boolean skipAttackInteraction(Entity entity) {
         if (entity instanceof Player player) {
+            // CraftBukkit start
+            DamageSource source = player.damageSources().generic().eventEntityDamager(entity);
+            org.bukkit.event.entity.EntityDamageEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callNonLivingEntityDamageEvent(this, source, 1.0F, false);
+            if (event.isCancelled()) {
+                return true;
+            }
+            // CraftBukkit end
             this.attack = new Interaction.PlayerAction(player.getUUID(), this.level().getGameTime());
             if (player instanceof ServerPlayer serverPlayer) {
-                CriteriaTriggers.PLAYER_HURT_ENTITY.trigger(serverPlayer, this, player.damageSources().generic(), 1.0F, 1.0F, false);
+                CriteriaTriggers.PLAYER_HURT_ENTITY.trigger(serverPlayer, this, source, 1.0F, (float) event.getFinalDamage(), false); // CraftBukkit
             }
 
             return !this.getResponse();
@@ -143,27 +_,27 @@
         return this.interaction != null ? this.level().getPlayerByUUID(this.interaction.player()) : null;
     }
 
-    private void setWidth(float width) {
+    public void setWidth(float width) {
         this.entityData.set(DATA_WIDTH_ID, width);
     }
 
-    private float getWidth() {
+    public float getWidth() {
         return this.entityData.get(DATA_WIDTH_ID);
     }
 
-    private void setHeight(float height) {
+    public void setHeight(float height) {
         this.entityData.set(DATA_HEIGHT_ID, height);
     }
 
-    private float getHeight() {
+    public float getHeight() {
         return this.entityData.get(DATA_HEIGHT_ID);
     }
 
-    private void setResponse(boolean response) {
+    public void setResponse(boolean response) {
         this.entityData.set(DATA_RESPONSE_ID, response);
     }
 
-    private boolean getResponse() {
+    public boolean getResponse() {
         return this.entityData.get(DATA_RESPONSE_ID);
     }
 
@@ -181,7 +_,7 @@
         return this.getDimensions().makeBoundingBox(position);
     }
 
-    record PlayerAction(UUID player, long timestamp) {
+    public record PlayerAction(UUID player, long timestamp) {
         public static final Codec<Interaction.PlayerAction> CODEC = RecordCodecBuilder.create(
             instance -> instance.group(
                     UUIDUtil.CODEC.fieldOf("player").forGetter(Interaction.PlayerAction::player),
