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(); }
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(); } }