Restored glass model that implements the uv shift.
Added a way to register built-in models to support this.
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package appeng.bootstrap;
|
||||
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.function.BiFunction;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
@@ -9,6 +11,7 @@ import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
||||
import net.minecraft.client.renderer.block.statemap.IStateMapper;
|
||||
import net.minecraft.client.renderer.color.IBlockColor;
|
||||
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||
import net.minecraftforge.client.model.IModel;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
@@ -34,6 +37,9 @@ class BlockRendering implements IBlockRendering
|
||||
@SideOnly( Side.CLIENT )
|
||||
private IStateMapper stateMapper;
|
||||
|
||||
@SideOnly( Side.CLIENT )
|
||||
private Map<String, IModel> builtInModels = new HashMap<>();
|
||||
|
||||
@SideOnly( Side.CLIENT )
|
||||
public IBlockRendering modelCustomizer( BiFunction<ModelResourceLocation, IBakedModel, IBakedModel> customizer )
|
||||
{
|
||||
@@ -57,6 +63,13 @@ class BlockRendering implements IBlockRendering
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IBlockRendering builtInModel( String name, IModel model )
|
||||
{
|
||||
this.builtInModels.put( name, model );
|
||||
return this;
|
||||
}
|
||||
|
||||
@SideOnly( Side.CLIENT )
|
||||
@Override
|
||||
public IBlockRendering stateMapper( IStateMapper mapper )
|
||||
@@ -65,7 +78,7 @@ class BlockRendering implements IBlockRendering
|
||||
return this;
|
||||
}
|
||||
|
||||
void apply( FeatureFactory registry, Block block, Class<?> tileEntityClass )
|
||||
void apply( FeatureFactory factory, Block block, Class<?> tileEntityClass )
|
||||
{
|
||||
if( tesr != null )
|
||||
{
|
||||
@@ -73,27 +86,29 @@ class BlockRendering implements IBlockRendering
|
||||
{
|
||||
throw new IllegalStateException( "Tried to register a TESR for " + block + " even though no tile entity has been specified." );
|
||||
}
|
||||
registry.addBootstrapComponent( new TesrComponent( tileEntityClass, tesr ) );
|
||||
factory.addBootstrapComponent( new TesrComponent( tileEntityClass, tesr ) );
|
||||
}
|
||||
|
||||
if( modelCustomizer != null )
|
||||
{
|
||||
registry.modelOverrideComponent.addOverride( block.getRegistryName().getResourcePath(), modelCustomizer );
|
||||
factory.modelOverrideComponent.addOverride( block.getRegistryName().getResourcePath(), modelCustomizer );
|
||||
}
|
||||
else if ( block instanceof AEBaseTileBlock )
|
||||
{
|
||||
// This is a default rotating model if the base-block uses an AE tile entity which exposes UP/FRONT as extended props
|
||||
registry.modelOverrideComponent.addOverride( block.getRegistryName().getResourcePath(), ( l, m ) -> new CachingRotatingBakedModel( m ) );
|
||||
factory.modelOverrideComponent.addOverride( block.getRegistryName().getResourcePath(), ( l, m ) -> new CachingRotatingBakedModel( m ) );
|
||||
}
|
||||
|
||||
builtInModels.forEach( factory::addBuiltInModel );
|
||||
|
||||
if( blockColor != null )
|
||||
{
|
||||
registry.addBootstrapComponent( new BlockColorComponent( block, blockColor ) );
|
||||
factory.addBootstrapComponent( new BlockColorComponent( block, blockColor ) );
|
||||
}
|
||||
|
||||
if( stateMapper != null )
|
||||
{
|
||||
registry.addBootstrapComponent( new StateMapperComponent( block, stateMapper ) );
|
||||
factory.addBootstrapComponent( new StateMapperComponent( block, stateMapper ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,12 +7,14 @@ import java.util.function.Supplier;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraftforge.client.model.IModel;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
import appeng.api.definitions.IItemDefinition;
|
||||
import appeng.api.util.AEColor;
|
||||
import appeng.api.util.AEColoredItemDefinition;
|
||||
import appeng.bootstrap.components.BuiltInModelComponent;
|
||||
import appeng.bootstrap.components.InitComponent;
|
||||
import appeng.bootstrap.components.ModelOverrideComponent;
|
||||
import appeng.bootstrap.components.PostInitComponent;
|
||||
@@ -34,6 +36,9 @@ public class FeatureFactory
|
||||
@SideOnly( Side.CLIENT )
|
||||
ModelOverrideComponent modelOverrideComponent;
|
||||
|
||||
@SideOnly( Side.CLIENT )
|
||||
private BuiltInModelComponent builtInModelComponent;
|
||||
|
||||
public FeatureFactory()
|
||||
{
|
||||
this.defaultFeatures = new AEFeature[] { AEFeature.Core };
|
||||
@@ -42,7 +47,10 @@ public class FeatureFactory
|
||||
if( Platform.isClient() )
|
||||
{
|
||||
modelOverrideComponent = new ModelOverrideComponent();
|
||||
this.bootstrapComponents.add( modelOverrideComponent );
|
||||
bootstrapComponents.add( modelOverrideComponent );
|
||||
|
||||
builtInModelComponent = new BuiltInModelComponent();
|
||||
bootstrapComponents.add( builtInModelComponent );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,6 +61,7 @@ public class FeatureFactory
|
||||
if( Platform.isClient() )
|
||||
{
|
||||
this.modelOverrideComponent = parent.modelOverrideComponent;
|
||||
this.builtInModelComponent = parent.builtInModelComponent;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,9 +117,14 @@ public class FeatureFactory
|
||||
this.bootstrapComponents.add( component );
|
||||
}
|
||||
|
||||
@SideOnly( Side.CLIENT )
|
||||
void addBuiltInModel( String path, IModel model )
|
||||
{
|
||||
builtInModelComponent.addModel( path, model );
|
||||
}
|
||||
|
||||
public List<IBootstrapComponent> getBootstrapComponents()
|
||||
{
|
||||
return bootstrapComponents;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -7,8 +7,8 @@ import net.minecraft.client.renderer.block.model.IBakedModel;
|
||||
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
||||
import net.minecraft.client.renderer.block.statemap.IStateMapper;
|
||||
import net.minecraft.client.renderer.color.IBlockColor;
|
||||
import net.minecraft.client.renderer.color.IItemColor;
|
||||
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||
import net.minecraftforge.client.model.IModel;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
@@ -31,4 +31,10 @@ public interface IBlockRendering
|
||||
@SideOnly( Side.CLIENT )
|
||||
IBlockRendering tesr( TileEntitySpecialRenderer<?> tesr );
|
||||
|
||||
/**
|
||||
* Registers a built-in model under the given resource path.
|
||||
*/
|
||||
@SideOnly( Side.CLIENT )
|
||||
IBlockRendering builtInModel( String name, IModel model );
|
||||
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import net.minecraft.client.renderer.ItemMeshDefinition;
|
||||
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
||||
import net.minecraft.client.renderer.color.IItemColor;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.client.model.IModel;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
@@ -66,4 +67,11 @@ public interface IItemRendering
|
||||
*/
|
||||
@SideOnly( Side.CLIENT )
|
||||
IItemRendering color( IItemColor itemColor );
|
||||
|
||||
/**
|
||||
* Registers a built-in model under the given resource path.
|
||||
*/
|
||||
@SideOnly( Side.CLIENT )
|
||||
IItemRendering builtInModel( String name, IModel model );
|
||||
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import net.minecraft.client.renderer.color.IItemColor;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.client.model.IModel;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
@@ -42,6 +43,9 @@ class ItemRendering implements IItemRendering
|
||||
@SideOnly( Side.CLIENT )
|
||||
private Set<ResourceLocation> variants = new HashSet<>();
|
||||
|
||||
@SideOnly( Side.CLIENT )
|
||||
private Map<String, IModel> builtInModels = new HashMap<>();
|
||||
|
||||
@Override
|
||||
@SideOnly( Side.CLIENT )
|
||||
public IItemRendering meshDefinition( ItemMeshDefinition meshDefinition )
|
||||
@@ -73,6 +77,13 @@ class ItemRendering implements IItemRendering
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IItemRendering builtInModel( String name, IModel model )
|
||||
{
|
||||
this.builtInModels.put( name, model );
|
||||
return this;
|
||||
}
|
||||
|
||||
void apply( FeatureFactory factory, Item item )
|
||||
{
|
||||
if( this.itemMeshDefinition != null )
|
||||
@@ -110,6 +121,8 @@ class ItemRendering implements IItemRendering
|
||||
factory.addBootstrapComponent( new ItemModelComponent( item, ImmutableMap.of( 0, model ) ) );
|
||||
}
|
||||
|
||||
builtInModels.forEach( factory::addBuiltInModel );
|
||||
|
||||
if( !resources.isEmpty() )
|
||||
{
|
||||
factory.addBootstrapComponent( new ItemVariantsComponent( item, resources ) );
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
package appeng.bootstrap.components;
|
||||
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
|
||||
import net.minecraftforge.client.model.IModel;
|
||||
import net.minecraftforge.client.model.ModelLoaderRegistry;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
import appeng.client.render.model.BuiltInModelLoader;
|
||||
|
||||
|
||||
@SideOnly( Side.CLIENT )
|
||||
public class BuiltInModelComponent implements PreInitComponent
|
||||
{
|
||||
|
||||
private final Map<String, IModel> builtInModels = new HashMap<>();
|
||||
|
||||
private boolean hasInitialized = false;
|
||||
|
||||
public void addModel( String path, IModel model )
|
||||
{
|
||||
Preconditions.checkState( !hasInitialized );
|
||||
builtInModels.put( path, model );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void preInitialize( Side side )
|
||||
{
|
||||
hasInitialized = true;
|
||||
|
||||
BuiltInModelLoader loader = new BuiltInModelLoader( builtInModels );
|
||||
ModelLoaderRegistry.registerLoader( loader );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user