@Override public VanillaModelWrapper gui3d(boolean value) { if (model.isGui3d() == value) { return this; } ModelBlock newModel = new ModelBlock(model.getParentLocation(), model.getElements(), model.textures, model.ambientOcclusion, value, model.getAllTransforms(), Lists.newArrayList(model.getOverrides())); newModel.parent = model.parent; newModel.name = model.name; return new VanillaModelWrapper(location, newModel, uvlock, animation); }
private static ItemCameraTransforms loadTransformFromJson(ResourceLocation location) { try { return ModelBlock.deserialize(getReaderForResource(location)).getAllTransforms(); } catch (Exception e) { e.printStackTrace(); } return ItemCameraTransforms.DEFAULT; }
@Override public Collection<ResourceLocation> getTextures() { Collection<ResourceLocation> textures = Sets.newHashSet(); base.parent = ModelHelpers.MODEL_GENERATED; // To enable texture resolving // Loop over all textures for the default layers and add them to the collection if available. if(base.getRootModel().name.equals("generation marker")) { for(String textureName : ItemModelGenerator.LAYERS) { String path = base.resolveTextureName(textureName); ResourceLocation resourceLocation = new ResourceLocation(path); if(!path.equals(textureName)) { textures.add(resourceLocation); } } } // Loop over all textures in this model and add them to the collection. for(String textureName : base.textures.values()) { if(!textureName.startsWith("#")) { textures.add(new ResourceLocation(textureName)); } } return textures; }
@Override public Collection<ResourceLocation> getDependencies() { Set<ResourceLocation> set = Sets.newHashSet(); for (ResourceLocation dep : model.getOverrideLocations()) { if (!location.equals(dep)) { set.add(dep); } } if (model.getParentLocation() != null && !model.getParentLocation().getPath().startsWith("builtin/")) { set.add(model.getParentLocation()); } return ImmutableSet.copyOf(set); }
@Override public IBakedModel bake(IModelState state, 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 BuiltinLoader.WRAPPED_MODEL_MISSING.bake(BuiltinLoader.WRAPPED_MODEL_MISSING.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<ItemCameraTransforms.TransformType, TRSRTransformation> tMap = Maps.newEnumMap(ItemCameraTransforms.TransformType.class); tMap.putAll(PerspectiveMapWrapper.getTransforms(transforms)); tMap.putAll(PerspectiveMapWrapper.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); }
protected final IBakedModel bakeModel(ModelBlock model) { if (model.getElements().isEmpty()) { return null; } else { TextureAtlasSprite sprite = ModelLoader.defaultTextureGetter().apply(new ResourceLocation(model.resolveTextureName("particle"))); SimpleBakedModel.Builder simplebakedmodel$builder = (new SimpleBakedModel.Builder(model, model.createOverrides())).setTexture(sprite); for (BlockPart blockpart : model.getElements()) { for (Map.Entry<EnumFacing,BlockPartFace> entry : blockpart.mapFaces.entrySet()) { BlockPartFace blockpartface = entry.getValue(); sprite = ModelLoader.defaultTextureGetter().apply(new ResourceLocation(model.resolveTextureName(blockpartface.texture))); BakedQuad baked = manager.makeBakedQuad(blockpart, blockpartface, sprite, entry.getKey(), ModelRotation.X0_Y0, false); if (blockpartface.cullFace == null || !TRSRTransformation.isInteger(ModelRotation.X0_Y0.getMatrix())) { simplebakedmodel$builder.addGeneralQuad(baked); } else { simplebakedmodel$builder.addFaceQuad(ModelRotation.X0_Y0.rotate(blockpartface.cullFace), baked); } } } return simplebakedmodel$builder.makeBakedModel(); } }
@Override public IModel loadModel(ResourceLocation modelLocation) throws IOException { String modelPath = modelLocation.getResourcePath(); modelPath = modelPath.substring(0, modelPath.lastIndexOf('.')) + ".json"; IResource resource = this.manager.getResource(new ResourceLocation(modelLocation.getResourceDomain(), modelPath)); InputStreamReader jsonStream = new InputStreamReader(resource.getInputStream()); JsonElement json = this.parser.parse(jsonStream); jsonStream.close(); ModelBlock modelBlock = this.modelBlockDeserializer.deserialize(json, ModelBlock.class, this); String tblLocationStr = json.getAsJsonObject().get("tabula").getAsString() + ".tbl"; ResourceLocation tblLocation = new ResourceLocation(tblLocationStr); IResource tblResource = this.manager.getResource(tblLocation); InputStream modelStream = this.getModelJsonStream(tblLocation.toString(), tblResource.getInputStream()); TabulaModelContainer modelJson = TabulaModelHandler.INSTANCE.loadTabulaModel(modelStream); modelStream.close(); ImmutableList.Builder<ResourceLocation> builder = ImmutableList.builder(); int layer = 0; String texture; while ((texture = modelBlock.textures.get("layer" + layer++)) != null) { builder.add(new ResourceLocation(texture)); } String particle = modelBlock.textures.get("particle"); return new VanillaTabulaModel(modelJson, particle != null ? new ResourceLocation(particle) : null, builder.build(), IPerspectiveAwareModel.MapWrapper.getTransforms(modelBlock.getAllTransforms())); }
/** * Read the given model location to a {@link net.minecraft.client.renderer.block.model.ModelBlock}. * @param modelLocation A model location (without .json suffix) * @return The corresponding model. * @throws IOException If the model file was invalid. */ public static ModelBlock loadModelBlock(ResourceLocation modelLocation) throws IOException { IResource resource = Minecraft.getMinecraft().getResourceManager().getResource( new ResourceLocation(modelLocation.getResourceDomain(), modelLocation.getResourcePath() + ".json")); Reader reader = new InputStreamReader(resource.getInputStream(), Charsets.UTF_8); return ModelBlock.deserialize(reader); }
/** * Bake a model. * @param model The model to bake. * @param icon The icon to use as default texture. * @param transformation The rotation of the model. * @return The baked model. */ public static IBakedModel bakeModel(ModelBlock model, TextureAtlasSprite icon, ITransformation transformation) { ModelBlock itemModel = MODEL_GENERATOR.makeItemModel(Minecraft.getMinecraft().getTextureMapBlocks(), model); SimpleBakedModel.Builder builder = (new SimpleBakedModel.Builder(itemModel, itemModel.createOverrides())); itemModel.textures.put("layer0", icon.getIconName()); builder.setTexture(icon); for(BlockPart blockPart : itemModel.getElements()) { for(EnumFacing side : blockPart.mapFaces.keySet()) { BlockPartFace blockPartFace = blockPart.mapFaces.get(side); builder.addGeneralQuad(makeBakedQuad(blockPart, blockPartFace, icon, side, transformation, false)); } } return builder.makeBakedModel(); }
@Override public Collection<ResourceLocation> getTextures() { if (model.getParentLocation() != null) { if (model.getParentLocation().getPath().equals("builtin/generated")) { model.parent = BuiltinLoader.MODEL_GENERATED; } else { IModel parent = ModelLoaderRegistry.getModelOrLogError(model.getParentLocation(), "Could not load vanilla model parent '" + model.getParentLocation() + "' for '" + model); if (parent instanceof VanillaModelWrapper) { model.parent = ((VanillaModelWrapper) parent).model; String r = model.resolveTextureName(s); ResourceLocation loc = new ResourceLocation(r); if (!r.equals(s)) {
/** * Bake a model. * @param model The model to bake. * @param bakedTextureGetter The function for retrieving icons from resource locations. * @return The baked model. */ public static IBakedModel bakeModel(ModelBlock model, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { TextureAtlasSprite sprite = bakedTextureGetter.apply(new ResourceLocation(model.resolveTextureName("layer0"))); return bakeModel(model, sprite, ModelRotation.X0_Y0); }
@Override public Collection<ResourceLocation> getDependencies() { if(base.getParentLocation() == null || base.getParentLocation().getResourcePath().startsWith("builtin/")) { return Collections.emptyList(); } ImmutableSet.Builder<ResourceLocation> builder = ImmutableSet.builder(); builder.add(base.getParentLocation()); addAdditionalModels(builder); return builder.build(); }
private IBakedModel bakeNormal(ModelBlock model, IModelState perState, final IModelState modelState, List<TRSRTransformation> newTransforms, final VertexFormat format, final Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter, boolean uvLocked) { final TRSRTransformation baseState = modelState.apply(Optional.empty()).orElse(TRSRTransformation.identity()); TextureAtlasSprite particle = bakedTextureGetter.apply(new ResourceLocation(model.resolveTextureName("particle"))); SimpleBakedModel.Builder builder = new SimpleBakedModel.Builder(model, model.createOverrides()).setTexture(particle); for (int i = 0; i < model.getElements().size(); i++) { if (modelState.apply(Optional.of(Models.getHiddenModelPart(ImmutableList.of(Integer.toString(i))))).isPresent()) { continue; BlockPart part = model.getElements().get(i); TRSRTransformation transformation = baseState; if (newTransforms.get(i) != null) { TextureAtlasSprite textureatlassprite1 = bakedTextureGetter.apply(new ResourceLocation(model.resolveTextureName(e.getValue().texture)));
@Override public IModel loadModel(ResourceLocation modelLocation) throws IOException { String modelPath = modelLocation.getResourcePath(); modelPath = modelPath.substring(0, modelPath.lastIndexOf('.')) + ".json"; IResource resource = this.manager.getResource(new ResourceLocation(modelLocation.getResourceDomain(), modelPath)); InputStreamReader jsonStream = new InputStreamReader(resource.getInputStream()); JsonElement json = this.parser.parse(jsonStream); jsonStream.close(); ModelBlock modelBlock = this.modelBlockDeserializer.deserialize(json, ModelBlock.class, this); String tblLocationStr = json.getAsJsonObject().get("tabula").getAsString() + ".tbl"; ResourceLocation tblLocation = new ResourceLocation(tblLocationStr); IResource tblResource = this.manager.getResource(tblLocation); InputStream modelStream = this.getModelJsonStream(tblLocation.toString(), tblResource.getInputStream()); TabulaModelContainer modelJson = INSTANCE.loadTabulaModel(modelStream); modelStream.close(); ImmutableList.Builder<ResourceLocation> builder = ImmutableList.builder(); int layer = 0; String texture; while ((texture = modelBlock.textures.get("layer" + layer++)) != null) { builder.add(new ResourceLocation(texture)); } String particle = modelBlock.textures.get("particle"); return new JurassicraftVanillaTabulaModel(modelJson, particle != null ? new ResourceLocation(particle) : null, builder.build(), PerspectiveMapWrapper.getTransforms(modelBlock.getAllTransforms())); }
@Override public IModel loadModel(ResourceLocation modelLocation) throws Exception { // Load vanilla model ModelBlock vanillaModel; ResourceLocation vanillaModelLocation = new ResourceLocation(modelLocation.getNamespace(), modelLocation.getPath() + ".json"); try (IResource resource = Minecraft.getMinecraft().getResourceManager().getResource(vanillaModelLocation); Reader reader = new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8)) { vanillaModel = ModelBlock.deserialize(reader); vanillaModel.name = modelLocation.toString(); } // Load armature animation (currently disabled for efficiency, see MixinModelBlockAnimation) String modelPath = modelLocation.getPath(); if (modelPath.startsWith("models/")) { modelPath = modelPath.substring("models/".length()); } ResourceLocation armatureLocation = new ResourceLocation(modelLocation.getNamespace(), "armatures/" + modelPath + ".json"); ModelBlockAnimation animation = ModelBlockAnimation.loadVanillaAnimation(Minecraft.getMinecraft().getResourceManager(), armatureLocation); // Return the vanilla model weapped in a VanillaModelWrapper return new VanillaModelWrapper(modelLocation, vanillaModel , false, animation); }
@Override public VanillaModelWrapper smoothLighting(boolean value) { if (model.ambientOcclusion == value) { return this; } ModelBlock newModel = new ModelBlock(model.getParentLocation(), model.getElements(), model.textures, value, model.isGui3d(), model.getAllTransforms(), Lists.newArrayList(model.getOverrides())); newModel.parent = model.parent; newModel.name = model.name; return new VanillaModelWrapper(location, newModel, uvlock, animation); }
private static ItemCameraTransforms loadTransformFromJson(ResourceLocation location) { try { return ModelBlock.deserialize(getReaderForResource(location)).getAllTransforms(); } catch (Exception e) { e.printStackTrace(); } return ItemCameraTransforms.DEFAULT; }
for (BlockPart part : model.getElements()) { elements.add(new BlockPart(part.positionFrom, part.positionTo, Maps.newHashMap(part.mapFaces), part.partRotation, part.shade)); ModelBlock newModel = new ModelBlock(model.getParentLocation(), elements, Maps.newHashMap(model.textures), model.isAmbientOcclusion(), model.isGui3d(), model.getAllTransforms(), Lists.newArrayList(model.getOverrides())); newModel.name = model.name; newModel.parent = model.parent; for (BlockPart part : newModel.getElements()) { part.mapFaces.entrySet().removeIf(entry -> removed.contains(entry.getValue().texture));
@SuppressWarnings("deprecation") public static void postInit() { try { try(IResource resource = Minecraft.getMinecraft().getResourceManager().getResource(new ResourceLocation("models/block/block.json"))) { InputStreamReader reader = new InputStreamReader(resource.getInputStream()); ModelBlock modelBlock = ModelBlock.deserialize(reader); for(TransformType transformType : TransformType.values()) { ItemTransformVec3f vec3f = modelBlock.getAllTransforms().getTransform(transformType); BLOCK_TRANSFORMS.put(transformType, new TRSRTransformation(vec3f)); } } } catch (IOException exception) { GTLog.logger.error("Failed to load default block transforms", exception); } }
ModelBlock trim = makeItem(internaltrim); if(trim!=null) { for (BlockPart part : trim.getElements()) { part.mapFaces.remove(EnumFacing.SOUTH); HashMap<EnumFacing, BlockPartFace> faces = new HashMap<EnumFacing, BlockPartFace>(); for(BlockPart part : front.getElements()){ if(trimIndex!=-1) { BlockPartFace face = part.mapFaces.get(EnumFacing.NORTH); return new ModelBlock(null, elements, ImmutableMap.copyOf(front.textures), front.isAmbientOcclusion(), front.isGui3d(), front.getAllTransforms(), front.getOverrides());