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.
This commit is contained in:
elix-x 2016-07-01 20:19:10 +02:00
parent e24d166f6a
commit 9f96b86938
11 changed files with 124 additions and 6 deletions

View File

@ -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

View File

@ -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<String> 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<IProperty<?>, Comparable<?>> map = Maps.<IProperty<?>, Comparable<?>>newLinkedHashMap( state.getProperties() );
Iterator<Entry<IProperty<?>, 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 ) );
}
}

View File

@ -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 );

View File

@ -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 );
}
}

View File

@ -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()
{
}
}

View File

@ -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 );
}
}

View File

@ -35,4 +35,7 @@ public interface IFeatureHandler
@SideOnly( Side.CLIENT )
void registerModel();
@SideOnly( Side.CLIENT )
void registerStateMapper();
}

View File

@ -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()
{
}
}

View File

@ -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 );
}
}

View File

@ -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 }
}
}