--- a/net/minecraft/world/entity/animal/Parrot.java
+++ b/net/minecraft/world/entity/animal/Parrot.java
@@ -264,7 +_,7 @@
             }
 
             if (!this.level().isClientSide) {
-                if (this.random.nextInt(10) == 0) {
+                if (this.random.nextInt(10) == 0 && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this, player).isCancelled()) { // CraftBukkit
                     this.tame(player);
                     this.level().broadcastEntityEvent(this, (byte)7);
                 } else {
@@ -285,7 +_,7 @@
             }
         } else {
             this.usePlayerItem(player, hand, itemInHand);
-            this.addEffect(new MobEffectInstance(MobEffects.POISON, 900));
+            this.addEffect(new MobEffectInstance(MobEffects.POISON, 900), org.bukkit.event.entity.EntityPotionEffectEvent.Cause.FOOD); // CraftBukkit
             if (player.isCreative() || !this.isInvulnerable()) {
                 this.hurt(this.damageSources().playerAttack(player), Float.MAX_VALUE);
             }
@@ -380,8 +_,8 @@
     }
 
     @Override
-    public boolean isPushable() {
-        return true;
+    public boolean isCollidable(boolean ignoreClimbing) { // Paper - Climbing should not bypass cramming gamerule
+        return super.isCollidable(ignoreClimbing); // CraftBukkit - collidable API // Paper - Climbing should not bypass cramming gamerule
     }
 
     @Override
@@ -396,8 +_,13 @@
         if (this.isInvulnerableTo(level, damageSource)) {
             return false;
         } else {
+            // CraftBukkit start
+            if (!super.hurtServer(level, damageSource, amount)) {
+                return false;
+            }
             this.setOrderedToSit(false);
-            return super.hurtServer(level, damageSource, amount);
+            return true;
+            // CraftBukkit
         }
     }
 
