Switch tracks don't always connect to downward sloped rails
ssotangkur opened this issue ยท 3 comments
I noticed this while testing out corner cases with the new switch track code. It seems that switch tracks aren't aware of tracks that are sloping down from itself.
If someone wants to try fixing it, I think its just a matter of adding an additional check for rails at the (y - 1)
position in these two methods of TrackSwitchBase.java
:
protected void determineTrackMeta() {
int x = tileEntity.xCoord;
int y = tileEntity.yCoord;
int z = tileEntity.zCoord;
int meta = tileEntity.getBlockMetadata();
if (TrackTools.isRailBlockAt(getWorld(), x + 1, y, z) && TrackTools.isRailBlockAt(getWorld(), x - 1, y, z)) {
if (meta != EnumTrackMeta.EAST_WEST.ordinal())
getWorld().setBlockMetadataWithNotify(x, y, z, EnumTrackMeta.EAST_WEST.ordinal(), 3);
} else if (TrackTools.isRailBlockAt(getWorld(), x, y, z + 1) && TrackTools.isRailBlockAt(getWorld(), x, y, z - 1)) {
if (meta != EnumTrackMeta.NORTH_SOUTH.ordinal())
getWorld().setBlockMetadataWithNotify(x, y, z, EnumTrackMeta.NORTH_SOUTH.ordinal(), 3);
} else if (meta != EnumTrackMeta.NORTH_SOUTH.ordinal())
getWorld().setBlockMetadataWithNotify(x, y, z, EnumTrackMeta.NORTH_SOUTH.ordinal(), 3);
}
protected void determineMirror() {
int x = tileEntity.xCoord;
int y = tileEntity.yCoord;
int z = tileEntity.zCoord;
int meta = tileEntity.getBlockMetadata();
boolean prevValue = isMirrored();
if (meta == EnumTrackMeta.NORTH_SOUTH.ordinal()) {
int ii = x;
if (TrackTools.isRailBlockAt(getWorld(), x - 1, y, z)) {
ii--;
mirrored = true; // West
} else {
ii++;
mirrored = false; // East
}
if (TrackTools.isRailBlockAt(getWorld(), ii, y, z)) {
int otherMeta = getWorld().getBlockMetadata(ii, y, z);
if (otherMeta == EnumTrackMeta.NORTH_SOUTH.ordinal())
getWorld().setBlockMetadataWithNotify(ii, y, z, EnumTrackMeta.EAST_WEST.ordinal(), 3);
}
} else if (meta == EnumTrackMeta.EAST_WEST.ordinal())
mirrored = TrackTools.isRailBlockAt(getWorld(), x, y, z - 1);
if (prevValue != isMirrored())
sendUpdateToClient();
}
Good point.
It seems that "increasing?" the sensitivity from 0.3 to 0.1 in the switch track code is good enough to catch carts on the slopes. I did have custom code for creating AxisAlignedBB's with a larger y component but they proved to be unnecessary in testing.
So I think that section above might be the only change needed.