/* * This file is part of Applied Energistics 2. * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. * * Applied Energistics 2 is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Applied Energistics 2 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Applied Energistics 2. If not, see . */ package appeng.client.render.crafting; import java.util.HashMap; import java.util.Map; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import appeng.block.crafting.BlockCraftingUnit; import appeng.bootstrap.BlockRenderingCustomizer; import appeng.bootstrap.IBlockRendering; import appeng.bootstrap.IItemRendering; import appeng.core.AppEng; /** * Rendering customization for the crafting cube. */ public class CraftingCubeRendering extends BlockRenderingCustomizer { private final String registryName; private final BlockCraftingUnit.CraftingUnitType type; public CraftingCubeRendering( String registryName, BlockCraftingUnit.CraftingUnitType type ) { this.registryName = registryName; this.type = type; } @Override @SideOnly( Side.CLIENT ) public void customize( IBlockRendering rendering, IItemRendering itemRendering ) { ResourceLocation baseName = new ResourceLocation( AppEng.MOD_ID, registryName ); // Disable auto-rotation rendering.modelCustomizer( ( loc, model ) -> model ); // This is the standard blockstate model ModelResourceLocation defaultModel = new ModelResourceLocation( baseName, "normal" ); // This is the built-in model String builtInName = "models/block/crafting/" + registryName + "/builtin"; ModelResourceLocation builtInModelName = new ModelResourceLocation( new ResourceLocation( AppEng.MOD_ID, builtInName ), "normal" ); rendering.builtInModel( builtInName, new CraftingCubeModel( type ) ); rendering.stateMapper( block -> mapState( block, defaultModel, builtInModelName ) ); if( type == BlockCraftingUnit.CraftingUnitType.MONITOR ) { rendering.tesr( new CraftingMonitorTESR() ); } } private Map mapState( Block block, ModelResourceLocation defaultModel, ModelResourceLocation formedModel ) { Map result = new HashMap<>(); for( IBlockState state : block.getBlockState().getValidStates() ) { if( state.getValue( BlockCraftingUnit.FORMED ) ) { // Always use the builtin model if the multiblock is formed result.put( state, formedModel ); } else { // Use the default model result.put( state, defaultModel ); } } return result; } }