// Path: src/main/java/guichaguri/betterfps/api/IFastHopper.java
// public interface IFastHopper extends IHopper {
// 
//     /**
//      * Whether this hopper is picking up dropped items
//      */
//     boolean canPickupItems();
// 
//     /**
//      * Updates {@link #canPickupItems}
//      */
//     void updateFastHopper();
// 
// }
// 
// Path: src/main/java/guichaguri/betterfps/transformers/Conditions.java
// public class Conditions {
// 
//     protected static final List<Mappings> patched = new ArrayList<Mappings>();
// 
//     public static final String FAST_HOPPER = "fastHopper";
//     public static final String FAST_BEACON = "fastBeacon";
//     public static final String FAST_SEARCH = "fastSearch";
//     public static final String FAST_BEAM_RENDER = "fastBeaconBeamRender";
//     public static final String FOG_DISABLED = "fogDisabled";
// 
//     /**
//      * Checks whether the condition identifier is met
//      */
//     public static boolean shouldPatch(String condition) {
//         BetterFpsConfig config = BetterFpsHelper.getConfig();
// 
//         if(condition.equals(FAST_HOPPER)) {
//             return config.fastHopper;
//         } else if(condition.equals(FAST_BEACON)) {
//             return config.fastBeacon;
//         } else if(condition.equals(FAST_SEARCH)) {
//             return config.fastSearch;
//         } else if(condition.equals(FAST_BEAM_RENDER)) {
//             return !config.beaconBeam;
//         } else if(condition.equals(FOG_DISABLED)) {
//             return !config.fog;
//         }
// 
//         return true;
//     }
// 
//     /**
//      * Checks whether the {@link Condition} annotation has its condition met
//      */
//     public static boolean shouldPatch(List<AnnotationNode> annotations) {
//         AnnotationNode condition = ASMUtils.getAnnotation(annotations, Condition.class);
//         if(condition != null) {
//             String id = ASMUtils.getAnnotationValue(condition, "value", String.class);
//             return id == null || shouldPatch(id);
//         }
//         return true;
//     }
// 
//     public static boolean isPatched(Mappings name) {
//         return patched.contains(name);
//     }
// 
// }


import guichaguri.betterfps.api.IFastHopper;
import guichaguri.betterfps.transformers.Conditions;
import guichaguri.betterfps.transformers.annotations.Condition;
import guichaguri.betterfps.transformers.annotations.Copy;
import guichaguri.betterfps.transformers.annotations.Copy.Mode;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
package guichaguri.betterfps.patches.block;


/**
 * @author Guilherme Chaguri
 */
@Condition(Conditions.FAST_HOPPER)
public abstract class FastHopperBlock extends Block {

    protected FastHopperBlock(Material materialIn) {
        super(materialIn);
    }

    @Copy(Mode.APPEND)
    @Override
    public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block neighborBlock, BlockPos pos2) {
        TileEntity te = worldIn.getTileEntity(pos);
// Path: src/main/java/guichaguri/betterfps/api/IFastHopper.java
// public interface IFastHopper extends IHopper {
// 
//     /**
//      * Whether this hopper is picking up dropped items
//      */
//     boolean canPickupItems();
// 
//     /**
//      * Updates {@link #canPickupItems}
//      */
//     void updateFastHopper();
// 
// }
// 
// Path: src/main/java/guichaguri/betterfps/transformers/Conditions.java
// public class Conditions {
// 
//     protected static final List<Mappings> patched = new ArrayList<Mappings>();
// 
//     public static final String FAST_HOPPER = "fastHopper";
//     public static final String FAST_BEACON = "fastBeacon";
//     public static final String FAST_SEARCH = "fastSearch";
//     public static final String FAST_BEAM_RENDER = "fastBeaconBeamRender";
//     public static final String FOG_DISABLED = "fogDisabled";
// 
//     /**
//      * Checks whether the condition identifier is met
//      */
//     public static boolean shouldPatch(String condition) {
//         BetterFpsConfig config = BetterFpsHelper.getConfig();
// 
//         if(condition.equals(FAST_HOPPER)) {
//             return config.fastHopper;
//         } else if(condition.equals(FAST_BEACON)) {
//             return config.fastBeacon;
//         } else if(condition.equals(FAST_SEARCH)) {
//             return config.fastSearch;
//         } else if(condition.equals(FAST_BEAM_RENDER)) {
//             return !config.beaconBeam;
//         } else if(condition.equals(FOG_DISABLED)) {
//             return !config.fog;
//         }
// 
//         return true;
//     }
// 
//     /**
//      * Checks whether the {@link Condition} annotation has its condition met
//      */
//     public static boolean shouldPatch(List<AnnotationNode> annotations) {
//         AnnotationNode condition = ASMUtils.getAnnotation(annotations, Condition.class);
//         if(condition != null) {
//             String id = ASMUtils.getAnnotationValue(condition, "value", String.class);
//             return id == null || shouldPatch(id);
//         }
//         return true;
//     }
// 
//     public static boolean isPatched(Mappings name) {
//         return patched.contains(name);
//     }
// 
// }


// Path: src/main/java/guichaguri/betterfps/patches/block/FastHopperBlock.java
import guichaguri.betterfps.api.IFastHopper;
import guichaguri.betterfps.transformers.Conditions;
import guichaguri.betterfps.transformers.annotations.Condition;
import guichaguri.betterfps.transformers.annotations.Copy;
import guichaguri.betterfps.transformers.annotations.Copy.Mode;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;

package guichaguri.betterfps.patches.block;


/**
 * @author Guilherme Chaguri
 */
@Condition(Conditions.FAST_HOPPER)
public abstract class FastHopperBlock extends Block {

    protected FastHopperBlock(Material materialIn) {
        super(materialIn);
    }

    @Copy(Mode.APPEND)
    @Override
    public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block neighborBlock, BlockPos pos2) {
        TileEntity te = worldIn.getTileEntity(pos);
        if(te != null && te instanceof IFastHopper) {