@Override
 public boolean a(IBlockAccess iblockaccess, int x, int y, int z, int face) {
   int index = CustomBlock.getIndex(((World) iblockaccess), x, y, z);
   Chunk chunk = ((World) iblockaccess).getChunkAt(x >> 4, z >> 4).bukkitChunk;
   if (chunk.getClass().equals(SpoutCraftChunk.class)) {
     TIntIntHashMap powerOverrides = ((SpoutCraftChunk) chunk).powerOverrides;
     if (powerOverrides.containsKey(index)) {
       int powerbits = powerOverrides.get(index);
       switch (face) {
         case 0:
           return (powerbits & (1 << 0)) != 0;
         case 1:
           return (powerbits & (1 << 1)) != 0;
         case 2:
           return (powerbits & (1 << 2)) != 0;
         case 3:
           return (powerbits & (1 << 3)) != 0;
         case 4:
           return (powerbits & (1 << 4)) != 0;
         case 5:
           return (powerbits & (1 << 5)) != 0;
         default:
           return parent.a(iblockaccess, x, y, z, face);
       }
     }
   }
   return parent.a(iblockaccess, x, y, z, face);
 }
 @Override
 public void a(float f, float f1, float f2, float f3, float f4, float f5) {
   if (parent != null) {
     parent.a(f, f1, f2, f3, f4, f5);
   } else {
     super.a(f, f1, f2, f3, f4, f5);
   }
 }
 @Override
 public boolean a() {
   if (parent != null) {
     return parent.a();
   }
   return super.a();
 }
 @Override
 public void attack(World world, int i, int j, int k, EntityHuman entityhuman) {
   if (entityhuman instanceof EntityPlayer) {
     SpoutCraftPlayer player =
         (SpoutCraftPlayer)
             SpoutManager.getPlayer((Player) ((EntityPlayer) entityhuman).getBukkitEntity());
     player.setLastClickedLocation(new Location(player.getWorld(), i, j, k));
   }
   parent.attack(world, i, j, k, entityhuman);
 }
  protected CustomMinecartTrack(BlockMinecartTrack parent) {
    super(parent.id, parent.textureId, parent.i());
    this.parent = parent;

    updateField(parent, this, "strength");
    updateField(parent, this, "durability");
    updateField(parent, this, "bR");
    updateField(parent, this, "bS");
    updateField(parent, this, "bT");
    this.minX = parent.minX;
    this.minY = parent.minY;
    this.minZ = parent.minZ;
    this.maxX = parent.maxX;
    this.maxY = parent.maxY;
    this.maxZ = parent.maxZ;
    this.stepSound = parent.stepSound;
    this.cc = parent.cc;
    this.frictionFactor = parent.frictionFactor;
    updateField(parent, this, "name");
  }
 @Override
 public void a(World world, int i, int j, int k, Random random) {
   parent.a(world, i, j, k, random);
 }
 @Override
 public void a(World world, int i, int j, int k, Entity entity, Vec3D vec3d) {
   parent.a(world, i, j, k, entity, vec3d);
 }
 @Override
 public void a(World world, int i, int j, int k, int l, int i1) {
   parent.a(world, i, j, k, l, i1);
 }
 @Override
 public int c() {
   return parent.c();
 }
 @Override
 public boolean d(World world, int i, int j, int k, int l) {
   return parent.d(world, i, j, k, l);
 }
 @Override
 public boolean f(World world, int i, int j, int k) {
   return parent.f(world, i, j, k);
 }
 @Override
 public void dropNaturally(World world, int i, int j, int k, int l, float f, int i1) {
   parent.dropNaturally(world, i, j, k, l, f, i1);
 }
 @Override
 public boolean isPowerSource() {
   return parent.isPowerSource();
 }
 @Override
 public int getDropCount(int i, Random random) {
   return parent.getDropCount(i, random);
 }
 @Override
 public float getDamage(EntityHuman entityhuman) {
   return parent.getDamage(entityhuman); // could have modified hardness, return super
 }
 @Override
 public int a(Random random) {
   return parent.a(random);
 }
 @Override
 public void remove(World world, int i, int j, int k) {
   parent.remove(world, i, j, k);
 }
 @Override
 public void onPlace(World world, int i, int j, int k) {
   parent.onPlace(world, i, j, k);
 }
 @Override
 public void updateShape(IBlockAccess iblockaccess, int i, int j, int k) {
   parent.updateShape(iblockaccess, i, j, k);
 }
 @Override
 public MovingObjectPosition a(World world, int i, int j, int k, Vec3D vec3d, Vec3D vec3d1) {
   return parent.a(world, i, j, k, vec3d, vec3d1);
 }
 @Override
 public boolean E_() {
   return parent.E_();
 }
 @Override
 public void wasExploded(World world, int i, int j, int k) {
   parent.wasExploded(world, i, j, k);
 }
 @Override
 public void a(World world, int i, int j, int k, Entity entity) {
   parent.a(world, i, j, k, entity);
 }
 @Override
 public void postBreak(World world, int i, int j, int k, int l) {
   parent.postBreak(world, i, j, k, l);
 }
 @Override
 public void a(World world, EntityHuman entityhuman, int i, int j, int k, int l) {
   parent.a(world, entityhuman, i, j, k, l);
 }
 @Override
 public boolean interact(World world, int i, int j, int k, EntityHuman entityhuman) {
   return parent.interact(world, i, j, k, entityhuman);
 }
 @Override
 public void postPlace(World world, int i, int j, int k, EntityLiving entityliving) {
   parent.postPlace(world, i, j, k, entityliving);
 }
 @Override
 public void postPlace(World world, int i, int j, int k, int l) {
   parent.postPlace(world, i, j, k, l);
 }
 @Override
 public boolean canPlace(World world, int i, int j, int k) {
   return parent.canPlace(world, i, j, k);
 }
 @Override
 public void doPhysics(World world, int i, int j, int k, int l) {
   parent.doPhysics(world, i, j, k, l);
 }