// Path: src/main/java/mnm/mods/itemdash/easing/Easing.java
// @FunctionalInterface
// public interface Easing {
// 
//     /**
//      * Eases to a position based on the time.
//      * 
//      * @param time The current time relative to the animation start
//      * @param base The original position before move
//      * @param change The amount to be moved
//      * @param duration The total time the animation should take
//      * @return The position for the animation
//      */
//     double ease(double time, double base, double change, double duration);
// }
// 
// Path: src/main/java/mnm/mods/itemdash/easing/EasingType.java
// public interface EasingType {
// 
//     Easing in();
// 
//     Easing out();
// 
//     Easing inOut();
// }


import mnm.mods.itemdash.easing.Easing;
import mnm.mods.itemdash.easing.EasingType;
package mnm.mods.itemdash.easing.types;


public class Cubic implements EasingType {

    @Override
    public Easing in() {
        return (t, b, c, d) -> {
            t /= d;
            return c * Math.pow(t, 3) + b;
        };
    }

    @Override
    public Easing out() {
        return (t, b, c, d) -> {
            t /= d;
            t--;
            return c * (Math.pow(t, 3) + 1) + b;
        };
    }

    @Override
    public Easing inOut() {
        return (t, b, c, d) -> {
            t /= d / 2;
// Path: src/main/java/mnm/mods/itemdash/easing/Easing.java
// @FunctionalInterface
// public interface Easing {
// 
//     /**
//      * Eases to a position based on the time.
//      * 
//      * @param time The current time relative to the animation start
//      * @param base The original position before move
//      * @param change The amount to be moved
//      * @param duration The total time the animation should take
//      * @return The position for the animation
//      */
//     double ease(double time, double base, double change, double duration);
// }
// 
// Path: src/main/java/mnm/mods/itemdash/easing/EasingType.java
// public interface EasingType {
// 
//     Easing in();
// 
//     Easing out();
// 
//     Easing inOut();
// }


// Path: src/main/java/mnm/mods/itemdash/easing/types/Cubic.java
import mnm.mods.itemdash.easing.Easing;
import mnm.mods.itemdash.easing.EasingType;

package mnm.mods.itemdash.easing.types;


public class Cubic implements EasingType {

    @Override
    public Easing in() {
        return (t, b, c, d) -> {
            t /= d;
            return c * Math.pow(t, 3) + b;
        };
    }

    @Override
    public Easing out() {
        return (t, b, c, d) -> {
            t /= d;
            t--;
            return c * (Math.pow(t, 3) + 1) + b;
        };
    }

    @Override
    public Easing inOut() {
        return (t, b, c, d) -> {
            t /= d / 2;
            if (t < 1)