diff --git a/src/main/java/appeng/client/ClientHelper.java b/src/main/java/appeng/client/ClientHelper.java index 6fa5ed805..04f6c3ac7 100644 --- a/src/main/java/appeng/client/ClientHelper.java +++ b/src/main/java/appeng/client/ClientHelper.java @@ -93,6 +93,10 @@ public class ClientHelper extends ServerHelper { MinecraftForge.EVENT_BUS.register( this ); ModelLoaderRegistry.registerLoader( UVLModelLoader.INSTANCE ); + for( IAEFeature feature : Api.INSTANCE.definitions().getFeatureRegistry().getRegisteredFeatures() ) + { + feature.handler().registerStateMapper(); + } } @Override diff --git a/src/main/java/appeng/client/render/model/AEIgnoringStateMapper.java b/src/main/java/appeng/client/render/model/AEIgnoringStateMapper.java new file mode 100644 index 000000000..1096cba49 --- /dev/null +++ b/src/main/java/appeng/client/render/model/AEIgnoringStateMapper.java @@ -0,0 +1,65 @@ + +package appeng.client.render.model; + + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import com.google.common.collect.Maps; + +import org.apache.commons.io.IOUtils; + +import net.minecraft.block.Block; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.block.statemap.StateMapperBase; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.resources.IResourceManagerReloadListener; +import net.minecraft.util.ResourceLocation; + + +public class AEIgnoringStateMapper extends StateMapperBase implements IResourceManagerReloadListener +{ + + private final ResourceLocation ignoredRL; + private final List ignored = new ArrayList<>(); + + public AEIgnoringStateMapper( ResourceLocation ignoredRL ) + { + this.ignoredRL = new ResourceLocation( ignoredRL.getResourceDomain(), "blockstates/" + ignoredRL.getResourcePath() + ".ignore.json" ); + } + + @Override + public void onResourceManagerReload( IResourceManager resourceManager ) + { + try + { + ignored.addAll( IOUtils.readLines( resourceManager.getResource( ignoredRL ).getInputStream() ) ); + } + catch( IOException e ) + { + // There's no ignore file, so everything is ok. + } + } + + @Override + protected ModelResourceLocation getModelResourceLocation( IBlockState state ) + { + Map, Comparable> map = Maps., Comparable>newLinkedHashMap( state.getProperties() ); + Iterator, Comparable>> it = map.entrySet().iterator(); + while( it.hasNext() ) + { + if( ignored.contains( it.next().getKey().getName() ) ) + { + it.remove(); + } + } + return new ModelResourceLocation( (ResourceLocation) Block.REGISTRY.getNameForObject( state.getBlock() ), this.getPropertyString( map ) ); + } + +} diff --git a/src/main/java/appeng/core/AppEng.java b/src/main/java/appeng/core/AppEng.java index 176c71170..cda02f8f8 100644 --- a/src/main/java/appeng/core/AppEng.java +++ b/src/main/java/appeng/core/AppEng.java @@ -153,13 +153,13 @@ public final class AppEng CreativeTabFacade.init(); } + this.registration.preInitialize( event ); + if( Platform.isClient() ) { CommonHelper.proxy.preinit(); } - this.registration.preInitialize( event ); - if( versionCheckerConfig.isVersionCheckingEnabled() ) { final VersionChecker versionChecker = new VersionChecker( versionCheckerConfig ); diff --git a/src/main/java/appeng/core/features/AEBlockFeatureHandler.java b/src/main/java/appeng/core/features/AEBlockFeatureHandler.java index 2d4bc89d8..614d10554 100644 --- a/src/main/java/appeng/core/features/AEBlockFeatureHandler.java +++ b/src/main/java/appeng/core/features/AEBlockFeatureHandler.java @@ -26,12 +26,15 @@ import com.google.common.base.Optional; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.block.model.ModelBakery; import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.resources.IReloadableResourceManager; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import appeng.api.definitions.IBlockDefinition; import appeng.block.AEBaseBlock; +import appeng.client.render.model.AEIgnoringStateMapper; import appeng.core.AppEng; import appeng.core.CreativeTab; @@ -99,4 +102,12 @@ public final class AEBlockFeatureHandler implements IFeatureHandler { Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register( this.definition.maybeItem().get(), 0, new ModelResourceLocation( registryName, "normal" ) ); } + + @Override + public void registerStateMapper() + { + AEIgnoringStateMapper mapper = new AEIgnoringStateMapper( registryName ); + ModelLoader.setCustomStateMapper( this.featured, mapper ); + ( (IReloadableResourceManager) Minecraft.getMinecraft().getResourceManager() ).registerReloadListener( mapper ); + } } diff --git a/src/main/java/appeng/core/features/AECableBusFeatureHandler.java b/src/main/java/appeng/core/features/AECableBusFeatureHandler.java index 13acff78b..d2db54fb5 100644 --- a/src/main/java/appeng/core/features/AECableBusFeatureHandler.java +++ b/src/main/java/appeng/core/features/AECableBusFeatureHandler.java @@ -107,4 +107,10 @@ public final class AECableBusFeatureHandler implements IFeatureHandler { Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register( this.definition.maybeItem().get(), 0, new ModelResourceLocation( registryName, "normal" ) ); } + + @Override + public void registerStateMapper() + { + + } } diff --git a/src/main/java/appeng/core/features/AETileBlockFeatureHandler.java b/src/main/java/appeng/core/features/AETileBlockFeatureHandler.java index 9b45ae2f9..cac26bfd7 100644 --- a/src/main/java/appeng/core/features/AETileBlockFeatureHandler.java +++ b/src/main/java/appeng/core/features/AETileBlockFeatureHandler.java @@ -26,12 +26,15 @@ import com.google.common.base.Optional; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.block.model.ModelBakery; import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.resources.IReloadableResourceManager; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import appeng.api.definitions.ITileDefinition; import appeng.block.AEBaseTileBlock; +import appeng.client.render.model.AEIgnoringStateMapper; import appeng.core.AppEng; import appeng.core.CommonHelper; import appeng.core.CreativeTab; @@ -105,4 +108,12 @@ public final class AETileBlockFeatureHandler implements IFeatureHandler { Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register( this.definition.maybeItem().get(), 0, new ModelResourceLocation( registryName, "normal" ) ); } + + @Override + public void registerStateMapper() + { + AEIgnoringStateMapper mapper = new AEIgnoringStateMapper( registryName ); + ModelLoader.setCustomStateMapper( this.featured, mapper ); + ( (IReloadableResourceManager) Minecraft.getMinecraft().getResourceManager() ).registerReloadListener( mapper ); + } } diff --git a/src/main/java/appeng/core/features/IFeatureHandler.java b/src/main/java/appeng/core/features/IFeatureHandler.java index 3189732bd..4ca27e123 100644 --- a/src/main/java/appeng/core/features/IFeatureHandler.java +++ b/src/main/java/appeng/core/features/IFeatureHandler.java @@ -35,4 +35,7 @@ public interface IFeatureHandler @SideOnly( Side.CLIENT ) void registerModel(); + + @SideOnly( Side.CLIENT ) + void registerStateMapper(); } diff --git a/src/main/java/appeng/core/features/ItemFeatureHandler.java b/src/main/java/appeng/core/features/ItemFeatureHandler.java index 76890bd73..bfa163a0c 100644 --- a/src/main/java/appeng/core/features/ItemFeatureHandler.java +++ b/src/main/java/appeng/core/features/ItemFeatureHandler.java @@ -113,4 +113,10 @@ public final class ItemFeatureHandler implements IFeatureHandler { Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register( item, 0, new ModelResourceLocation( registryName, "inventory" ) ); } + + @Override + public void registerStateMapper() + { + + } } diff --git a/src/main/java/appeng/core/features/StairBlockFeatureHandler.java b/src/main/java/appeng/core/features/StairBlockFeatureHandler.java index 315d227fa..6d7019a07 100644 --- a/src/main/java/appeng/core/features/StairBlockFeatureHandler.java +++ b/src/main/java/appeng/core/features/StairBlockFeatureHandler.java @@ -27,13 +27,16 @@ import net.minecraft.block.BlockStairs; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.block.model.ModelBakery; import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.resources.IReloadableResourceManager; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import appeng.api.definitions.IBlockDefinition; +import appeng.client.render.model.AEIgnoringStateMapper; import appeng.core.AppEng; import appeng.core.CreativeTab; @@ -95,4 +98,12 @@ public class StairBlockFeatureHandler implements IFeatureHandler { Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register( this.definition.maybeItem().get(), 0, new ModelResourceLocation( registryName, "inventory" ) ); } + + @Override + public void registerStateMapper() + { + AEIgnoringStateMapper mapper = new AEIgnoringStateMapper( registryName ); + ModelLoader.setCustomStateMapper( this.stairs, mapper ); + ( (IReloadableResourceManager) Minecraft.getMinecraft().getResourceManager() ).registerReloadListener( mapper ); + } } diff --git a/src/main/resources/assets/appliedenergistics2/blockstates/tile.BlockGrinder.ignore.json b/src/main/resources/assets/appliedenergistics2/blockstates/tile.BlockGrinder.ignore.json new file mode 100644 index 000000000..4d3e85f27 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/blockstates/tile.BlockGrinder.ignore.json @@ -0,0 +1 @@ +up \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/blockstates/tile.BlockGrinder.json b/src/main/resources/assets/appliedenergistics2/blockstates/tile.BlockGrinder.json index 65e96a2a5..2cf0a4700 100644 --- a/src/main/resources/assets/appliedenergistics2/blockstates/tile.BlockGrinder.json +++ b/src/main/resources/assets/appliedenergistics2/blockstates/tile.BlockGrinder.json @@ -1,8 +1,8 @@ { "variants": { - "forward=north,up=up": { "model": "appliedenergistics2:tile.BlockGrinder" }, - "forward=south,up=up": { "model": "appliedenergistics2:tile.BlockGrinder", "y": 180 }, - "forward=west,up=up": { "model": "appliedenergistics2:tile.BlockGrinder", "y": 270 }, - "forward=east,up=up": { "model": "appliedenergistics2:tile.BlockGrinder", "y": 90 } + "forward=north": { "model": "appliedenergistics2:tile.BlockGrinder" }, + "forward=south": { "model": "appliedenergistics2:tile.BlockGrinder", "y": 180 }, + "forward=west": { "model": "appliedenergistics2:tile.BlockGrinder", "y": 270 }, + "forward=east": { "model": "appliedenergistics2:tile.BlockGrinder", "y": 90 } } }