--- a/net/minecraft/world/entity/monster/Guardian.java
+++ b/net/minecraft/world/entity/monster/Guardian.java
@@ -58,7 +_,8 @@
     private int clientSideAttackTime;
     private boolean clientSideTouchedGround;
     @Nullable
-    protected RandomStrollGoal randomStrollGoal;
+    public RandomStrollGoal randomStrollGoal;
+    public Guardian.GuardianAttackGoal guardianAttackGoal; // CraftBukkit - add field
 
     public Guardian(EntityType<? extends Guardian> entityType, Level level) {
         super(entityType, level);
@@ -73,7 +_,7 @@
     protected void registerGoals() {
         MoveTowardsRestrictionGoal moveTowardsRestrictionGoal = new MoveTowardsRestrictionGoal(this, 1.0);
         this.randomStrollGoal = new RandomStrollGoal(this, 1.0, 80);
-        this.goalSelector.addGoal(4, new Guardian.GuardianAttackGoal(this));
+        this.goalSelector.addGoal(4, this.guardianAttackGoal = new Guardian.GuardianAttackGoal(this)); // CraftBukkit - assign field
         this.goalSelector.addGoal(5, moveTowardsRestrictionGoal);
         this.goalSelector.addGoal(7, this.randomStrollGoal);
         this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 8.0F));
@@ -112,7 +_,7 @@
         return 80;
     }
 
-    void setActiveAttackTarget(int activeAttackTargetId) {
+    public void setActiveAttackTarget(int activeAttackTargetId) {
         this.entityData.set(DATA_ID_ATTACK_TARGET, activeAttackTargetId);
     }
 
@@ -166,7 +_,7 @@
     }
 
     @Override
-    protected SoundEvent getDeathSound() {
+    public SoundEvent getDeathSound() {
         return this.isInWaterOrBubble() ? SoundEvents.GUARDIAN_DEATH : SoundEvents.GUARDIAN_DEATH_LAND;
     }
 
@@ -354,9 +_,9 @@
         }
     }
 
-    static class GuardianAttackGoal extends Goal {
+    public static class GuardianAttackGoal extends Goal {
         private final Guardian guardian;
-        private int attackTime;
+        public int attackTime;
         private final boolean elder;
 
         public GuardianAttackGoal(Guardian guardian) {
