Fixes #2467: Straight connections for glass and dense cables are now constrained to the requested connection type on both sides.

This commit is contained in:
Sebastian Hartte 2016-10-18 23:47:35 +02:00
parent 6cdcd8ccc9
commit 433d575fd4

View file

@ -25,7 +25,6 @@ import java.util.EnumMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
@ -126,14 +125,15 @@ public class CableBusBakedModel implements IBakedModel
} }
// Determines whether a cable is connected to exactly two sides that are opposite each other // Determines whether a cable is connected to exactly two sides that are opposite each other
private static boolean isStraightLine( Set<EnumFacing> sides ) private static boolean isStraightLine( AECableType cableType, EnumMap<EnumFacing, AECableType> sides )
{ {
Iterator<EnumFacing> it = sides.iterator(); Iterator<EnumFacing> it = sides.keySet().iterator();
if( !it.hasNext() ) if( !it.hasNext() )
{ {
return false; // No connections return false; // No connections
} }
EnumFacing firstSide = it.next(); EnumFacing firstSide = it.next();
AECableType firstType = sides.get( firstSide );
if( !it.hasNext() ) if( !it.hasNext() )
{ {
return false; // Only a single connection return false; // Only a single connection
@ -142,7 +142,21 @@ public class CableBusBakedModel implements IBakedModel
{ {
return false; // Connected to two sides that are not opposite each other return false; // Connected to two sides that are not opposite each other
} }
return !it.hasNext(); // Must not have any other connection points if (it.hasNext()) {
return false; // Must not have any other connection points
}
AECableType secondType = sides.get( firstSide.getOpposite() );
// Certain cable types have restrictions on when they're rendered as a straight connection
switch( cableType )
{
case GLASS:
return firstType == AECableType.GLASS && secondType == AECableType.GLASS;
case DENSE:
return firstType == AECableType.DENSE && secondType == AECableType.DENSE;
}
return true;
} }
private void addCableQuads( CableBusRenderState renderState, List<BakedQuad> quadsOut ) private void addCableQuads( CableBusRenderState renderState, List<BakedQuad> quadsOut )
@ -156,10 +170,10 @@ public class CableBusBakedModel implements IBakedModel
AEColor cableColor = renderState.getCableColor(); AEColor cableColor = renderState.getCableColor();
EnumMap<EnumFacing, AECableType> connectionTypes = renderState.getConnectionTypes(); EnumMap<EnumFacing, AECableType> connectionTypes = renderState.getConnectionTypes();
// If the connection is straight, no busses are attached, and no overed core has been forced (in case of glass // If the connection is straight, no busses are attached, and no covered core has been forced (in case of glass
// cables), then render the cable as a simplified straight line. // cables), then render the cable as a simplified straight line.
boolean noAttachments = renderState.getAttachments().isEmpty(); boolean noAttachments = renderState.getAttachments().isEmpty();
if( isStraightLine( connectionTypes.keySet() ) && noAttachments ) if( isStraightLine( cableType, connectionTypes ) && noAttachments )
{ {
EnumFacing facing = connectionTypes.keySet().iterator().next(); EnumFacing facing = connectionTypes.keySet().iterator().next();