--- a/net/minecraft/world/entity/animal/Rabbit.java
+++ b/net/minecraft/world/entity/animal/Rabbit.java
@@ -82,17 +_,17 @@
     private int jumpDuration;
     private boolean wasOnGround;
     private int jumpDelayTicks;
-    int moreCarrotTicks;
+    public int moreCarrotTicks;
 
     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));
@@ -297,7 +_,7 @@
     }
 
     @Override
-    protected SoundEvent getDeathSound() {
+    public SoundEvent getDeathSound() {
         return SoundEvents.RABBIT_DEATH;
     }
 
@@ -561,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, Integer.valueOf(ageValue - 1)), 2);
                         level.gameEvent(GameEvent.BLOCK_CHANGE, blockPos, GameEvent.Context.of(this.rabbit));
                         level.levelEvent(2001, blockPos, Block.getId(blockState));
