--- a/net/minecraft/world/entity/animal/Rabbit.java
+++ b/net/minecraft/world/entity/animal/Rabbit.java
@@ -90,17 +_,17 @@
     private int jumpDuration;
     private boolean wasOnGround;
     private int jumpDelayTicks;
-    int moreCarrotTicks = 0;
+    public int moreCarrotTicks = 0;
 
     public Rabbit(EntityType<? extends Rabbit> entityType, Level level) {
         super(entityType, level);
         this.jumpControl = new Rabbit.RabbitJumpControl(this);
         this.moveControl = new Rabbit.RabbitMoveControl(this);
-        this.setSpeedModifier(0.0);
+        //this.setSpeedModifier(0.0); // CraftBukkit
     }
 
     @Override
-    protected void registerGoals() {
+    public void registerGoals() {
         this.goalSelector.addGoal(1, new FloatGoal(this));
         this.goalSelector.addGoal(1, new ClimbOnTopOfPowderSnowGoal(this, this.level()));
         this.goalSelector.addGoal(1, new Rabbit.RabbitPanicGoal(this, 2.2));
@@ -295,17 +_,17 @@
     }
 
     @Override
-    protected SoundEvent getAmbientSound() {
+    public SoundEvent getAmbientSound() {
         return SoundEvents.RABBIT_AMBIENT;
     }
 
     @Override
-    protected SoundEvent getHurtSound(DamageSource damageSource) {
+    public SoundEvent getHurtSound(DamageSource damageSource) {
         return SoundEvents.RABBIT_HURT;
     }
 
     @Override
-    protected SoundEvent getDeathSound() {
+    public SoundEvent getDeathSound() {
         return SoundEvents.RABBIT_DEATH;
     }
 
@@ -350,7 +_,7 @@
         return Rabbit.Variant.byId(this.entityData.get(DATA_TYPE_ID));
     }
 
-    private void setVariant(Rabbit.Variant variant) {
+    public void setVariant(Rabbit.Variant variant) {
         if (variant == Rabbit.Variant.EVIL) {
             this.getAttribute(Attributes.ARMOR).setBaseValue(8.0);
             this.goalSelector.addGoal(4, new MeleeAttackGoal(this, 1.4, true));
@@ -589,9 +_,11 @@
                 if (this.canRaid && block instanceof CarrotBlock) {
                     int ageValue = blockState.getValue(CarrotBlock.AGE);
                     if (ageValue == 0) {
+                        if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.rabbit, blockPos, blockState.getFluidState().createLegacyBlock())) return; // CraftBukkit // Paper - fix wrong block state
                         level.setBlock(blockPos, Blocks.AIR.defaultBlockState(), 2);
                         level.destroyBlock(blockPos, true, this.rabbit);
                     } else {
+                        if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.rabbit, blockPos, blockState.setValue(CarrotBlock.AGE, ageValue - 1))) return; // CraftBukkit // Paper - fix wrong block state
                         level.setBlock(blockPos, blockState.setValue(CarrotBlock.AGE, ageValue - 1), 2);
                         level.gameEvent(GameEvent.BLOCK_CHANGE, blockPos, GameEvent.Context.of(this.rabbit));
                         level.levelEvent(2001, blockPos, Block.getId(blockState));
