@Override
 public List<StructurePiece> getNextComponents() {
   final List<StructurePiece> components = new ArrayList<StructurePiece>(1);
   final StructurePiece component;
   final float draw = getRandom().nextFloat();
   if (draw > 0.8) {
     final MineshaftRoom room = new MineshaftRoom(parent);
     room.randomize();
     room.setPosition(position.add(rotate(-room.getLenght() / 2 + 1, -1, sections * 5)));
     component = room;
   } else if (draw > 0.6) {
     component = new MineshaftStaircase(parent);
     component.setPosition(position.add(rotate(0, 0, sections * 5)));
     component.randomize();
   } else if (draw > 0.1) {
     component = new MineshaftIntersection(parent);
     component.setPosition(position.add(rotate(0, 0, sections * 5)));
     component.randomize();
   } else {
     return components;
   }
   component.setRotation(rotation);
   components.add(component);
   return components;
 }
 @Override
 public List<StructurePiece> getNextPieces() {
   final StructurePiece piece = getNextPiece();
   if (left) {
     piece.setPosition(position.add(rotate(5, 0, 4)));
     piece.setRotation(Quaternionf.fromAngleDegAxis(90, 0, 1, 0).mul(rotation));
   } else {
     piece.setPosition(position.add(rotate(-1, 0, 0)));
     piece.setRotation(Quaternionf.fromAngleDegAxis(-90, 0, 1, 0).mul(rotation));
   }
   piece.randomize();
   return Lists.newArrayList(piece);
 }
 @Override
 public List<StructurePiece> getNextPieces() {
   final List<StructurePiece> pieces = new ArrayList<StructurePiece>(3);
   final StructurePiece front = getNextPiece();
   front.setPosition(position.add(rotate(0, 0, 5)));
   front.setRotation(rotation);
   front.randomize();
   pieces.add(front);
   final StructurePiece right = getNextPiece();
   right.setPosition(position.add(rotate(-1, 0, 0)));
   right.setRotation(Quaternionf.fromAngleDegAxis(-90, 0, 1, 0).mul(rotation));
   right.randomize();
   pieces.add(right);
   final StructurePiece left = getNextPiece();
   left.setPosition(position.add(rotate(5, 0, 4)));
   left.setRotation(Quaternionf.fromAngleDegAxis(90, 0, 1, 0).mul(rotation));
   left.randomize();
   pieces.add(left);
   return pieces;
 }