147 lines
6.1 KiB
Diff
147 lines
6.1 KiB
Diff
--- ../src-base/minecraft/net/minecraft/block/BlockRailBase.java
|
|
+++ ../src-work/minecraft/net/minecraft/block/BlockRailBase.java
|
|
@@ -31,7 +31,7 @@
|
|
public static boolean func_176563_d(IBlockState p_176563_0_)
|
|
{
|
|
Block block = p_176563_0_.func_177230_c();
|
|
- return block == Blocks.field_150448_aq || block == Blocks.field_150318_D || block == Blocks.field_150319_E || block == Blocks.field_150408_cc;
|
|
+ return block instanceof BlockRailBase;
|
|
}
|
|
|
|
protected BlockRailBase(boolean p_i45389_1_)
|
|
@@ -175,6 +175,81 @@
|
|
|
|
public abstract IProperty<BlockRailBase.EnumRailDirection> func_176560_l();
|
|
|
|
+ /* ======================================== FORGE START =====================================*/
|
|
+ /**
|
|
+ * Return true if the rail can make corners.
|
|
+ * Used by placement logic.
|
|
+ * @param world The world.
|
|
+ * @param pod Block's position in world
|
|
+ * @return True if the rail can make corners.
|
|
+ */
|
|
+ public boolean isFlexibleRail(IBlockAccess world, BlockPos pos)
|
|
+ {
|
|
+ return !this.field_150053_a;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Returns true if the rail can make up and down slopes.
|
|
+ * Used by placement logic.
|
|
+ * @param world The world.
|
|
+ * @param pod Block's position in world
|
|
+ * @return True if the rail can make slopes.
|
|
+ */
|
|
+ public boolean canMakeSlopes(IBlockAccess world, BlockPos pos)
|
|
+ {
|
|
+ return true;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Returns the max speed of the rail at the specified position.
|
|
+ * @param world The world.
|
|
+ * @param cart The cart on the rail, may be null.
|
|
+ * @param pod Block's position in world
|
|
+ * @return The max speed of the current rail.
|
|
+ */
|
|
+ public float getRailMaxSpeed(World world, net.minecraft.entity.item.EntityMinecart cart, BlockPos pos)
|
|
+ {
|
|
+ return 0.4f;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * This function is called by any minecart that passes over this rail.
|
|
+ * It is called once per update tick that the minecart is on the rail.
|
|
+ * @param world The world.
|
|
+ * @param cart The cart on the rail.
|
|
+ * @param pod Block's position in world
|
|
+ */
|
|
+ public void onMinecartPass(World world, net.minecraft.entity.item.EntityMinecart cart, BlockPos pos)
|
|
+ {
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Rotate the block. For vanilla blocks this rotates around the axis passed in (generally, it should be the "face" that was hit).
|
|
+ * Note: for mod blocks, this is up to the block and modder to decide. It is not mandated that it be a rotation around the
|
|
+ * face, but could be a rotation to orient *to* that face, or a visiting of possible rotations.
|
|
+ * The method should return true if the rotation was successful though.
|
|
+ *
|
|
+ * @param world The world
|
|
+ * @param pos Block position in world
|
|
+ * @param axis The axis to rotate around
|
|
+ * @return True if the rotation was successful, False if the rotation failed, or is not possible
|
|
+ */
|
|
+ public boolean rotateBlock(World world, BlockPos pos, EnumFacing axis)
|
|
+ {
|
|
+ IBlockState state = world.func_180495_p(pos);
|
|
+ for (IProperty prop : (java.util.Set<IProperty>)state.func_177228_b().keySet())
|
|
+ {
|
|
+ if (prop.func_177701_a().equals("shape"))
|
|
+ {
|
|
+ world.func_175656_a(pos, state.func_177231_a(prop));
|
|
+ return true;
|
|
+ }
|
|
+ }
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ /* ======================================== FORGE END =====================================*/
|
|
+
|
|
public static enum EnumRailDirection implements IStringSerializable
|
|
{
|
|
NORTH_SOUTH(0, "north_south"),
|
|
@@ -245,6 +320,7 @@
|
|
private IBlockState field_180366_e;
|
|
private final boolean field_150656_f;
|
|
private final List<BlockPos> field_150657_g = Lists.<BlockPos>newArrayList();
|
|
+ private final boolean canMakeSlopes;
|
|
|
|
public Rail(World p_i45739_2_, BlockPos p_i45739_3_, IBlockState p_i45739_4_)
|
|
{
|
|
@@ -253,7 +329,8 @@
|
|
this.field_180366_e = p_i45739_4_;
|
|
this.field_180365_d = (BlockRailBase)p_i45739_4_.func_177230_c();
|
|
BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = (BlockRailBase.EnumRailDirection)p_i45739_4_.func_177229_b(BlockRailBase.this.func_176560_l());
|
|
- this.field_150656_f = this.field_180365_d.field_150053_a;
|
|
+ this.field_150656_f = !this.field_180365_d.isFlexibleRail(p_i45739_2_, p_i45739_3_);
|
|
+ canMakeSlopes = this.field_180365_d.canMakeSlopes(p_i45739_2_, p_i45739_3_);
|
|
this.func_180360_a(blockrailbase$enumraildirection);
|
|
}
|
|
|
|
@@ -439,7 +516,7 @@
|
|
}
|
|
}
|
|
|
|
- if (blockrailbase$enumraildirection == BlockRailBase.EnumRailDirection.NORTH_SOUTH)
|
|
+ if (blockrailbase$enumraildirection == BlockRailBase.EnumRailDirection.NORTH_SOUTH && canMakeSlopes)
|
|
{
|
|
if (BlockRailBase.func_176562_d(this.field_150660_b, blockpos.func_177984_a()))
|
|
{
|
|
@@ -452,7 +529,7 @@
|
|
}
|
|
}
|
|
|
|
- if (blockrailbase$enumraildirection == BlockRailBase.EnumRailDirection.EAST_WEST)
|
|
+ if (blockrailbase$enumraildirection == BlockRailBase.EnumRailDirection.EAST_WEST && canMakeSlopes)
|
|
{
|
|
if (BlockRailBase.func_176562_d(this.field_150660_b, blockpos3.func_177984_a()))
|
|
{
|
|
@@ -595,7 +672,7 @@
|
|
}
|
|
}
|
|
|
|
- if (blockrailbase$enumraildirection == BlockRailBase.EnumRailDirection.NORTH_SOUTH)
|
|
+ if (blockrailbase$enumraildirection == BlockRailBase.EnumRailDirection.NORTH_SOUTH && canMakeSlopes)
|
|
{
|
|
if (BlockRailBase.func_176562_d(this.field_150660_b, blockpos.func_177984_a()))
|
|
{
|
|
@@ -608,7 +685,7 @@
|
|
}
|
|
}
|
|
|
|
- if (blockrailbase$enumraildirection == BlockRailBase.EnumRailDirection.EAST_WEST)
|
|
+ if (blockrailbase$enumraildirection == BlockRailBase.EnumRailDirection.EAST_WEST && canMakeSlopes)
|
|
{
|
|
if (BlockRailBase.func_176562_d(this.field_150660_b, blockpos3.func_177984_a()))
|
|
{
|