Restore 1.9.4 compatibility

Also includes cleanup of the stair class
This commit is contained in:
Nicholas Ignoffo 2016-09-06 17:13:43 -07:00
parent 2662114b7c
commit aec841ef85
4 changed files with 83 additions and 58 deletions

View file

@ -4,6 +4,7 @@ import java.util.List;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import WayofTime.bloodmagic.BloodMagic;
import net.minecraft.block.BlockHorizontal; import net.minecraft.block.BlockHorizontal;
import net.minecraft.block.BlockStairs; import net.minecraft.block.BlockStairs;
import net.minecraft.block.BlockStairs.EnumHalf; import net.minecraft.block.BlockStairs.EnumHalf;
@ -75,31 +76,31 @@ public class BlockStringStairs extends BlockString
} }
} }
private static List<AxisAlignedBB> getCollisionBoxList(IBlockState bstate) private static List<AxisAlignedBB> getCollisionBoxList(IBlockState state)
{ {
List<AxisAlignedBB> list = Lists.<AxisAlignedBB>newArrayList(); List<AxisAlignedBB> list = Lists.newArrayList();
boolean flag = bstate.getValue(BlockStairs.HALF) == BlockStairs.EnumHalf.TOP; boolean flag = state.getValue(BlockStairs.HALF) == BlockStairs.EnumHalf.TOP;
list.add(flag ? AABB_SLAB_TOP : AABB_SLAB_BOTTOM); list.add(flag ? AABB_SLAB_TOP : AABB_SLAB_BOTTOM);
BlockStairs.EnumShape blockstairs$enumshape = (BlockStairs.EnumShape) bstate.getValue(BlockStairs.SHAPE); BlockStairs.EnumShape stairShape = state.getValue(BlockStairs.SHAPE);
if (blockstairs$enumshape == BlockStairs.EnumShape.STRAIGHT || blockstairs$enumshape == BlockStairs.EnumShape.INNER_LEFT || blockstairs$enumshape == BlockStairs.EnumShape.INNER_RIGHT) if (stairShape == BlockStairs.EnumShape.STRAIGHT || stairShape == BlockStairs.EnumShape.INNER_LEFT || stairShape == BlockStairs.EnumShape.INNER_RIGHT)
{ {
list.add(getCollQuarterBlock(bstate)); list.add(getCollQuarterBlock(state));
} }
if (blockstairs$enumshape != BlockStairs.EnumShape.STRAIGHT) if (stairShape != BlockStairs.EnumShape.STRAIGHT)
{ {
list.add(getCollEighthBlock(bstate)); list.add(getCollEighthBlock(state));
} }
return list; return list;
} }
private static AxisAlignedBB getCollQuarterBlock(IBlockState bstate) private static AxisAlignedBB getCollQuarterBlock(IBlockState state)
{ {
boolean flag = bstate.getValue(BlockStairs.HALF) == BlockStairs.EnumHalf.TOP; boolean flag = state.getValue(BlockStairs.HALF) == BlockStairs.EnumHalf.TOP;
switch ((EnumFacing) bstate.getValue(FACING)) switch (state.getValue(FACING))
{ {
case NORTH: case NORTH:
default: default:
@ -113,40 +114,40 @@ public class BlockStringStairs extends BlockString
} }
} }
private static AxisAlignedBB getCollEighthBlock(IBlockState bstate) private static AxisAlignedBB getCollEighthBlock(IBlockState state)
{ {
EnumFacing enumfacing = (EnumFacing) bstate.getValue(FACING); EnumFacing facing = state.getValue(FACING);
EnumFacing enumfacing1; EnumFacing newFacing;
switch ((BlockStairs.EnumShape) bstate.getValue(BlockStairs.SHAPE)) switch (state.getValue(BlockStairs.SHAPE))
{ {
case OUTER_LEFT: case OUTER_LEFT:
default: default:
enumfacing1 = enumfacing; newFacing = facing;
break; break;
case OUTER_RIGHT: case OUTER_RIGHT:
enumfacing1 = enumfacing.rotateY(); newFacing = facing.rotateY();
break; break;
case INNER_RIGHT: case INNER_RIGHT:
enumfacing1 = enumfacing.getOpposite(); newFacing = facing.getOpposite();
break; break;
case INNER_LEFT: case INNER_LEFT:
enumfacing1 = enumfacing.rotateYCCW(); newFacing = facing.rotateYCCW();
} }
boolean flag = bstate.getValue(BlockStairs.HALF) == BlockStairs.EnumHalf.TOP; boolean isTop = state.getValue(BlockStairs.HALF) == BlockStairs.EnumHalf.TOP;
switch (enumfacing1) switch (newFacing)
{ {
case NORTH: case NORTH:
default: default:
return flag ? AABB_OCT_BOT_NW : AABB_OCT_TOP_NW; return isTop ? AABB_OCT_BOT_NW : AABB_OCT_TOP_NW;
case SOUTH: case SOUTH:
return flag ? AABB_OCT_BOT_SE : AABB_OCT_TOP_SE; return isTop ? AABB_OCT_BOT_SE : AABB_OCT_TOP_SE;
case WEST: case WEST:
return flag ? AABB_OCT_BOT_SW : AABB_OCT_TOP_SW; return isTop ? AABB_OCT_BOT_SW : AABB_OCT_TOP_SW;
case EAST: case EAST:
return flag ? AABB_OCT_BOT_NE : AABB_OCT_TOP_NE; return isTop ? AABB_OCT_BOT_NE : AABB_OCT_TOP_NE;
} }
} }
@ -165,22 +166,22 @@ public class BlockStringStairs extends BlockString
@Override @Override
public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer)
{ {
IBlockState iblockstate = super.onBlockPlaced(worldIn, pos, facing, hitX, hitY, hitZ, meta, placer); IBlockState state = super.onBlockPlaced(worldIn, pos, facing, hitX, hitY, hitZ, meta, placer);
iblockstate = iblockstate.withProperty(FACING, placer.getHorizontalFacing()).withProperty(BlockStairs.SHAPE, BlockStairs.EnumShape.STRAIGHT); state = state.withProperty(FACING, placer.getHorizontalFacing()).withProperty(BlockStairs.SHAPE, BlockStairs.EnumShape.STRAIGHT);
return facing != EnumFacing.DOWN && (facing == EnumFacing.UP || (double) hitY <= 0.5D) ? iblockstate.withProperty(BlockStairs.HALF, BlockStairs.EnumHalf.BOTTOM) : iblockstate.withProperty(BlockStairs.HALF, BlockStairs.EnumHalf.TOP); return facing != EnumFacing.DOWN && (facing == EnumFacing.UP || (double) hitY <= 0.5D) ? state.withProperty(BlockStairs.HALF, BlockStairs.EnumHalf.BOTTOM) : state.withProperty(BlockStairs.HALF, BlockStairs.EnumHalf.TOP);
} }
@Override @Override
public RayTraceResult collisionRayTrace(IBlockState blockState, World worldIn, BlockPos pos, Vec3d start, Vec3d end) public RayTraceResult collisionRayTrace(IBlockState blockState, World worldIn, BlockPos pos, Vec3d start, Vec3d end)
{ {
List<RayTraceResult> list = Lists.<RayTraceResult>newArrayList(); List<RayTraceResult> list = Lists.newArrayList();
for (AxisAlignedBB axisalignedbb : getCollisionBoxList(this.getActualState(blockState, worldIn, pos))) for (AxisAlignedBB axisalignedbb : getCollisionBoxList(this.getActualState(blockState, worldIn, pos)))
{ {
list.add(this.rayTrace(pos, start, end, axisalignedbb)); list.add(this.rayTrace(pos, start, end, axisalignedbb));
} }
RayTraceResult raytraceresult1 = null; RayTraceResult rayTrace = null;
double d1 = 0.0D; double d1 = 0.0D;
for (RayTraceResult raytraceresult : list) for (RayTraceResult raytraceresult : list)
@ -191,22 +192,22 @@ public class BlockStringStairs extends BlockString
if (d0 > d1) if (d0 > d1)
{ {
raytraceresult1 = raytraceresult; rayTrace = raytraceresult;
d1 = d0; d1 = d0;
} }
} }
} }
return raytraceresult1; return rayTrace;
} }
// Meta looks like: {1|11|1} = {HALF|FACING|TYPE} // Meta looks like: {1|11|1} = {HALF|FACING|TYPE}
@Override @Override
public IBlockState getStateFromMeta(int meta) public IBlockState getStateFromMeta(int meta)
{ {
IBlockState iblockstate = getBlockState().getBaseState().withProperty(BlockStairs.HALF, (meta & 8) > 0 ? BlockStairs.EnumHalf.TOP : BlockStairs.EnumHalf.BOTTOM); IBlockState state = getBlockState().getBaseState().withProperty(BlockStairs.HALF, (meta & 8) > 0 ? BlockStairs.EnumHalf.TOP : BlockStairs.EnumHalf.BOTTOM);
iblockstate = iblockstate.withProperty(FACING, EnumFacing.getFront(5 - (meta & 6) / 2)).withProperty(this.getStringProp(), this.getValues().get(meta % 2)); state = state.withProperty(FACING, EnumFacing.getFront(5 - (meta & 6) / 2)).withProperty(this.getStringProp(), this.getValues().get(meta % 2));
return iblockstate; return state;
} }
// Meta looks like: {1|11|1} = {HALF|FACING|TYPE} // Meta looks like: {1|11|1} = {HALF|FACING|TYPE}
@ -220,7 +221,7 @@ public class BlockStringStairs extends BlockString
i |= 4; i |= 4;
} }
i = i | 5 - ((EnumFacing) state.getValue(FACING)).getIndex(); i = i | 5 - state.getValue(FACING).getIndex();
return i * 2 + this.getValues().indexOf(state.getValue(this.getStringProp())); return i * 2 + this.getValues().indexOf(state.getValue(this.getStringProp()));
} }
@ -232,16 +233,16 @@ public class BlockStringStairs extends BlockString
private static BlockStairs.EnumShape getStairsShape(IBlockState state, IBlockAccess world, BlockPos pos) private static BlockStairs.EnumShape getStairsShape(IBlockState state, IBlockAccess world, BlockPos pos)
{ {
EnumFacing enumfacing = (EnumFacing) state.getValue(FACING); EnumFacing facing = state.getValue(FACING);
IBlockState iblockstate = world.getBlockState(pos.offset(enumfacing)); IBlockState offsetState = world.getBlockState(pos.offset(facing));
if (isBlockStairs(iblockstate) && state.getValue(BlockStairs.HALF) == iblockstate.getValue(BlockStairs.HALF)) if (isBlockStairs(offsetState) && state.getValue(BlockStairs.HALF) == offsetState.getValue(BlockStairs.HALF))
{ {
EnumFacing enumfacing1 = (EnumFacing) iblockstate.getValue(FACING); EnumFacing offsetFacing = offsetState.getValue(FACING);
if (enumfacing1.getAxis() != ((EnumFacing) state.getValue(FACING)).getAxis() && isDifferentStairs(state, world, pos, enumfacing1.getOpposite())) if (offsetFacing.getAxis() != state.getValue(FACING).getAxis() && isDifferentStairs(state, world, pos, offsetFacing.getOpposite()))
{ {
if (enumfacing1 == enumfacing.rotateYCCW()) if (offsetFacing == facing.rotateYCCW())
{ {
return BlockStairs.EnumShape.OUTER_LEFT; return BlockStairs.EnumShape.OUTER_LEFT;
} }
@ -250,15 +251,15 @@ public class BlockStringStairs extends BlockString
} }
} }
IBlockState iblockstate1 = world.getBlockState(pos.offset(enumfacing.getOpposite())); IBlockState oppositeOffsetState = world.getBlockState(pos.offset(facing.getOpposite()));
if (isBlockStairs(iblockstate1) && state.getValue(BlockStairs.HALF) == iblockstate1.getValue(BlockStairs.HALF)) if (isBlockStairs(oppositeOffsetState) && state.getValue(BlockStairs.HALF) == oppositeOffsetState.getValue(BlockStairs.HALF))
{ {
EnumFacing enumfacing2 = (EnumFacing) iblockstate1.getValue(FACING); EnumFacing oppositeOffsetFacing = oppositeOffsetState.getValue(FACING);
if (enumfacing2.getAxis() != ((EnumFacing) state.getValue(FACING)).getAxis() && isDifferentStairs(state, world, pos, enumfacing2)) if (oppositeOffsetFacing.getAxis() != (state.getValue(FACING)).getAxis() && isDifferentStairs(state, world, pos, oppositeOffsetFacing))
{ {
if (enumfacing2 == enumfacing.rotateYCCW()) if (oppositeOffsetFacing == facing.rotateYCCW())
{ {
return BlockStairs.EnumShape.INNER_LEFT; return BlockStairs.EnumShape.INNER_LEFT;
} }
@ -272,8 +273,8 @@ public class BlockStringStairs extends BlockString
private static boolean isDifferentStairs(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing facing) private static boolean isDifferentStairs(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing facing)
{ {
IBlockState iblockstate = world.getBlockState(pos.offset(facing)); IBlockState offsetState = world.getBlockState(pos.offset(facing));
return !isBlockStairs(iblockstate) || iblockstate.getValue(FACING) != state.getValue(FACING) || iblockstate.getValue(BlockStairs.HALF) != state.getValue(BlockStairs.HALF); return !isBlockStairs(offsetState) || offsetState.getValue(FACING) != state.getValue(FACING) || offsetState.getValue(BlockStairs.HALF) != state.getValue(BlockStairs.HALF);
} }
public static boolean isBlockStairs(IBlockState state) public static boolean isBlockStairs(IBlockState state)
@ -284,23 +285,23 @@ public class BlockStringStairs extends BlockString
@Override @Override
public IBlockState withRotation(IBlockState state, Rotation rot) public IBlockState withRotation(IBlockState state, Rotation rot)
{ {
return state.withProperty(FACING, rot.rotate((EnumFacing) state.getValue(FACING))); return state.withProperty(FACING, rot.rotate(state.getValue(FACING)));
} }
@SuppressWarnings("incomplete-switch") @SuppressWarnings("incomplete-switch")
@Override @Override
public IBlockState withMirror(IBlockState state, Mirror mirrorIn) public IBlockState withMirror(IBlockState state, Mirror mirrorIn)
{ {
EnumFacing enumfacing = (EnumFacing) state.getValue(FACING); EnumFacing facing = state.getValue(FACING);
BlockStairs.EnumShape blockstairs$enumshape = (BlockStairs.EnumShape) state.getValue(BlockStairs.SHAPE); BlockStairs.EnumShape stairShape = state.getValue(BlockStairs.SHAPE);
switch (mirrorIn) switch (mirrorIn)
{ {
case LEFT_RIGHT: case LEFT_RIGHT:
if (enumfacing.getAxis() == EnumFacing.Axis.Z) if (facing.getAxis() == EnumFacing.Axis.Z)
{ {
switch (blockstairs$enumshape) switch (stairShape)
{ {
case OUTER_LEFT: case OUTER_LEFT:
return state.withRotation(Rotation.CLOCKWISE_180).withProperty(BlockStairs.SHAPE, BlockStairs.EnumShape.OUTER_RIGHT); return state.withRotation(Rotation.CLOCKWISE_180).withProperty(BlockStairs.SHAPE, BlockStairs.EnumShape.OUTER_RIGHT);
@ -318,9 +319,9 @@ public class BlockStringStairs extends BlockString
break; break;
case FRONT_BACK: case FRONT_BACK:
if (enumfacing.getAxis() == EnumFacing.Axis.X) if (facing.getAxis() == EnumFacing.Axis.X)
{ {
switch (blockstairs$enumshape) switch (stairShape)
{ {
case OUTER_LEFT: case OUTER_LEFT:
return state.withRotation(Rotation.CLOCKWISE_180).withProperty(BlockStairs.SHAPE, BlockStairs.EnumShape.OUTER_RIGHT); return state.withRotation(Rotation.CLOCKWISE_180).withProperty(BlockStairs.SHAPE, BlockStairs.EnumShape.OUTER_RIGHT);
@ -366,7 +367,7 @@ public class BlockStringStairs extends BlockString
@Override @Override
public boolean doesSideBlockRendering(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing face) public boolean doesSideBlockRendering(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing face)
{ {
if (net.minecraftforge.common.ForgeModContainer.disableStairSlabCulling) if (BloodMagic.getCrossVersionProxy().disableStairSlabCulling())
return super.doesSideBlockRendering(state, world, pos, face); return super.doesSideBlockRendering(state, world, pos, face);
if (state.isOpaqueCube()) if (state.isOpaqueCube())

View file

@ -3,8 +3,10 @@ package WayofTime.bloodmagic.compat.minecraft;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.ForgeModContainer;
import net.minecraftforge.fml.relauncher.ReflectionHelper; import net.minecraftforge.fml.relauncher.ReflectionHelper;
import java.lang.reflect.Field;
import java.lang.reflect.Method; import java.lang.reflect.Method;
public class CrossVersionProxy110 implements ICrossVersionProxy { public class CrossVersionProxy110 implements ICrossVersionProxy {
@ -21,4 +23,17 @@ public class CrossVersionProxy110 implements ICrossVersionProxy {
return null; return null;
} }
} }
@Override
public boolean disableStairSlabCulling()
{
Field disableStairSlabCulling = ReflectionHelper.findField(ForgeModContainer.class, "disableStairSlabCulling");
try
{
return (Boolean) disableStairSlabCulling.get(null);
} catch (Exception e)
{
return false;
}
}
} }

View file

@ -7,7 +7,8 @@ import net.minecraftforge.fml.relauncher.ReflectionHelper;
import java.lang.reflect.Method; import java.lang.reflect.Method;
public class CrossVersionProxy19 implements ICrossVersionProxy { public class CrossVersionProxy19 implements ICrossVersionProxy
{
@Override @Override
public TileEntity createTileFromData(World world, NBTTagCompound tagCompound) public TileEntity createTileFromData(World world, NBTTagCompound tagCompound)
@ -21,4 +22,10 @@ public class CrossVersionProxy19 implements ICrossVersionProxy {
return null; return null;
} }
} }
@Override
public boolean disableStairSlabCulling()
{
return false;
}
} }

View file

@ -12,4 +12,6 @@ import net.minecraft.world.World;
public interface ICrossVersionProxy public interface ICrossVersionProxy
{ {
TileEntity createTileFromData(World world, NBTTagCompound tagCompound); TileEntity createTileFromData(World world, NBTTagCompound tagCompound);
boolean disableStairSlabCulling();
} }