--- a/net/minecraft/world/entity/animal/Parrot.java
+++ b/net/minecraft/world/entity/animal/Parrot.java
@@ -262,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 {
@@ -283,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);
             }
@@ -338,12 +_,12 @@
     }
 
     @Override
-    protected SoundEvent getHurtSound(DamageSource damageSource) {
+    public SoundEvent getHurtSound(DamageSource damageSource) {
         return SoundEvents.PARROT_HURT;
     }
 
     @Override
-    protected SoundEvent getDeathSound() {
+    public SoundEvent getDeathSound() {
         return SoundEvents.PARROT_DEATH;
     }
 
@@ -378,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
@@ -394,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
         }
     }
 
@@ -403,7 +_,7 @@
         return Parrot.Variant.byId(this.entityData.get(DATA_VARIANT_ID));
     }
 
-    private void setVariant(Parrot.Variant variant) {
+    public void setVariant(Parrot.Variant variant) {
         this.entityData.set(DATA_VARIANT_ID, variant.id);
     }
 
