@Override public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { ImmutableMap.Builder<String, TextureAtlasSprite> builder = ImmutableMap.builder(); builder.put(ModelLoader.White.LOCATION.toString(), ModelLoader.White.INSTANCE); TextureAtlasSprite missing = bakedTextureGetter.apply(new ResourceLocation("missingno")); for (Map.Entry<String, Material> e : matLib.materials.entrySet()) { if (e.getValue().getTexture().getTextureLocation().getResourcePath().startsWith("#")) { FMLLog.log.fatal("OBJLoader: Unresolved texture '{}' for obj model '{}'", e.getValue().getTexture().getTextureLocation().getResourcePath(), modelLocation); builder.put(e.getKey(), missing); } else { builder.put(e.getKey(), bakedTextureGetter.apply(e.getValue().getTexture().getTextureLocation())); } } builder.put("missingno", missing); return new TintedOBJBakedModel(this, state, format, builder.build()); }
@Override public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { ImmutableMap<TransformType, TRSRTransformation> transformMap = PerspectiveMapWrapper.getTransforms(state); TRSRTransformation transform = state.apply(Optional.empty()).orElse(TRSRTransformation.identity()); TextureAtlasSprite widgetSprite = bakedTextureGetter.apply(getWidgetTexture(widget)); ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder(); int width = widget.getWidth() + (widget.getParameters() != null && widget.getParameters().length > 0 ? 10 : 0); int height = widget.getHeight() + (widget.hasStepOutput() ? 5 : 0); Pair<Double, Double> maxUV = widget.getMaxUV(); int textureSize = widget.getTextureSize(); float scale = 1F / (float) Math.max(maxUV.getLeft(), maxUV.getRight()); float transX = 0;//maxUV.getLeft().floatValue(); float transY = -1 + maxUV.getRight().floatValue(); transform = transform.compose(new TRSRTransformation(new Vector3f(0, 0, 0), null, new Vector3f(scale, scale, 1), null)); transform = transform.compose(new TRSRTransformation(new Vector3f(transX, transY, 0), null, new Vector3f(1, 1, 1), null)); builder.add(ItemTextureQuadConverter.genQuad(format, transform, 0, 0, 16 * maxUV.getLeft().floatValue(), 16 * maxUV.getRight().floatValue(), NORTH_Z_BASE, widgetSprite, EnumFacing.NORTH, 0xffffffff)); builder.add(ItemTextureQuadConverter.genQuad(format, transform, 0, 0, 16 * maxUV.getLeft().floatValue(), 16 * maxUV.getRight().floatValue(), SOUTH_Z_BASE, widgetSprite, EnumFacing.SOUTH, 0xffffffff)); return new BakedProgrammingPuzzle(this, builder.build(), widgetSprite, format, Maps.immutableEnumMap(transformMap), Maps.newHashMap()); }
@Override public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { ImmutableMap.Builder<String, TextureAtlasSprite> builder = ImmutableMap.builder(); TextureAtlasSprite missing = bakedTextureGetter.apply(new ResourceLocation("missingno")); for(Map.Entry<String, ResourceLocation> e : textures.entrySet()) { if(e.getValue().getResourcePath().startsWith("#")) { FMLLog.severe("unresolved texture '%s' for b3d model '%s'", e.getValue().getResourcePath(), modelLocation); builder.put(e.getKey(), missing); } else { builder.put(e.getKey(), bakedTextureGetter.apply(e.getValue())); } } builder.put("missingno", missing); return new BakedWrapper(model.getRoot(), state, smooth, gui3d, format, meshes, builder.build()); }
/** * IModelState wrapper for a Clip, sampled at specified time. */ public static Pair<IModelState, Iterable<Event>> apply(final IClip clip, final float lastPollTime, final float time) { return Pair.<IModelState, Iterable<Event>>of(new IModelState() { public Optional<TRSRTransformation> apply(Optional<? extends IModelPart> part) { if(!part.isPresent() || !(part.get() instanceof IJoint)) { return Optional.absent(); } IJoint joint = (IJoint)part.get(); // TODO: Cache clip application? TRSRTransformation jointTransform = clip.apply(joint).apply(time).compose(joint.getInvBindPose()); Optional<? extends IJoint> parent = joint.getParent(); while(parent.isPresent()) { TRSRTransformation parentTransform = clip.apply(parent.get()).apply(time); jointTransform = parentTransform.compose(jointTransform); parent = parent.get().getParent(); } return Optional.of(jointTransform); } }, clip.pastEvents(lastPollTime, time)); }
@Override public List<BakedQuad> getQuads(IBlockState blockState, EnumFacing side, long rand) { if (side != null) return ImmutableList.of(); if (quads == null) { quads = buildQuads(this.state); } if (blockState instanceof IExtendedBlockState) { IExtendedBlockState exState = (IExtendedBlockState) blockState; if (exState.getUnlistedNames().contains(Properties.AnimationProperty)) { IModelState newState = exState.getValue(Properties.AnimationProperty); if (newState != null) { newState = new ModelStateComposition(this.state, newState); return buildQuads(newState); } } } return quads; }
public BakedWrapper(final Node<?> node, final IModelState state, final boolean smooth, final boolean gui3d, final VertexFormat format, final ImmutableSet<String> meshes, final ImmutableMap<String, TextureAtlasSprite> textures) { this(node, state, smooth, gui3d, format, meshes, textures, CacheBuilder.newBuilder() .maximumSize(128) .expireAfterAccess(2, TimeUnit.MINUTES) .<Integer, B3DState>build(new CacheLoader<Integer, B3DState>() { public B3DState load(Integer frame) throws Exception { IModelState parent = state; Animation newAnimation = node.getAnimation(); if(parent instanceof B3DState) { B3DState ps = (B3DState)parent; parent = ps.getParent(); } return new B3DState(newAnimation, frame, frame, 0, parent); } })); }
@Nullable public IModelState getParent(IModelState parent) { if (parent == null) return null; else if (parent instanceof OBJState) return ((OBJState) parent).parent; return parent; }
public TintedOBJBakedModel(TintedOBJModel model, IModelState state, VertexFormat format, ImmutableMap<String, TextureAtlasSprite> textures) { this.model = model; this.state = state; if (this.state instanceof OBJState) this.updateStateVisibilityMap((OBJState) this.state); this.format = format; this.textures = textures; }
private ModelHandle(ModelHandle handle, IModelState state) { this.model = handle.model; this.vertexFormat = handle.vertexFormat; this.state = state; this.uvLock = handle.uvLock; textureReplacements.putAll(handle.textureReplacements); this.key = computeKey(); }
private static IBakedModel loadModel(ModelHandle handle) { IBakedModel model = loadedModels.get(handle.getKey()); if (model != null) return model; try { IModel mod = ModelLoaderRegistry.getModel(handle.getModel()); if (handle.getTextureReplacements().size() > 0) { mod = mod.retexture(ImmutableMap.copyOf(handle.getTextureReplacements())); } if (handle.uvLocked()) { mod = mod.uvlock(true); } IModelState state = handle.getState(); if (state == null) state = mod.getDefaultState(); model = mod.bake(state, handle.getVertexFormat(), ModelLoader.defaultTextureGetter()); loadedModels.put(handle.getKey(), model); return model; } catch (Exception e) { throw new ReportedException(new CrashReport("Error loading custom model " + handle.getModel(), e)); } }
@Override public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { IBakedModel[] connections = new IBakedModel[6]; IBakedModel[] endings = new IBakedModel[6]; IBakedModel[] nodeSides = new IBakedModel[6]; //IBakedModel node = null; // d u n s w e ModelRotation[] rotations = new ModelRotation[] { ModelRotation.X90_Y0, ModelRotation.X270_Y0, ModelRotation.X0_Y0, ModelRotation.X0_Y180, ModelRotation.X0_Y270, ModelRotation.X0_Y90 }; try { IModel nodeSideModel = ModelLoaderRegistry.getModel(new ResourceLocation(Etheric.MODID, "block/pipe_node_side")); IModel connectionModel = ModelLoaderRegistry .getModel(new ResourceLocation(Etheric.MODID, "block/pipe_connection")); IModel endingModel = ModelLoaderRegistry.getModel(new ResourceLocation(Etheric.MODID, "block/pipe_end")); //node = nodeModel.bake(new TRSRTransformation(ModelRotation.X0_Y0), DefaultVertexFormats.BLOCK, // ModelLoader.defaultTextureGetter()); for (int i = 0; i < connections.length; i++) { connections[i] = connectionModel.bake(new TRSRTransformation(rotations[i]), DefaultVertexFormats.BLOCK, ModelLoader.defaultTextureGetter()); endings[i] = endingModel.bake(new TRSRTransformation(rotations[i]), DefaultVertexFormats.BLOCK, ModelLoader.defaultTextureGetter()); nodeSides[i] = nodeSideModel.bake(new TRSRTransformation(rotations[i]), DefaultVertexFormats.BLOCK, ModelLoader.defaultTextureGetter()); } } catch (Exception e) { Etheric.logger.warn(e.getMessage()); } if (connections[0] == null) { return ModelLoaderRegistry.getMissingModel().bake(state, format, bakedTextureGetter); } return new BakedPipeModel(nodeSides, connections, endings); }
public Map<ResourceLocation, IBakedModel> bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) throws Exception { Map<ResourceLocation, IBakedModel> ret = Maps.newHashMap(); for (TransportableChest chest : ChestRegistry.getChests()) { for (ResourceLocation location : chest.getChestModels()) { IModel model = ModelLoaderRegistry.getModel(location); ret.put(location, model.bake(state, format, bakedTextureGetter)); } } return ret; }
@Override public IBakedModel bake(IModelState state, VertexFormat format, java.util.function.Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { ImmutableMap<TransformType, TRSRTransformation> transformMap = PerspectiveMapWrapper.getTransforms(state); TRSRTransformation transform = (TRSRTransformation.identity()); ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder(); if (headTexture != null && haftTexture != null && handleTexture != null) { ImmutableList.Builder<ResourceLocation> texBuilder = ImmutableList.builder(); if (haftTexture != null) { texBuilder.add(haftTexture); } if (headTexture != null) { texBuilder.add(headTexture); } if (handleTexture != null) { texBuilder.add(handleTexture); } if (adornmentTexture != null) { texBuilder.add(adornmentTexture); } ImmutableList<ResourceLocation> textures = texBuilder.build(); IBakedModel model = (new ItemLayerModel(textures)).bake(state, format, bakedTextureGetter); builder.addAll(model.getQuads(null, null, 0)); } return new BakedMaceModel(this, builder.build(), format, Maps.immutableEnumMap(transformMap), Maps.<String, IBakedModel>newHashMap()); }
@Override public IBakedModel bake(IModelState state, VertexFormat format, java.util.function.Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { ImmutableMap<TransformType, TRSRTransformation> transformMap = PerspectiveMapWrapper.getTransforms(state); TRSRTransformation transform = (TRSRTransformation.identity()); ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder(); if (bladeTexture != null && handleTexture != null) { ImmutableList.Builder<ResourceLocation> texBuilder = ImmutableList.builder(); if (bladeTexture != null) { texBuilder.add(bladeTexture); } if (handleTexture != null) { texBuilder.add(handleTexture); } if (adornmentTexture != null) { texBuilder.add(adornmentTexture); } ImmutableList<ResourceLocation> textures = texBuilder.build(); IBakedModel model = (new ItemLayerModel(textures)).bake(state, format, bakedTextureGetter); builder.addAll(model.getQuads(null, null, 0)); } return new BakedDaggerModel(this, builder.build(), format, Maps.immutableEnumMap(transformMap), Maps.<String, IBakedModel>newHashMap()); }
@Override public IBakedModel bake(IModelState state, VertexFormat format, java.util.function.Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { ImmutableMap<TransformType, TRSRTransformation> transformMap = PerspectiveMapWrapper.getTransforms(state); TRSRTransformation transform = (TRSRTransformation.identity()); ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder(); if (headTexture != null && haftTexture != null && handleTexture != null) { ImmutableList.Builder<ResourceLocation> texBuilder = ImmutableList.builder(); if (haftTexture != null) { texBuilder.add(haftTexture); } if (headTexture != null) { texBuilder.add(headTexture); } if (handleTexture != null) { texBuilder.add(handleTexture); } if (adornmentTexture != null) { texBuilder.add(adornmentTexture); } ImmutableList<ResourceLocation> textures = texBuilder.build(); IBakedModel model = (new ItemLayerModel(textures)).bake(state, format, bakedTextureGetter); builder.addAll(model.getQuads(null, null, 0)); } return new BakedHoeModel(this, builder.build(), format, Maps.immutableEnumMap(transformMap), Maps.<String, IBakedModel>newHashMap()); }
public B3DState(Animation animation, int frame, int nextFrame, float progress, IModelState parent) { this.animation = animation; this.frame = frame; this.nextFrame = nextFrame; this.progress = MathHelper.clamp_float(progress, 0, 1); this.parent = getParent(parent); }
@Override public IBakedModel bake(IModelState state, VertexFormat format, java.util.function.Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { ImmutableMap<TransformType, TRSRTransformation> transformMap = PerspectiveMapWrapper.getTransforms(state); TRSRTransformation transform = (TRSRTransformation.identity()); ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder(); if (headTexture != null && haftTexture != null && handleTexture != null) { ImmutableList.Builder<ResourceLocation> texBuilder = ImmutableList.builder(); if (haftTexture != null) { texBuilder.add(haftTexture); } if (headTexture != null) { texBuilder.add(headTexture); } if (handleTexture != null) { texBuilder.add(handleTexture); } if (adornmentTexture != null) { texBuilder.add(adornmentTexture); } ImmutableList<ResourceLocation> textures = texBuilder.build(); IBakedModel model = (new ItemLayerModel(textures)).bake(state, format, bakedTextureGetter); builder.addAll(model.getQuads(null, null, 0)); } return new BakedHammerModel(this, builder.build(), format, Maps.immutableEnumMap(transformMap), Maps.<String, IBakedModel>newHashMap()); }
@Override public IBakedModel bake(IModelState state, VertexFormat format, java.util.function.Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { ImmutableMap<TransformType, TRSRTransformation> transformMap = PerspectiveMapWrapper.getTransforms(state); TRSRTransformation transform = (TRSRTransformation.identity()); ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder(); if (headTexture != null && haftTexture != null && handleTexture != null) { ImmutableList.Builder<ResourceLocation> texBuilder = ImmutableList.builder(); if (haftTexture != null) { texBuilder.add(haftTexture); } if (headTexture != null) { texBuilder.add(headTexture); } if (handleTexture != null) { texBuilder.add(handleTexture); } if (adornmentTexture != null) { texBuilder.add(adornmentTexture); } ImmutableList<ResourceLocation> textures = texBuilder.build(); IBakedModel model = (new ItemLayerModel(textures)).bake(state, format, bakedTextureGetter); builder.addAll(model.getQuads(null, null, 0)); } return new BakedShovelModel(this, builder.build(), format, Maps.immutableEnumMap(transformMap), Maps.<String, IBakedModel>newHashMap()); }
@Override public IBakedModel bake(IModelState state, VertexFormat format, java.util.function.Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { ImmutableMap<TransformType, TRSRTransformation> transformMap = PerspectiveMapWrapper.getTransforms(state); TRSRTransformation transform = (TRSRTransformation.identity()); ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder(); ImmutableList<ResourceLocation> textures = ImmutableList.<ResourceLocation>of(new ResourceLocation(modid, "items/" + toolName + "/" + partName + "_" + matName)); builder.addAll(new ItemLayerModel(textures).bake(state, format, bakedTextureGetter).getQuads(null, null, 0)); return new BakedToolHeadModel(this, builder.build(), format, Maps.immutableEnumMap(transformMap), Maps.<String, IBakedModel>newHashMap()); }
public static IModelState getPartState(IModelState state, IModel model, int index) { if(state.apply(Optional.of(new MultiModelPart(model, index))).isPresent()) { return new PartState(state, model, index); } return state; }
public void renderTileEntityFast(T te, double x, double y, double z, float partialTick, int breakStage, VertexBuffer renderer) { if(!te.hasCapability(CapabilityAnimation.ANIMATION_CAPABILITY, null)) { return; } if(blockRenderer == null) blockRenderer = Minecraft.getMinecraft().getBlockRendererDispatcher(); BlockPos pos = te.getPos(); IBlockAccess world = MinecraftForgeClient.getRegionRenderCache(te.getWorld(), pos); IBlockState state = world.getBlockState(pos); if(state.getPropertyNames().contains(Properties.StaticProperty)) { state = state.withProperty(Properties.StaticProperty, false); } if(state instanceof IExtendedBlockState) { IExtendedBlockState exState = (IExtendedBlockState)state; if(exState.getUnlistedNames().contains(Properties.AnimationProperty)) { float time = Animation.getWorldTime(getWorld(), partialTick); Pair<IModelState, Iterable<Event>> pair = te.getCapability(CapabilityAnimation.ANIMATION_CAPABILITY, null).apply(time); handleEvents(te, time, pair.getRight()); // TODO: caching? IBakedModel model = blockRenderer.getBlockModelShapes().getModelForState(exState.getClean()); exState = exState.withProperty(Properties.AnimationProperty, pair.getLeft()); renderer.setTranslation(x - pos.getX(), y - pos.getY(), z - pos.getZ()); blockRenderer.getBlockModelRenderer().renderModel(world, model, exState, pos, renderer, false); } } }
public TRSRTransformation getPartTransform(IModelState state, BlockPart part, int i) { ImmutableCollection<MBJointWeight> infos = getJoint(i); if(!infos.isEmpty()) { Matrix4f m = new Matrix4f(), tmp; float weight = 0; for(MBJointWeight info : infos) { if(info.getWeights().containsKey(i)) { ModelBlockAnimation.MBJoint joint = new ModelBlockAnimation.MBJoint(info.getName(), part); Optional<TRSRTransformation> trOp = state.apply(Optional.of(joint)); if(trOp.isPresent() && trOp.get() != TRSRTransformation.identity()) { float w = info.getWeights().get(i)[0]; tmp = trOp.get().getMatrix(); tmp.mul(w); m.add(tmp); weight += w; } } } if(weight > 1e-5) { m.mul(1f / weight); return new TRSRTransformation(m); } } return null; }
public OBJBakedModel(OBJModel model, IModelState state, VertexFormat format, ImmutableMap<String, TextureAtlasSprite> textures) { this.model = model; this.state = state; if (this.state instanceof OBJState) this.updateStateVisibilityMap((OBJState) this.state); this.format = format; this.textures = textures; }
public BakedWrapper(Node<?> node, IModelState state, boolean smooth, boolean gui3d, VertexFormat format, ImmutableSet<String> meshes, ImmutableMap<String, TextureAtlasSprite> textures, LoadingCache<Integer, B3DState> cache) { this.node = node; this.state = state; this.smooth = smooth; this.gui3d = gui3d; this.format = format; this.meshes = meshes; this.textures = textures; this.cache = cache; }
@SuppressWarnings("SameReturnValue") public static IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { if (soilTextures == null) { bakeTextures(bakedTextureGetter); bakeModels(); } return INSTANCE; }
public static ImmutableMap<TransformType, TRSRTransformation> getTransforms(IModelState state) { ImmutableMap.Builder<TransformType, TRSRTransformation> builder = ImmutableMap.builder(); for(TransformType type : TransformType.values()) { Optional<TRSRTransformation> tr = state.apply(Optional.of(type)); if(tr.isPresent()) { builder.put(type, tr.get()); } } return builder.build(); }
public static Pair<? extends IBakedModel, Matrix4f> handlePerspective(IBakedModel model, IModelState state, TransformType cameraTransformType) { TRSRTransformation tr = state.apply(Optional.of(cameraTransformType)).or(TRSRTransformation.identity()); if(tr != TRSRTransformation.identity()) { return Pair.of(model, TRSRTransformation.blockCornerToCenter(tr).getMatrix()); } return Pair.of(model, null); }
@Override public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { IModel missing = ModelLoaderRegistry.getMissingModel(); return new MultiLayerBakedModel( buildModels(models, state, format, bakedTextureGetter), missing.bake(missing.getDefaultState(), format, bakedTextureGetter), IPerspectiveAwareModel.MapWrapper.getTransforms(state) ); }
public SubModel(IModelState state, boolean uvLock, boolean smooth, boolean gui3d, ImmutableMap<String, String> textures, ResourceLocation model, ImmutableMap<String, String> customData) { this.state = state; this.uvLock = uvLock; this.smooth = smooth; this.gui3d = gui3d; this.textures = textures; this.model = model; this.customData = customData; }
public ForgeVariant(ResourceLocation model, IModelState state, boolean uvLock, boolean smooth, boolean gui3d, int weight, ImmutableMap<String, String> textures, ImmutableMap<String, SubModel> parts, ImmutableMap<String, String> customData) { super(model == null ? new ResourceLocation("builtin/missing") : model, state instanceof ModelRotation ? (ModelRotation)state : ModelRotation.X0_Y0, uvLock, weight); this.textures = textures; this.parts = parts; this.customData = customData; this.state = state; this.smooth = smooth; this.gui3d = gui3d; }
/** * Used to replace the base model with a re-textured model containing sub-models. */ @Override public IModel process(IModel base) { int size = parts.size(); // FIXME: should missing base be handled this way? boolean hasBase = base != ModelLoaderRegistry.getMissingModel(); if (hasBase) { base = runModelHooks(base, smooth, gui3d, this.isUvLock(), textures, customData); if (size <= 0) return base; } // Apply rotation of base model to sub-models. // If baseRot is non-null, then that rotation will be applied instead of the base model's rotation. // This is used to allow replacing base model with a sub-model when there is no base model for a variant. IModelState baseTr = getState(); ImmutableMap.Builder<String, Pair<IModel, IModelState>> models = ImmutableMap.builder(); for (Entry<String, SubModel> entry : parts.entrySet()) { SubModel part = entry.getValue(); IModel model = ModelLoaderRegistry.getModelOrLogError(part.getModelLocation(), "Unable to load block sub-model: \'" + part.getModelLocation()); models.put(entry.getKey(), Pair.<IModel, IModelState>of(runModelHooks(model, part.smooth, part.gui3d, part.uvLock, part.getTextures(), part.getCustomData()), part.getState())); } return new MultiModel(getModelLocation(), hasBase ? base : null, baseTr, models.build()); }
public MultiModel(ResourceLocation location, IModel base, IModelState baseState, ImmutableMap<String, Pair<IModel, IModelState>> parts) { this.location = location; this.base = base; this.baseState = baseState; this.parts = parts; }
@Override public Collection<ResourceLocation> getDependencies() { Set<ResourceLocation> deps = Sets.newHashSet(); if (base != null) deps.addAll(base.getDependencies()); for (Pair<IModel, IModelState> pair : parts.values()) deps.addAll(pair.getLeft().getDependencies()); return deps; }
@Override public Collection<ResourceLocation> getTextures() { Set<ResourceLocation> deps = Sets.newHashSet(); if (base != null) deps.addAll(base.getTextures()); for (Pair<IModel, IModelState> pair : parts.values()) deps.addAll(pair.getLeft().getTextures()); return deps; }
public IBakedModel bake(IModelState state, final VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { if(!Attributes.moreSpecific(format, Attributes.DEFAULT_BAKED_FORMAT)) { throw new IllegalArgumentException("can't bake vanilla models to the format that doesn't fit into the default one: " + format); } ModelBlock model = this.model; if(model == null) return getMissingModel().bake(getMissingModel().getDefaultState(), format, bakedTextureGetter); List<TRSRTransformation> newTransforms = Lists.newArrayList(); for(int i = 0; i < model.getElements().size(); i++) { BlockPart part = model.getElements().get(i); newTransforms.add(animation.getPartTransform(state, part, i)); } ItemCameraTransforms transforms = model.getAllTransforms(); Map<TransformType, TRSRTransformation> tMap = Maps.newHashMap(); tMap.putAll(IPerspectiveAwareModel.MapWrapper.getTransforms(transforms)); tMap.putAll(IPerspectiveAwareModel.MapWrapper.getTransforms(state)); IModelState perState = new SimpleModelState(ImmutableMap.copyOf(tMap)); if(hasItemModel(model)) { return new ItemLayerModel(model).bake(perState, format, bakedTextureGetter); } if(isCustomRenderer(model)) return new BuiltInModel(transforms, model.createOverrides()); return bakeNormal(model, perState, state, newTransforms, format, bakedTextureGetter, uvlock); }
@Override public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { MultipartBakedModel.Builder builder = new MultipartBakedModel.Builder(); for (Selector selector : multipart.getSelectors()) { builder.putModel(selector.getPredicate(multipart.getStateContainer()), partModels.get(selector).bake(partModels.get(selector).getDefaultState(), format, bakedTextureGetter)); } IBakedModel bakedModel = builder.makeMultipartModel(); return bakedModel; }
public OBJState(List<String> visibleGroups, boolean visibility, IModelState parent) { this.parent = parent; for (String s : visibleGroups) this.visibilityMap.put(s, visibility); }
public TintedOBJBakedModel getCachedModel(IModelState state) { return cache.getUnchecked(state); }
public IModelState getState() { return this.state; }
public PressureGlassBakedModel(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { this.format = format; }