// Path: src/api/java/com/github/atomicblom/shearmadness/api/behaviour/BehaviourBase.java
// @SuppressWarnings({"NoopMethodInAbstractClass", "ClassHasNoToStringMethod", "WeakerAccess"})
// public abstract class BehaviourBase<T extends BehaviourBase> {
//     private final EntitySheep entity;
//     private final Supplier<Boolean> configuration;
// 
//     protected BehaviourBase(EntitySheep sheep) {
//         this(sheep, () -> true);
//     }
// 
//     protected BehaviourBase(EntitySheep entity, Supplier<Boolean> configuration)
//     {
//         this.entity = entity;
//         this.configuration = configuration;
//     }
// 
//     public boolean isBehaviourEnabled() {
//         return configuration.get();
//     }
// 
//     public void onSheepMovedBlock(BlockPos previousLocation, BlockPos newLocation) {}
// 
//     public void onBehaviourStarted(BlockPos currentPos) {}
// 
//     public void onBehaviourStopped(BlockPos previousPos) {}
// 
//     public void updateTask() {}
// 
//     public boolean isEquivalentTo(T other) {
//         return entity.getUniqueID().equals(other.getEntity().getUniqueID());
//     }
// 
//     public EntitySheep getEntity()
//     {
//         return entity;
//     }
// }


import com.github.atomicblom.shearmadness.api.behaviour.BehaviourBase;
import net.minecraft.entity.passive.EntitySheep;
import net.minecraft.item.ItemStack;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.function.Function;
package com.github.atomicblom.shearmadness.api;



public class BehaviourRegistry implements IBehaviourRegistry {

    public static final BehaviourRegistry INSTANCE = new BehaviourRegistry();

    private final List<ShearMadnessBehaviour> behaviours = new LinkedList<>();

    @Override
// Path: src/api/java/com/github/atomicblom/shearmadness/api/behaviour/BehaviourBase.java
// @SuppressWarnings({"NoopMethodInAbstractClass", "ClassHasNoToStringMethod", "WeakerAccess"})
// public abstract class BehaviourBase<T extends BehaviourBase> {
//     private final EntitySheep entity;
//     private final Supplier<Boolean> configuration;
// 
//     protected BehaviourBase(EntitySheep sheep) {
//         this(sheep, () -> true);
//     }
// 
//     protected BehaviourBase(EntitySheep entity, Supplier<Boolean> configuration)
//     {
//         this.entity = entity;
//         this.configuration = configuration;
//     }
// 
//     public boolean isBehaviourEnabled() {
//         return configuration.get();
//     }
// 
//     public void onSheepMovedBlock(BlockPos previousLocation, BlockPos newLocation) {}
// 
//     public void onBehaviourStarted(BlockPos currentPos) {}
// 
//     public void onBehaviourStopped(BlockPos previousPos) {}
// 
//     public void updateTask() {}
// 
//     public boolean isEquivalentTo(T other) {
//         return entity.getUniqueID().equals(other.getEntity().getUniqueID());
//     }
// 
//     public EntitySheep getEntity()
//     {
//         return entity;
//     }
// }


// Path: src/main/java/com/github/atomicblom/shearmadness/api/BehaviourRegistry.java
import com.github.atomicblom.shearmadness.api.behaviour.BehaviourBase;
import net.minecraft.entity.passive.EntitySheep;
import net.minecraft.item.ItemStack;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.function.Function;

package com.github.atomicblom.shearmadness.api;



public class BehaviourRegistry implements IBehaviourRegistry {

    public static final BehaviourRegistry INSTANCE = new BehaviourRegistry();

    private final List<ShearMadnessBehaviour> behaviours = new LinkedList<>();

    @Override
    public void registerBehaviour(Function<ItemStack, Boolean> handlesVariant, Function<EntitySheep, BehaviourBase> behaviourFactory) {