mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-05-19 07:44:10 +00:00
215 lines
7.9 KiB
Java
215 lines
7.9 KiB
Java
/*
|
|
* This file is part of ComputerCraft - http://www.computercraft.info
|
|
* Copyright Daniel Ratcliffe, 2011-2019. Do not distribute without permission.
|
|
* Send enquiries to dratcliffe@gmail.com
|
|
*/
|
|
|
|
package dan200.computercraft.client.proxy;
|
|
|
|
import dan200.computercraft.ComputerCraft;
|
|
import dan200.computercraft.client.render.TileEntityTurtleRenderer;
|
|
import dan200.computercraft.client.render.TurtleSmartItemModel;
|
|
import dan200.computercraft.shared.proxy.CCTurtleProxyCommon;
|
|
import dan200.computercraft.shared.turtle.blocks.TileTurtle;
|
|
import dan200.computercraft.shared.turtle.items.ItemTurtleBase;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.renderer.ItemMeshDefinition;
|
|
import net.minecraft.client.renderer.block.model.IBakedModel;
|
|
import net.minecraft.client.renderer.block.model.ModelBakery;
|
|
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
|
import net.minecraft.client.renderer.color.IItemColor;
|
|
import net.minecraft.client.renderer.texture.TextureMap;
|
|
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
|
import net.minecraft.client.resources.IResourceManager;
|
|
import net.minecraft.client.resources.SimpleReloadableResourceManager;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraftforge.client.event.ModelBakeEvent;
|
|
import net.minecraftforge.client.event.ModelRegistryEvent;
|
|
import net.minecraftforge.client.event.TextureStitchEvent;
|
|
import net.minecraftforge.client.model.IModel;
|
|
import net.minecraftforge.client.model.ModelLoader;
|
|
import net.minecraftforge.client.model.ModelLoaderRegistry;
|
|
import net.minecraftforge.common.MinecraftForge;
|
|
import net.minecraftforge.fml.client.registry.ClientRegistry;
|
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
|
|
|
import javax.annotation.Nonnull;
|
|
|
|
public class CCTurtleProxyClient extends CCTurtleProxyCommon
|
|
{
|
|
// IComputerCraftProxy implementation
|
|
|
|
@Override
|
|
public void preInit()
|
|
{
|
|
super.preInit();
|
|
|
|
// Setup client forge handlers
|
|
registerForgeHandlers();
|
|
}
|
|
|
|
@SubscribeEvent
|
|
public void registerModels( ModelRegistryEvent event )
|
|
{
|
|
// Register item models
|
|
ItemMeshDefinition turtleMeshDefinition = new ItemMeshDefinition()
|
|
{
|
|
private ModelResourceLocation turtle_dynamic = new ModelResourceLocation( "computercraft:turtle_dynamic", "inventory" );
|
|
|
|
@Nonnull
|
|
@Override
|
|
public ModelResourceLocation getModelLocation( @Nonnull ItemStack stack )
|
|
{
|
|
return turtle_dynamic;
|
|
}
|
|
};
|
|
String[] turtleModelNames = new String[] {
|
|
"turtle_dynamic",
|
|
"turtle", "turtle_advanced",
|
|
"turtle_white",
|
|
"turtle_elf_overlay"
|
|
};
|
|
registerItemModel( ComputerCraft.Blocks.turtle, turtleMeshDefinition, turtleModelNames );
|
|
registerItemModel( ComputerCraft.Blocks.turtleExpanded, turtleMeshDefinition, turtleModelNames );
|
|
registerItemModel( ComputerCraft.Blocks.turtleAdvanced, turtleMeshDefinition, turtleModelNames );
|
|
}
|
|
|
|
@Override
|
|
public void init()
|
|
{
|
|
super.init();
|
|
|
|
// Setup turtle colours
|
|
Minecraft.getMinecraft().getItemColors().registerItemColorHandler(
|
|
new TurtleItemColour(),
|
|
ComputerCraft.Blocks.turtle, ComputerCraft.Blocks.turtleExpanded, ComputerCraft.Blocks.turtleAdvanced
|
|
);
|
|
|
|
// Setup renderers
|
|
ClientRegistry.bindTileEntitySpecialRenderer( TileTurtle.class, new TileEntityTurtleRenderer() );
|
|
}
|
|
|
|
private void registerItemModel( Block block, ItemMeshDefinition definition, String[] names )
|
|
{
|
|
registerItemModel( Item.getItemFromBlock( block ), definition, names );
|
|
}
|
|
|
|
private void registerItemModel( Item item, ItemMeshDefinition definition, String[] names )
|
|
{
|
|
ResourceLocation[] resources = new ResourceLocation[names.length];
|
|
for( int i = 0; i < names.length; i++ )
|
|
{
|
|
resources[i] = new ResourceLocation( "computercraft:" + names[i] );
|
|
}
|
|
ModelBakery.registerItemVariants( item, resources );
|
|
ModelLoader.setCustomMeshDefinition( item, definition );
|
|
}
|
|
|
|
private void registerForgeHandlers()
|
|
{
|
|
ForgeHandlers handlers = new ForgeHandlers();
|
|
MinecraftForge.EVENT_BUS.register( handlers );
|
|
}
|
|
|
|
public static class ForgeHandlers
|
|
{
|
|
private static final String[] TURTLE_UPGRADES = {
|
|
"turtle_modem_off_left",
|
|
"turtle_modem_on_left",
|
|
"turtle_modem_off_right",
|
|
"turtle_modem_on_right",
|
|
"turtle_crafting_table_left",
|
|
"turtle_crafting_table_right",
|
|
"advanced_turtle_modem_off_left",
|
|
"advanced_turtle_modem_on_left",
|
|
"advanced_turtle_modem_off_right",
|
|
"advanced_turtle_modem_on_right",
|
|
"turtle_speaker_upgrade_left",
|
|
"turtle_speaker_upgrade_right",
|
|
};
|
|
|
|
private TurtleSmartItemModel m_turtleSmartItemModel;
|
|
|
|
public ForgeHandlers()
|
|
{
|
|
m_turtleSmartItemModel = new TurtleSmartItemModel();
|
|
IResourceManager resourceManager = Minecraft.getMinecraft().getResourceManager();
|
|
if( resourceManager instanceof SimpleReloadableResourceManager )
|
|
{
|
|
SimpleReloadableResourceManager reloadableResourceManager = (SimpleReloadableResourceManager) resourceManager;
|
|
reloadableResourceManager.registerReloadListener( m_turtleSmartItemModel );
|
|
}
|
|
}
|
|
|
|
@SubscribeEvent
|
|
public void onTextureStitchEvent( TextureStitchEvent.Pre event )
|
|
{
|
|
// Load all textures for upgrades
|
|
TextureMap map = event.getMap();
|
|
for( String upgrade : TURTLE_UPGRADES )
|
|
{
|
|
IModel model = ModelLoaderRegistry.getModelOrMissing( new ResourceLocation( "computercraft", "block/" + upgrade ) );
|
|
for( ResourceLocation texture : model.getTextures() )
|
|
{
|
|
map.registerSprite( texture );
|
|
}
|
|
}
|
|
}
|
|
|
|
@SubscribeEvent
|
|
public void onModelBakeEvent( ModelBakeEvent event )
|
|
{
|
|
// Load all upgrade models
|
|
for( String upgrade : TURTLE_UPGRADES )
|
|
{
|
|
loadModel( event, upgrade );
|
|
}
|
|
|
|
loadSmartModel( event, "turtle_dynamic", m_turtleSmartItemModel );
|
|
}
|
|
|
|
private void loadModel( ModelBakeEvent event, String name )
|
|
{
|
|
IModel model = ModelLoaderRegistry.getModelOrMissing(
|
|
new ResourceLocation( "computercraft", "block/" + name )
|
|
);
|
|
IBakedModel bakedModel = model.bake(
|
|
model.getDefaultState(),
|
|
DefaultVertexFormats.ITEM,
|
|
location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite( location.toString() )
|
|
);
|
|
event.getModelRegistry().putObject(
|
|
new ModelResourceLocation( "computercraft:" + name, "inventory" ),
|
|
bakedModel
|
|
);
|
|
}
|
|
|
|
private void loadSmartModel( ModelBakeEvent event, String name, IBakedModel smartModel )
|
|
{
|
|
event.getModelRegistry().putObject(
|
|
new ModelResourceLocation( "computercraft:" + name, "inventory" ),
|
|
smartModel
|
|
);
|
|
}
|
|
}
|
|
|
|
private static class TurtleItemColour implements IItemColor
|
|
{
|
|
@Override
|
|
public int colorMultiplier( @Nonnull ItemStack stack, int tintIndex )
|
|
{
|
|
if( tintIndex == 0 )
|
|
{
|
|
ItemTurtleBase turtle = (ItemTurtleBase) stack.getItem();
|
|
int colour = turtle.getColour( stack );
|
|
if( colour != -1 ) return colour;
|
|
}
|
|
|
|
return 0xFFFFFF;
|
|
}
|
|
}
|
|
}
|