001    package net.minecraftforge.common;
002    
003    import net.minecraft.util.AxisAlignedBB;
004    import net.minecraft.entity.Entity;
005    import net.minecraft.entity.item.EntityMinecart;
006    
007    /**
008     * This class defines a replacement for the default minecart collision code.
009     * Only one handler can be registered at a time. It it registered with EntityMinecart.registerCollisionHandler().
010     * If you use this, make it a configuration option.
011     * @author CovertJaguar
012     */
013    public interface IMinecartCollisionHandler
014    {
015    
016        /**
017         * This basically replaces the function of the same name in EnityMinecart.
018         * Code in IMinecartHooks.applyEntityCollisionHook is still run.
019         * @param cart The cart that called the collision.
020         * @param other The object it collided with.
021         */
022        public void onEntityCollision(EntityMinecart cart, Entity other);
023    
024        /**
025         * This function replaced the function of the same name in EntityMinecart.
026         * It is used to define whether minecarts collide with specific entities,
027         * for example items.
028         * @param cart The cart for which the collision box was requested.
029         * @param other The entity requesting the collision box.
030         * @return The collision box or null.
031         */
032        public AxisAlignedBB getCollisionBox(EntityMinecart cart, Entity other);
033    
034        /**
035         * This function is used to define the box used for detecting minecart collisions.
036         * It is generally bigger that the normal collision box.
037         * @param cart The cart for which the collision box was requested.
038         * @return The collision box, cannot be null.
039         */
040        public AxisAlignedBB getMinecartCollisionBox(EntityMinecart cart);
041    
042        /**
043         * This function replaces the function of the same name in EntityMinecart.
044         * It defines whether minecarts are solid to the player.
045         * @param cart The cart for which the bounding box was requested.
046         * @return The bounding box or null.
047         */
048        public AxisAlignedBB getBoundingBox(EntityMinecart cart);
049    }
050