package crazypants.enderio.conduit.geom;

import net.minecraftforge.common.util.ForgeDirection;
import crazypants.enderio.conduit.IConduit;
import crazypants.render.BoundingBox;

public class CollidableComponent {

  public final Class<? extends IConduit> conduitType;
  public final BoundingBox bound;
  public final ForgeDirection dir;
  public final Object data;

  public CollidableComponent(Class<? extends IConduit> conduitType, BoundingBox bound, ForgeDirection id, Object data) {
    this.conduitType = conduitType;
    this.bound = bound;
    this.dir = id;
    this.data = data;
  }

  @Override
  public String toString() {
    return "CollidableComponent [conduitType=" + conduitType + ", bound=" + bound + ", id=" + dir + "]";
  }

  @Override
  public boolean equals(Object obj) {
    if(obj instanceof CollidableComponent) {
      CollidableComponent other = (CollidableComponent) obj;
      return conduitType == other.conduitType && bound.equals(((CollidableComponent) obj).bound) && dir == other.dir;
    }
    return false;
  }
}

@@ -1039,11 +1039,353 @@
 lse;%0A  %7D
+%0A%0A  @Override%0A  public int hashCode() %7B%0A    final int prime = 31;%0A    int result = 1;%0A    result = prime * result + ((bound == null) ? 0 : bound.hashCode());%0A    result = prime * result + ((conduitType == null) ? 0 : conduitType.getName().hashCode());%0A    result = prime * result + ((dir == null) ? 0 : dir.hashCode());%0A    return result;%0A  %7D
 %0A%7D%0A

Add hashCode to CollidableComponent just to be safe