Beispiel #1
0
  /**
   * Expand an cause object.
   *
   * @param list the list to add elements to
   * @param element an array of objects
   */
  private static void expand(List<Object> list, @Nullable Object... element) {
    if (element != null) {
      for (Object o : element) {
        if (o == null) {
          continue;
        }

        if (o instanceof TNTPrimed) {
          expand(list, ((TNTPrimed) o).getSource());
        } else if (o instanceof Projectile) {
          expand(list, ((Projectile) o).getShooter());
        } else if (o instanceof Vehicle) {
          expand(list, ((Vehicle) o).getPassenger());
        } else if (o instanceof Tameable) {
          expand(list, ((Tameable) o).getOwner());
        }

        // Add manually tracked parent causes
        Object source = o;
        int index = list.size();
        while (source instanceof Metadatable && !(source instanceof Block)) {
          source = WGMetadata.getIfPresent((Metadatable) source, CAUSE_KEY, Object.class);
          if (source != null) {
            list.add(index, source);
          }
        }

        list.add(o);
      }
    }
  }