mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-13 16:54:22 +00:00
Between 1.6 and 1.7 the return value to BlockRailBase.isFlexibleRail() was inverted. While this is not a huge deal and could be worked around by simply inverting your return value, it does mean its no longer consistent with the function name and javadocs.
209 lines
7.3 KiB
Diff
209 lines
7.3 KiB
Diff
--- ../src-base/minecraft/net/minecraft/block/BlockRailBase.java
|
|
+++ ../src-work/minecraft/net/minecraft/block/BlockRailBase.java
|
|
@@ -5,6 +5,7 @@
|
|
import java.util.Random;
|
|
import net.minecraft.block.material.Material;
|
|
import net.minecraft.creativetab.CreativeTabs;
|
|
+import net.minecraft.entity.item.EntityMinecart;
|
|
import net.minecraft.init.Blocks;
|
|
import net.minecraft.util.AxisAlignedBB;
|
|
import net.minecraft.util.MovingObjectPosition;
|
|
@@ -25,7 +26,7 @@
|
|
|
|
public static final boolean func_150051_a(Block p_150051_0_)
|
|
{
|
|
- return p_150051_0_ == Blocks.field_150448_aq || p_150051_0_ == Blocks.field_150318_D || p_150051_0_ == Blocks.field_150319_E || p_150051_0_ == Blocks.field_150408_cc;
|
|
+ return p_150051_0_ instanceof BlockRailBase;
|
|
}
|
|
|
|
protected BlockRailBase(boolean p_i45389_1_)
|
|
@@ -78,7 +79,7 @@
|
|
|
|
public int func_149645_b()
|
|
{
|
|
- return 9;
|
|
+ return renderType;
|
|
}
|
|
|
|
public int func_149745_a(Random p_149745_1_)
|
|
@@ -193,6 +194,111 @@
|
|
}
|
|
}
|
|
|
|
+ /* ======================================== FORGE START =====================================*/
|
|
+ /**
|
|
+ * Return true if the rail can make corners.
|
|
+ * Used by placement logic.
|
|
+ * @param world The world.
|
|
+ * @param x The rail X coordinate.
|
|
+ * @param y The rail Y coordinate.
|
|
+ * @param z The rail Z coordinate.
|
|
+ * @return True if the rail can make corners.
|
|
+ */
|
|
+ public boolean isFlexibleRail(IBlockAccess world, int y, int x, int z)
|
|
+ {
|
|
+ return !func_150050_e();
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Returns true if the rail can make up and down slopes.
|
|
+ * Used by placement logic.
|
|
+ * @param world The world.
|
|
+ * @param x The rail X coordinate.
|
|
+ * @param y The rail Y coordinate.
|
|
+ * @param z The rail Z coordinate.
|
|
+ * @return True if the rail can make slopes.
|
|
+ */
|
|
+ public boolean canMakeSlopes(IBlockAccess world, int x, int y, int z)
|
|
+ {
|
|
+ return true;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Return the rail's metadata (without the power bit if the rail uses one).
|
|
+ * Can be used to make the cart think the rail something other than it is,
|
|
+ * for example when making diamond junctions or switches.
|
|
+ * The cart parameter will often be null unless it it called from EntityMinecart.
|
|
+ *
|
|
+ * Valid rail metadata is defined as follows:
|
|
+ * 0x0: flat track going North-South
|
|
+ * 0x1: flat track going West-East
|
|
+ * 0x2: track ascending to the East
|
|
+ * 0x3: track ascending to the West
|
|
+ * 0x4: track ascending to the North
|
|
+ * 0x5: track ascending to the South
|
|
+ * 0x6: WestNorth corner (connecting East and South)
|
|
+ * 0x7: EastNorth corner (connecting West and South)
|
|
+ * 0x8: EastSouth corner (connecting West and North)
|
|
+ * 0x9: WestSouth corner (connecting East and North)
|
|
+ *
|
|
+ * @param world The world.
|
|
+ * @param cart The cart asking for the metadata, null if it is not called by EntityMinecart.
|
|
+ * @param y The rail X coordinate.
|
|
+ * @param x The rail Y coordinate.
|
|
+ * @param z The rail Z coordinate.
|
|
+ * @return The metadata.
|
|
+ */
|
|
+ public int getBasicRailMetadata(IBlockAccess world, EntityMinecart cart, int x, int y, int z)
|
|
+ {
|
|
+ int meta = world.func_72805_g(x, y, z);
|
|
+ if(func_150050_e())
|
|
+ {
|
|
+ meta = meta & 7;
|
|
+ }
|
|
+ return meta;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * 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 x The rail X coordinate.
|
|
+ * @param y The rail Y coordinate.
|
|
+ * @param z The rail Z coordinate.
|
|
+ * @return The max speed of the current rail.
|
|
+ */
|
|
+ public float getRailMaxSpeed(World world, EntityMinecart cart, int y, int x, int z)
|
|
+ {
|
|
+ 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 y The rail X coordinate.
|
|
+ * @param x The rail Y coordinate.
|
|
+ * @param z The rail Z coordinate.
|
|
+ */
|
|
+ public void onMinecartPass(World world, EntityMinecart cart, int y, int x, int z)
|
|
+ {
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Forge: Moved render type to a field and a setter.
|
|
+ * This allows for a mod to change the render type
|
|
+ * for vanilla rails, and any mod rails that extend
|
|
+ * this class.
|
|
+ */
|
|
+ private int renderType = 9;
|
|
+
|
|
+ public void setRenderType(int value)
|
|
+ {
|
|
+ renderType = value;
|
|
+ }
|
|
+ /* ======================================== FORGE END =====================================*/
|
|
+
|
|
public class Rail
|
|
{
|
|
private World field_150660_b;
|
|
@@ -202,6 +308,7 @@
|
|
private final boolean field_150656_f;
|
|
private List field_150657_g = new ArrayList();
|
|
private static final String __OBFID = "CL_00000196";
|
|
+ private final boolean canMakeSlopes;
|
|
|
|
public Rail(World p_i45388_2_, int p_i45388_3_, int p_i45388_4_, int p_i45388_5_)
|
|
{
|
|
@@ -209,19 +316,10 @@
|
|
this.field_150661_c = p_i45388_3_;
|
|
this.field_150658_d = p_i45388_4_;
|
|
this.field_150659_e = p_i45388_5_;
|
|
- Block block = p_i45388_2_.func_147439_a(p_i45388_3_, p_i45388_4_, p_i45388_5_);
|
|
- int l = p_i45388_2_.func_72805_g(p_i45388_3_, p_i45388_4_, p_i45388_5_);
|
|
-
|
|
- if (((BlockRailBase)block).field_150053_a)
|
|
- {
|
|
- this.field_150656_f = true;
|
|
- l &= -9;
|
|
- }
|
|
- else
|
|
- {
|
|
- this.field_150656_f = false;
|
|
- }
|
|
-
|
|
+ BlockRailBase block = (BlockRailBase)p_i45388_2_.func_147439_a(p_i45388_3_, p_i45388_4_, p_i45388_5_);
|
|
+ int l = block.getBasicRailMetadata(p_i45388_2_, null, p_i45388_3_, p_i45388_4_, p_i45388_5_);
|
|
+ this.field_150656_f = !block.isFlexibleRail(p_i45388_2_, p_i45388_3_, p_i45388_4_, p_i45388_5_);
|
|
+ canMakeSlopes = block.canMakeSlopes(p_i45388_2_, p_i45388_3_, p_i45388_4_, p_i45388_5_);
|
|
this.func_150648_a(l);
|
|
}
|
|
|
|
@@ -412,7 +510,7 @@
|
|
}
|
|
}
|
|
|
|
- if (b0 == 0)
|
|
+ if (b0 == 0 && canMakeSlopes)
|
|
{
|
|
if (BlockRailBase.func_150049_b_(this.field_150660_b, this.field_150661_c, this.field_150658_d + 1, this.field_150659_e - 1))
|
|
{
|
|
@@ -425,7 +523,7 @@
|
|
}
|
|
}
|
|
|
|
- if (b0 == 1)
|
|
+ if (b0 == 1 && canMakeSlopes)
|
|
{
|
|
if (BlockRailBase.func_150049_b_(this.field_150660_b, this.field_150661_c + 1, this.field_150658_d + 1, this.field_150659_e))
|
|
{
|
|
@@ -570,7 +668,7 @@
|
|
}
|
|
}
|
|
|
|
- if (b0 == 0)
|
|
+ if (b0 == 0 && canMakeSlopes)
|
|
{
|
|
if (BlockRailBase.func_150049_b_(this.field_150660_b, this.field_150661_c, this.field_150658_d + 1, this.field_150659_e - 1))
|
|
{
|
|
@@ -583,7 +681,7 @@
|
|
}
|
|
}
|
|
|
|
- if (b0 == 1)
|
|
+ if (b0 == 1 && canMakeSlopes)
|
|
{
|
|
if (BlockRailBase.func_150049_b_(this.field_150660_b, this.field_150661_c + 1, this.field_150658_d + 1, this.field_150659_e))
|
|
{
|