Merge pull request #203 from SquidDev-CC/feature/turtle-models
Convert turtle rendering to use tinting
| @@ -13,16 +13,19 @@ import dan200.computercraft.client.render.TurtleSmartItemModel; | |||||||
| import dan200.computercraft.shared.proxy.CCTurtleProxyCommon; | import dan200.computercraft.shared.proxy.CCTurtleProxyCommon; | ||||||
| import dan200.computercraft.shared.turtle.blocks.TileTurtle; | import dan200.computercraft.shared.turtle.blocks.TileTurtle; | ||||||
| import dan200.computercraft.shared.turtle.core.TurtleBrain; | import dan200.computercraft.shared.turtle.core.TurtleBrain; | ||||||
|  | import dan200.computercraft.shared.turtle.items.ItemTurtleBase; | ||||||
|  | import dan200.computercraft.shared.util.Colour; | ||||||
| import net.minecraft.block.Block; | import net.minecraft.block.Block; | ||||||
| import net.minecraft.client.Minecraft; | import net.minecraft.client.Minecraft; | ||||||
| import net.minecraft.client.renderer.ItemMeshDefinition; | 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.ModelBakery; | ||||||
| import net.minecraft.client.renderer.block.model.ModelResourceLocation; | import net.minecraft.client.renderer.block.model.ModelResourceLocation; | ||||||
|  | import net.minecraft.client.renderer.color.IItemColor; | ||||||
| import net.minecraft.client.renderer.texture.TextureAtlasSprite; | import net.minecraft.client.renderer.texture.TextureAtlasSprite; | ||||||
| import net.minecraft.client.renderer.vertex.DefaultVertexFormats; | import net.minecraft.client.renderer.vertex.DefaultVertexFormats; | ||||||
| import net.minecraft.client.resources.IResourceManager; | import net.minecraft.client.resources.IResourceManager; | ||||||
| import net.minecraft.client.resources.SimpleReloadableResourceManager; | import net.minecraft.client.resources.SimpleReloadableResourceManager; | ||||||
| import net.minecraft.client.renderer.block.model.IBakedModel; |  | ||||||
| import net.minecraft.item.Item; | import net.minecraft.item.Item; | ||||||
| import net.minecraft.item.ItemStack; | import net.minecraft.item.ItemStack; | ||||||
| import net.minecraft.util.ResourceLocation; | import net.minecraft.util.ResourceLocation; | ||||||
| @@ -32,12 +35,9 @@ import net.minecraftforge.client.model.IModel; | |||||||
| import net.minecraftforge.client.model.ModelLoaderRegistry; | import net.minecraftforge.client.model.ModelLoaderRegistry; | ||||||
| import net.minecraftforge.common.MinecraftForge; | import net.minecraftforge.common.MinecraftForge; | ||||||
| import net.minecraftforge.fml.client.registry.ClientRegistry; | import net.minecraftforge.fml.client.registry.ClientRegistry; | ||||||
| import net.minecraftforge.fml.common.FMLCommonHandler; |  | ||||||
| import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; | import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; | ||||||
| import net.minecraftforge.fml.common.gameevent.TickEvent; | import net.minecraftforge.fml.common.gameevent.TickEvent; | ||||||
|  |  | ||||||
| import java.io.IOException; |  | ||||||
|  |  | ||||||
| public class CCTurtleProxyClient extends CCTurtleProxyCommon | public class CCTurtleProxyClient extends CCTurtleProxyCommon | ||||||
| { | { | ||||||
|     public CCTurtleProxyClient() |     public CCTurtleProxyClient() | ||||||
| @@ -65,16 +65,19 @@ public class CCTurtleProxyClient extends CCTurtleProxyCommon | |||||||
|         String[] turtleModelNames = new String[] { |         String[] turtleModelNames = new String[] { | ||||||
|             "turtle_dynamic", |             "turtle_dynamic", | ||||||
|             "CC-Turtle", "CC-TurtleAdvanced", |             "CC-Turtle", "CC-TurtleAdvanced", | ||||||
|             "turtle_black", "turtle_red", "turtle_green", "turtle_brown", |             "turtle_white", | ||||||
|             "turtle_blue", "turtle_purple", "turtle_cyan", "turtle_lightGrey", |  | ||||||
|             "turtle_grey", "turtle_pink", "turtle_lime", "turtle_yellow", |  | ||||||
|             "turtle_lightBlue", "turtle_magenta", "turtle_orange", "turtle_white", |  | ||||||
|             "turtle_elf_overlay" |             "turtle_elf_overlay" | ||||||
|         }; |         }; | ||||||
|         registerItemModel( ComputerCraft.Blocks.turtle, turtleMeshDefinition, turtleModelNames ); |         registerItemModel( ComputerCraft.Blocks.turtle, turtleMeshDefinition, turtleModelNames ); | ||||||
|         registerItemModel( ComputerCraft.Blocks.turtleExpanded, turtleMeshDefinition, turtleModelNames ); |         registerItemModel( ComputerCraft.Blocks.turtleExpanded, turtleMeshDefinition, turtleModelNames ); | ||||||
|         registerItemModel( ComputerCraft.Blocks.turtleAdvanced, turtleMeshDefinition, turtleModelNames ); |         registerItemModel( ComputerCraft.Blocks.turtleAdvanced, turtleMeshDefinition, turtleModelNames ); | ||||||
|  |  | ||||||
|  |         // Setup turtle colours | ||||||
|  |         Minecraft.getMinecraft().getItemColors().registerItemColorHandler( | ||||||
|  |             new TurtleItemColour(), | ||||||
|  |             ComputerCraft.Blocks.turtle, ComputerCraft.Blocks.turtleExpanded, ComputerCraft.Blocks.turtleAdvanced | ||||||
|  |         ); | ||||||
|  |  | ||||||
|         // Setup renderers |         // Setup renderers | ||||||
|         ClientRegistry.bindTileEntitySpecialRenderer( TileTurtle.class, new TileEntityTurtleRenderer() ); |         ClientRegistry.bindTileEntitySpecialRenderer( TileTurtle.class, new TileEntityTurtleRenderer() ); | ||||||
|  |  | ||||||
| @@ -181,4 +184,20 @@ public class CCTurtleProxyClient extends CCTurtleProxyCommon | |||||||
|             ); |             ); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private static class TurtleItemColour implements IItemColor | ||||||
|  |     { | ||||||
|  |         @Override | ||||||
|  |         public int getColorFromItemstack( ItemStack stack, int tintIndex ) | ||||||
|  |         { | ||||||
|  |             if( tintIndex == 0 ) | ||||||
|  |             { | ||||||
|  |                 ItemTurtleBase turtle = (ItemTurtleBase) stack.getItem(); | ||||||
|  |                 Colour colour = turtle.getColour( stack ); | ||||||
|  |                 if( colour != null ) return colour.getHex(); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             return 0xFFFFFF; | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -22,47 +22,33 @@ import net.minecraft.client.renderer.GlStateManager; | |||||||
| import net.minecraft.client.renderer.Tessellator; | import net.minecraft.client.renderer.Tessellator; | ||||||
| import net.minecraft.client.renderer.VertexBuffer; | import net.minecraft.client.renderer.VertexBuffer; | ||||||
| import net.minecraft.client.renderer.block.model.BakedQuad; | import net.minecraft.client.renderer.block.model.BakedQuad; | ||||||
|  | import net.minecraft.client.renderer.block.model.IBakedModel; | ||||||
| import net.minecraft.client.renderer.block.model.ModelManager; | import net.minecraft.client.renderer.block.model.ModelManager; | ||||||
| import net.minecraft.client.renderer.block.model.ModelResourceLocation; | import net.minecraft.client.renderer.block.model.ModelResourceLocation; | ||||||
| import net.minecraft.client.renderer.entity.RenderManager; | import net.minecraft.client.renderer.entity.RenderManager; | ||||||
| import net.minecraft.client.renderer.texture.TextureMap; | import net.minecraft.client.renderer.texture.TextureMap; | ||||||
| import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; | import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; | ||||||
| import net.minecraft.client.renderer.vertex.DefaultVertexFormats; | import net.minecraft.client.renderer.vertex.DefaultVertexFormats; | ||||||
| import net.minecraft.client.renderer.block.model.IBakedModel; |  | ||||||
| import net.minecraft.client.renderer.vertex.VertexFormat; | import net.minecraft.client.renderer.vertex.VertexFormat; | ||||||
| import net.minecraft.entity.Entity; | import net.minecraft.entity.Entity; | ||||||
| import net.minecraft.util.*; | import net.minecraft.util.EnumFacing; | ||||||
| import net.minecraft.util.math.*; | import net.minecraft.util.ResourceLocation; | ||||||
|  | import net.minecraft.util.math.BlockPos; | ||||||
|  | import net.minecraft.util.math.RayTraceResult; | ||||||
|  | import net.minecraft.util.math.Vec3d; | ||||||
| import net.minecraftforge.client.ForgeHooksClient; | import net.minecraftforge.client.ForgeHooksClient; | ||||||
|  | import net.minecraftforge.client.model.pipeline.LightUtil; | ||||||
| import org.apache.commons.lang3.tuple.Pair; | import org.apache.commons.lang3.tuple.Pair; | ||||||
| import org.lwjgl.opengl.GL11; | import org.lwjgl.opengl.GL11; | ||||||
|  |  | ||||||
| import javax.vecmath.Matrix4f; | import javax.vecmath.Matrix4f; | ||||||
| import java.util.Iterator; |  | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  |  | ||||||
| public class TileEntityTurtleRenderer extends TileEntitySpecialRenderer<TileTurtle> | public class TileEntityTurtleRenderer extends TileEntitySpecialRenderer<TileTurtle> | ||||||
| { | { | ||||||
|     private static ModelResourceLocation NORMAL_TURTLE_MODEL = new ModelResourceLocation( "computercraft:CC-Turtle", "inventory" ); |     private static ModelResourceLocation NORMAL_TURTLE_MODEL = new ModelResourceLocation( "computercraft:CC-Turtle", "inventory" ); | ||||||
|     private static ModelResourceLocation ADVANCED_TURTLE_MODEL = new ModelResourceLocation( "computercraft:CC-TurtleAdvanced", "inventory" ); |     private static ModelResourceLocation ADVANCED_TURTLE_MODEL = new ModelResourceLocation( "computercraft:CC-TurtleAdvanced", "inventory" ); | ||||||
|     private static ModelResourceLocation[] COLOUR_TURTLE_MODELS = new ModelResourceLocation[] { |     private static ModelResourceLocation COLOUR_TURTLE_MODEL = new ModelResourceLocation( "computercraft:turtle_white", "inventory" ); | ||||||
|         new ModelResourceLocation( "computercraft:turtle_black", "inventory" ), |  | ||||||
|         new ModelResourceLocation( "computercraft:turtle_red", "inventory" ), |  | ||||||
|         new ModelResourceLocation( "computercraft:turtle_green", "inventory" ), |  | ||||||
|         new ModelResourceLocation( "computercraft:turtle_brown", "inventory" ), |  | ||||||
|         new ModelResourceLocation( "computercraft:turtle_blue", "inventory" ), |  | ||||||
|         new ModelResourceLocation( "computercraft:turtle_purple", "inventory" ), |  | ||||||
|         new ModelResourceLocation( "computercraft:turtle_cyan", "inventory" ), |  | ||||||
|         new ModelResourceLocation( "computercraft:turtle_lightGrey", "inventory" ), |  | ||||||
|         new ModelResourceLocation( "computercraft:turtle_grey", "inventory" ), |  | ||||||
|         new ModelResourceLocation( "computercraft:turtle_pink", "inventory" ), |  | ||||||
|         new ModelResourceLocation( "computercraft:turtle_lime", "inventory" ), |  | ||||||
|         new ModelResourceLocation( "computercraft:turtle_yellow", "inventory" ), |  | ||||||
|         new ModelResourceLocation( "computercraft:turtle_lightBlue", "inventory" ), |  | ||||||
|         new ModelResourceLocation( "computercraft:turtle_magenta", "inventory" ), |  | ||||||
|         new ModelResourceLocation( "computercraft:turtle_orange", "inventory" ), |  | ||||||
|         new ModelResourceLocation( "computercraft:turtle_white", "inventory" ), |  | ||||||
|     }; |  | ||||||
|     private static ModelResourceLocation BEGINNER_TURTLE_MODEL = new ModelResourceLocation( "computercraftedu:CC-TurtleJunior", "inventory" ); |     private static ModelResourceLocation BEGINNER_TURTLE_MODEL = new ModelResourceLocation( "computercraftedu:CC-TurtleJunior", "inventory" ); | ||||||
|     private static ModelResourceLocation[] BEGINNER_TURTLE_COLOUR_MODELS = new ModelResourceLocation[] { |     private static ModelResourceLocation[] BEGINNER_TURTLE_COLOUR_MODELS = new ModelResourceLocation[] { | ||||||
|         new ModelResourceLocation( "computercraftedu:turtleJunior_black", "inventory" ), |         new ModelResourceLocation( "computercraftedu:turtleJunior_black", "inventory" ), | ||||||
| @@ -115,38 +101,11 @@ public class TileEntityTurtleRenderer extends TileEntitySpecialRenderer<TileTurt | |||||||
|         { |         { | ||||||
|             case Normal: |             case Normal: | ||||||
|             default: |             default: | ||||||
|             { |                 return colour != null ? COLOUR_TURTLE_MODEL : NORMAL_TURTLE_MODEL; | ||||||
|                 if( colour != null ) |  | ||||||
|                 { |  | ||||||
|                     return COLOUR_TURTLE_MODELS[ colour.ordinal() ]; |  | ||||||
|                 } |  | ||||||
|                 else |  | ||||||
|                 { |  | ||||||
|                     return NORMAL_TURTLE_MODEL; |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|             case Advanced: |             case Advanced: | ||||||
|             { |                 return colour != null ? COLOUR_TURTLE_MODEL : ADVANCED_TURTLE_MODEL; | ||||||
|                 if( colour != null ) |  | ||||||
|                 { |  | ||||||
|                     return COLOUR_TURTLE_MODELS[ colour.ordinal() ]; |  | ||||||
|                 } |  | ||||||
|                 else |  | ||||||
|                 { |  | ||||||
|                     return ADVANCED_TURTLE_MODEL; |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|             case Beginners: |             case Beginners: | ||||||
|             { |                 return colour != null ? BEGINNER_TURTLE_COLOUR_MODELS[ colour.ordinal() ] : BEGINNER_TURTLE_MODEL; | ||||||
|                 if( colour != null ) |  | ||||||
|                 { |  | ||||||
|                     return BEGINNER_TURTLE_COLOUR_MODELS[ colour.ordinal() ]; |  | ||||||
|                 } |  | ||||||
|                 else |  | ||||||
|                 { |  | ||||||
|                     return BEGINNER_TURTLE_MODEL; |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -216,7 +175,8 @@ public class TileEntityTurtleRenderer extends TileEntitySpecialRenderer<TileTurt | |||||||
|                 family = ComputerFamily.Normal; |                 family = ComputerFamily.Normal; | ||||||
|                 overlay = null; |                 overlay = null; | ||||||
|             } |             } | ||||||
|             renderModel( state, getTurtleModel( family, colour ) ); |  | ||||||
|  |             renderModel( state, getTurtleModel( family, colour ), colour == null ? null : new int[] { colour.getHex() } ); | ||||||
|  |  | ||||||
|             // Render the overlay |             // Render the overlay | ||||||
|             ModelResourceLocation overlayModel = getTurtleOverlayModel( |             ModelResourceLocation overlayModel = getTurtleOverlayModel( | ||||||
| @@ -231,7 +191,7 @@ public class TileEntityTurtleRenderer extends TileEntitySpecialRenderer<TileTurt | |||||||
|                 GlStateManager.blendFunc( GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA ); |                 GlStateManager.blendFunc( GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA ); | ||||||
|                 try |                 try | ||||||
|                 { |                 { | ||||||
|                     renderModel( state, overlayModel ); |                     renderModel( state, overlayModel, null ); | ||||||
|                 } |                 } | ||||||
|                 finally |                 finally | ||||||
|                 { |                 { | ||||||
| @@ -275,7 +235,7 @@ public class TileEntityTurtleRenderer extends TileEntitySpecialRenderer<TileTurt | |||||||
|                     } |                     } | ||||||
|                     if( pair.getLeft() != null ) |                     if( pair.getLeft() != null ) | ||||||
|                     { |                     { | ||||||
|                         renderModel( state, pair.getLeft() ); |                         renderModel( state, pair.getLeft(), null ); | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| @@ -286,35 +246,32 @@ public class TileEntityTurtleRenderer extends TileEntitySpecialRenderer<TileTurt | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void renderModel( IBlockState state, ModelResourceLocation modelLocation ) |     private void renderModel( IBlockState state, ModelResourceLocation modelLocation, int[] tints ) | ||||||
|     { |     { | ||||||
|         Minecraft mc = Minecraft.getMinecraft(); |         Minecraft mc = Minecraft.getMinecraft(); | ||||||
|         ModelManager modelManager = mc.getRenderItem().getItemModelMesher().getModelManager(); |         ModelManager modelManager = mc.getRenderItem().getItemModelMesher().getModelManager(); | ||||||
|         renderModel( state, modelManager.getModel( modelLocation ) ); |         renderModel( state, modelManager.getModel( modelLocation ), tints ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void renderModel( IBlockState state, IBakedModel model ) |     private void renderModel( IBlockState state, IBakedModel model, int[] tints ) | ||||||
|     { |     { | ||||||
|         Minecraft mc = Minecraft.getMinecraft(); |         Minecraft mc = Minecraft.getMinecraft(); | ||||||
|         Tessellator tessellator = Tessellator.getInstance(); |         Tessellator tessellator = Tessellator.getInstance(); | ||||||
|         mc.getTextureManager().bindTexture( TextureMap.LOCATION_BLOCKS_TEXTURE ); |         mc.getTextureManager().bindTexture( TextureMap.LOCATION_BLOCKS_TEXTURE ); | ||||||
|         renderQuads( tessellator, model.getQuads( state, null, 0 ) ); |         renderQuads( tessellator, model.getQuads( state, null, 0 ), tints ); | ||||||
|         for( EnumFacing facing : EnumFacing.VALUES ) |         for( EnumFacing facing : EnumFacing.VALUES ) | ||||||
|         { |         { | ||||||
|             renderQuads( tessellator, model.getQuads( state, facing, 0 ) ); |             renderQuads( tessellator, model.getQuads( state, facing, 0 ), tints ); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void renderQuads( Tessellator tessellator, List quads ) |     private void renderQuads( Tessellator tessellator, List<BakedQuad> quads, int[] tints ) | ||||||
|     { |     { | ||||||
|         int color = 0xFFFFFFFF; |  | ||||||
|         Iterator it = quads.iterator(); |  | ||||||
|         VertexBuffer buffer = tessellator.getBuffer(); |         VertexBuffer buffer = tessellator.getBuffer(); | ||||||
|         VertexFormat format = DefaultVertexFormats.ITEM; |         VertexFormat format = DefaultVertexFormats.ITEM; | ||||||
|         buffer.begin( GL11.GL_QUADS, format ); |         buffer.begin( GL11.GL_QUADS, format ); | ||||||
|         while( it.hasNext() ) |         for (BakedQuad quad : quads) | ||||||
|         { |         { | ||||||
|             BakedQuad quad = (BakedQuad)it.next(); |  | ||||||
|             VertexFormat quadFormat = quad.getFormat(); |             VertexFormat quadFormat = quad.getFormat(); | ||||||
|             if( quadFormat != format ) |             if( quadFormat != format ) | ||||||
|             { |             { | ||||||
| @@ -322,7 +279,15 @@ public class TileEntityTurtleRenderer extends TileEntitySpecialRenderer<TileTurt | |||||||
|                 format = quadFormat; |                 format = quadFormat; | ||||||
|                 buffer.begin( GL11.GL_QUADS, format ); |                 buffer.begin( GL11.GL_QUADS, format ); | ||||||
|             } |             } | ||||||
|             net.minecraftforge.client.model.pipeline.LightUtil.renderQuadColor( buffer, quad, color ); |  | ||||||
|  |             int colour = 0xFFFFFFFF; | ||||||
|  |             if( quad.hasTintIndex() && tints != null ) | ||||||
|  |             { | ||||||
|  |                 int index = quad.getTintIndex(); | ||||||
|  |                 if( index >= 0 && index < tints.length ) colour = tints[ index ] | 0xFF000000; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             LightUtil.renderQuadColor( buffer, quad, colour ); | ||||||
|         } |         } | ||||||
|         tessellator.draw(); |         tessellator.draw(); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -1,21 +1,18 @@ | |||||||
| package dan200.computercraft.client.render; | package dan200.computercraft.client.render; | ||||||
|  |  | ||||||
| import net.minecraft.block.state.IBlockState; | import net.minecraft.block.state.IBlockState; | ||||||
| import net.minecraft.client.renderer.block.model.*; | import net.minecraft.client.renderer.block.model.BakedQuad; | ||||||
|  | import net.minecraft.client.renderer.block.model.IBakedModel; | ||||||
|  | import net.minecraft.client.renderer.block.model.ItemCameraTransforms; | ||||||
|  | import net.minecraft.client.renderer.block.model.ItemOverrideList; | ||||||
| import net.minecraft.client.renderer.texture.TextureAtlasSprite; | import net.minecraft.client.renderer.texture.TextureAtlasSprite; | ||||||
| import net.minecraft.client.renderer.vertex.DefaultVertexFormats; |  | ||||||
| import net.minecraft.client.renderer.vertex.VertexFormat; | import net.minecraft.client.renderer.vertex.VertexFormat; | ||||||
| import net.minecraft.client.renderer.vertex.VertexFormatElement; | import net.minecraft.client.renderer.vertex.VertexFormatElement; | ||||||
| import net.minecraft.entity.EntityLivingBase; |  | ||||||
| import net.minecraft.item.Item; |  | ||||||
| import net.minecraft.item.ItemStack; |  | ||||||
| import net.minecraft.util.EnumFacing; | import net.minecraft.util.EnumFacing; | ||||||
| import net.minecraft.world.World; |  | ||||||
|  |  | ||||||
| import javax.vecmath.Matrix4f; | import javax.vecmath.Matrix4f; | ||||||
| import javax.vecmath.Point3f; | import javax.vecmath.Point3f; | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
| import java.util.Dictionary; |  | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  |  | ||||||
| public class TurtleMultiModel implements IBakedModel | public class TurtleMultiModel implements IBakedModel | ||||||
| @@ -49,7 +46,7 @@ public class TurtleMultiModel implements IBakedModel | |||||||
|         { |         { | ||||||
|             if( m_faceQuads[ side.ordinal() ] == null ) |             if( m_faceQuads[ side.ordinal() ] == null ) | ||||||
|             { |             { | ||||||
|                 List<BakedQuad> quads = new ArrayList<BakedQuad>(); |                 ArrayList<BakedQuad> quads = new ArrayList<BakedQuad>(); | ||||||
|                 if( m_overlayModel != null ) |                 if( m_overlayModel != null ) | ||||||
|                 { |                 { | ||||||
|                     quads.addAll( m_overlayModel.getQuads( state, side, rand ) ); |                     quads.addAll( m_overlayModel.getQuads( state, side, rand ) ); | ||||||
| @@ -62,6 +59,7 @@ public class TurtleMultiModel implements IBakedModel | |||||||
|                 { |                 { | ||||||
|                     quads.addAll( transformQuads( m_rightUpgradeModel.getQuads( state, side, rand ), m_rightUpgradeTransform ) ); |                     quads.addAll( transformQuads( m_rightUpgradeModel.getQuads( state, side, rand ), m_rightUpgradeTransform ) ); | ||||||
|                 } |                 } | ||||||
|  |                 quads.trimToSize(); | ||||||
|                 m_faceQuads[ side.ordinal() ] = quads; |                 m_faceQuads[ side.ordinal() ] = quads; | ||||||
|             } |             } | ||||||
|             return  m_faceQuads[ side.ordinal() ]; |             return  m_faceQuads[ side.ordinal() ]; | ||||||
| @@ -70,20 +68,22 @@ public class TurtleMultiModel implements IBakedModel | |||||||
|         { |         { | ||||||
|             if( m_generalQuads == null ) |             if( m_generalQuads == null ) | ||||||
|             { |             { | ||||||
|                 m_generalQuads = new ArrayList<BakedQuad>(); |                 ArrayList<BakedQuad> quads = new ArrayList<BakedQuad>(); | ||||||
|                 m_generalQuads.addAll( m_baseModel.getQuads( state, side, rand ) ); |                 quads.addAll( m_baseModel.getQuads( state, side, rand ) ); | ||||||
|                 if( m_overlayModel != null ) |                 if( m_overlayModel != null ) | ||||||
|                 { |                 { | ||||||
|                     m_generalQuads.addAll( m_overlayModel.getQuads( state, side, rand ) ); |                     quads.addAll( m_overlayModel.getQuads( state, side, rand ) ); | ||||||
|                 } |                 } | ||||||
|                 if( m_leftUpgradeModel != null ) |                 if( m_leftUpgradeModel != null ) | ||||||
|                 { |                 { | ||||||
|                     m_generalQuads.addAll( transformQuads( m_leftUpgradeModel.getQuads( state, side, rand ), m_leftUpgradeTransform ) ); |                     quads.addAll( transformQuads( m_leftUpgradeModel.getQuads( state, side, rand ), m_leftUpgradeTransform ) ); | ||||||
|                 } |                 } | ||||||
|                 if( m_rightUpgradeModel != null ) |                 if( m_rightUpgradeModel != null ) | ||||||
|                 { |                 { | ||||||
|                     m_generalQuads.addAll( transformQuads( m_rightUpgradeModel.getQuads( state, side, rand ), m_rightUpgradeTransform ) ); |                     quads.addAll( transformQuads( m_rightUpgradeModel.getQuads( state, side, rand ), m_rightUpgradeTransform ) ); | ||||||
|                 } |                 } | ||||||
|  |                 quads.trimToSize(); | ||||||
|  |                 m_generalQuads = quads; | ||||||
|             } |             } | ||||||
|             return m_generalQuads; |             return m_generalQuads; | ||||||
|         } |         } | ||||||
| @@ -147,7 +147,7 @@ public class TurtleMultiModel implements IBakedModel | |||||||
|     { |     { | ||||||
|         int[] vertexData = quad.getVertexData().clone(); |         int[] vertexData = quad.getVertexData().clone(); | ||||||
|         int offset = 0; |         int offset = 0; | ||||||
|         BakedQuad copy = new BakedQuad( vertexData, quad.getTintIndex(), quad.getFace(), quad.getSprite(), quad.shouldApplyDiffuseLighting(), quad.getFormat() ); |         BakedQuad copy = new BakedQuad( vertexData, -1, quad.getFace(), quad.getSprite(), quad.shouldApplyDiffuseLighting(), quad.getFormat() ); | ||||||
|         VertexFormat format = copy.getFormat(); |         VertexFormat format = copy.getFormat(); | ||||||
|         for( int i=0; i<format.getElementCount(); ++i ) // For each vertex element |         for( int i=0; i<format.getElementCount(); ++i ) // For each vertex element | ||||||
|         { |         { | ||||||
|   | |||||||
| @@ -34,7 +34,6 @@ public class BlockTurtle extends BlockComputerBase | |||||||
|     public static class Properties |     public static class Properties | ||||||
|     { |     { | ||||||
|         public static final PropertyDirection FACING = PropertyDirection.create( "facing", EnumFacing.Plane.HORIZONTAL ); |         public static final PropertyDirection FACING = PropertyDirection.create( "facing", EnumFacing.Plane.HORIZONTAL ); | ||||||
|         public static final PropertyEnum<BlockTurtleDyeVariant> DYE = PropertyEnum.<BlockTurtleDyeVariant>create( "dye", BlockTurtleDyeVariant.class ); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static BlockTurtle createTurtleBlock() |     public static BlockTurtle createTurtleBlock() | ||||||
| @@ -52,7 +51,6 @@ public class BlockTurtle extends BlockComputerBase | |||||||
|         setCreativeTab( ComputerCraft.mainCreativeTab ); |         setCreativeTab( ComputerCraft.mainCreativeTab ); | ||||||
|         setDefaultState( this.blockState.getBaseState() |         setDefaultState( this.blockState.getBaseState() | ||||||
|             .withProperty( Properties.FACING, EnumFacing.NORTH ) |             .withProperty( Properties.FACING, EnumFacing.NORTH ) | ||||||
|             .withProperty( Properties.DYE, BlockTurtleDyeVariant.None ) |  | ||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -77,10 +75,7 @@ public class BlockTurtle extends BlockComputerBase | |||||||
|     @Override |     @Override | ||||||
|     protected BlockStateContainer createBlockState() |     protected BlockStateContainer createBlockState() | ||||||
|     { |     { | ||||||
|         return new BlockStateContainer(this, new IProperty[] { |         return new BlockStateContainer(this, Properties.FACING ); | ||||||
|             Properties.FACING, |  | ||||||
|             Properties.DYE |  | ||||||
|         }); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
| @@ -98,18 +93,7 @@ public class BlockTurtle extends BlockComputerBase | |||||||
|     @Override |     @Override | ||||||
|     public IBlockState getActualState( IBlockState state, IBlockAccess world, BlockPos pos ) |     public IBlockState getActualState( IBlockState state, IBlockAccess world, BlockPos pos ) | ||||||
|     { |     { | ||||||
|         state = state.withProperty( Properties.FACING, getDirection( world, pos ) ); |         return state.withProperty( Properties.FACING, getDirection( world, pos ) ); | ||||||
|         TileEntity tile = world.getTileEntity( pos ); |  | ||||||
|         if( tile != null && tile instanceof ITurtleTile ) |  | ||||||
|         { |  | ||||||
|             ITurtleTile turtle = (ITurtleTile)tile; |  | ||||||
|             state = state.withProperty( Properties.DYE, BlockTurtleDyeVariant.fromColour( turtle.getColour() ) ); |  | ||||||
|         } |  | ||||||
|         else |  | ||||||
|         { |  | ||||||
|             state = state.withProperty( Properties.DYE, BlockTurtleDyeVariant.None ); |  | ||||||
|         } |  | ||||||
|         return state; |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|   | |||||||
| @@ -1,84 +0,0 @@ | |||||||
| /** |  | ||||||
|  * This file is part of ComputerCraft - http://www.computercraft.info |  | ||||||
|  * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. |  | ||||||
|  * Send enquiries to dratcliffe@gmail.com |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| package dan200.computercraft.shared.turtle.blocks; |  | ||||||
|  |  | ||||||
| import dan200.computercraft.shared.util.Colour; |  | ||||||
| import net.minecraft.util.IStringSerializable; |  | ||||||
|  |  | ||||||
| public enum BlockTurtleDyeVariant implements IStringSerializable |  | ||||||
| { |  | ||||||
|     None( "none", null ), |  | ||||||
|     Black( "black", Colour.Black ), |  | ||||||
|     Red( "red", Colour.Red ), |  | ||||||
|     Green( "green", Colour.Green ), |  | ||||||
|     Brown( "brown", Colour.Brown ), |  | ||||||
|     Blue( "blue", Colour.Blue ), |  | ||||||
|     Purple( "purple", Colour.Purple ), |  | ||||||
|     Cyan( "cyan", Colour.Cyan ), |  | ||||||
|     LightGrey( "light_grey", Colour.LightGrey ), |  | ||||||
|     Grey( "grey", Colour.Grey ), |  | ||||||
|     Pink( "pink", Colour.Pink ), |  | ||||||
|     Lime( "lime", Colour.Lime ), |  | ||||||
|     Yellow( "yellow", Colour.Yellow ), |  | ||||||
|     LightBlue( "light_blue", Colour.LightBlue ), |  | ||||||
|     Magenta( "magenta", Colour.Magenta ), |  | ||||||
|     Orange( "orange", Colour.Orange ), |  | ||||||
|     White( "white", Colour.Orange ); |  | ||||||
|  |  | ||||||
|     public static BlockTurtleDyeVariant fromColour( Colour colour ) |  | ||||||
|     { |  | ||||||
|         if( colour != null ) |  | ||||||
|         { |  | ||||||
|             switch( colour ) |  | ||||||
|             { |  | ||||||
|                 case Black: return Black; |  | ||||||
|                 case Red: return Red; |  | ||||||
|                 case Green: return Green; |  | ||||||
|                 case Brown: return Brown; |  | ||||||
|                 case Blue: return Blue; |  | ||||||
|                 case Purple: return Purple; |  | ||||||
|                 case Cyan: return Cyan; |  | ||||||
|                 case LightGrey: return LightGrey; |  | ||||||
|                 case Grey: return Grey; |  | ||||||
|                 case Pink: return Pink; |  | ||||||
|                 case Lime: return Lime; |  | ||||||
|                 case Yellow: return Yellow; |  | ||||||
|                 case LightBlue: return LightBlue; |  | ||||||
|                 case Magenta: return Magenta; |  | ||||||
|                 case Orange: return Orange; |  | ||||||
|                 case White: return White; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         return None; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private String m_name; |  | ||||||
|     private Colour m_colour; |  | ||||||
|  |  | ||||||
|     private BlockTurtleDyeVariant( String name, Colour colour ) |  | ||||||
|     { |  | ||||||
|         m_name = name; |  | ||||||
|         m_colour = colour; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public String getName() |  | ||||||
|     { |  | ||||||
|         return m_name; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public Colour getColour() |  | ||||||
|     { |  | ||||||
|         return m_colour; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public String toString() |  | ||||||
|     { |  | ||||||
|         return getName(); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,72 +1,8 @@ | |||||||
| { | { | ||||||
|     "variants": { |     "variants": { | ||||||
|         "dye=none,facing=north": { "model": "computercraft:turtle" }, |         "facing=north": { "model": "computercraft:turtle" }, | ||||||
|         "dye=none,facing=south": { "model": "computercraft:turtle", "y": 180 }, |         "facing=south": { "model": "computercraft:turtle", "y": 180 }, | ||||||
|         "dye=none,facing=west": { "model": "computercraft:turtle", "y": 270 }, |         "facing=west": { "model": "computercraft:turtle", "y": 270 }, | ||||||
|         "dye=none,facing=east": { "model": "computercraft:turtle", "y": 90 }, |         "facing=east": { "model": "computercraft:turtle", "y": 90 } | ||||||
|         "dye=black,facing=north": { "model": "computercraft:turtle_black" }, |  | ||||||
|         "dye=black,facing=south": { "model": "computercraft:turtle_black", "y": 180 }, |  | ||||||
|         "dye=black,facing=west": { "model": "computercraft:turtle_black", "y": 270 }, |  | ||||||
|         "dye=black,facing=east": { "model": "computercraft:turtle_black", "y": 90 }, |  | ||||||
|         "dye=blue,facing=north": { "model": "computercraft:turtle_blue" }, |  | ||||||
|         "dye=blue,facing=south": { "model": "computercraft:turtle_blue", "y": 180 }, |  | ||||||
|         "dye=blue,facing=west": { "model": "computercraft:turtle_blue", "y": 270 }, |  | ||||||
|         "dye=blue,facing=east": { "model": "computercraft:turtle_blue", "y": 90 }, |  | ||||||
|         "dye=brown,facing=north": { "model": "computercraft:turtle_brown" }, |  | ||||||
|         "dye=brown,facing=south": { "model": "computercraft:turtle_brown", "y": 180 }, |  | ||||||
|         "dye=brown,facing=west": { "model": "computercraft:turtle_brown", "y": 270 }, |  | ||||||
|         "dye=brown,facing=east": { "model": "computercraft:turtle_brown", "y": 90 }, |  | ||||||
|         "dye=cyan,facing=north": { "model": "computercraft:turtle_cyan" }, |  | ||||||
|         "dye=cyan,facing=south": { "model": "computercraft:turtle_cyan", "y": 180 }, |  | ||||||
|         "dye=cyan,facing=west": { "model": "computercraft:turtle_cyan", "y": 270 }, |  | ||||||
|         "dye=cyan,facing=east": { "model": "computercraft:turtle_cyan", "y": 90 }, |  | ||||||
|         "dye=green,facing=north": { "model": "computercraft:turtle_green" }, |  | ||||||
|         "dye=green,facing=south": { "model": "computercraft:turtle_green", "y": 180 }, |  | ||||||
|         "dye=green,facing=west": { "model": "computercraft:turtle_green", "y": 270 }, |  | ||||||
|         "dye=green,facing=east": { "model": "computercraft:turtle_green", "y": 90 }, |  | ||||||
|         "dye=grey,facing=north": { "model": "computercraft:turtle_grey" }, |  | ||||||
|         "dye=grey,facing=south": { "model": "computercraft:turtle_grey", "y": 180 }, |  | ||||||
|         "dye=grey,facing=west": { "model": "computercraft:turtle_grey", "y": 270 }, |  | ||||||
|         "dye=grey,facing=east": { "model": "computercraft:turtle_grey", "y": 90 }, |  | ||||||
|         "dye=light_blue,facing=north": { "model": "computercraft:turtle_lightBlue" }, |  | ||||||
|         "dye=light_blue,facing=south": { "model": "computercraft:turtle_lightBlue", "y": 180 }, |  | ||||||
|         "dye=light_blue,facing=west": { "model": "computercraft:turtle_lightBlue", "y": 270 }, |  | ||||||
|         "dye=light_blue,facing=east": { "model": "computercraft:turtle_lightBlue", "y": 90 }, |  | ||||||
|         "dye=light_grey,facing=north": { "model": "computercraft:turtle_lightGrey" }, |  | ||||||
|         "dye=light_grey,facing=south": { "model": "computercraft:turtle_lightGrey", "y": 180 }, |  | ||||||
|         "dye=light_grey,facing=west": { "model": "computercraft:turtle_lightGrey", "y": 270 }, |  | ||||||
|         "dye=light_grey,facing=east": { "model": "computercraft:turtle_lightGrey", "y": 90 }, |  | ||||||
|         "dye=lime,facing=north": { "model": "computercraft:turtle_lime" }, |  | ||||||
|         "dye=lime,facing=south": { "model": "computercraft:turtle_lime", "y": 180 }, |  | ||||||
|         "dye=lime,facing=west": { "model": "computercraft:turtle_lime", "y": 270 }, |  | ||||||
|         "dye=lime,facing=east": { "model": "computercraft:turtle_lime", "y": 90 }, |  | ||||||
|         "dye=magenta,facing=north": { "model": "computercraft:turtle_magenta" }, |  | ||||||
|         "dye=magenta,facing=south": { "model": "computercraft:turtle_magenta", "y": 180 }, |  | ||||||
|         "dye=magenta,facing=west": { "model": "computercraft:turtle_magenta", "y": 270 }, |  | ||||||
|         "dye=magenta,facing=east": { "model": "computercraft:turtle_magenta", "y": 90 }, |  | ||||||
|         "dye=orange,facing=north": { "model": "computercraft:turtle_orange" }, |  | ||||||
|         "dye=orange,facing=south": { "model": "computercraft:turtle_orange", "y": 180 }, |  | ||||||
|         "dye=orange,facing=west": { "model": "computercraft:turtle_orange", "y": 270 }, |  | ||||||
|         "dye=orange,facing=east": { "model": "computercraft:turtle_orange", "y": 90 }, |  | ||||||
|         "dye=pink,facing=north": { "model": "computercraft:turtle_pink" }, |  | ||||||
|         "dye=pink,facing=south": { "model": "computercraft:turtle_pink", "y": 180 }, |  | ||||||
|         "dye=pink,facing=west": { "model": "computercraft:turtle_pink", "y": 270 }, |  | ||||||
|         "dye=pink,facing=east": { "model": "computercraft:turtle_pink", "y": 90 }, |  | ||||||
|         "dye=purple,facing=north": { "model": "computercraft:turtle_purple" }, |  | ||||||
|         "dye=purple,facing=south": { "model": "computercraft:turtle_purple", "y": 180 }, |  | ||||||
|         "dye=purple,facing=west": { "model": "computercraft:turtle_purple", "y": 270 }, |  | ||||||
|         "dye=purple,facing=east": { "model": "computercraft:turtle_purple", "y": 90 }, |  | ||||||
|         "dye=red,facing=north": { "model": "computercraft:turtle_red" }, |  | ||||||
|         "dye=red,facing=south": { "model": "computercraft:turtle_red", "y": 180 }, |  | ||||||
|         "dye=red,facing=west": { "model": "computercraft:turtle_red", "y": 270 }, |  | ||||||
|         "dye=red,facing=east": { "model": "computercraft:turtle_red", "y": 90 }, |  | ||||||
|         "dye=white,facing=north": { "model": "computercraft:turtle_white" }, |  | ||||||
|         "dye=white,facing=south": { "model": "computercraft:turtle_white", "y": 180 }, |  | ||||||
|         "dye=white,facing=west": { "model": "computercraft:turtle_white", "y": 270 }, |  | ||||||
|         "dye=white,facing=east": { "model": "computercraft:turtle_white", "y": 90 }, |  | ||||||
|         "dye=yellow,facing=north": { "model": "computercraft:turtle_yellow" }, |  | ||||||
|         "dye=yellow,facing=south": { "model": "computercraft:turtle_yellow", "y": 180 }, |  | ||||||
|         "dye=yellow,facing=west": { "model": "computercraft:turtle_yellow", "y": 270 }, |  | ||||||
|         "dye=yellow,facing=east": { "model": "computercraft:turtle_yellow", "y": 90 } |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,72 +1,8 @@ | |||||||
| { | { | ||||||
|     "variants": { |     "variants": { | ||||||
|         "dye=none,facing=north": { "model": "computercraft:advanced_turtle" }, |         "facing=north": { "model": "computercraft:advanced_turtle" }, | ||||||
|         "dye=none,facing=south": { "model": "computercraft:advanced_turtle", "y": 180 }, |         "facing=south": { "model": "computercraft:advanced_turtle", "y": 180 }, | ||||||
|         "dye=none,facing=west": { "model": "computercraft:advanced_turtle", "y": 270 }, |         "facing=west": { "model": "computercraft:advanced_turtle", "y": 270 }, | ||||||
|         "dye=none,facing=east": { "model": "computercraft:advanced_turtle", "y": 90 }, |         "facing=east": { "model": "computercraft:advanced_turtle", "y": 90 } | ||||||
|         "dye=black,facing=north": { "model": "computercraft:turtle_black" }, |  | ||||||
|         "dye=black,facing=south": { "model": "computercraft:turtle_black", "y": 180 }, |  | ||||||
|         "dye=black,facing=west": { "model": "computercraft:turtle_black", "y": 270 }, |  | ||||||
|         "dye=black,facing=east": { "model": "computercraft:turtle_black", "y": 90 }, |  | ||||||
|         "dye=blue,facing=north": { "model": "computercraft:turtle_blue" }, |  | ||||||
|         "dye=blue,facing=south": { "model": "computercraft:turtle_blue", "y": 180 }, |  | ||||||
|         "dye=blue,facing=west": { "model": "computercraft:turtle_blue", "y": 270 }, |  | ||||||
|         "dye=blue,facing=east": { "model": "computercraft:turtle_blue", "y": 90 }, |  | ||||||
|         "dye=brown,facing=north": { "model": "computercraft:turtle_brown" }, |  | ||||||
|         "dye=brown,facing=south": { "model": "computercraft:turtle_brown", "y": 180 }, |  | ||||||
|         "dye=brown,facing=west": { "model": "computercraft:turtle_brown", "y": 270 }, |  | ||||||
|         "dye=brown,facing=east": { "model": "computercraft:turtle_brown", "y": 90 }, |  | ||||||
|         "dye=cyan,facing=north": { "model": "computercraft:turtle_cyan" }, |  | ||||||
|         "dye=cyan,facing=south": { "model": "computercraft:turtle_cyan", "y": 180 }, |  | ||||||
|         "dye=cyan,facing=west": { "model": "computercraft:turtle_cyan", "y": 270 }, |  | ||||||
|         "dye=cyan,facing=east": { "model": "computercraft:turtle_cyan", "y": 90 }, |  | ||||||
|         "dye=green,facing=north": { "model": "computercraft:turtle_green" }, |  | ||||||
|         "dye=green,facing=south": { "model": "computercraft:turtle_green", "y": 180 }, |  | ||||||
|         "dye=green,facing=west": { "model": "computercraft:turtle_green", "y": 270 }, |  | ||||||
|         "dye=green,facing=east": { "model": "computercraft:turtle_green", "y": 90 }, |  | ||||||
|         "dye=grey,facing=north": { "model": "computercraft:turtle_grey" }, |  | ||||||
|         "dye=grey,facing=south": { "model": "computercraft:turtle_grey", "y": 180 }, |  | ||||||
|         "dye=grey,facing=west": { "model": "computercraft:turtle_grey", "y": 270 }, |  | ||||||
|         "dye=grey,facing=east": { "model": "computercraft:turtle_grey", "y": 90 }, |  | ||||||
|         "dye=light_blue,facing=north": { "model": "computercraft:turtle_lightBlue" }, |  | ||||||
|         "dye=light_blue,facing=south": { "model": "computercraft:turtle_lightBlue", "y": 180 }, |  | ||||||
|         "dye=light_blue,facing=west": { "model": "computercraft:turtle_lightBlue", "y": 270 }, |  | ||||||
|         "dye=light_blue,facing=east": { "model": "computercraft:turtle_lightBlue", "y": 90 }, |  | ||||||
|         "dye=light_grey,facing=north": { "model": "computercraft:turtle_lightGrey" }, |  | ||||||
|         "dye=light_grey,facing=south": { "model": "computercraft:turtle_lightGrey", "y": 180 }, |  | ||||||
|         "dye=light_grey,facing=west": { "model": "computercraft:turtle_lightGrey", "y": 270 }, |  | ||||||
|         "dye=light_grey,facing=east": { "model": "computercraft:turtle_lightGrey", "y": 90 }, |  | ||||||
|         "dye=lime,facing=north": { "model": "computercraft:turtle_lime" }, |  | ||||||
|         "dye=lime,facing=south": { "model": "computercraft:turtle_lime", "y": 180 }, |  | ||||||
|         "dye=lime,facing=west": { "model": "computercraft:turtle_lime", "y": 270 }, |  | ||||||
|         "dye=lime,facing=east": { "model": "computercraft:turtle_lime", "y": 90 }, |  | ||||||
|         "dye=magenta,facing=north": { "model": "computercraft:turtle_magenta" }, |  | ||||||
|         "dye=magenta,facing=south": { "model": "computercraft:turtle_magenta", "y": 180 }, |  | ||||||
|         "dye=magenta,facing=west": { "model": "computercraft:turtle_magenta", "y": 270 }, |  | ||||||
|         "dye=magenta,facing=east": { "model": "computercraft:turtle_magenta", "y": 90 }, |  | ||||||
|         "dye=orange,facing=north": { "model": "computercraft:turtle_orange" }, |  | ||||||
|         "dye=orange,facing=south": { "model": "computercraft:turtle_orange", "y": 180 }, |  | ||||||
|         "dye=orange,facing=west": { "model": "computercraft:turtle_orange", "y": 270 }, |  | ||||||
|         "dye=orange,facing=east": { "model": "computercraft:turtle_orange", "y": 90 }, |  | ||||||
|         "dye=pink,facing=north": { "model": "computercraft:turtle_pink" }, |  | ||||||
|         "dye=pink,facing=south": { "model": "computercraft:turtle_pink", "y": 180 }, |  | ||||||
|         "dye=pink,facing=west": { "model": "computercraft:turtle_pink", "y": 270 }, |  | ||||||
|         "dye=pink,facing=east": { "model": "computercraft:turtle_pink", "y": 90 }, |  | ||||||
|         "dye=purple,facing=north": { "model": "computercraft:turtle_purple" }, |  | ||||||
|         "dye=purple,facing=south": { "model": "computercraft:turtle_purple", "y": 180 }, |  | ||||||
|         "dye=purple,facing=west": { "model": "computercraft:turtle_purple", "y": 270 }, |  | ||||||
|         "dye=purple,facing=east": { "model": "computercraft:turtle_purple", "y": 90 }, |  | ||||||
|         "dye=red,facing=north": { "model": "computercraft:turtle_red" }, |  | ||||||
|         "dye=red,facing=south": { "model": "computercraft:turtle_red", "y": 180 }, |  | ||||||
|         "dye=red,facing=west": { "model": "computercraft:turtle_red", "y": 270 }, |  | ||||||
|         "dye=red,facing=east": { "model": "computercraft:turtle_red", "y": 90 }, |  | ||||||
|         "dye=white,facing=north": { "model": "computercraft:turtle_white" }, |  | ||||||
|         "dye=white,facing=south": { "model": "computercraft:turtle_white", "y": 180 }, |  | ||||||
|         "dye=white,facing=west": { "model": "computercraft:turtle_white", "y": 270 }, |  | ||||||
|         "dye=white,facing=east": { "model": "computercraft:turtle_white", "y": 90 }, |  | ||||||
|         "dye=yellow,facing=north": { "model": "computercraft:turtle_yellow" }, |  | ||||||
|         "dye=yellow,facing=south": { "model": "computercraft:turtle_yellow", "y": 180 }, |  | ||||||
|         "dye=yellow,facing=west": { "model": "computercraft:turtle_yellow", "y": 270 }, |  | ||||||
|         "dye=yellow,facing=east": { "model": "computercraft:turtle_yellow", "y": 90 } |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,72 +1,8 @@ | |||||||
| { | { | ||||||
|     "variants": { |     "variants": { | ||||||
|         "dye=none,facing=north": { "model": "computercraft:turtle" }, |         "facing=north": { "model": "computercraft:turtle" }, | ||||||
|         "dye=none,facing=south": { "model": "computercraft:turtle", "y": 180 }, |         "facing=south": { "model": "computercraft:turtle", "y": 180 }, | ||||||
|         "dye=none,facing=west": { "model": "computercraft:turtle", "y": 270 }, |         "facing=west": { "model": "computercraft:turtle", "y": 270 }, | ||||||
|         "dye=none,facing=east": { "model": "computercraft:turtle", "y": 90 }, |         "facing=east": { "model": "computercraft:turtle", "y": 90 } | ||||||
|         "dye=black,facing=north": { "model": "computercraft:turtle_black" }, |  | ||||||
|         "dye=black,facing=south": { "model": "computercraft:turtle_black", "y": 180 }, |  | ||||||
|         "dye=black,facing=west": { "model": "computercraft:turtle_black", "y": 270 }, |  | ||||||
|         "dye=black,facing=east": { "model": "computercraft:turtle_black", "y": 90 }, |  | ||||||
|         "dye=blue,facing=north": { "model": "computercraft:turtle_blue" }, |  | ||||||
|         "dye=blue,facing=south": { "model": "computercraft:turtle_blue", "y": 180 }, |  | ||||||
|         "dye=blue,facing=west": { "model": "computercraft:turtle_blue", "y": 270 }, |  | ||||||
|         "dye=blue,facing=east": { "model": "computercraft:turtle_blue", "y": 90 }, |  | ||||||
|         "dye=brown,facing=north": { "model": "computercraft:turtle_brown" }, |  | ||||||
|         "dye=brown,facing=south": { "model": "computercraft:turtle_brown", "y": 180 }, |  | ||||||
|         "dye=brown,facing=west": { "model": "computercraft:turtle_brown", "y": 270 }, |  | ||||||
|         "dye=brown,facing=east": { "model": "computercraft:turtle_brown", "y": 90 }, |  | ||||||
|         "dye=cyan,facing=north": { "model": "computercraft:turtle_cyan" }, |  | ||||||
|         "dye=cyan,facing=south": { "model": "computercraft:turtle_cyan", "y": 180 }, |  | ||||||
|         "dye=cyan,facing=west": { "model": "computercraft:turtle_cyan", "y": 270 }, |  | ||||||
|         "dye=cyan,facing=east": { "model": "computercraft:turtle_cyan", "y": 90 }, |  | ||||||
|         "dye=green,facing=north": { "model": "computercraft:turtle_green" }, |  | ||||||
|         "dye=green,facing=south": { "model": "computercraft:turtle_green", "y": 180 }, |  | ||||||
|         "dye=green,facing=west": { "model": "computercraft:turtle_green", "y": 270 }, |  | ||||||
|         "dye=green,facing=east": { "model": "computercraft:turtle_green", "y": 90 }, |  | ||||||
|         "dye=grey,facing=north": { "model": "computercraft:turtle_grey" }, |  | ||||||
|         "dye=grey,facing=south": { "model": "computercraft:turtle_grey", "y": 180 }, |  | ||||||
|         "dye=grey,facing=west": { "model": "computercraft:turtle_grey", "y": 270 }, |  | ||||||
|         "dye=grey,facing=east": { "model": "computercraft:turtle_grey", "y": 90 }, |  | ||||||
|         "dye=light_blue,facing=north": { "model": "computercraft:turtle_lightBlue" }, |  | ||||||
|         "dye=light_blue,facing=south": { "model": "computercraft:turtle_lightBlue", "y": 180 }, |  | ||||||
|         "dye=light_blue,facing=west": { "model": "computercraft:turtle_lightBlue", "y": 270 }, |  | ||||||
|         "dye=light_blue,facing=east": { "model": "computercraft:turtle_lightBlue", "y": 90 }, |  | ||||||
|         "dye=light_grey,facing=north": { "model": "computercraft:turtle_lightGrey" }, |  | ||||||
|         "dye=light_grey,facing=south": { "model": "computercraft:turtle_lightGrey", "y": 180 }, |  | ||||||
|         "dye=light_grey,facing=west": { "model": "computercraft:turtle_lightGrey", "y": 270 }, |  | ||||||
|         "dye=light_grey,facing=east": { "model": "computercraft:turtle_lightGrey", "y": 90 }, |  | ||||||
|         "dye=lime,facing=north": { "model": "computercraft:turtle_lime" }, |  | ||||||
|         "dye=lime,facing=south": { "model": "computercraft:turtle_lime", "y": 180 }, |  | ||||||
|         "dye=lime,facing=west": { "model": "computercraft:turtle_lime", "y": 270 }, |  | ||||||
|         "dye=lime,facing=east": { "model": "computercraft:turtle_lime", "y": 90 }, |  | ||||||
|         "dye=magenta,facing=north": { "model": "computercraft:turtle_magenta" }, |  | ||||||
|         "dye=magenta,facing=south": { "model": "computercraft:turtle_magenta", "y": 180 }, |  | ||||||
|         "dye=magenta,facing=west": { "model": "computercraft:turtle_magenta", "y": 270 }, |  | ||||||
|         "dye=magenta,facing=east": { "model": "computercraft:turtle_magenta", "y": 90 }, |  | ||||||
|         "dye=orange,facing=north": { "model": "computercraft:turtle_orange" }, |  | ||||||
|         "dye=orange,facing=south": { "model": "computercraft:turtle_orange", "y": 180 }, |  | ||||||
|         "dye=orange,facing=west": { "model": "computercraft:turtle_orange", "y": 270 }, |  | ||||||
|         "dye=orange,facing=east": { "model": "computercraft:turtle_orange", "y": 90 }, |  | ||||||
|         "dye=pink,facing=north": { "model": "computercraft:turtle_pink" }, |  | ||||||
|         "dye=pink,facing=south": { "model": "computercraft:turtle_pink", "y": 180 }, |  | ||||||
|         "dye=pink,facing=west": { "model": "computercraft:turtle_pink", "y": 270 }, |  | ||||||
|         "dye=pink,facing=east": { "model": "computercraft:turtle_pink", "y": 90 }, |  | ||||||
|         "dye=purple,facing=north": { "model": "computercraft:turtle_purple" }, |  | ||||||
|         "dye=purple,facing=south": { "model": "computercraft:turtle_purple", "y": 180 }, |  | ||||||
|         "dye=purple,facing=west": { "model": "computercraft:turtle_purple", "y": 270 }, |  | ||||||
|         "dye=purple,facing=east": { "model": "computercraft:turtle_purple", "y": 90 }, |  | ||||||
|         "dye=red,facing=north": { "model": "computercraft:turtle_red" }, |  | ||||||
|         "dye=red,facing=south": { "model": "computercraft:turtle_red", "y": 180 }, |  | ||||||
|         "dye=red,facing=west": { "model": "computercraft:turtle_red", "y": 270 }, |  | ||||||
|         "dye=red,facing=east": { "model": "computercraft:turtle_red", "y": 90 }, |  | ||||||
|         "dye=white,facing=north": { "model": "computercraft:turtle_white" }, |  | ||||||
|         "dye=white,facing=south": { "model": "computercraft:turtle_white", "y": 180 }, |  | ||||||
|         "dye=white,facing=west": { "model": "computercraft:turtle_white", "y": 270 }, |  | ||||||
|         "dye=white,facing=east": { "model": "computercraft:turtle_white", "y": 90 }, |  | ||||||
|         "dye=yellow,facing=north": { "model": "computercraft:turtle_yellow" }, |  | ||||||
|         "dye=yellow,facing=south": { "model": "computercraft:turtle_yellow", "y": 180 }, |  | ||||||
|         "dye=yellow,facing=west": { "model": "computercraft:turtle_yellow", "y": 270 }, |  | ||||||
|         "dye=yellow,facing=east": { "model": "computercraft:turtle_yellow", "y": 90 } |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,6 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_base", |  | ||||||
|     "textures": { |  | ||||||
|         "texture": "computercraft:blocks/turtle_black" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_base", |  | ||||||
|     "textures": { |  | ||||||
|         "texture": "computercraft:blocks/turtle_blue" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_base", |  | ||||||
|     "textures": { |  | ||||||
|         "texture": "computercraft:blocks/turtle_brown" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_base", |  | ||||||
|     "textures": { |  | ||||||
|         "texture": "computercraft:blocks/turtle_cyan" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_base", |  | ||||||
|     "textures": { |  | ||||||
|         "texture": "computercraft:blocks/turtle_green" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_base", |  | ||||||
|     "textures": { |  | ||||||
|         "texture": "computercraft:blocks/turtle_grey" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_base", |  | ||||||
|     "textures": { |  | ||||||
|         "texture": "computercraft:blocks/turtle_lightBlue" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_base", |  | ||||||
|     "textures": { |  | ||||||
|         "texture": "computercraft:blocks/turtle_lightGrey" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_base", |  | ||||||
|     "textures": { |  | ||||||
|         "texture": "computercraft:blocks/turtle_lime" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_base", |  | ||||||
|     "textures": { |  | ||||||
|         "texture": "computercraft:blocks/turtle_magenta" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_base", |  | ||||||
|     "textures": { |  | ||||||
|         "texture": "computercraft:blocks/turtle_orange" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_base", |  | ||||||
|     "textures": { |  | ||||||
|         "texture": "computercraft:blocks/turtle_pink" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_base", |  | ||||||
|     "textures": { |  | ||||||
|         "texture": "computercraft:blocks/turtle_purple" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_base", |  | ||||||
|     "textures": { |  | ||||||
|         "texture": "computercraft:blocks/turtle_red" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -2,5 +2,53 @@ | |||||||
|     "parent": "computercraft:block/turtle_base", |     "parent": "computercraft:block/turtle_base", | ||||||
|     "textures": { |     "textures": { | ||||||
|         "texture": "computercraft:blocks/turtle_white" |         "texture": "computercraft:blocks/turtle_white" | ||||||
|     } |     }, | ||||||
|  |     "elements": [ | ||||||
|  |         { | ||||||
|  |             "from": [ 2, 2, 2 ], | ||||||
|  |             "to": [ 14, 14, 13 ], | ||||||
|  |             "faces": { | ||||||
|  |                 "down":  { "uv": [ 2.75, 0, 5.75, 2.75 ], "texture": "#texture" }, | ||||||
|  |                 "up":    { "uv": [ 5.75, 0, 8.75, 2.75 ], "texture": "#texture" }, | ||||||
|  |                 "north": { "uv": [ 8.5, 5.75, 11.5, 2.75 ], "texture": "#texture" }, | ||||||
|  |                 "south": { "uv": [ 2.75, 5.75, 5.75, 2.75 ], "texture": "#texture" }, | ||||||
|  |                 "west":  { "uv": [ 0, 5.75, 2.75, 2.75 ], "texture": "#texture" }, | ||||||
|  |                 "east":  { "uv": [ 5.75, 5.75, 8.5, 2.75 ], "texture": "#texture" } | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "from": [ 3, 6, 13 ], | ||||||
|  |             "to": [ 13, 13, 15 ], | ||||||
|  |             "faces": { | ||||||
|  |                 "down":  { "uv": [ 9.25, 0, 11.75, 0.5 ], "texture": "#texture" }, | ||||||
|  |                 "up":    { "uv": [ 11.75, 0, 14.25, 0.5 ], "texture": "#texture" }, | ||||||
|  |                 "south": { "uv": [ 9.25, 2.25, 11.75, 0.5  ], "texture": "#texture" }, | ||||||
|  |                 "west":  { "uv": [ 8.75, 2.25, 9.25, 0.5 ], "texture": "#texture" }, | ||||||
|  |                 "east":  { "uv": [ 11.75, 2.25, 12.25, 0.5 ], "texture": "#texture" } | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "from": [ 2, 2, 2 ], | ||||||
|  |             "to": [ 14, 14, 13 ], | ||||||
|  |             "faces": { | ||||||
|  |                 "down":  { "uv": [ 2.75, 5.75, 5.75, 8.5 ], "texture": "#texture", "tintindex":0 }, | ||||||
|  |                 "up":    { "uv": [ 5.75, 5.75, 8.75, 8.5 ], "texture": "#texture", "tintindex":0 }, | ||||||
|  |                 "north": { "uv": [ 8.5, 11.5, 11.5, 8.5 ], "texture": "#texture", "tintindex":0 }, | ||||||
|  |                 "south": { "uv": [ 2.75, 11.5, 5.75, 8.5 ], "texture": "#texture", "tintindex":0 }, | ||||||
|  |                 "west":  { "uv": [ 0, 11.5, 2.75, 8.5 ], "texture": "#texture", "tintindex":0 }, | ||||||
|  |                 "east":  { "uv": [ 5.75, 11.5, 8.5, 8.555 ], "texture": "#texture", "tintindex":0 } | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "from": [ 3, 6, 13 ], | ||||||
|  |             "to": [ 13, 13, 15 ], | ||||||
|  |             "faces": { | ||||||
|  |                 "down":  { "uv": [ 9.25, 5.75, 11.75, 6.25 ], "texture": "#texture", "tintindex":0 }, | ||||||
|  |                 "up":    { "uv": [ 11.75, 5.75, 14.25, 6.25 ], "texture": "#texture", "tintindex":0 }, | ||||||
|  |                 "south": { "uv": [ 9.25, 8, 11.75, 6.25  ], "texture": "#texture", "tintindex":0 }, | ||||||
|  |                 "west":  { "uv": [ 8.75, 8, 9.25, 6.25 ], "texture": "#texture", "tintindex":0 }, | ||||||
|  |                 "east":  { "uv": [ 11.75, 8, 12.25, 6.25 ], "texture": "#texture", "tintindex":0 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     ] | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,6 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_base", |  | ||||||
|     "textures": { |  | ||||||
|         "texture": "computercraft:blocks/turtle_yellow" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,3 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_black" |  | ||||||
| } |  | ||||||
| @@ -1,3 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_blue" |  | ||||||
| } |  | ||||||
| @@ -1,3 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_brown" |  | ||||||
| } |  | ||||||
| @@ -1,3 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_cyan" |  | ||||||
| } |  | ||||||
| @@ -1,3 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_green" |  | ||||||
| } |  | ||||||
| @@ -1,3 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_grey" |  | ||||||
| } |  | ||||||
| @@ -1,3 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_lightBlue" |  | ||||||
| } |  | ||||||
| @@ -1,3 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_lightGrey" |  | ||||||
| } |  | ||||||
| @@ -1,3 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_lime" |  | ||||||
| } |  | ||||||
| @@ -1,3 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_magenta" |  | ||||||
| } |  | ||||||
| @@ -1,3 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_orange" |  | ||||||
| } |  | ||||||
| @@ -1,3 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_pink" |  | ||||||
| } |  | ||||||
| @@ -1,3 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_purple" |  | ||||||
| } |  | ||||||
| @@ -1,3 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_red" |  | ||||||
| } |  | ||||||
| @@ -1,3 +0,0 @@ | |||||||
| { |  | ||||||
|     "parent": "computercraft:block/turtle_yellow" |  | ||||||
| } |  | ||||||
| Before Width: | Height: | Size: 1.4 KiB | 
| Before Width: | Height: | Size: 2.0 KiB | 
| Before Width: | Height: | Size: 1.9 KiB | 
| Before Width: | Height: | Size: 2.0 KiB | 
| Before Width: | Height: | Size: 1.9 KiB | 
| Before Width: | Height: | Size: 1.5 KiB | 
| Before Width: | Height: | Size: 2.0 KiB | 
| Before Width: | Height: | Size: 1.6 KiB | 
| Before Width: | Height: | Size: 1.9 KiB | 
| Before Width: | Height: | Size: 2.0 KiB | 
| Before Width: | Height: | Size: 2.1 KiB | 
| Before Width: | Height: | Size: 2.0 KiB | 
| Before Width: | Height: | Size: 2.0 KiB | 
| Before Width: | Height: | Size: 1.8 KiB | 
| Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 2.5 KiB | 
| Before Width: | Height: | Size: 1.9 KiB | 
 Daniel Ratcliffe
					Daniel Ratcliffe