public static ImmutableMap<TransformType, TRSRTransformation> getTransforms(
     IPerspectiveState state, IModelPart part) {
   ImmutableMap.Builder<TransformType, TRSRTransformation> builder = ImmutableMap.builder();
   for (TransformType type : TransformType.values()) {
     builder.put(type, state.forPerspective(type).apply(part));
   }
   return builder.build();
 }
Exemple #2
0
    public Baked(
        ResourceLocation location,
        boolean perspective,
        IFlexibleBakedModel base,
        ImmutableMap<String, IFlexibleBakedModel> parts) {
      this.base = base;
      this.parts = parts;

      if (base != null) internalBase = base;
      else {
        Iterator<IFlexibleBakedModel> iter = parts.values().iterator();
        if (iter.hasNext()) internalBase = iter.next();
        else
          throw new IllegalArgumentException(
              "No base model or submodel provided for MultiModel.Baked " + location + ".");
      }

      // Only changes the base model based on perspective, may recurse for parts in the future.
      if (perspective && base instanceof IPerspectiveAwareModel) {
        IPerspectiveAwareModel perBase = (IPerspectiveAwareModel) base;
        ImmutableMap.Builder<TransformType, Pair<Baked, TRSRTransformation>> builder =
            ImmutableMap.builder();
        for (TransformType type : TransformType.values()) {
          Pair<? extends IFlexibleBakedModel, Matrix4f> p = perBase.handlePerspective(type);
          IFlexibleBakedModel newBase = p.getLeft();
          builder.put(
              type,
              Pair.of(
                  new Baked(location, false, newBase, parts),
                  new TRSRTransformation(p.getRight())));
        }
        transforms = builder.build();
      } else {
        transforms = ImmutableMap.of();
      }
    }