From 9f96b86938e1b934bc435456bacc18db0601b9b1 Mon Sep 17 00:00:00 2001 From: elix-x Date: Fri, 1 Jul 2016 20:19:10 +0200 Subject: [PATCH] Enabled block states ignoring properties Enabled block states ignoring. File with same name as block state, but with .ignore.json extension. Although it's json extension, it is NOT IN JSON FORMAT!!! Each line is name of property to ignore. Refers to #10. --- src/main/java/appeng/client/ClientHelper.java | 4 ++ .../render/model/AEIgnoringStateMapper.java | 65 +++++++++++++++++++ src/main/java/appeng/core/AppEng.java | 4 +- .../core/features/AEBlockFeatureHandler.java | 11 ++++ .../features/AECableBusFeatureHandler.java | 6 ++ .../features/AETileBlockFeatureHandler.java | 11 ++++ .../appeng/core/features/IFeatureHandler.java | 3 + .../core/features/ItemFeatureHandler.java | 6 ++ .../features/StairBlockFeatureHandler.java | 11 ++++ .../blockstates/tile.BlockGrinder.ignore.json | 1 + .../blockstates/tile.BlockGrinder.json | 8 +-- 11 files changed, 124 insertions(+), 6 deletions(-) create mode 100644 src/main/java/appeng/client/render/model/AEIgnoringStateMapper.java create mode 100644 src/main/resources/assets/appliedenergistics2/blockstates/tile.BlockGrinder.ignore.json 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 } } }