1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2025-10-24 18:37:38 +00:00

ComputerCraft 1.80pr0

Updated the source code to the version shipped as the 1.80pr0 alpha
release. Also removed some unnecessary files from the LuaJ subfolder
which were bulking up the repository.
This commit is contained in:
Daniel Ratcliffe
2017-05-01 14:51:26 +01:00
parent e85cdacbc5
commit 7d497f2835
389 changed files with 911 additions and 95491 deletions

View File

@@ -18,11 +18,11 @@ import dan200.computercraft.shared.util.DirectionUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.WorldRenderer;
import net.minecraft.client.renderer.VertexBuffer;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockPos;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.MinecraftForgeClient;
@@ -94,7 +94,7 @@ public class TileEntityMonitorRenderer extends TileEntitySpecialRenderer<TileMon
// Get renderers
Minecraft mc = Minecraft.getMinecraft();
Tessellator tessellator = Tessellator.getInstance();
WorldRenderer renderer = tessellator.getWorldRenderer();
VertexBuffer renderer = tessellator.getBuffer();
// Get terminal
ClientTerminal clientTerminal = (ClientTerminal)origin.getTerminal();

View File

@@ -15,23 +15,25 @@ import dan200.computercraft.shared.turtle.entity.TurtleVisionCamera;
import dan200.computercraft.shared.util.Colour;
import dan200.computercraft.shared.util.Holiday;
import dan200.computercraft.shared.util.HolidayUtil;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.WorldRenderer;
import net.minecraft.client.renderer.VertexBuffer;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.ModelManager;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.client.resources.model.IBakedModel;
import net.minecraft.client.resources.model.ModelManager;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.client.renderer.vertex.VertexFormat;
import net.minecraft.entity.Entity;
import net.minecraft.util.*;
import net.minecraft.util.math.*;
import net.minecraftforge.client.ForgeHooksClient;
import net.minecraftforge.client.model.IFlexibleBakedModel;
import org.apache.commons.lang3.tuple.Pair;
import org.lwjgl.opengl.GL11;
@@ -166,11 +168,12 @@ public class TileEntityTurtleRenderer extends TileEntitySpecialRenderer<TileTurt
private void renderTurtleAt( TileTurtle turtle, double posX, double posY, double posZ, float f, int i )
{
IBlockState state = turtle.getWorld().getBlockState( turtle.getPos() );
GlStateManager.pushMatrix();
try
{
// Setup the transform
Vec3 offset;
Vec3d offset;
float yaw;
if( turtle != null )
{
@@ -179,7 +182,7 @@ public class TileEntityTurtleRenderer extends TileEntitySpecialRenderer<TileTurt
}
else
{
offset = new Vec3( 0.0, 0.0, 0.0 );
offset = new Vec3d( 0.0, 0.0, 0.0 );
yaw = 0.0f;
}
GlStateManager.translate( posX + offset.xCoord, posY + offset.yCoord, posZ + offset.zCoord );
@@ -213,7 +216,7 @@ public class TileEntityTurtleRenderer extends TileEntitySpecialRenderer<TileTurt
family = ComputerFamily.Normal;
overlay = null;
}
renderModel( getTurtleModel( family, colour ) );
renderModel( state, getTurtleModel( family, colour ) );
// Render the overlay
ModelResourceLocation overlayModel = getTurtleOverlayModel(
@@ -228,7 +231,7 @@ public class TileEntityTurtleRenderer extends TileEntitySpecialRenderer<TileTurt
GlStateManager.blendFunc( GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA );
try
{
renderModel( overlayModel );
renderModel( state, overlayModel );
}
finally
{
@@ -240,8 +243,8 @@ public class TileEntityTurtleRenderer extends TileEntitySpecialRenderer<TileTurt
// Render the upgrades
if( turtle != null )
{
renderUpgrade( turtle, TurtleSide.Left, f );
renderUpgrade( turtle, TurtleSide.Right, f );
renderUpgrade( state, turtle, TurtleSide.Left, f );
renderUpgrade( state, turtle, TurtleSide.Right, f );
}
}
finally
@@ -250,7 +253,7 @@ public class TileEntityTurtleRenderer extends TileEntitySpecialRenderer<TileTurt
}
}
private void renderUpgrade( TileTurtle turtle, TurtleSide side, float f )
private void renderUpgrade( IBlockState state, TileTurtle turtle, TurtleSide side, float f )
{
ITurtleUpgrade upgrade = turtle.getUpgrade( side );
if( upgrade != null )
@@ -272,7 +275,7 @@ public class TileEntityTurtleRenderer extends TileEntitySpecialRenderer<TileTurt
}
if( pair.getLeft() != null )
{
renderModel( pair.getLeft() );
renderModel( state, pair.getLeft() );
}
}
}
@@ -283,56 +286,52 @@ public class TileEntityTurtleRenderer extends TileEntitySpecialRenderer<TileTurt
}
}
private void renderModel( ModelResourceLocation modelLocation )
private void renderModel( IBlockState state, ModelResourceLocation modelLocation )
{
Minecraft mc = Minecraft.getMinecraft();
ModelManager modelManager = mc.getRenderItem().getItemModelMesher().getModelManager();
renderModel( modelManager.getModel( modelLocation ) );
renderModel( state, modelManager.getModel( modelLocation ) );
}
private void renderModel( IBakedModel model )
{
if( model instanceof IFlexibleBakedModel )
{
renderModel( (IFlexibleBakedModel) model );
}
else
{
renderModel( new IFlexibleBakedModel.Wrapper( model, DefaultVertexFormats.ITEM ) );
}
}
private void renderModel( IFlexibleBakedModel model )
private void renderModel( IBlockState state, IBakedModel model )
{
Minecraft mc = Minecraft.getMinecraft();
Tessellator tessellator = Tessellator.getInstance();
WorldRenderer renderer = tessellator.getWorldRenderer();
mc.getTextureManager().bindTexture( TextureMap.locationBlocksTexture );
renderer.begin( GL11.GL_QUADS, model.getFormat() );
mc.getTextureManager().bindTexture( TextureMap.LOCATION_BLOCKS_TEXTURE );
renderQuads( tessellator, model.getQuads( state, null, 0 ) );
for( EnumFacing facing : EnumFacing.VALUES )
{
renderQuads( renderer, model.getFaceQuads( facing ) );
renderQuads( tessellator, model.getQuads( state, facing, 0 ) );
}
renderQuads( renderer, model.getGeneralQuads() );
tessellator.draw();
}
private void renderQuads( WorldRenderer renderer, List quads )
private void renderQuads( Tessellator tessellator, List quads )
{
int color = 0xFFFFFFFF;
Iterator it = quads.iterator();
VertexBuffer buffer = tessellator.getBuffer();
VertexFormat format = DefaultVertexFormats.ITEM;
buffer.begin( GL11.GL_QUADS, format );
while( it.hasNext() )
{
BakedQuad quad = (BakedQuad)it.next();
net.minecraftforge.client.model.pipeline.LightUtil.renderQuadColor( renderer, quad, color );
VertexFormat quadFormat = quad.getFormat();
if( quadFormat != format )
{
tessellator.draw();
format = quadFormat;
buffer.begin( GL11.GL_QUADS, format );
}
net.minecraftforge.client.model.pipeline.LightUtil.renderQuadColor( buffer, quad, color );
}
tessellator.draw();
}
private void renderLabel( BlockPos position, String label )
{
Minecraft mc = Minecraft.getMinecraft();
MovingObjectPosition mop = mc.objectMouseOver;
if( mop != null && mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && mop.getBlockPos().equals( position ) )
RayTraceResult mop = mc.objectMouseOver;
if( mop != null && mop.typeOfHit == RayTraceResult.Type.BLOCK && mop.getBlockPos().equals( position ) )
{
RenderManager renderManager = mc.getRenderManager();
FontRenderer fontrenderer = renderManager.getFontRenderer();
@@ -362,7 +361,7 @@ public class TileEntityTurtleRenderer extends TileEntitySpecialRenderer<TileTurt
try
{
Tessellator tessellator = Tessellator.getInstance();
WorldRenderer renderer = tessellator.getWorldRenderer();
VertexBuffer renderer = tessellator.getBuffer();
renderer.begin( GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR );
renderer.pos( (double) ( -xOffset - 1 ), (double) ( -1 + yOffset ), 0.0D ).color( 0.0F, 0.0F, 0.0F, 0.25F ).endVertex();
renderer.pos( (double) ( -xOffset - 1 ), (double) ( 8 + yOffset ), 0.0D ).color( 0.0F, 0.0F, 0.0F, 0.25F ).endVertex();

View File

@@ -1,85 +1,92 @@
package dan200.computercraft.client.render;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.*;
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.VertexFormatElement;
import net.minecraft.client.resources.model.IBakedModel;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.client.model.IFlexibleBakedModel;
import net.minecraft.world.World;
import javax.vecmath.Matrix4f;
import javax.vecmath.Point3f;
import java.util.ArrayList;
import java.util.Dictionary;
import java.util.List;
public class TurtleMultiModel implements IFlexibleBakedModel
public class TurtleMultiModel implements IBakedModel
{
private IFlexibleBakedModel m_baseModel;
private IFlexibleBakedModel m_overlayModel;
private IFlexibleBakedModel m_leftUpgradeModel;
private IFlexibleBakedModel m_rightUpgradeModel;
private IBakedModel m_baseModel;
private IBakedModel m_overlayModel;
private IBakedModel m_leftUpgradeModel;
private Matrix4f m_leftUpgradeTransform;
private IBakedModel m_rightUpgradeModel;
private Matrix4f m_rightUpgradeTransform;
private List<BakedQuad> m_generalQuads;
private List<BakedQuad>[] m_faceQuads;
private List<BakedQuad> m_faceQuads[];
public TurtleMultiModel( IBakedModel baseModel, IBakedModel overlayModel, IBakedModel leftUpgradeModel, Matrix4f leftUpgradeTransform, IBakedModel rightUpgradeModel, Matrix4f rightUpgradeTransform )
{
// Get the models
m_baseModel = makeFlexible( baseModel );
m_overlayModel = makeFlexible( overlayModel );
m_leftUpgradeModel = makeFlexible( leftUpgradeModel );
m_rightUpgradeModel = makeFlexible( rightUpgradeModel );
// Bake the quads
m_generalQuads = new ArrayList<BakedQuad>();
m_generalQuads.addAll( m_baseModel.getGeneralQuads() );
if( m_overlayModel != null )
{
m_generalQuads.addAll( m_overlayModel.getGeneralQuads() );
}
if( m_leftUpgradeModel != null )
{
m_generalQuads.addAll( transformQuads( m_leftUpgradeModel.getFormat(), m_leftUpgradeModel.getGeneralQuads(), leftUpgradeTransform ) );
}
if( m_rightUpgradeModel != null )
{
m_generalQuads.addAll( transformQuads( m_rightUpgradeModel.getFormat(), m_rightUpgradeModel.getGeneralQuads(), rightUpgradeTransform ) );
}
m_faceQuads = new List[ EnumFacing.VALUES.length ];
for( EnumFacing facing : EnumFacing.VALUES )
{
List<BakedQuad> faces = new ArrayList<BakedQuad>();
faces.addAll( m_baseModel.getFaceQuads( facing ) );
if( m_overlayModel != null )
{
faces.addAll( m_overlayModel.getFaceQuads( facing ) );
}
if( m_leftUpgradeModel != null )
{
faces.addAll( transformQuads( m_leftUpgradeModel.getFormat(), m_leftUpgradeModel.getFaceQuads( facing ), leftUpgradeTransform ) );
}
if( m_rightUpgradeModel != null )
{
faces.addAll( transformQuads( m_rightUpgradeModel.getFormat(), m_rightUpgradeModel.getFaceQuads( facing ), rightUpgradeTransform ) );
}
m_faceQuads[ facing.getIndex() ] = faces;
}
m_baseModel = baseModel;
m_overlayModel = overlayModel;
m_leftUpgradeModel = leftUpgradeModel;
m_leftUpgradeTransform = leftUpgradeTransform;
m_rightUpgradeModel = rightUpgradeModel;
m_rightUpgradeTransform = rightUpgradeTransform;
m_generalQuads = null;
m_faceQuads = new List[6];
}
@Override
public List<BakedQuad> getFaceQuads( EnumFacing side )
public List<BakedQuad> getQuads( IBlockState state, EnumFacing side, long rand )
{
return m_faceQuads[ side.getIndex() ];
}
@Override
public List<BakedQuad> getGeneralQuads()
{
return m_generalQuads;
if( side != null )
{
if( m_faceQuads[ side.ordinal() ] == null )
{
List<BakedQuad> quads = new ArrayList<BakedQuad>();
if( m_overlayModel != null )
{
quads.addAll( m_overlayModel.getQuads( state, side, rand ) );
}
if( m_leftUpgradeModel != null )
{
quads.addAll( transformQuads( m_leftUpgradeModel.getQuads( state, side, rand ), m_leftUpgradeTransform ) );
}
if( m_rightUpgradeModel != null )
{
quads.addAll( transformQuads( m_rightUpgradeModel.getQuads( state, side, rand ), m_rightUpgradeTransform ) );
}
m_faceQuads[ side.ordinal() ] = quads;
}
return m_faceQuads[ side.ordinal() ];
}
else
{
if( m_generalQuads == null )
{
m_generalQuads = new ArrayList<BakedQuad>();
m_generalQuads.addAll( m_baseModel.getQuads( state, side, rand ) );
if( m_overlayModel != null )
{
m_generalQuads.addAll( m_overlayModel.getQuads( state, side, rand ) );
}
if( m_leftUpgradeModel != null )
{
m_generalQuads.addAll( transformQuads( m_leftUpgradeModel.getQuads( state, side, rand ), m_leftUpgradeTransform ) );
}
if( m_rightUpgradeModel != null )
{
m_generalQuads.addAll( transformQuads( m_rightUpgradeModel.getQuads( state, side, rand ), m_rightUpgradeTransform ) );
}
}
return m_generalQuads;
}
}
@Override
@@ -113,12 +120,12 @@ public class TurtleMultiModel implements IFlexibleBakedModel
}
@Override
public VertexFormat getFormat()
public ItemOverrideList getOverrides()
{
return m_baseModel.getFormat();
return ItemOverrideList.NONE;
}
private List<BakedQuad> transformQuads( VertexFormat format, List<BakedQuad> input, Matrix4f transform )
private List<BakedQuad> transformQuads( List<BakedQuad> input, Matrix4f transform )
{
if( transform == null || input.size() == 0 )
{
@@ -130,17 +137,18 @@ public class TurtleMultiModel implements IFlexibleBakedModel
for( int i=0; i<input.size(); ++i )
{
BakedQuad quad = input.get( i );
output.add( transformQuad( format, quad, transform ) );
output.add( transformQuad( quad, transform ) );
}
return output;
}
}
private BakedQuad transformQuad( VertexFormat format, BakedQuad quad, Matrix4f transform )
private BakedQuad transformQuad( BakedQuad quad, Matrix4f transform )
{
int[] vertexData = quad.getVertexData().clone();
BakedQuad copy = new BakedQuad( vertexData, quad.getTintIndex(), quad.getFace() );
int offset = 0;
BakedQuad copy = new BakedQuad( vertexData, quad.getTintIndex(), quad.getFace(), quad.getSprite(), quad.shouldApplyDiffuseLighting(), quad.getFormat() );
VertexFormat format = copy.getFormat();
for( int i=0; i<format.getElementCount(); ++i ) // For each vertex element
{
VertexFormatElement element = format.getElement( i );
@@ -176,20 +184,4 @@ public class TurtleMultiModel implements IFlexibleBakedModel
}
return copy;
}
private IFlexibleBakedModel makeFlexible( IBakedModel model )
{
if( model == null )
{
return null;
}
else if( model instanceof IFlexibleBakedModel )
{
return (IFlexibleBakedModel)model;
}
else
{
return new IFlexibleBakedModel.Wrapper( model, DefaultVertexFormats.ITEM );
}
}
}

View File

@@ -15,25 +15,27 @@ import dan200.computercraft.shared.turtle.items.TurtleItemFactory;
import dan200.computercraft.shared.util.Colour;
import dan200.computercraft.shared.util.Holiday;
import dan200.computercraft.shared.util.HolidayUtil;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.block.model.*;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.resources.IResourceManager;
import net.minecraft.client.resources.IResourceManagerReloadListener;
import net.minecraft.client.resources.model.IBakedModel;
import net.minecraft.client.resources.model.ModelManager;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.ISmartItemModel;
import net.minecraft.world.World;
import net.minecraftforge.client.model.IModel;
import net.minecraftforge.client.model.ISmartVariant;
import org.apache.commons.lang3.tuple.Pair;
import javax.vecmath.Matrix4f;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class TurtleSmartItemModel implements ISmartItemModel, IResourceManagerReloadListener
public class TurtleSmartItemModel implements IBakedModel, IResourceManagerReloadListener
{
private static class TurtleModelCombination
{
@@ -92,11 +94,43 @@ public class TurtleSmartItemModel implements ISmartItemModel, IResourceManagerRe
private ItemStack m_defaultItem;
private HashMap<TurtleModelCombination, IBakedModel> m_cachedModels;
private ItemOverrideList m_overrides;
public TurtleSmartItemModel()
{
m_defaultItem = TurtleItemFactory.create( -1, null, null, ComputerFamily.Normal, null, null, 0, null );
m_cachedModels = new HashMap<TurtleModelCombination, IBakedModel>();
m_overrides = new ItemOverrideList( new ArrayList<ItemOverride>() )
{
@Override
public IBakedModel handleItemState(IBakedModel originalModel, ItemStack stack, World world, EntityLivingBase entity)
{
ItemTurtleBase turtle = (ItemTurtleBase) stack.getItem();
ComputerFamily family = turtle.getFamily( stack );
Colour colour = turtle.getColour( stack );
ITurtleUpgrade leftUpgrade = turtle.getUpgrade( stack, TurtleSide.Left );
ITurtleUpgrade rightUpgrade = turtle.getUpgrade( stack, TurtleSide.Right );
ResourceLocation overlay = turtle.getOverlay( stack );
boolean christmas = HolidayUtil.getCurrentHoliday() == Holiday.Christmas;
TurtleModelCombination combo = new TurtleModelCombination( family, colour, leftUpgrade, rightUpgrade, overlay, christmas );
if( m_cachedModels.containsKey( combo ) )
{
return m_cachedModels.get( combo );
}
else
{
IBakedModel model = buildModel( combo );
m_cachedModels.put( combo, model );
return model;
}
}
};
}
@Override
public ItemOverrideList getOverrides()
{
return m_overrides;
}
@Override
@@ -105,29 +139,6 @@ public class TurtleSmartItemModel implements ISmartItemModel, IResourceManagerRe
m_cachedModels.clear();
}
@Override
public IBakedModel handleItemState( ItemStack stack )
{
ItemTurtleBase turtle = (ItemTurtleBase) stack.getItem();
ComputerFamily family = turtle.getFamily( stack );
Colour colour = turtle.getColour( stack );
ITurtleUpgrade leftUpgrade = turtle.getUpgrade( stack, TurtleSide.Left );
ITurtleUpgrade rightUpgrade = turtle.getUpgrade( stack, TurtleSide.Right );
ResourceLocation overlay = turtle.getOverlay( stack );
boolean christmas = HolidayUtil.getCurrentHoliday() == Holiday.Christmas;
TurtleModelCombination combo = new TurtleModelCombination( family, colour, leftUpgrade, rightUpgrade, overlay, christmas );
if( m_cachedModels.containsKey( combo ) )
{
return m_cachedModels.get( combo );
}
else
{
IBakedModel model = buildModel( combo );
m_cachedModels.put( combo, model );
return model;
}
}
private IBakedModel buildModel( TurtleModelCombination combo )
{
Minecraft mc = Minecraft.getMinecraft();
@@ -163,15 +174,9 @@ public class TurtleSmartItemModel implements ISmartItemModel, IResourceManagerRe
// These should not be called:
@Override
public List getFaceQuads( EnumFacing facing )
public List<BakedQuad> getQuads( IBlockState state, EnumFacing facing, long rand )
{
return getDefaultModel().getFaceQuads( facing );
}
@Override
public List getGeneralQuads()
{
return getDefaultModel().getGeneralQuads();
return getDefaultModel().getQuads( state, facing, rand );
}
@Override
@@ -206,6 +211,6 @@ public class TurtleSmartItemModel implements ISmartItemModel, IResourceManagerRe
private IBakedModel getDefaultModel()
{
return handleItemState( m_defaultItem );
return m_overrides.handleItemState( this, m_defaultItem, null, null );
}
}