diff --git a/common/buildcraft/BuildCraftTransport.java b/common/buildcraft/BuildCraftTransport.java
index 026a147b..6d3edfe7 100644
--- a/common/buildcraft/BuildCraftTransport.java
+++ b/common/buildcraft/BuildCraftTransport.java
@@ -313,28 +313,28 @@ public class BuildCraftTransport {
// 1, 0), Block.glass, new ItemStack(Item.dyePowder, 1, 11));
Property redPipeWireId = BuildCraftCore.mainConfiguration.get(Configuration.CATEGORY_ITEM, "redPipeWire.id", DefaultProps.RED_PIPE_WIRE);
- redPipeWire = new ItemBuildCraft(redPipeWireId.getInt());
+ redPipeWire = new ItemBuildCraft(redPipeWireId.getInt()).setPassSneakClick(true);
redPipeWire.setUnlocalizedName("redPipeWire");
LanguageRegistry.addName(redPipeWire, "Red Pipe Wire");
AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(Item.dyePowder, 1, 1), new ItemStack(Item.redstone, 1),
new ItemStack(Item.ingotIron, 1)}, 500, new ItemStack(redPipeWire, 8)));
Property bluePipeWireId = BuildCraftCore.mainConfiguration.get(Configuration.CATEGORY_ITEM, "bluePipeWire.id", DefaultProps.BLUE_PIPE_WIRE);
- bluePipeWire = new ItemBuildCraft(bluePipeWireId.getInt());
+ bluePipeWire = new ItemBuildCraft(bluePipeWireId.getInt()).setPassSneakClick(true);
bluePipeWire.setUnlocalizedName("bluePipeWire");
LanguageRegistry.addName(bluePipeWire, "Blue Pipe Wire");
AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(Item.dyePowder, 1, 4), new ItemStack(Item.redstone, 1),
new ItemStack(Item.ingotIron, 1)}, 500, new ItemStack(bluePipeWire, 8)));
Property greenPipeWireId = BuildCraftCore.mainConfiguration.get(Configuration.CATEGORY_ITEM, "greenPipeWire.id", DefaultProps.GREEN_PIPE_WIRE);
- greenPipeWire = new ItemBuildCraft(greenPipeWireId.getInt());
+ greenPipeWire = new ItemBuildCraft(greenPipeWireId.getInt()).setPassSneakClick(true);
greenPipeWire.setUnlocalizedName("greenPipeWire");
LanguageRegistry.addName(greenPipeWire, "Green Pipe Wire");
AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(Item.dyePowder, 1, 2), new ItemStack(Item.redstone, 1),
new ItemStack(Item.ingotIron, 1)}, 500, new ItemStack(greenPipeWire, 8)));
Property yellowPipeWireId = BuildCraftCore.mainConfiguration.get(Configuration.CATEGORY_ITEM, "yellowPipeWire.id", DefaultProps.YELLOW_PIPE_WIRE);
- yellowPipeWire = new ItemBuildCraft(yellowPipeWireId.getInt());
+ yellowPipeWire = new ItemBuildCraft(yellowPipeWireId.getInt()).setPassSneakClick(true);
yellowPipeWire.setUnlocalizedName("yellowPipeWire");
LanguageRegistry.addName(yellowPipeWire, "Yellow Pipe Wire");
AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(new ItemStack[]{new ItemStack(Item.dyePowder, 1, 11), new ItemStack(Item.redstone, 1),
diff --git a/common/buildcraft/core/CoreConstants.java b/common/buildcraft/core/CoreConstants.java
new file mode 100644
index 00000000..eb9ab89d
--- /dev/null
+++ b/common/buildcraft/core/CoreConstants.java
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) SpaceToad, 2011-2012
+ * http://www.mod-buildcraft.com
+ *
+ * BuildCraft is distributed under the terms of the Minecraft Mod Public
+ * License 1.0, or MMPL. Please check the contents of the license located in
+ * http://www.mod-buildcraft.com/MMPL-1.0.txt
+ */
+package buildcraft.core;
+
+/**
+ *
+ * @author CovertJaguar
+ */
+public class CoreConstants {
+
+ public static final float PIPE_MIN_POS = 0.25F;
+ public static final float PIPE_MAX_POS = 0.75F;
+}
diff --git a/common/buildcraft/core/ItemBuildCraft.java b/common/buildcraft/core/ItemBuildCraft.java
index 42a8467b..57baa729 100644
--- a/common/buildcraft/core/ItemBuildCraft.java
+++ b/common/buildcraft/core/ItemBuildCraft.java
@@ -1,12 +1,10 @@
/**
- * Copyright (c) SpaceToad, 2011
- * http://www.mod-buildcraft.com
+ * Copyright (c) SpaceToad, 2011 http://www.mod-buildcraft.com
*
- * BuildCraft is distributed under the terms of the Minecraft Mod Public
- * License 1.0, or MMPL. Please check the contents of the license located in
+ * BuildCraft is distributed under the terms of the Minecraft Mod Public License
+ * 1.0, or MMPL. Please check the contents of the license located in
* http://www.mod-buildcraft.com/MMPL-1.0.txt
*/
-
package buildcraft.core;
import buildcraft.core.utils.StringUtils;
@@ -15,10 +13,13 @@ import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
public class ItemBuildCraft extends Item {
private String iconName;
+ private boolean passSneakClick = false;
+
public ItemBuildCraft(int i) {
super(i);
setCreativeTab(CreativeTabBuildCraft.tabBuildCraft);
@@ -36,9 +37,18 @@ public class ItemBuildCraft extends Item {
}
@Override
- @SideOnly(Side.CLIENT)
- public void registerIcons(IconRegister par1IconRegister)
- {
- this.itemIcon = par1IconRegister.registerIcon("buildcraft:" + iconName);
- }
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IconRegister par1IconRegister) {
+ this.itemIcon = par1IconRegister.registerIcon("buildcraft:" + iconName);
+ }
+
+ public Item setPassSneakClick(boolean passClick) {
+ this.passSneakClick = passClick;
+ return this;
+ }
+
+ @Override
+ public boolean shouldPassSneakingClickToBlock(World par2World, int par4, int par5, int par6) {
+ return passSneakClick;
+ }
}
diff --git a/common/buildcraft/core/render/RenderingEntityBlocks.java b/common/buildcraft/core/render/RenderingEntityBlocks.java
index cf217e0f..cc4a8bc2 100644
--- a/common/buildcraft/core/render/RenderingEntityBlocks.java
+++ b/common/buildcraft/core/render/RenderingEntityBlocks.java
@@ -1,6 +1,7 @@
package buildcraft.core.render;
import buildcraft.BuildCraftCore;
+import buildcraft.core.CoreConstants;
import buildcraft.core.IInventoryRenderer;
import buildcraft.core.utils.Utils;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
@@ -57,7 +58,7 @@ public class RenderingEntityBlocks implements ISimpleBlockRenderingHandler {
} else if (block.getRenderType() == BuildCraftCore.legacyPipeModel) {
Tessellator tessellator = Tessellator.instance;
- block.setBlockBounds(Utils.pipeMinPos, 0.0F, Utils.pipeMinPos, Utils.pipeMaxPos, 1.0F, Utils.pipeMaxPos);
+ block.setBlockBounds(CoreConstants.PIPE_MIN_POS, 0.0F, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MAX_POS, 1.0F, CoreConstants.PIPE_MAX_POS);
renderer.setRenderBoundsFromBlock(block);
block.setBlockBoundsForItemRender();
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
@@ -116,8 +117,8 @@ public class RenderingEntityBlocks implements ISimpleBlockRenderingHandler {
/* LEGACY PIPE RENDERING and quarry frames! */
private void legacyPipeRender(RenderBlocks renderblocks, IBlockAccess iblockaccess, int i, int j, int k, Block block, int l) {
- float minSize = Utils.pipeMinPos;
- float maxSize = Utils.pipeMaxPos;
+ float minSize = CoreConstants.PIPE_MIN_POS;
+ float maxSize = CoreConstants.PIPE_MAX_POS;
block.setBlockBounds(minSize, minSize, minSize, maxSize, maxSize, maxSize);
renderblocks.setRenderBoundsFromBlock(block);
diff --git a/common/buildcraft/core/utils/MatrixTranformations.java b/common/buildcraft/core/utils/MatrixTranformations.java
new file mode 100644
index 00000000..c5eae1a4
--- /dev/null
+++ b/common/buildcraft/core/utils/MatrixTranformations.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) SpaceToad, 2011-2012
+ * http://www.mod-buildcraft.com
+ *
+ * BuildCraft is distributed under the terms of the Minecraft Mod Public
+ * License 1.0, or MMPL. Please check the contents of the license located in
+ * http://www.mod-buildcraft.com/MMPL-1.0.txt
+ */
+package buildcraft.core.utils;
+
+import net.minecraftforge.common.ForgeDirection;
+
+/**
+ *
+ * @author Krapht
+ */
+public class MatrixTranformations {
+
+ /**
+ * Mirrors the array on the Y axis by calculating offsets from 0.5F
+ *
+ * @param targetArray
+ */
+ public static void mirrorY(float[][] targetArray) {
+ float temp = targetArray[1][0];
+ targetArray[1][0] = (targetArray[1][1] - 0.5F) * -1F + 0.5F; // 1 -> 0.5F -> -0.5F -> 0F
+ targetArray[1][1] = (temp - 0.5F) * -1F + 0.5F; // 0 -> -0.5F -> 0.5F -> 1F
+ }
+
+ /**
+ * Shifts the coordinates around effectively rotating something. Zero state
+ * is DOWN then -> NORTH -> WEST Note - To obtain Position, do a mirrorY() before
+ * rotating
+ *
+ * @param targetArray the array that should be rotated
+ */
+ public static void rotate(float[][] targetArray) {
+ for (int i = 0; i < 2; i++) {
+ float temp = targetArray[2][i];
+ targetArray[2][i] = targetArray[1][i];
+ targetArray[1][i] = targetArray[0][i];
+ targetArray[0][i] = temp;
+ }
+ }
+
+ /**
+ * @param targetArray the array that should be transformed
+ * @param direction
+ */
+ public static void transform(float[][] targetArray, ForgeDirection direction) {
+ if ((direction.ordinal() & 0x1) == 1) {
+ mirrorY(targetArray);
+ }
+
+ for (int i = 0; i < (direction.ordinal() >> 1); i++) {
+ rotate(targetArray);
+ }
+ }
+
+ /**
+ * Clones both dimensions of a float[][]
+ *
+ * @param source the float[][] to deepClone
+ * @return
+ */
+ public static float[][] deepClone(float[][] source) {
+ float[][] target = source.clone();
+ for (int i = 0; i < target.length; i++) {
+ target[i] = source[i].clone();
+ }
+ return target;
+ }
+}
diff --git a/common/buildcraft/core/utils/Utils.java b/common/buildcraft/core/utils/Utils.java
index c4435fcb..435170de 100644
--- a/common/buildcraft/core/utils/Utils.java
+++ b/common/buildcraft/core/utils/Utils.java
@@ -47,9 +47,6 @@ import net.minecraftforge.common.ForgeDirection;
public class Utils {
public static final Random RANDOM = new Random();
- public static final float pipeMinPos = 0.25F;
- public static final float pipeMaxPos = 0.75F;
- public static float pipeNormalSpeed = 0.01F;
private static final List directions = new ArrayList(Arrays.asList(ForgeDirection.VALID_DIRECTIONS));
/* IINVENTORY HELPERS */
@@ -80,14 +77,6 @@ public class Utils {
}
- /**
- * Depending on the kind of item in the pipe, set the floor at a different
- * level to optimize graphical aspect.
- */
- public static float getPipeFloorOf(ItemStack item) {
- return pipeMinPos;
- }
-
public static ForgeDirection get2dOrientation(Position pos1, Position pos2) {
double Dx = pos1.x - pos2.x;
double Dz = pos1.z - pos2.z;
@@ -338,7 +327,7 @@ public class Utils {
if (tile instanceof IInventory && !CoreProxy.proxy.isRenderWorld(world)) {
if (!(tile instanceof IDropControlInventory) || ((IDropControlInventory) tile).doDrop()) {
InvUtils.dropItems(world, (IInventory) tile, i, j, k);
- InvUtils.wipeInventory((IInventory)tile);
+ InvUtils.wipeInventory((IInventory) tile);
}
}
diff --git a/common/buildcraft/factory/BlockFrame.java b/common/buildcraft/factory/BlockFrame.java
index a6a155db..fa063b39 100644
--- a/common/buildcraft/factory/BlockFrame.java
+++ b/common/buildcraft/factory/BlockFrame.java
@@ -10,6 +10,7 @@
package buildcraft.factory;
import buildcraft.BuildCraftCore;
+import buildcraft.core.CoreConstants;
import buildcraft.core.IFramePipeConnection;
import buildcraft.core.utils.Utils;
import cpw.mods.fml.relauncher.Side;
@@ -69,7 +70,7 @@ public class BlockFrame extends Block implements IFramePipeConnection {
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int i, int j, int k) {
- float xMin = Utils.pipeMinPos, xMax = Utils.pipeMaxPos, yMin = Utils.pipeMinPos, yMax = Utils.pipeMaxPos, zMin = Utils.pipeMinPos, zMax = Utils.pipeMaxPos;
+ float xMin = CoreConstants.PIPE_MIN_POS, xMax = CoreConstants.PIPE_MAX_POS, yMin = CoreConstants.PIPE_MIN_POS, yMax = CoreConstants.PIPE_MAX_POS, zMin = CoreConstants.PIPE_MIN_POS, zMax = CoreConstants.PIPE_MAX_POS;
if (Utils.checkLegacyPipesConnections(world, i, j, k, i - 1, j, k)) {
xMin = 0.0F;
@@ -107,36 +108,36 @@ public class BlockFrame extends Block implements IFramePipeConnection {
@SuppressWarnings("rawtypes")
@Override
public void addCollisionBoxesToList(World world, int i, int j, int k, AxisAlignedBB axisalignedbb, List arraylist, Entity par7Entity) {
- setBlockBounds(Utils.pipeMinPos, Utils.pipeMinPos, Utils.pipeMinPos, Utils.pipeMaxPos, Utils.pipeMaxPos, Utils.pipeMaxPos);
+ setBlockBounds(CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS);
super.addCollisionBoxesToList(world, i, j, k, axisalignedbb, arraylist, par7Entity);
if (Utils.checkLegacyPipesConnections(world, i, j, k, i - 1, j, k)) {
- setBlockBounds(0.0F, Utils.pipeMinPos, Utils.pipeMinPos, Utils.pipeMaxPos, Utils.pipeMaxPos, Utils.pipeMaxPos);
+ setBlockBounds(0.0F, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS);
super.addCollisionBoxesToList(world, i, j, k, axisalignedbb, arraylist, par7Entity);
}
if (Utils.checkLegacyPipesConnections(world, i, j, k, i + 1, j, k)) {
- setBlockBounds(Utils.pipeMinPos, Utils.pipeMinPos, Utils.pipeMinPos, 1.0F, Utils.pipeMaxPos, Utils.pipeMaxPos);
+ setBlockBounds(CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, 1.0F, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS);
super.addCollisionBoxesToList(world, i, j, k, axisalignedbb, arraylist, par7Entity);
}
if (Utils.checkLegacyPipesConnections(world, i, j, k, i, j - 1, k)) {
- setBlockBounds(Utils.pipeMinPos, 0.0F, Utils.pipeMinPos, Utils.pipeMaxPos, Utils.pipeMaxPos, Utils.pipeMaxPos);
+ setBlockBounds(CoreConstants.PIPE_MIN_POS, 0.0F, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS);
super.addCollisionBoxesToList(world, i, j, k, axisalignedbb, arraylist, par7Entity);
}
if (Utils.checkLegacyPipesConnections(world, i, j, k, i, j + 1, k)) {
- setBlockBounds(Utils.pipeMinPos, Utils.pipeMinPos, Utils.pipeMinPos, Utils.pipeMaxPos, 1.0F, Utils.pipeMaxPos);
+ setBlockBounds(CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MAX_POS, 1.0F, CoreConstants.PIPE_MAX_POS);
super.addCollisionBoxesToList(world, i, j, k, axisalignedbb, arraylist, par7Entity);
}
if (Utils.checkLegacyPipesConnections(world, i, j, k, i, j, k - 1)) {
- setBlockBounds(Utils.pipeMinPos, Utils.pipeMinPos, 0.0F, Utils.pipeMaxPos, Utils.pipeMaxPos, Utils.pipeMaxPos);
+ setBlockBounds(CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, 0.0F, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS);
super.addCollisionBoxesToList(world, i, j, k, axisalignedbb, arraylist, par7Entity);
}
if (Utils.checkLegacyPipesConnections(world, i, j, k, i, j, k + 1)) {
- setBlockBounds(Utils.pipeMinPos, Utils.pipeMinPos, Utils.pipeMinPos, Utils.pipeMaxPos, Utils.pipeMaxPos, 1.0F);
+ setBlockBounds(CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS, 1.0F);
super.addCollisionBoxesToList(world, i, j, k, axisalignedbb, arraylist, par7Entity);
}
@@ -145,7 +146,7 @@ public class BlockFrame extends Block implements IFramePipeConnection {
@Override
public MovingObjectPosition collisionRayTrace(World world, int i, int j, int k, Vec3 vec3d, Vec3 vec3d1) {
- float xMin = Utils.pipeMinPos, xMax = Utils.pipeMaxPos, yMin = Utils.pipeMinPos, yMax = Utils.pipeMaxPos, zMin = Utils.pipeMinPos, zMax = Utils.pipeMaxPos;
+ float xMin = CoreConstants.PIPE_MIN_POS, xMax = CoreConstants.PIPE_MAX_POS, yMin = CoreConstants.PIPE_MIN_POS, yMax = CoreConstants.PIPE_MAX_POS, zMin = CoreConstants.PIPE_MIN_POS, zMax = CoreConstants.PIPE_MAX_POS;
if (Utils.checkLegacyPipesConnections(world, i, j, k, i - 1, j, k)) {
xMin = 0.0F;
diff --git a/common/buildcraft/factory/BlockPlainPipe.java b/common/buildcraft/factory/BlockPlainPipe.java
index 13a0f444..bba34558 100644
--- a/common/buildcraft/factory/BlockPlainPipe.java
+++ b/common/buildcraft/factory/BlockPlainPipe.java
@@ -9,8 +9,8 @@
package buildcraft.factory;
+import buildcraft.core.CoreConstants;
import buildcraft.core.IFramePipeConnection;
-import buildcraft.core.utils.Utils;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.util.ArrayList;
@@ -26,13 +26,13 @@ public class BlockPlainPipe extends Block implements IFramePipeConnection {
public BlockPlainPipe(int i) {
super(i, Material.glass);
- minX = Utils.pipeMinPos;
+ minX = CoreConstants.PIPE_MIN_POS;
minY = 0.0;
- minZ = Utils.pipeMinPos;
+ minZ = CoreConstants.PIPE_MIN_POS;
- maxX = Utils.pipeMaxPos;
+ maxX = CoreConstants.PIPE_MAX_POS;
maxY = 1.0;
- maxZ = Utils.pipeMaxPos;
+ maxZ = CoreConstants.PIPE_MAX_POS;
}
@Override
diff --git a/common/buildcraft/factory/TilePump.java b/common/buildcraft/factory/TilePump.java
index 04d96439..87a1b948 100644
--- a/common/buildcraft/factory/TilePump.java
+++ b/common/buildcraft/factory/TilePump.java
@@ -16,6 +16,7 @@ import buildcraft.api.power.PowerHandler;
import buildcraft.api.power.PowerHandler.PowerReceiver;
import buildcraft.api.power.PowerHandler.Type;
import buildcraft.core.BlockIndex;
+import buildcraft.core.CoreConstants;
import buildcraft.core.EntityBlock;
import buildcraft.core.IMachine;
import buildcraft.core.TileBuffer;
@@ -370,11 +371,11 @@ public class TilePump extends TileBuildCraft implements IMachine, IPowerReceptor
private void setTubePosition() {
if (tube != null) {
- tube.iSize = Utils.pipeMaxPos - Utils.pipeMinPos;
- tube.kSize = Utils.pipeMaxPos - Utils.pipeMinPos;
+ tube.iSize = CoreConstants.PIPE_MAX_POS - CoreConstants.PIPE_MIN_POS;
+ tube.kSize = CoreConstants.PIPE_MAX_POS - CoreConstants.PIPE_MIN_POS;
tube.jSize = yCoord - tube.posY;
- tube.setPosition(xCoord + Utils.pipeMinPos, tubeY, zCoord + Utils.pipeMinPos);
+ tube.setPosition(xCoord + CoreConstants.PIPE_MIN_POS, tubeY, zCoord + CoreConstants.PIPE_MIN_POS);
}
}
diff --git a/common/buildcraft/factory/TileQuarry.java b/common/buildcraft/factory/TileQuarry.java
index 837f18b6..a995dc71 100644
--- a/common/buildcraft/factory/TileQuarry.java
+++ b/common/buildcraft/factory/TileQuarry.java
@@ -11,7 +11,6 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Set;
-import net.minecraft.block.Block;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
@@ -33,6 +32,7 @@ import buildcraft.api.power.IPowerReceptor;
import buildcraft.api.power.PowerHandler;
import buildcraft.api.power.PowerHandler.PowerReceiver;
import buildcraft.core.Box;
+import buildcraft.core.CoreConstants;
import buildcraft.core.DefaultAreaProvider;
import buildcraft.core.EntityRobot;
import buildcraft.core.IBuilderInventory;
@@ -128,9 +128,9 @@ public class TileQuarry extends TileBuildCraft implements IMachine, IPowerRecept
private void createArm() {
- worldObj.spawnEntityInWorld(new EntityMechanicalArm(worldObj, box.xMin + Utils.pipeMaxPos, yCoord + bluePrintBuilder.bluePrint.sizeY - 1
- + Utils.pipeMinPos, box.zMin + Utils.pipeMaxPos, bluePrintBuilder.bluePrint.sizeX - 2 + Utils.pipeMinPos * 2, bluePrintBuilder.bluePrint.sizeZ
- - 2 + Utils.pipeMinPos * 2, this));
+ worldObj.spawnEntityInWorld(new EntityMechanicalArm(worldObj, box.xMin + CoreConstants.PIPE_MAX_POS, yCoord + bluePrintBuilder.bluePrint.sizeY - 1
+ + CoreConstants.PIPE_MIN_POS, box.zMin + CoreConstants.PIPE_MAX_POS, bluePrintBuilder.bluePrint.sizeX - 2 + CoreConstants.PIPE_MIN_POS * 2, bluePrintBuilder.bluePrint.sizeZ
+ - 2 + CoreConstants.PIPE_MIN_POS * 2, this));
}
// Callback from the arm once it's created
diff --git a/common/buildcraft/silicon/SiliconRenderBlock.java b/common/buildcraft/silicon/SiliconRenderBlock.java
index 0732e9e6..fcb1f0f8 100644
--- a/common/buildcraft/silicon/SiliconRenderBlock.java
+++ b/common/buildcraft/silicon/SiliconRenderBlock.java
@@ -9,7 +9,7 @@
package buildcraft.silicon;
-import buildcraft.core.utils.Utils;
+import buildcraft.core.CoreConstants;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
@@ -121,7 +121,7 @@ public class SiliconRenderBlock implements ISimpleBlockRenderingHandler {
@Override
public void renderInventoryBlock(Block block, int i, int j, RenderBlocks renderblocks) {
- block.setBlockBounds(Utils.pipeMinPos, 0.0F, Utils.pipeMinPos, Utils.pipeMaxPos, 1.0F, Utils.pipeMaxPos);
+ block.setBlockBounds(CoreConstants.PIPE_MIN_POS, 0.0F, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MAX_POS, 1.0F, CoreConstants.PIPE_MAX_POS);
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
block.setBlockBounds(0.0F, 0.0F, 0.0F, 1, 4F / 16F, 1);
diff --git a/common/buildcraft/transport/BlockGenericPipe.java b/common/buildcraft/transport/BlockGenericPipe.java
index 15d05963..f1e6d8ee 100644
--- a/common/buildcraft/transport/BlockGenericPipe.java
+++ b/common/buildcraft/transport/BlockGenericPipe.java
@@ -40,30 +40,45 @@ import buildcraft.api.tools.IToolWrench;
import buildcraft.api.transport.IPipe;
import buildcraft.api.transport.ISolidSideTile;
import buildcraft.core.BlockIndex;
+import buildcraft.core.CoreConstants;
import buildcraft.core.proxy.CoreProxy;
import buildcraft.core.utils.Utils;
-import buildcraft.transport.render.PipeRendererWorld;
+import buildcraft.core.utils.MatrixTranformations;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
+import java.util.Arrays;
+import net.minecraft.client.Minecraft;
public class BlockGenericPipe extends BlockContainer {
static enum Part {
Pipe,
- Gate
+ Gate,
+ Facade,
+ Plug
}
static class RaytraceResult {
- RaytraceResult(Part hitPart, MovingObjectPosition movingObjectPosition) {
+ RaytraceResult(Part hitPart, MovingObjectPosition movingObjectPosition, AxisAlignedBB boundingBox, ForgeDirection side) {
this.hitPart = hitPart;
this.movingObjectPosition = movingObjectPosition;
+ this.boundingBox = boundingBox;
+ this.sideHit = side;
+ }
+ public final Part hitPart;
+ public final MovingObjectPosition movingObjectPosition;
+ public final AxisAlignedBB boundingBox;
+ public final ForgeDirection sideHit;
+
+ @Override
+ public String toString() {
+ return String.format("RayTraceResult: %s, %s", hitPart == null ? "null" : hitPart.name(), boundingBox == null ? "null" : boundingBox.toString());
}
- public Part hitPart;
- public MovingObjectPosition movingObjectPosition;
}
+ private static final ForgeDirection[] DIR_VALUES = ForgeDirection.values();
private static Random rand = new Random();
private boolean skippedFirstIconRegister;
private char renderAxis = 'a';
@@ -130,7 +145,7 @@ public class BlockGenericPipe extends BlockContainer {
@SuppressWarnings("rawtypes")
@Override
public void addCollisionBoxesToList(World world, int i, int j, int k, AxisAlignedBB axisalignedbb, List arraylist, Entity par7Entity) {
- setBlockBounds(Utils.pipeMinPos, Utils.pipeMinPos, Utils.pipeMinPos, Utils.pipeMaxPos, Utils.pipeMaxPos, Utils.pipeMaxPos);
+ setBlockBounds(CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS);
super.addCollisionBoxesToList(world, i, j, k, axisalignedbb, arraylist, par7Entity);
TileEntity tile1 = world.getBlockTileEntity(i, j, k);
@@ -138,36 +153,36 @@ public class BlockGenericPipe extends BlockContainer {
TileGenericPipe tileG = (TileGenericPipe) tile1;
if (tileG.isPipeConnected(ForgeDirection.WEST)) {
- setBlockBounds(0.0F, Utils.pipeMinPos, Utils.pipeMinPos, Utils.pipeMaxPos, Utils.pipeMaxPos, Utils.pipeMaxPos);
+ setBlockBounds(0.0F, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS);
super.addCollisionBoxesToList(world, i, j, k, axisalignedbb, arraylist, par7Entity);
}
if (tileG.isPipeConnected(ForgeDirection.EAST)) {
- setBlockBounds(Utils.pipeMinPos, Utils.pipeMinPos, Utils.pipeMinPos, 1.0F, Utils.pipeMaxPos, Utils.pipeMaxPos);
+ setBlockBounds(CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, 1.0F, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS);
super.addCollisionBoxesToList(world, i, j, k, axisalignedbb, arraylist, par7Entity);
}
if (tileG.isPipeConnected(ForgeDirection.DOWN)) {
- setBlockBounds(Utils.pipeMinPos, 0.0F, Utils.pipeMinPos, Utils.pipeMaxPos, Utils.pipeMaxPos, Utils.pipeMaxPos);
+ setBlockBounds(CoreConstants.PIPE_MIN_POS, 0.0F, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS);
super.addCollisionBoxesToList(world, i, j, k, axisalignedbb, arraylist, par7Entity);
}
if (tileG.isPipeConnected(ForgeDirection.UP)) {
- setBlockBounds(Utils.pipeMinPos, Utils.pipeMinPos, Utils.pipeMinPos, Utils.pipeMaxPos, 1.0F, Utils.pipeMaxPos);
+ setBlockBounds(CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MAX_POS, 1.0F, CoreConstants.PIPE_MAX_POS);
super.addCollisionBoxesToList(world, i, j, k, axisalignedbb, arraylist, par7Entity);
}
if (tileG.isPipeConnected(ForgeDirection.NORTH)) {
- setBlockBounds(Utils.pipeMinPos, Utils.pipeMinPos, 0.0F, Utils.pipeMaxPos, Utils.pipeMaxPos, Utils.pipeMaxPos);
+ setBlockBounds(CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, 0.0F, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS);
super.addCollisionBoxesToList(world, i, j, k, axisalignedbb, arraylist, par7Entity);
}
if (tileG.isPipeConnected(ForgeDirection.SOUTH)) {
- setBlockBounds(Utils.pipeMinPos, Utils.pipeMinPos, Utils.pipeMinPos, Utils.pipeMaxPos, Utils.pipeMaxPos, 1.0F);
+ setBlockBounds(CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS, 1.0F);
super.addCollisionBoxesToList(world, i, j, k, axisalignedbb, arraylist, par7Entity);
}
- float facadeThickness = PipeRendererWorld.facadeThickness;
+ float facadeThickness = TransportConstants.FACADE_THICKNESS;
if (tileG.hasFacade(ForgeDirection.EAST)) {
setBlockBounds(1 - facadeThickness, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
@@ -202,61 +217,29 @@ public class BlockGenericPipe extends BlockContainer {
setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
}
+ @SideOnly(Side.CLIENT)
@Override
- public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int i, int j, int k) {
- float xMin = Utils.pipeMinPos, xMax = Utils.pipeMaxPos, yMin = Utils.pipeMinPos, yMax = Utils.pipeMaxPos, zMin = Utils.pipeMinPos, zMax = Utils.pipeMaxPos;
+ public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) {
+ RaytraceResult rayTraceResult = doRayTrace(world, x, y, z, Minecraft.getMinecraft().thePlayer);
- TileEntity tile1 = world.getBlockTileEntity(i, j, k);
-
- if (tile1 instanceof TileGenericPipe) {
- TileGenericPipe tileG = (TileGenericPipe) tile1;
- if (tileG.isPipeConnected(ForgeDirection.WEST) || tileG.hasFacade(ForgeDirection.WEST)) {
- xMin = 0.0F;
- }
-
- if (tileG.isPipeConnected(ForgeDirection.EAST) || tileG.hasFacade(ForgeDirection.EAST)) {
- xMax = 1.0F;
- }
-
- if (tileG.isPipeConnected(ForgeDirection.DOWN) || tileG.hasFacade(ForgeDirection.DOWN)) {
- yMin = 0.0F;
- }
-
- if (tileG.isPipeConnected(ForgeDirection.UP) || tileG.hasFacade(ForgeDirection.UP)) {
- yMax = 1.0F;
- }
-
- if (tileG.isPipeConnected(ForgeDirection.NORTH) || tileG.hasFacade(ForgeDirection.NORTH)) {
- zMin = 0.0F;
- }
-
- if (tileG.isPipeConnected(ForgeDirection.SOUTH) || tileG.hasFacade(ForgeDirection.SOUTH)) {
- zMax = 1.0F;
- }
-
- if (tileG.hasFacade(ForgeDirection.EAST) || tileG.hasFacade(ForgeDirection.WEST)) {
- yMin = 0.0F;
- yMax = 1.0F;
- zMin = 0.0F;
- zMax = 1.0F;
- }
-
- if (tileG.hasFacade(ForgeDirection.UP) || tileG.hasFacade(ForgeDirection.DOWN)) {
- xMin = 0.0F;
- xMax = 1.0F;
- zMin = 0.0F;
- zMax = 1.0F;
- }
-
- if (tileG.hasFacade(ForgeDirection.SOUTH) || tileG.hasFacade(ForgeDirection.NORTH)) {
- xMin = 0.0F;
- xMax = 1.0F;
- yMin = 0.0F;
- yMax = 1.0F;
+ if (rayTraceResult != null && rayTraceResult.boundingBox != null) {
+ AxisAlignedBB box = rayTraceResult.boundingBox;
+ switch (rayTraceResult.hitPart) {
+ case Gate:
+ case Plug: {
+ float scale = 0.001F;
+ box = box.expand(scale, scale, scale);
+ break;
+ }
+ case Pipe: {
+ float scale = 0.08F;
+ box = box.expand(scale, scale, scale);
+ break;
+ }
}
+ return box.getOffsetBoundingBox(x, y, z);
}
-
- return AxisAlignedBB.getBoundingBox((double) i + xMin, (double) j + yMin, (double) k + zMin, (double) i + xMax, (double) j + yMax, (double) k + zMax);
+ return super.getSelectedBoundingBoxFromPool(world, x, y, z).expand(-0.85F, -0.85F, -0.85F);
}
@Override
@@ -291,8 +274,6 @@ public class BlockGenericPipe extends BlockContainer {
}
private RaytraceResult doRayTrace(World world, int x, int y, int z, Vec3 origin, Vec3 direction) {
- float xMin = Utils.pipeMinPos, xMax = Utils.pipeMaxPos, yMin = Utils.pipeMinPos, yMax = Utils.pipeMaxPos, zMin = Utils.pipeMinPos, zMax = Utils.pipeMaxPos;
-
TileEntity pipeTileEntity = world.getBlockTileEntity(x, y, z);
TileGenericPipe tileG = null;
@@ -311,96 +292,60 @@ public class BlockGenericPipe extends BlockContainer {
* pipe hits along x, y, and z axis, gate (all 6 sides) [and
* wires+facades]
*/
- MovingObjectPosition[] hits = new MovingObjectPosition[9];
+ MovingObjectPosition[] hits = new MovingObjectPosition[25];
+ AxisAlignedBB[] boxes = new AxisAlignedBB[25];
+ ForgeDirection[] sideHit = new ForgeDirection[25];
+ Arrays.fill(sideHit, ForgeDirection.UNKNOWN);
- boolean needAxisCheck = false;
- boolean needCenterCheck = true;
+ // pipe
- // check along the x axis
-
- if (tileG.isPipeConnected(ForgeDirection.WEST)) {
- xMin = 0.0F;
- needAxisCheck = true;
- }
-
- if (tileG.isPipeConnected(ForgeDirection.WEST)) {
- xMax = 1.0F;
- needAxisCheck = true;
- }
-
- if (needAxisCheck) {
- setBlockBounds(xMin, yMin, zMin, xMax, yMax, zMax);
-
- hits[0] = super.collisionRayTrace(world, x, y, z, origin, direction);
- xMin = Utils.pipeMinPos;
- xMax = Utils.pipeMaxPos;
- needAxisCheck = false;
- needCenterCheck = false; // center already checked through this axis
- }
-
- // check along the y axis
-
- if (tileG.isPipeConnected(ForgeDirection.DOWN)) {
- yMin = 0.0F;
- needAxisCheck = true;
- }
-
- if (tileG.isPipeConnected(ForgeDirection.UP)) {
- yMax = 1.0F;
- needAxisCheck = true;
- }
-
- if (needAxisCheck) {
- setBlockBounds(xMin, yMin, zMin, xMax, yMax, zMax);
-
- hits[1] = super.collisionRayTrace(world, x, y, z, origin, direction);
- yMin = Utils.pipeMinPos;
- yMax = Utils.pipeMaxPos;
- needAxisCheck = false;
- needCenterCheck = false; // center already checked through this axis
- }
-
- // check along the z axis
-
- if (tileG.isPipeConnected(ForgeDirection.NORTH)) {
- zMin = 0.0F;
- needAxisCheck = true;
- }
-
- if (tileG.isPipeConnected(ForgeDirection.SOUTH)) {
- zMax = 1.0F;
- needAxisCheck = true;
- }
-
- if (needAxisCheck) {
- setBlockBounds(xMin, yMin, zMin, xMax, yMax, zMax);
-
- hits[2] = super.collisionRayTrace(world, x, y, z, origin, direction);
- zMin = Utils.pipeMinPos;
- zMax = Utils.pipeMaxPos;
- needAxisCheck = false;
- needCenterCheck = false; // center already checked through this axis
- }
-
- // check center (only if no axis were checked/the pipe has no connections)
-
- if (needCenterCheck) {
- setBlockBounds(xMin, yMin, zMin, xMax, yMax, zMax);
-
- hits[0] = super.collisionRayTrace(world, x, y, z, origin, direction);
+ for (ForgeDirection side : DIR_VALUES) {
+ if (side == ForgeDirection.UNKNOWN || tileG.isPipeConnected(side)) {
+ AxisAlignedBB bb = getPipeBoundingBox(side);
+ setBlockBounds(bb);
+ boxes[side.ordinal()] = bb;
+ hits[side.ordinal()] = super.collisionRayTrace(world, x, y, z, origin, direction);
+ sideHit[side.ordinal()] = side;
+ }
}
// gates
- if (pipe.hasGate()) {
- for (int side = 0; side < 6; side++) {
- setBlockBoundsToGate(ForgeDirection.VALID_DIRECTIONS[side]);
-
- hits[3 + side] = super.collisionRayTrace(world, x, y, z, origin, direction);
+ for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
+ if (pipe.hasGate(side)) {
+ AxisAlignedBB bb = getGateBoundingBox(side);
+ setBlockBounds(bb);
+ boxes[7 + side.ordinal()] = bb;
+ hits[7 + side.ordinal()] = super.collisionRayTrace(world, x, y, z, origin, direction);
+ sideHit[7 + side.ordinal()] = side;
}
}
- // TODO: check wires, facades
+ // facades
+
+ for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
+ if (tileG.hasFacade(side)) {
+ AxisAlignedBB bb = getFacadeBoundingBox(side);
+ setBlockBounds(bb);
+ boxes[13 + side.ordinal()] = bb;
+ hits[13 + side.ordinal()] = super.collisionRayTrace(world, x, y, z, origin, direction);
+ sideHit[13 + side.ordinal()] = side;
+ }
+ }
+
+ // plugs
+
+ for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
+ if (tileG.hasPlug(side)) {
+ AxisAlignedBB bb = getPlugBoundingBox(side);
+ setBlockBounds(bb);
+ boxes[19 + side.ordinal()] = bb;
+ hits[19 + side.ordinal()] = super.collisionRayTrace(world, x, y, z, origin, direction);
+ sideHit[19 + side.ordinal()] = side;
+ }
+ }
+
+ // TODO: check wires
// get closest hit
@@ -429,41 +374,96 @@ public class BlockGenericPipe extends BlockContainer {
} else {
Part hitPart;
- if (minIndex < 3) {
+ if (minIndex < 7) {
hitPart = Part.Pipe;
- } else {
+ } else if (minIndex < 13) {
hitPart = Part.Gate;
+ } else if (minIndex < 19) {
+ hitPart = Part.Facade;
+ } else {
+ hitPart = Part.Plug;
}
- return new RaytraceResult(hitPart, hits[minIndex]);
+ return new RaytraceResult(hitPart, hits[minIndex], boxes[minIndex], sideHit[minIndex]);
}
}
- private void setBlockBoundsToGate(ForgeDirection dir) {
- float min = Utils.pipeMinPos + 0.05F;
- float max = Utils.pipeMaxPos - 0.05F;
+ private void setBlockBounds(AxisAlignedBB bb) {
+ setBlockBounds((float) bb.minX, (float) bb.minY, (float) bb.minZ, (float) bb.maxX, (float) bb.maxY, (float) bb.maxZ);
+ }
- switch (dir) {
- case DOWN:
- setBlockBounds(min, Utils.pipeMinPos - 0.10F, min, max, Utils.pipeMinPos, max);
- break;
- case UP:
- setBlockBounds(min, Utils.pipeMaxPos, min, max, Utils.pipeMaxPos + 0.10F, max);
- break;
- case NORTH:
- setBlockBounds(min, min, Utils.pipeMinPos - 0.10F, max, max, Utils.pipeMinPos);
- break;
- case SOUTH:
- setBlockBounds(min, min, Utils.pipeMaxPos, max, max, Utils.pipeMaxPos + 0.10F);
- break;
- case WEST:
- setBlockBounds(Utils.pipeMinPos - 0.10F, min, min, Utils.pipeMinPos, max, max);
- break;
- default:
- case EAST:
- setBlockBounds(Utils.pipeMaxPos, min, min, Utils.pipeMaxPos + 0.10F, max, max);
- break;
+ private AxisAlignedBB getGateBoundingBox(ForgeDirection side) {
+ float min = CoreConstants.PIPE_MIN_POS + 0.05F;
+ float max = CoreConstants.PIPE_MAX_POS - 0.05F;
+
+ float[][] bounds = new float[3][2];
+ // X START - END
+ bounds[0][0] = min;
+ bounds[0][1] = max;
+ // Y START - END
+ bounds[1][0] = CoreConstants.PIPE_MIN_POS - 0.10F;
+ bounds[1][1] = CoreConstants.PIPE_MIN_POS;
+ // Z START - END
+ bounds[2][0] = min;
+ bounds[2][1] = max;
+
+ MatrixTranformations.transform(bounds, side);
+ return AxisAlignedBB.getAABBPool().getAABB(bounds[0][0], bounds[1][0], bounds[2][0], bounds[0][1], bounds[1][1], bounds[2][1]);
+ }
+
+ private AxisAlignedBB getFacadeBoundingBox(ForgeDirection side) {
+ float[][] bounds = new float[3][2];
+ // X START - END
+ bounds[0][0] = 0.0F;
+ bounds[0][1] = 1.0F;
+ // Y START - END
+ bounds[1][0] = 0.0F;
+ bounds[1][1] = TransportConstants.FACADE_THICKNESS;
+ // Z START - END
+ bounds[2][0] = 0.0F;
+ bounds[2][1] = 1.0F;
+
+ MatrixTranformations.transform(bounds, side);
+ return AxisAlignedBB.getAABBPool().getAABB(bounds[0][0], bounds[1][0], bounds[2][0], bounds[0][1], bounds[1][1], bounds[2][1]);
+ }
+
+ private AxisAlignedBB getPlugBoundingBox(ForgeDirection side) {
+ float[][] bounds = new float[3][2];
+ // X START - END
+ bounds[0][0] = 0.25F;
+ bounds[0][1] = 0.75F;
+ // Y START - END
+ bounds[1][0] = 0.125F;
+ bounds[1][1] = 0.251F;
+ // Z START - END
+ bounds[2][0] = 0.25F;
+ bounds[2][1] = 0.75F;
+
+ MatrixTranformations.transform(bounds, side);
+ return AxisAlignedBB.getAABBPool().getAABB(bounds[0][0], bounds[1][0], bounds[2][0], bounds[0][1], bounds[1][1], bounds[2][1]);
+ }
+
+ private AxisAlignedBB getPipeBoundingBox(ForgeDirection side) {
+ float min = CoreConstants.PIPE_MIN_POS;
+ float max = CoreConstants.PIPE_MAX_POS;
+
+ if (side == ForgeDirection.UNKNOWN) {
+ return AxisAlignedBB.getAABBPool().getAABB(min, min, min, max, max, max);
}
+
+ float[][] bounds = new float[3][2];
+ // X START - END
+ bounds[0][0] = min;
+ bounds[0][1] = max;
+ // Y START - END
+ bounds[1][0] = 0;
+ bounds[1][1] = min;
+ // Z START - END
+ bounds[2][0] = min;
+ bounds[2][1] = max;
+
+ MatrixTranformations.transform(bounds, side);
+ return AxisAlignedBB.getAABBPool().getAABB(bounds[0][0], bounds[1][0], bounds[2][0], bounds[0][1], bounds[1][1], bounds[2][1]);
}
public static void removePipe(Pipe pipe) {
@@ -619,91 +619,65 @@ public class BlockGenericPipe extends BlockContainer {
Pipe pipe = getPipe(world, x, y, z);
if (isValid(pipe)) {
+ ItemStack currentItem = player.getCurrentEquippedItem();
- // / Right click while sneaking without wrench to strip equipment
+ // Right click while sneaking with empty hand to strip equipment
// from the pipe.
- if (player.isSneaking()
- && (player.getCurrentEquippedItem() == null || !(player.getCurrentEquippedItem().getItem() instanceof IToolWrench))) {
-
- if (pipe.hasGate() || pipe.isWired())
- return stripEquipment(pipe);
-
- } else if (player.getCurrentEquippedItem() == null) {
+ if (player.isSneaking() && currentItem == null) {
+ if (stripEquipment(world, x, y, z, player, pipe))
+ return true;
+ } else if (currentItem == null) {
// Fall through the end of the test
- } else if (player.getCurrentEquippedItem().itemID == Item.sign.itemID)
+ } else if (currentItem.itemID == Item.sign.itemID)
// Sign will be placed anyway, so lets show the sign gui
return false;
- else if (player.getCurrentEquippedItem().getItem() instanceof ItemPipe)
+ else if (currentItem.getItem() instanceof ItemPipe)
return false;
- else if (player.getCurrentEquippedItem().getItem() instanceof IToolWrench)
+ else if (currentItem.getItem() instanceof IToolWrench)
// Only check the instance at this point. Call the IToolWrench
// interface callbacks for the individual pipe/logic calls
return pipe.blockActivated(player);
- else if (player.getCurrentEquippedItem().getItem() == BuildCraftTransport.redPipeWire) {
- if (!pipe.wireSet[IPipe.WireColor.Red.ordinal()]) {
- pipe.wireSet[IPipe.WireColor.Red.ordinal()] = true;
- if (!player.capabilities.isCreativeMode) {
- player.getCurrentEquippedItem().splitStack(1);
- }
- pipe.signalStrength[IPipe.WireColor.Red.ordinal()] = 0;
- pipe.container.scheduleNeighborChange();
+ else if (currentItem.getItem() == BuildCraftTransport.redPipeWire) {
+ if (addOrStripWire(player, pipe, IPipe.WireColor.Red)) {
return true;
}
- } else if (player.getCurrentEquippedItem().getItem() == BuildCraftTransport.bluePipeWire) {
- if (!pipe.wireSet[IPipe.WireColor.Blue.ordinal()]) {
- pipe.wireSet[IPipe.WireColor.Blue.ordinal()] = true;
- if (!player.capabilities.isCreativeMode) {
- player.getCurrentEquippedItem().splitStack(1);
- }
- pipe.signalStrength[IPipe.WireColor.Blue.ordinal()] = 0;
- pipe.container.scheduleNeighborChange();
+ } else if (currentItem.getItem() == BuildCraftTransport.bluePipeWire) {
+ if (addOrStripWire(player, pipe, IPipe.WireColor.Blue)) {
return true;
}
- } else if (player.getCurrentEquippedItem().getItem() == BuildCraftTransport.greenPipeWire) {
- if (!pipe.wireSet[IPipe.WireColor.Green.ordinal()]) {
- pipe.wireSet[IPipe.WireColor.Green.ordinal()] = true;
- if (!player.capabilities.isCreativeMode) {
- player.getCurrentEquippedItem().splitStack(1);
- }
- pipe.signalStrength[IPipe.WireColor.Green.ordinal()] = 0;
- pipe.container.scheduleNeighborChange();
+ } else if (currentItem.getItem() == BuildCraftTransport.greenPipeWire) {
+ if (addOrStripWire(player, pipe, IPipe.WireColor.Green)) {
return true;
}
- } else if (player.getCurrentEquippedItem().getItem() == BuildCraftTransport.yellowPipeWire) {
- if (!pipe.wireSet[IPipe.WireColor.Yellow.ordinal()]) {
- pipe.wireSet[IPipe.WireColor.Yellow.ordinal()] = true;
- if (!player.capabilities.isCreativeMode) {
- player.getCurrentEquippedItem().splitStack(1);
- }
- pipe.signalStrength[IPipe.WireColor.Yellow.ordinal()] = 0;
- pipe.container.scheduleNeighborChange();
+ } else if (currentItem.getItem() == BuildCraftTransport.yellowPipeWire) {
+ if (addOrStripWire(player, pipe, IPipe.WireColor.Yellow)) {
return true;
}
- } else if (player.getCurrentEquippedItem().itemID == BuildCraftTransport.pipeGate.itemID
- || player.getCurrentEquippedItem().itemID == BuildCraftTransport.pipeGateAutarchic.itemID)
- if (!pipe.hasGate()) {
-
- pipe.gate = Gate.makeGate(pipe, player.getCurrentEquippedItem());
- if (!player.capabilities.isCreativeMode) {
- player.getCurrentEquippedItem().splitStack(1);
- }
- pipe.container.scheduleRenderUpdate();
+ } else if (currentItem.getItem() instanceof ItemGate) {
+ if (addOrStripGate(world, x, y, z, player, pipe)) {
+ return true;
+ }
+ } else if (currentItem.getItem() instanceof ItemPlug) {
+ if (addOrStripPlug(world, x, y, z, player, ForgeDirection.getOrientation(side), pipe)) {
+ return true;
+ }
+ } else if (currentItem.getItem() instanceof ItemFacade)
+ if (addOrStripFacade(world, x, y, z, player, ForgeDirection.getOrientation(side), pipe)) {
return true;
}
- boolean openGateGui = false;
+ boolean clickedOnGate = false;
if (pipe.hasGate()) {
RaytraceResult rayTraceResult = doRayTrace(world, x, y, z, player);
if (rayTraceResult != null && rayTraceResult.hitPart == Part.Gate) {
- openGateGui = true;
+ clickedOnGate = true;
}
}
- if (openGateGui) {
+ if (clickedOnGate) {
pipe.gate.openGui(player);
-
return true;
} else
return pipe.blockActivated(player);
@@ -712,22 +686,32 @@ public class BlockGenericPipe extends BlockContainer {
return false;
}
- private boolean stripEquipment(Pipe pipe) {
-
- // Try to strip wires first, starting with yellow.
- for (IPipe.WireColor color : IPipe.WireColor.values()) {
- if (pipe.wireSet[color.reverse().ordinal()]) {
- if (!CoreProxy.proxy.isRenderWorld(pipe.container.worldObj)) {
- dropWire(color.reverse(), pipe);
- }
- pipe.wireSet[color.reverse().ordinal()] = false;
- // pipe.worldObj.markBlockNeedsUpdate(pipe.xCoord, pipe.yCoord, pipe.zCoord);
- pipe.container.scheduleRenderUpdate();
- return true;
+ private boolean addOrStripGate(World world, int x, int y, int z, EntityPlayer player, Pipe pipe) {
+ if (addGate(player, pipe))
+ return true;
+ if (player.isSneaking()) {
+ RaytraceResult rayTraceResult = doRayTrace(world, x, y, z, player);
+ if (rayTraceResult != null && rayTraceResult.hitPart == Part.Facade) {
+ if (stripGate(pipe))
+ return true;
}
}
+ return false;
+ }
- // Try to strip gate next
+ private boolean addGate(EntityPlayer player, Pipe pipe) {
+ if (!pipe.hasGate()) {
+ pipe.gate = Gate.makeGate(pipe, player.getCurrentEquippedItem());
+ if (!player.capabilities.isCreativeMode) {
+ player.getCurrentEquippedItem().splitStack(1);
+ }
+ pipe.container.scheduleRenderUpdate();
+ return true;
+ }
+ return false;
+ }
+
+ private boolean stripGate(Pipe pipe) {
if (pipe.hasGate()) {
if (!CoreProxy.proxy.isRenderWorld(pipe.container.worldObj)) {
pipe.gate.dropGate();
@@ -735,10 +719,116 @@ public class BlockGenericPipe extends BlockContainer {
pipe.resetGate();
return true;
}
-
return false;
}
+ private boolean addOrStripWire(EntityPlayer player, Pipe pipe, IPipe.WireColor color) {
+ if (addWire(pipe, color)) {
+ if (!player.capabilities.isCreativeMode) {
+ player.getCurrentEquippedItem().splitStack(1);
+ }
+ return true;
+ }
+ return player.isSneaking() && stripWire(pipe, color);
+ }
+
+ private boolean addWire(Pipe pipe, IPipe.WireColor color) {
+ if (!pipe.wireSet[color.ordinal()]) {
+ pipe.wireSet[color.ordinal()] = true;
+ pipe.signalStrength[color.ordinal()] = 0;
+ pipe.container.scheduleNeighborChange();
+ return true;
+ }
+ return false;
+ }
+
+ private boolean stripWire(Pipe pipe, IPipe.WireColor color) {
+ if (pipe.wireSet[color.ordinal()]) {
+ if (!CoreProxy.proxy.isRenderWorld(pipe.container.worldObj)) {
+ dropWire(color, pipe);
+ }
+ pipe.wireSet[color.ordinal()] = false;
+ pipe.container.scheduleRenderUpdate();
+ return true;
+ }
+ return false;
+ }
+
+ private boolean addOrStripFacade(World world, int x, int y, int z, EntityPlayer player, ForgeDirection side, Pipe pipe) {
+ if (player.isSneaking()) {
+ RaytraceResult rayTraceResult = doRayTrace(world, x, y, z, player);
+ if (rayTraceResult != null && rayTraceResult.hitPart == Part.Facade) {
+ if (stripFacade(pipe, rayTraceResult.sideHit))
+ return true;
+ }
+ }
+ if (addFacade(player, pipe, side))
+ return true;
+ return false;
+ }
+
+ private boolean addFacade(EntityPlayer player, Pipe pipe, ForgeDirection side) {
+ ItemStack stack = player.getCurrentEquippedItem();
+ if (pipe.container.addFacade(side, ItemFacade.getBlockId(stack), ItemFacade.getMetaData(stack))) {
+ if (!player.capabilities.isCreativeMode) {
+ stack.stackSize--;
+ }
+ return true;
+ }
+ return false;
+ }
+
+ private boolean stripFacade(Pipe pipe, ForgeDirection side) {
+ return pipe.container.dropFacade(side);
+ }
+
+ private boolean addOrStripPlug(World world, int x, int y, int z, EntityPlayer player, ForgeDirection side, Pipe pipe) {
+ RaytraceResult rayTraceResult = doRayTrace(world, x, y, z, player);
+ if (player.isSneaking()) {
+ if (rayTraceResult != null && rayTraceResult.hitPart == Part.Plug) {
+ if (stripPlug(pipe, rayTraceResult.sideHit))
+ return true;
+ }
+ }
+ if (rayTraceResult != null && rayTraceResult.hitPart == Part.Pipe) {
+ if (addPlug(player, pipe, rayTraceResult.sideHit != null && rayTraceResult.sideHit != ForgeDirection.UNKNOWN ? rayTraceResult.sideHit : side))
+ return true;
+ }
+ return false;
+ }
+
+ private boolean addPlug(EntityPlayer player, Pipe pipe, ForgeDirection side) {
+ ItemStack stack = player.getCurrentEquippedItem();
+ if (pipe.container.addPlug(side)) {
+ if (!player.capabilities.isCreativeMode) {
+ stack.stackSize--;
+ }
+ return true;
+ }
+ return false;
+ }
+
+ private boolean stripPlug(Pipe pipe, ForgeDirection side) {
+ return pipe.container.removeAndDropPlug(side);
+ }
+
+ private boolean stripEquipment(World world, int x, int y, int z, EntityPlayer player, Pipe pipe) {
+ // Try to strip facades first
+ RaytraceResult rayTraceResult = doRayTrace(world, x, y, z, player);
+ if (rayTraceResult != null && rayTraceResult.hitPart == Part.Facade) {
+ if (stripFacade(pipe, rayTraceResult.sideHit))
+ return true;
+ }
+
+ // Try to strip wires second, starting with yellow.
+ for (IPipe.WireColor color : IPipe.WireColor.values()) {
+ if (stripWire(pipe, color))
+ return true;
+ }
+
+ return stripGate(pipe);
+ }
+
/**
* Drops a pipe wire item of the passed color.
*
diff --git a/common/buildcraft/transport/ItemFacade.java b/common/buildcraft/transport/ItemFacade.java
index e74b70ca..67ecc66a 100644
--- a/common/buildcraft/transport/ItemFacade.java
+++ b/common/buildcraft/transport/ItemFacade.java
@@ -71,30 +71,30 @@ public class ItemFacade extends ItemBuildCraft {
}
}
- @Override
- public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World worldObj, int x, int y, int z, int side, float hitX, float hitY, float hitZ) {
- if (worldObj.isRemote)
- return false;
- TileEntity tile = worldObj.getBlockTileEntity(x, y, z);
- if (!(tile instanceof TileGenericPipe))
- return false;
- TileGenericPipe pipeTile = (TileGenericPipe) tile;
-
- if (player.isSneaking()) { // Strip facade
- if (!pipeTile.hasFacade(ForgeDirection.VALID_DIRECTIONS[side]))
- return false;
- pipeTile.dropFacade(ForgeDirection.VALID_DIRECTIONS[side]);
- return true;
- } else {
- if (((TileGenericPipe) tile).addFacade(ForgeDirection.values()[side], ItemFacade.getBlockId(stack), ItemFacade.getMetaData(stack))) {
- if (!player.capabilities.isCreativeMode) {
- stack.stackSize--;
- }
- return true;
- }
- return false;
- }
- }
+// @Override
+// public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World worldObj, int x, int y, int z, int side, float hitX, float hitY, float hitZ) {
+// if (worldObj.isRemote)
+// return false;
+// TileEntity tile = worldObj.getBlockTileEntity(x, y, z);
+// if (!(tile instanceof TileGenericPipe))
+// return false;
+// TileGenericPipe pipeTile = (TileGenericPipe) tile;
+//
+// if (player.isSneaking()) { // Strip facade
+// if (!pipeTile.hasFacade(ForgeDirection.VALID_DIRECTIONS[side]))
+// return false;
+// pipeTile.dropFacade(ForgeDirection.VALID_DIRECTIONS[side]);
+// return true;
+// } else {
+// if (((TileGenericPipe) tile).addFacade(ForgeDirection.values()[side], ItemFacade.getBlockId(stack), ItemFacade.getMetaData(stack))) {
+// if (!player.capabilities.isCreativeMode) {
+// stack.stackSize--;
+// }
+// return true;
+// }
+// return false;
+// }
+// }
public static void initialize() {
for (Field f : Block.class.getDeclaredFields()) {
diff --git a/common/buildcraft/transport/ItemGate.java b/common/buildcraft/transport/ItemGate.java
index 43c0ba7e..62ef67f7 100644
--- a/common/buildcraft/transport/ItemGate.java
+++ b/common/buildcraft/transport/ItemGate.java
@@ -46,6 +46,7 @@ public class ItemGate extends ItemBuildCraft {
setHasSubtypes(true);
setMaxDamage(0);
setCreativeTab(CreativeTabBuildCraft.tabBuildCraft);
+ setPassSneakClick(true);
}
@SuppressWarnings({ "all" })
diff --git a/common/buildcraft/transport/ItemPlug.java b/common/buildcraft/transport/ItemPlug.java
index f819d006..46498201 100644
--- a/common/buildcraft/transport/ItemPlug.java
+++ b/common/buildcraft/transport/ItemPlug.java
@@ -23,30 +23,30 @@ public class ItemPlug extends ItemBuildCraft {
return "item.PipePlug";
}
- @Override
- public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World worldObj, int x, int y, int z, int side, float hitX, float hitY, float hitZ) {
- if (worldObj.isRemote)
- return false;
- TileEntity tile = worldObj.getBlockTileEntity(x, y, z);
- if (!(tile instanceof TileGenericPipe))
- return false;
- TileGenericPipe pipeTile = (TileGenericPipe) tile;
-
- if (player.isSneaking()) { // Strip plug
- if (!pipeTile.hasPlug(ForgeDirection.VALID_DIRECTIONS[side]))
- return false;
- pipeTile.removeAndDropPlug(ForgeDirection.VALID_DIRECTIONS[side]);
- return true;
- } else {
- if (((TileGenericPipe) tile).addPlug(ForgeDirection.VALID_DIRECTIONS[side])){
- if (!player.capabilities.isCreativeMode) {
- stack.stackSize--;
- }
- return true;
- }
- return false;
- }
- }
+// @Override
+// public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World worldObj, int x, int y, int z, int side, float hitX, float hitY, float hitZ) {
+// if (worldObj.isRemote)
+// return false;
+// TileEntity tile = worldObj.getBlockTileEntity(x, y, z);
+// if (!(tile instanceof TileGenericPipe))
+// return false;
+// TileGenericPipe pipeTile = (TileGenericPipe) tile;
+//
+// if (player.isSneaking()) { // Strip plug
+// if (!pipeTile.hasPlug(ForgeDirection.VALID_DIRECTIONS[side]))
+// return false;
+// pipeTile.removeAndDropPlug(ForgeDirection.VALID_DIRECTIONS[side]);
+// return true;
+// } else {
+// if (((TileGenericPipe) tile).addPlug(ForgeDirection.VALID_DIRECTIONS[side])){
+// if (!player.capabilities.isCreativeMode) {
+// stack.stackSize--;
+// }
+// return true;
+// }
+// return false;
+// }
+// }
@Override
public boolean shouldPassSneakingClickToBlock(World worldObj, int x, int y, int z ) {
diff --git a/common/buildcraft/transport/Pipe.java b/common/buildcraft/transport/Pipe.java
index 6fd1043a..bfdf4955 100644
--- a/common/buildcraft/transport/Pipe.java
+++ b/common/buildcraft/transport/Pipe.java
@@ -365,6 +365,30 @@ public abstract class Pipe implements IPipe, IDropContr
return gate != null;
}
+ public boolean hasGate(ForgeDirection side) {
+ if (!hasGate())
+ return false;
+ if (container.hasFacade(side))
+ return false;
+ if (container.hasPlug(side))
+ return false;
+
+ int connections = 0;
+ ForgeDirection targetOrientation = ForgeDirection.UNKNOWN;
+ for (ForgeDirection o : ForgeDirection.VALID_DIRECTIONS) {
+ if (container.isPipeConnected(o)) {
+ connections++;
+ if (connections == 1)
+ targetOrientation = o;
+ }
+ }
+
+ if (connections > 1 || connections == 0)
+ return true;
+
+ return targetOrientation.getOpposite() != side;
+ }
+
protected void notifyBlocksOfNeighborChange(ForgeDirection side) {
container.worldObj.notifyBlocksOfNeighborChange(container.xCoord + side.offsetX, container.yCoord + side.offsetY, container.zCoord + side.offsetZ, BuildCraftTransport.genericPipeBlock.blockID);
}
diff --git a/common/buildcraft/transport/PipeTransportItems.java b/common/buildcraft/transport/PipeTransportItems.java
index 52ddb4fb..cc39547e 100644
--- a/common/buildcraft/transport/PipeTransportItems.java
+++ b/common/buildcraft/transport/PipeTransportItems.java
@@ -19,10 +19,10 @@ import buildcraft.core.inventory.Transactor;
import buildcraft.core.network.PacketIds;
import buildcraft.core.proxy.CoreProxy;
import buildcraft.core.utils.BlockUtil;
-import buildcraft.core.utils.Utils;
import buildcraft.transport.network.PacketPipeTransportContent;
import buildcraft.transport.network.PacketPipeTransportNBT;
import buildcraft.transport.network.PacketSimpleId;
+import buildcraft.transport.utils.TransportUtils;
import com.google.common.collect.BiMap;
import com.google.common.collect.ForwardingSet;
import com.google.common.collect.HashBiMap;
@@ -134,12 +134,12 @@ public class PipeTransportItems extends PipeTransport {
public void defaultReajustSpeed(TravelingItem item) {
float speed = item.getSpeed();
- if (speed > Utils.pipeNormalSpeed) {
- speed -= Utils.pipeNormalSpeed;
+ if (speed > TransportConstants.PIPE_NORMAL_SPEED) {
+ speed -= TransportConstants.PIPE_NORMAL_SPEED;
}
- if (speed < Utils.pipeNormalSpeed) {
- speed = Utils.pipeNormalSpeed;
+ if (speed < TransportConstants.PIPE_NORMAL_SPEED) {
+ speed = TransportConstants.PIPE_NORMAL_SPEED;
}
item.setSpeed(speed);
@@ -159,7 +159,7 @@ public class PipeTransportItems extends PipeTransport {
z = Math.min(z, container.zCoord + 0.99);
if (item.input != ForgeDirection.UP && item.input != ForgeDirection.DOWN) {
- y = container.yCoord + Utils.getPipeFloorOf(item.getItemStack());
+ y = container.yCoord + TransportUtils.getPipeFloorOf(item.getItemStack());
}
item.setPosition(x, y, z);
@@ -338,7 +338,7 @@ public class PipeTransportItems extends PipeTransport {
item.toCenter = false;
// Reajusting to the middle
- item.setPosition(container.xCoord + 0.5, container.yCoord + Utils.getPipeFloorOf(item.getItemStack()), container.zCoord + 0.5);
+ item.setPosition(container.xCoord + 0.5, container.yCoord + TransportUtils.getPipeFloorOf(item.getItemStack()), container.zCoord + 0.5);
if (item.output == ForgeDirection.UNKNOWN) {
if (travelHook != null) {
@@ -421,7 +421,7 @@ public class PipeTransportItems extends PipeTransport {
protected boolean middleReached(TravelingItem item) {
float middleLimit = item.getSpeed() * 1.01F;
- return (Math.abs(container.xCoord + 0.5 - item.xCoord) < middleLimit && Math.abs(container.yCoord + Utils.getPipeFloorOf(item.getItemStack()) - item.yCoord) < middleLimit && Math
+ return (Math.abs(container.xCoord + 0.5 - item.xCoord) < middleLimit && Math.abs(container.yCoord + TransportUtils.getPipeFloorOf(item.getItemStack()) - item.yCoord) < middleLimit && Math
.abs(container.zCoord + 0.5 - item.zCoord) < middleLimit);
}
diff --git a/common/buildcraft/transport/TileGenericPipe.java b/common/buildcraft/transport/TileGenericPipe.java
index 4a94280e..429bab14 100644
--- a/common/buildcraft/transport/TileGenericPipe.java
+++ b/common/buildcraft/transport/TileGenericPipe.java
@@ -570,6 +570,8 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, IFlui
}
public boolean hasFacade(ForgeDirection direction) {
+ if (direction == null || direction == ForgeDirection.UNKNOWN)
+ return false;
if (this.worldObj.isRemote)
return renderState.facadeMatrix.getFacadeBlockId(direction) != 0;
return (this.facadeBlocks[direction.ordinal()] != 0);
@@ -579,16 +581,17 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, IFlui
InvUtils.dropItems(worldObj, ItemFacade.getStack(this.facadeBlocks[direction.ordinal()], this.facadeMeta[direction.ordinal()]), this.xCoord, this.yCoord, this.zCoord);
}
- public void dropFacade(ForgeDirection direction) {
- if (this.worldObj.isRemote)
- return;
+ public boolean dropFacade(ForgeDirection direction) {
if (!hasFacade(direction))
- return;
- dropFacadeItem(direction);
- this.facadeBlocks[direction.ordinal()] = 0;
- this.facadeMeta[direction.ordinal()] = 0;
- worldObj.notifyBlockChange(this.xCoord, this.yCoord, this.zCoord, getBlockId());
- scheduleRenderUpdate();
+ return false;
+ if (!worldObj.isRemote) {
+ dropFacadeItem(direction);
+ this.facadeBlocks[direction.ordinal()] = 0;
+ this.facadeMeta[direction.ordinal()] = 0;
+ worldObj.notifyBlockChange(this.xCoord, this.yCoord, this.zCoord, getBlockId());
+ scheduleRenderUpdate();
+ }
+ return true;
}
/**
@@ -677,15 +680,17 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, IFlui
return plugs[side.ordinal()];
}
- public void removeAndDropPlug(ForgeDirection side) {
+ public boolean removeAndDropPlug(ForgeDirection side) {
if (!hasPlug(side))
- return;
-
- plugs[side.ordinal()] = false;
- InvUtils.dropItems(worldObj, new ItemStack(BuildCraftTransport.plugItem), this.xCoord, this.yCoord, this.zCoord);
- worldObj.notifyBlockChange(this.xCoord, this.yCoord, this.zCoord, getBlockId());
- scheduleNeighborChange(); //To force recalculation of connections
- scheduleRenderUpdate();
+ return false;
+ if (!worldObj.isRemote) {
+ plugs[side.ordinal()] = false;
+ InvUtils.dropItems(worldObj, new ItemStack(BuildCraftTransport.plugItem), this.xCoord, this.yCoord, this.zCoord);
+ worldObj.notifyBlockChange(this.xCoord, this.yCoord, this.zCoord, getBlockId());
+ scheduleNeighborChange(); //To force recalculation of connections
+ scheduleRenderUpdate();
+ }
+ return true;
}
public boolean addPlug(ForgeDirection forgeDirection) {
@@ -714,7 +719,7 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, IFlui
public boolean isUseableByPlayer(EntityPlayer player) {
return worldObj.getBlockTileEntity(xCoord, yCoord, zCoord) == this;
}
-
+
@Override
public void writeGuiData(DataOutputStream data) throws IOException {
if (BlockGenericPipe.isValid(pipe) && pipe instanceof IGuiReturnHandler)
diff --git a/common/buildcraft/transport/TransportConstants.java b/common/buildcraft/transport/TransportConstants.java
new file mode 100644
index 00000000..10a2eaf8
--- /dev/null
+++ b/common/buildcraft/transport/TransportConstants.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) SpaceToad, 2011-2012
+ * http://www.mod-buildcraft.com
+ *
+ * BuildCraft is distributed under the terms of the Minecraft Mod Public
+ * License 1.0, or MMPL. Please check the contents of the license located in
+ * http://www.mod-buildcraft.com/MMPL-1.0.txt
+ */
+package buildcraft.transport;
+
+import net.minecraft.item.ItemStack;
+
+/**
+ *
+ * @author CovertJaguar
+ */
+public class TransportConstants {
+
+ public static final float FACADE_THICKNESS = 1F / 16F;
+ public static final float PIPE_NORMAL_SPEED = 0.01F;
+}
diff --git a/common/buildcraft/transport/pipes/PipeItemsDaizuli.java b/common/buildcraft/transport/pipes/PipeItemsDaizuli.java
index 2d631529..cad1b80e 100644
--- a/common/buildcraft/transport/pipes/PipeItemsDaizuli.java
+++ b/common/buildcraft/transport/pipes/PipeItemsDaizuli.java
@@ -14,12 +14,12 @@ import buildcraft.api.gates.IAction;
import buildcraft.api.tools.IToolWrench;
import buildcraft.core.network.TileNetworkData;
import buildcraft.core.utils.EnumColor;
-import buildcraft.core.utils.Utils;
import buildcraft.transport.IPipeTransportItemsHook;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeTransportItems;
import buildcraft.transport.TileGenericPipe;
+import buildcraft.transport.TransportConstants;
import buildcraft.transport.TravelingItem;
import buildcraft.transport.triggers.ActionPipeColor;
import buildcraft.transport.triggers.ActionPipeDirection;
@@ -140,12 +140,12 @@ public class PipeItemsDaizuli extends Pipe implements IPipeT
@Override
public void readjustSpeed(TravelingItem item) {
- if (item.getSpeed() > Utils.pipeNormalSpeed)
- item.setSpeed(item.getSpeed() - Utils.pipeNormalSpeed / 4.0F);
+ if (item.getSpeed() > TransportConstants.PIPE_NORMAL_SPEED)
+ item.setSpeed(item.getSpeed() - TransportConstants.PIPE_NORMAL_SPEED / 4.0F);
- if (item.getSpeed() < Utils.pipeNormalSpeed)
- item.setSpeed(Utils.pipeNormalSpeed);
+ if (item.getSpeed() < TransportConstants.PIPE_NORMAL_SPEED)
+ item.setSpeed(TransportConstants.PIPE_NORMAL_SPEED);
}
@Override
diff --git a/common/buildcraft/transport/pipes/PipeItemsGold.java b/common/buildcraft/transport/pipes/PipeItemsGold.java
index 13ec571b..cc35cc5c 100644
--- a/common/buildcraft/transport/pipes/PipeItemsGold.java
+++ b/common/buildcraft/transport/pipes/PipeItemsGold.java
@@ -10,11 +10,11 @@ package buildcraft.transport.pipes;
import buildcraft.BuildCraftTransport;
import buildcraft.api.core.IIconProvider;
import buildcraft.api.core.Position;
-import buildcraft.core.utils.Utils;
import buildcraft.transport.IPipeTransportItemsHook;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeTransportItems;
+import buildcraft.transport.TransportConstants;
import buildcraft.transport.TravelingItem;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@@ -50,6 +50,6 @@ public class PipeItemsGold extends Pipe implements IPipeTransportItemsHook {
@Override
public void readjustSpeed(TravelingItem item) {
- item.setSpeed(Math.min(Math.max(Utils.pipeNormalSpeed, item.getSpeed()) * 2f, Utils.pipeNormalSpeed * 20F));
+ item.setSpeed(Math.min(Math.max(TransportConstants.PIPE_NORMAL_SPEED, item.getSpeed()) * 2f, TransportConstants.PIPE_NORMAL_SPEED * 20F));
}
}
diff --git a/common/buildcraft/transport/pipes/PipeItemsLapis.java b/common/buildcraft/transport/pipes/PipeItemsLapis.java
index 3966a23e..4df7a8f6 100644
--- a/common/buildcraft/transport/pipes/PipeItemsLapis.java
+++ b/common/buildcraft/transport/pipes/PipeItemsLapis.java
@@ -13,12 +13,12 @@ import buildcraft.api.core.Position;
import buildcraft.api.gates.IAction;
import buildcraft.api.tools.IToolWrench;
import buildcraft.core.utils.EnumColor;
-import buildcraft.core.utils.Utils;
import buildcraft.transport.IItemTravelingHook;
import buildcraft.transport.IPipeTransportItemsHook;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeTransportItems;
+import buildcraft.transport.TransportConstants;
import buildcraft.transport.TravelingItem;
import buildcraft.transport.triggers.ActionPipeColor;
import cpw.mods.fml.relauncher.Side;
@@ -96,12 +96,12 @@ public class PipeItemsLapis extends Pipe implements IItemTra
@Override
public void readjustSpeed(TravelingItem item) {
- if (item.getSpeed() > Utils.pipeNormalSpeed) {
- item.setSpeed(item.getSpeed() - Utils.pipeNormalSpeed / 4.0F);
+ if (item.getSpeed() > TransportConstants.PIPE_NORMAL_SPEED) {
+ item.setSpeed(item.getSpeed() - TransportConstants.PIPE_NORMAL_SPEED / 4.0F);
}
- if (item.getSpeed() < Utils.pipeNormalSpeed) {
- item.setSpeed(Utils.pipeNormalSpeed);
+ if (item.getSpeed() < TransportConstants.PIPE_NORMAL_SPEED) {
+ item.setSpeed(TransportConstants.PIPE_NORMAL_SPEED);
}
}
diff --git a/common/buildcraft/transport/pipes/PipeItemsObsidian.java b/common/buildcraft/transport/pipes/PipeItemsObsidian.java
index 67dde61b..eff8cfb3 100644
--- a/common/buildcraft/transport/pipes/PipeItemsObsidian.java
+++ b/common/buildcraft/transport/pipes/PipeItemsObsidian.java
@@ -19,10 +19,10 @@ import buildcraft.core.inventory.Transactor;
import buildcraft.core.inventory.filters.StackFilter;
import buildcraft.transport.TravelingItem;
import buildcraft.core.proxy.CoreProxy;
-import buildcraft.core.utils.Utils;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeTransportItems;
+import buildcraft.transport.utils.TransportUtils;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.util.Arrays;
@@ -226,7 +226,7 @@ public class PipeItemsObsidian extends Pipe implements IPowe
CoreProxy.proxy.removeEntity(entity);
}
- TravelingItem passive = new TravelingItem(container.xCoord + 0.5, container.yCoord + Utils.getPipeFloorOf(stack), container.zCoord + 0.5, stack);
+ TravelingItem passive = new TravelingItem(container.xCoord + 0.5, container.yCoord + TransportUtils.getPipeFloorOf(stack), container.zCoord + 0.5, stack);
passive.setSpeed((float) speed);
diff --git a/common/buildcraft/transport/pipes/PipeItemsQuartz.java b/common/buildcraft/transport/pipes/PipeItemsQuartz.java
index 384c21e0..13c6a0d5 100644
--- a/common/buildcraft/transport/pipes/PipeItemsQuartz.java
+++ b/common/buildcraft/transport/pipes/PipeItemsQuartz.java
@@ -10,11 +10,11 @@ package buildcraft.transport.pipes;
import buildcraft.BuildCraftTransport;
import buildcraft.api.core.IIconProvider;
import buildcraft.api.core.Position;
-import buildcraft.core.utils.Utils;
import buildcraft.transport.IPipeTransportItemsHook;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeTransportItems;
+import buildcraft.transport.TransportConstants;
import buildcraft.transport.TravelingItem;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@@ -41,12 +41,12 @@ public class PipeItemsQuartz extends Pipe implements IPipeTransportItemsHook {
@Override
public void readjustSpeed(TravelingItem item) {
- if (item.getSpeed() > Utils.pipeNormalSpeed) {
- item.setSpeed(item.getSpeed() - Utils.pipeNormalSpeed / 4.0F);
+ if (item.getSpeed() > TransportConstants.PIPE_NORMAL_SPEED) {
+ item.setSpeed(item.getSpeed() - TransportConstants.PIPE_NORMAL_SPEED / 4.0F);
}
- if (item.getSpeed() < Utils.pipeNormalSpeed) {
- item.setSpeed(Utils.pipeNormalSpeed);
+ if (item.getSpeed() < TransportConstants.PIPE_NORMAL_SPEED) {
+ item.setSpeed(TransportConstants.PIPE_NORMAL_SPEED);
}
}
diff --git a/common/buildcraft/transport/pipes/PipeItemsStone.java b/common/buildcraft/transport/pipes/PipeItemsStone.java
index 6199c8ea..415e5dd2 100644
--- a/common/buildcraft/transport/pipes/PipeItemsStone.java
+++ b/common/buildcraft/transport/pipes/PipeItemsStone.java
@@ -10,11 +10,11 @@ package buildcraft.transport.pipes;
import buildcraft.BuildCraftTransport;
import buildcraft.api.core.IIconProvider;
import buildcraft.api.core.Position;
-import buildcraft.core.utils.Utils;
import buildcraft.transport.IPipeTransportItemsHook;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeTransportItems;
+import buildcraft.transport.TransportConstants;
import buildcraft.transport.TravelingItem;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@@ -40,12 +40,12 @@ public class PipeItemsStone extends Pipe implements IPipeTransportItemsHook {
@Override
public void readjustSpeed(TravelingItem item) {
- if (item.getSpeed() > Utils.pipeNormalSpeed) {
- item.setSpeed(item.getSpeed() - Utils.pipeNormalSpeed / 2.0F);
+ if (item.getSpeed() > TransportConstants.PIPE_NORMAL_SPEED) {
+ item.setSpeed(item.getSpeed() - TransportConstants.PIPE_NORMAL_SPEED / 2.0F);
}
- if (item.getSpeed() < Utils.pipeNormalSpeed) {
- item.setSpeed(Utils.pipeNormalSpeed);
+ if (item.getSpeed() < TransportConstants.PIPE_NORMAL_SPEED) {
+ item.setSpeed(TransportConstants.PIPE_NORMAL_SPEED);
}
}
diff --git a/common/buildcraft/transport/render/FacadeItemRenderer.java b/common/buildcraft/transport/render/FacadeItemRenderer.java
index 56e98d1d..2572ae6e 100644
--- a/common/buildcraft/transport/render/FacadeItemRenderer.java
+++ b/common/buildcraft/transport/render/FacadeItemRenderer.java
@@ -1,7 +1,7 @@
package buildcraft.transport.render;
import buildcraft.BuildCraftTransport;
-import buildcraft.core.utils.Utils;
+import buildcraft.core.CoreConstants;
import buildcraft.transport.ItemFacade;
import buildcraft.transport.PipeIconProvider;
import net.minecraft.block.Block;
@@ -11,6 +11,7 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Icon;
import net.minecraftforge.client.IItemRenderer;
+import static net.minecraftforge.client.IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON;
import org.lwjgl.opengl.GL11;
public class FacadeItemRenderer implements IItemRenderer {
@@ -72,7 +73,7 @@ public class FacadeItemRenderer implements IItemRenderer {
block = BuildCraftTransport.genericPipeBlock;
Icon textureID = BuildCraftTransport.instance.pipeIconProvider.getIcon(PipeIconProvider.TYPE.PipeStructureCobblestone.ordinal()); // Structure pipe
- block.setBlockBounds(Utils.pipeMinPos, Utils.pipeMinPos, Utils.pipeMinPos, Utils.pipeMaxPos, Utils.pipeMaxPos, Utils.pipeMaxPos - 1F / 16F);
+ block.setBlockBounds(CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS - 1F / 16F);
block.setBlockBoundsForItemRender();
render.setRenderBoundsFromBlock(block);
GL11.glTranslatef(translateX, translateY, translateZ + 0.25F);
@@ -112,6 +113,8 @@ public class FacadeItemRenderer implements IItemRenderer {
return true;
case EQUIPPED:
return true;
+ case EQUIPPED_FIRST_PERSON:
+ return true;
case INVENTORY:
return true;
default:
@@ -133,6 +136,7 @@ public class FacadeItemRenderer implements IItemRenderer {
renderFacadeItem((RenderBlocks) data[0], item, -0.6F, 0f, -0.6F);
break;
case EQUIPPED:
+ case EQUIPPED_FIRST_PERSON:
renderFacadeItem((RenderBlocks) data[0], item, 0F, 0F, 0f);
break;
case INVENTORY:
diff --git a/common/buildcraft/transport/render/PipeItemRenderer.java b/common/buildcraft/transport/render/PipeItemRenderer.java
index 29a07364..7d8f39e3 100644
--- a/common/buildcraft/transport/render/PipeItemRenderer.java
+++ b/common/buildcraft/transport/render/PipeItemRenderer.java
@@ -1,7 +1,7 @@
package buildcraft.transport.render;
import buildcraft.BuildCraftTransport;
-import buildcraft.core.utils.Utils;
+import buildcraft.core.CoreConstants;
import buildcraft.transport.ItemPipe;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
@@ -27,7 +27,7 @@ public class PipeItemRenderer implements IItemRenderer {
if (icon == null)
icon = ((TextureMap) Minecraft.getMinecraft().getTextureManager().getTexture(TextureMap.locationBlocksTexture)).getAtlasSprite("missingno");
- block.setBlockBounds(Utils.pipeMinPos, 0.0F, Utils.pipeMinPos, Utils.pipeMaxPos, 1.0F, Utils.pipeMaxPos);
+ block.setBlockBounds(CoreConstants.PIPE_MIN_POS, 0.0F, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MAX_POS, 1.0F, CoreConstants.PIPE_MAX_POS);
block.setBlockBoundsForItemRender();
render.setRenderBoundsFromBlock(block);
diff --git a/common/buildcraft/transport/render/PipeRendererTESR.java b/common/buildcraft/transport/render/PipeRendererTESR.java
index 425cfde7..128fad2d 100644
--- a/common/buildcraft/transport/render/PipeRendererTESR.java
+++ b/common/buildcraft/transport/render/PipeRendererTESR.java
@@ -12,11 +12,11 @@ import buildcraft.BuildCraftCore.RenderMode;
import buildcraft.BuildCraftTransport;
import buildcraft.api.transport.IPipe;
import buildcraft.api.transport.IPipe.WireColor;
+import buildcraft.core.CoreConstants;
import buildcraft.core.render.FluidRenderer;
import buildcraft.core.render.RenderEntityBlock;
import buildcraft.core.render.RenderEntityBlock.RenderInfo;
import buildcraft.core.utils.EnumColor;
-import buildcraft.core.utils.Utils;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeRenderState;
@@ -98,7 +98,7 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
}
block.texture = fluid.getStillIcon();
- float size = Utils.pipeMaxPos - Utils.pipeMinPos;
+ float size = CoreConstants.PIPE_MAX_POS - CoreConstants.PIPE_MIN_POS;
// render size
@@ -111,12 +111,12 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
GL11.glNewList(d.sideHorizontal[s], 4864 /* GL_COMPILE */);
block.minX = 0.0F;
- block.minZ = Utils.pipeMinPos + 0.01F;
+ block.minZ = CoreConstants.PIPE_MIN_POS + 0.01F;
block.maxX = block.minX + size / 2F + 0.01F;
block.maxZ = block.minZ + size - 0.02F;
- block.minY = Utils.pipeMinPos + 0.01F;
+ block.minY = CoreConstants.PIPE_MIN_POS + 0.01F;
block.maxY = block.minY + (size - 0.02F) * ratio;
RenderEntityBlock.INSTANCE.renderBlock(block, world, 0, 0, 0, false, true);
@@ -128,7 +128,7 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
d.sideVertical[s] = GLAllocation.generateDisplayLists(1);
GL11.glNewList(d.sideVertical[s], 4864 /* GL_COMPILE */);
- block.minY = Utils.pipeMaxPos - 0.01;
+ block.minY = CoreConstants.PIPE_MAX_POS - 0.01;
block.maxY = 1;
block.minX = 0.5 - (size / 2 - 0.01) * ratio;
@@ -146,13 +146,13 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
d.centerHorizontal[s] = GLAllocation.generateDisplayLists(1);
GL11.glNewList(d.centerHorizontal[s], 4864 /* GL_COMPILE */);
- block.minX = Utils.pipeMinPos + 0.01;
- block.minZ = Utils.pipeMinPos + 0.01;
+ block.minX = CoreConstants.PIPE_MIN_POS + 0.01;
+ block.minZ = CoreConstants.PIPE_MIN_POS + 0.01;
block.maxX = block.minX + size - 0.02;
block.maxZ = block.minZ + size - 0.02;
- block.minY = Utils.pipeMinPos + 0.01;
+ block.minY = CoreConstants.PIPE_MIN_POS + 0.01;
block.maxY = block.minY + (size - 0.02F) * ratio;
RenderEntityBlock.INSTANCE.renderBlock(block, world, 0, 0, 0, false, true);
@@ -164,8 +164,8 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
d.centerVertical[s] = GLAllocation.generateDisplayLists(1);
GL11.glNewList(d.centerVertical[s], 4864 /* GL_COMPILE */);
- block.minY = Utils.pipeMinPos + 0.01;
- block.maxY = Utils.pipeMaxPos - 0.01;
+ block.minY = CoreConstants.PIPE_MIN_POS + 0.01;
+ block.maxY = CoreConstants.PIPE_MAX_POS - 0.01;
block.minX = 0.5 - (size / 2 - 0.02) * ratio;
block.maxX = 0.5 + (size / 2 - 0.02) * ratio;
@@ -192,7 +192,7 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
RenderInfo block = new RenderInfo();
block.texture = BuildCraftTransport.instance.pipeIconProvider.getIcon(PipeIconProvider.TYPE.Power_Normal.ordinal());
- float size = Utils.pipeMaxPos - Utils.pipeMinPos;
+ float size = CoreConstants.PIPE_MAX_POS - CoreConstants.PIPE_MIN_POS;
for (int s = 0; s < POWER_STAGES; ++s) {
displayPowerList[s] = GLAllocation.generateDisplayLists(1);
@@ -218,7 +218,7 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
block.texture = BuildCraftTransport.instance.pipeIconProvider.getIcon(PipeIconProvider.TYPE.Power_Overload.ordinal());
- size = Utils.pipeMaxPos - Utils.pipeMinPos;
+ size = CoreConstants.PIPE_MAX_POS - CoreConstants.PIPE_MIN_POS;
for (int s = 0; s < POWER_STAGES; ++s) {
displayPowerListOverload[s] = GLAllocation.generateDisplayLists(1);
@@ -273,19 +273,19 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
PipeRenderState state = pipe.getRenderState();
if (state.wireMatrix.hasWire(WireColor.Red)) {
- pipeWireRender(pipe, Utils.pipeMinPos, Utils.pipeMaxPos, Utils.pipeMinPos, IPipe.WireColor.Red, x, y, z);
+ pipeWireRender(pipe, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MIN_POS, IPipe.WireColor.Red, x, y, z);
}
if (state.wireMatrix.hasWire(WireColor.Blue)) {
- pipeWireRender(pipe, Utils.pipeMaxPos, Utils.pipeMaxPos, Utils.pipeMaxPos, IPipe.WireColor.Blue, x, y, z);
+ pipeWireRender(pipe, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MAX_POS, IPipe.WireColor.Blue, x, y, z);
}
if (state.wireMatrix.hasWire(WireColor.Green)) {
- pipeWireRender(pipe, Utils.pipeMaxPos, Utils.pipeMinPos, Utils.pipeMinPos, IPipe.WireColor.Green, x, y, z);
+ pipeWireRender(pipe, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, IPipe.WireColor.Green, x, y, z);
}
if (state.wireMatrix.hasWire(WireColor.Yellow)) {
- pipeWireRender(pipe, Utils.pipeMinPos, Utils.pipeMinPos, Utils.pipeMaxPos, IPipe.WireColor.Yellow, x, y, z);
+ pipeWireRender(pipe, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MAX_POS, IPipe.WireColor.Yellow, x, y, z);
}
if (state.hasGate()) {
@@ -297,13 +297,13 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
PipeRenderState state = pipe.getRenderState();
- float minX = Utils.pipeMinPos;
- float minY = Utils.pipeMinPos;
- float minZ = Utils.pipeMinPos;
+ float minX = CoreConstants.PIPE_MIN_POS;
+ float minY = CoreConstants.PIPE_MIN_POS;
+ float minZ = CoreConstants.PIPE_MIN_POS;
- float maxX = Utils.pipeMaxPos;
- float maxY = Utils.pipeMaxPos;
- float maxZ = Utils.pipeMaxPos;
+ float maxX = CoreConstants.PIPE_MAX_POS;
+ float maxY = CoreConstants.PIPE_MAX_POS;
+ float maxZ = CoreConstants.PIPE_MAX_POS;
boolean foundX = false, foundY = false, foundZ = false;
@@ -340,43 +340,43 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
boolean center = false;
if (minX == 0 && maxX != 1 && (foundY || foundZ))
- if (cx == Utils.pipeMinPos) {
- maxX = Utils.pipeMinPos;
+ if (cx == CoreConstants.PIPE_MIN_POS) {
+ maxX = CoreConstants.PIPE_MIN_POS;
} else {
center = true;
}
if (minX != 0 && maxX == 1 && (foundY || foundZ))
- if (cx == Utils.pipeMaxPos) {
- minX = Utils.pipeMaxPos;
+ if (cx == CoreConstants.PIPE_MAX_POS) {
+ minX = CoreConstants.PIPE_MAX_POS;
} else {
center = true;
}
if (minY == 0 && maxY != 1 && (foundX || foundZ))
- if (cy == Utils.pipeMinPos) {
- maxY = Utils.pipeMinPos;
+ if (cy == CoreConstants.PIPE_MIN_POS) {
+ maxY = CoreConstants.PIPE_MIN_POS;
} else {
center = true;
}
if (minY != 0 && maxY == 1 && (foundX || foundZ))
- if (cy == Utils.pipeMaxPos) {
- minY = Utils.pipeMaxPos;
+ if (cy == CoreConstants.PIPE_MAX_POS) {
+ minY = CoreConstants.PIPE_MAX_POS;
} else {
center = true;
}
if (minZ == 0 && maxZ != 1 && (foundX || foundY))
- if (cz == Utils.pipeMinPos) {
- maxZ = Utils.pipeMinPos;
+ if (cz == CoreConstants.PIPE_MIN_POS) {
+ maxZ = CoreConstants.PIPE_MIN_POS;
} else {
center = true;
}
if (minZ != 0 && maxZ == 1 && (foundX || foundY))
- if (cz == Utils.pipeMaxPos) {
- minZ = Utils.pipeMaxPos;
+ if (cz == CoreConstants.PIPE_MAX_POS) {
+ minZ = CoreConstants.PIPE_MAX_POS;
} else {
center = true;
}
@@ -389,10 +389,16 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
GL11.glDisable(GL11.GL_BLEND);
GL11.glEnable(GL11.GL_CULL_FACE);
RenderHelper.disableStandardItemLighting();
-
+
GL11.glColor3f(1, 1, 1);
- GL11.glTranslatef((float) x, (float) y, (float) z);
-
+ GL11.glTranslatef((float) x, (float) y, (float) z);
+
+ float scale = 1.001f;
+ GL11.glTranslatef(0.5F, 0.5F, 0.5F);
+ GL11.glScalef(scale, scale, scale);
+ GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
+
+
bindTexture(TextureMap.locationBlocksTexture);
RenderInfo box = new RenderInfo();
@@ -400,36 +406,36 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
// Z render
- if (minZ != Utils.pipeMinPos || maxZ != Utils.pipeMaxPos || !found) {
- box.setBounds(cx == Utils.pipeMinPos ? cx - 0.05F : cx, cy == Utils.pipeMinPos ? cy - 0.05F : cy, minZ, cx == Utils.pipeMinPos ? cx
- : cx + 0.05F, cy == Utils.pipeMinPos ? cy : cy + 0.05F, maxZ);
+ if (minZ != CoreConstants.PIPE_MIN_POS || maxZ != CoreConstants.PIPE_MAX_POS || !found) {
+ box.setBounds(cx == CoreConstants.PIPE_MIN_POS ? cx - 0.05F : cx, cy == CoreConstants.PIPE_MIN_POS ? cy - 0.05F : cy, minZ, cx == CoreConstants.PIPE_MIN_POS ? cx
+ : cx + 0.05F, cy == CoreConstants.PIPE_MIN_POS ? cy : cy + 0.05F, maxZ);
RenderEntityBlock.INSTANCE.renderBlock(box, pipe.worldObj, 0, 0, 0, pipe.xCoord, pipe.yCoord, pipe.zCoord, true, true);
}
// X render
- if (minX != Utils.pipeMinPos || maxX != Utils.pipeMaxPos || !found) {
- box.setBounds(minX, cy == Utils.pipeMinPos ? cy - 0.05F : cy, cz == Utils.pipeMinPos ? cz - 0.05F : cz, maxX, cy == Utils.pipeMinPos ? cy
- : cy + 0.05F, cz == Utils.pipeMinPos ? cz : cz + 0.05F);
+ if (minX != CoreConstants.PIPE_MIN_POS || maxX != CoreConstants.PIPE_MAX_POS || !found) {
+ box.setBounds(minX, cy == CoreConstants.PIPE_MIN_POS ? cy - 0.05F : cy, cz == CoreConstants.PIPE_MIN_POS ? cz - 0.05F : cz, maxX, cy == CoreConstants.PIPE_MIN_POS ? cy
+ : cy + 0.05F, cz == CoreConstants.PIPE_MIN_POS ? cz : cz + 0.05F);
RenderEntityBlock.INSTANCE.renderBlock(box, pipe.worldObj, 0, 0, 0, pipe.xCoord, pipe.yCoord, pipe.zCoord, true, true);
}
// Y render
- if (minY != Utils.pipeMinPos || maxY != Utils.pipeMaxPos || !found) {
- box.setBounds(cx == Utils.pipeMinPos ? cx - 0.05F : cx, minY, cz == Utils.pipeMinPos ? cz - 0.05F : cz, cx == Utils.pipeMinPos ? cx
- : cx + 0.05F, maxY, cz == Utils.pipeMinPos ? cz : cz + 0.05F);
+ if (minY != CoreConstants.PIPE_MIN_POS || maxY != CoreConstants.PIPE_MAX_POS || !found) {
+ box.setBounds(cx == CoreConstants.PIPE_MIN_POS ? cx - 0.05F : cx, minY, cz == CoreConstants.PIPE_MIN_POS ? cz - 0.05F : cz, cx == CoreConstants.PIPE_MIN_POS ? cx
+ : cx + 0.05F, maxY, cz == CoreConstants.PIPE_MIN_POS ? cz : cz + 0.05F);
RenderEntityBlock.INSTANCE.renderBlock(box, pipe.worldObj, 0, 0, 0, pipe.xCoord, pipe.yCoord, pipe.zCoord, true, true);
}
if (center || !found) {
- box.setBounds(cx == Utils.pipeMinPos ? cx - 0.05F : cx, cy == Utils.pipeMinPos ? cy - 0.05F : cy, cz == Utils.pipeMinPos ? cz - 0.05F : cz,
- cx == Utils.pipeMinPos ? cx : cx + 0.05F, cy == Utils.pipeMinPos ? cy : cy + 0.05F, cz == Utils.pipeMinPos ? cz : cz + 0.05F);
+ box.setBounds(cx == CoreConstants.PIPE_MIN_POS ? cx - 0.05F : cx, cy == CoreConstants.PIPE_MIN_POS ? cy - 0.05F : cy, cz == CoreConstants.PIPE_MIN_POS ? cz - 0.05F : cz,
+ cx == CoreConstants.PIPE_MIN_POS ? cx : cx + 0.05F, cy == CoreConstants.PIPE_MIN_POS ? cy : cy + 0.05F, cz == CoreConstants.PIPE_MIN_POS ? cz : cz + 0.05F);
RenderEntityBlock.INSTANCE.renderBlock(box, pipe.worldObj, 0, 0, 0, pipe.xCoord, pipe.yCoord, pipe.zCoord, true, true);
}
-
+
RenderHelper.enableStandardItemLighting();
-
+
GL11.glPopAttrib();
GL11.glPopMatrix();
}
@@ -442,7 +448,7 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
GL11.glEnable(GL11.GL_CULL_FACE);
// GL11.glDisable(GL11.GL_TEXTURE_2D);
RenderHelper.disableStandardItemLighting();
-
+
GL11.glColor3f(1, 1, 1);
GL11.glTranslatef((float) x, (float) y, (float) z);
@@ -450,42 +456,42 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
PipeRenderState state = pipe.getRenderState();
- float min = Utils.pipeMinPos + 0.05F;
- float max = Utils.pipeMaxPos - 0.05F;
+ float min = CoreConstants.PIPE_MIN_POS + 0.05F;
+ float max = CoreConstants.PIPE_MAX_POS - 0.05F;
RenderInfo box = new RenderInfo();
box.texture = BuildCraftTransport.instance.gateIconProvider.getIcon(state.getGateIconIndex());
if (shouldRenderNormalPipeSide(state, ForgeDirection.WEST)) {
- box.setBounds(Utils.pipeMinPos - 0.10F, min, min, Utils.pipeMinPos + 0.001F, max, max);
+ box.setBounds(CoreConstants.PIPE_MIN_POS - 0.10F, min, min, CoreConstants.PIPE_MIN_POS + 0.001F, max, max);
RenderEntityBlock.INSTANCE.renderBlock(box, pipe.worldObj, 0, 0, 0, pipe.xCoord, pipe.yCoord, pipe.zCoord, true, true);
}
if (shouldRenderNormalPipeSide(state, ForgeDirection.EAST)) {
- box.setBounds(Utils.pipeMaxPos + 0.001F, min, min, Utils.pipeMaxPos + 0.10F, max, max);
+ box.setBounds(CoreConstants.PIPE_MAX_POS + 0.001F, min, min, CoreConstants.PIPE_MAX_POS + 0.10F, max, max);
RenderEntityBlock.INSTANCE.renderBlock(box, pipe.worldObj, 0, 0, 0, pipe.xCoord, pipe.yCoord, pipe.zCoord, true, true);
}
if (shouldRenderNormalPipeSide(state, ForgeDirection.DOWN)) {
- box.setBounds(min, Utils.pipeMinPos - 0.10F, min, max, Utils.pipeMinPos + 0.001F, max);
+ box.setBounds(min, CoreConstants.PIPE_MIN_POS - 0.10F, min, max, CoreConstants.PIPE_MIN_POS + 0.001F, max);
RenderEntityBlock.INSTANCE.renderBlock(box, pipe.worldObj, 0, 0, 0, pipe.xCoord, pipe.yCoord, pipe.zCoord, true, true);
}
if (shouldRenderNormalPipeSide(state, ForgeDirection.UP)) {
- box.setBounds(min, Utils.pipeMaxPos + 0.001F, min, max, Utils.pipeMaxPos + 0.10F, max);
+ box.setBounds(min, CoreConstants.PIPE_MAX_POS + 0.001F, min, max, CoreConstants.PIPE_MAX_POS + 0.10F, max);
RenderEntityBlock.INSTANCE.renderBlock(box, pipe.worldObj, 0, 0, 0, pipe.xCoord, pipe.yCoord, pipe.zCoord, true, true);
}
if (shouldRenderNormalPipeSide(state, ForgeDirection.NORTH)) {
- box.setBounds(min, min, Utils.pipeMinPos - 0.10F, max, max, Utils.pipeMinPos + 0.001F);
+ box.setBounds(min, min, CoreConstants.PIPE_MIN_POS - 0.10F, max, max, CoreConstants.PIPE_MIN_POS + 0.001F);
RenderEntityBlock.INSTANCE.renderBlock(box, pipe.worldObj, 0, 0, 0, pipe.xCoord, pipe.yCoord, pipe.zCoord, true, true);
}
if (shouldRenderNormalPipeSide(state, ForgeDirection.SOUTH)) {
- box.setBounds(min, min, Utils.pipeMaxPos + 0.001F, max, max, Utils.pipeMaxPos + 0.10F);
+ box.setBounds(min, min, CoreConstants.PIPE_MAX_POS + 0.001F, max, max, CoreConstants.PIPE_MAX_POS + 0.10F);
RenderEntityBlock.INSTANCE.renderBlock(box, pipe.worldObj, 0, 0, 0, pipe.xCoord, pipe.yCoord, pipe.zCoord, true, true);
}
-
+
RenderHelper.enableStandardItemLighting();
GL11.glPopAttrib();
diff --git a/common/buildcraft/transport/render/PipeRendererWorld.java b/common/buildcraft/transport/render/PipeRendererWorld.java
index 5cc1baef..77f8f4a8 100644
--- a/common/buildcraft/transport/render/PipeRendererWorld.java
+++ b/common/buildcraft/transport/render/PipeRendererWorld.java
@@ -2,12 +2,14 @@ package buildcraft.transport.render;
import buildcraft.BuildCraftTransport;
import buildcraft.api.core.IIconProvider;
-import buildcraft.core.utils.Utils;
+import buildcraft.core.CoreConstants;
import buildcraft.transport.BlockGenericPipe;
import buildcraft.transport.IPipeRenderState;
import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeRenderState;
+import buildcraft.transport.TransportConstants;
import buildcraft.transport.TransportProxy;
+import buildcraft.core.utils.MatrixTranformations;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
@@ -20,62 +22,8 @@ import net.minecraftforge.common.ForgeDirection;
public class PipeRendererWorld implements ISimpleBlockRenderingHandler {
- public static final float facadeThickness = 1F / 16F;
- /**
- * Mirrors the array on the Y axis by calculating offsets from 0.5F
- *
- * @param targetArray
- */
- private void mirrorY(float[][] targetArray) {
- float temp = targetArray[1][0];
- targetArray[1][0] = (targetArray[1][1] - 0.5F) * -1F + 0.5F; // 1 -> 0.5F -> -0.5F -> 0F
- targetArray[1][1] = (temp - 0.5F) * -1F + 0.5F; // 0 -> -0.5F -> 0.5F -> 1F
- }
- /**
- * Shifts the coordinates around effectivly rotating something. Zero state
- * is DOWN then -> NORTH -> WEST Note - To obtain Pos, do a mirrorY() before
- * rotating
- *
- * @param targetArray the array that should be rotated
- */
- private void rotate(float[][] targetArray) {
- for (int i = 0; i < 2; i++) {
- float temp = targetArray[2][i];
- targetArray[2][i] = targetArray[1][i];
- targetArray[1][i] = targetArray[0][i];
- targetArray[0][i] = temp;
- }
- }
-
- /**
- * @param targetArray the array that should be transformed
- * @param direction
- */
- private void transform(float[][] targetArray, ForgeDirection direction) {
- if ((direction.ordinal() & 0x1) == 1) {
- mirrorY(targetArray);
- }
-
- for (int i = 0; i < (direction.ordinal() >> 1); i++) {
- rotate(targetArray);
- }
- }
-
- /**
- * Clones both dimensions of a float[][]
- *
- * @param source the float[][] to deepClone
- * @return
- */
- private float[][] deepClone(float[][] source) {
- float[][] target = source.clone();
- for (int i = 0; i < target.length; i++) {
- target[i] = source[i].clone();
- }
- return target;
- }
private void renderAllFaceExeptAxe(RenderBlocks renderblocks, BlockGenericPipe block, Icon icon, int x, int y, int z, char axe) {
float minX = (float) renderblocks.renderMinX;
@@ -121,8 +69,8 @@ public class PipeRendererWorld implements ISimpleBlockRenderingHandler {
public void renderPipe(RenderBlocks renderblocks, IBlockAccess iblockaccess, BlockGenericPipe block, IPipeRenderState renderState, int x, int y, int z) {
- float minSize = Utils.pipeMinPos;
- float maxSize = Utils.pipeMaxPos;
+ float minSize = CoreConstants.PIPE_MIN_POS;
+ float maxSize = CoreConstants.PIPE_MAX_POS;
PipeRenderState state = renderState.getRenderState();
IIconProvider icons = renderState.getPipeIcons();
@@ -210,7 +158,7 @@ public class PipeRendererWorld implements ISimpleBlockRenderingHandler {
zeroState[0][1] = 1.0F + zFightOffset / 2;
// Y START - END
zeroState[1][0] = 0.0F - zFightOffset;
- zeroState[1][1] = facadeThickness;
+ zeroState[1][1] = TransportConstants.FACADE_THICKNESS;
// Z START - END
zeroState[2][0] = 0.0F;
zeroState[2][1] = 1.0F;
@@ -241,39 +189,39 @@ public class PipeRendererWorld implements ISimpleBlockRenderingHandler {
// Hollow facade
if (state.pipeConnectionMatrix.isConnected(direction)) {
- float[][] rotated = deepClone(zeroState);
+ float[][] rotated = MatrixTranformations.deepClone(zeroState);
rotated[2][0] = 0.0F;
- rotated[2][1] = Utils.pipeMinPos - zFightOffset;
+ rotated[2][1] = CoreConstants.PIPE_MIN_POS - zFightOffset;
rotated[1][0] -= zFightOffset / 2;
- transform(rotated, direction);
+ MatrixTranformations.transform(rotated, direction);
renderblocks.setRenderBounds(rotated[0][0], rotated[1][0], rotated[2][0], rotated[0][1], rotated[1][1], rotated[2][1]);
renderblocks.renderStandardBlock(block, x, y, z);
- rotated = deepClone(zeroState);
- rotated[2][0] = Utils.pipeMaxPos + zFightOffset;
+ rotated = MatrixTranformations.deepClone(zeroState);
+ rotated[2][0] = CoreConstants.PIPE_MAX_POS + zFightOffset;
rotated[1][0] -= zFightOffset / 2;
- transform(rotated, direction);
+ MatrixTranformations.transform(rotated, direction);
renderblocks.setRenderBounds(rotated[0][0], rotated[1][0], rotated[2][0], rotated[0][1], rotated[1][1], rotated[2][1]);
renderblocks.renderStandardBlock(block, x, y, z);
- rotated = deepClone(zeroState);
+ rotated = MatrixTranformations.deepClone(zeroState);
rotated[0][0] = 0.0F;
- rotated[0][1] = Utils.pipeMinPos - zFightOffset;
+ rotated[0][1] = CoreConstants.PIPE_MIN_POS - zFightOffset;
rotated[1][1] -= zFightOffset;
- transform(rotated, direction);
+ MatrixTranformations.transform(rotated, direction);
renderblocks.setRenderBounds(rotated[0][0], rotated[1][0], rotated[2][0], rotated[0][1], rotated[1][1], rotated[2][1]);
renderblocks.renderStandardBlock(block, x, y, z);
- rotated = deepClone(zeroState);
- rotated[0][0] = Utils.pipeMaxPos + zFightOffset;
+ rotated = MatrixTranformations.deepClone(zeroState);
+ rotated[0][0] = CoreConstants.PIPE_MAX_POS + zFightOffset;
rotated[0][1] = 1F;
rotated[1][1] -= zFightOffset;
- transform(rotated, direction);
+ MatrixTranformations.transform(rotated, direction);
renderblocks.setRenderBounds(rotated[0][0], rotated[1][0], rotated[2][0], rotated[0][1], rotated[1][1], rotated[2][1]);
renderblocks.renderStandardBlock(block, x, y, z);
} else { // Solid facade
- float[][] rotated = deepClone(zeroState);
- transform(rotated, direction);
+ float[][] rotated = MatrixTranformations.deepClone(zeroState);
+ MatrixTranformations.transform(rotated, direction);
renderblocks.setRenderBounds(rotated[0][0], rotated[1][0], rotated[2][0], rotated[0][1], rotated[1][1], rotated[2][1]);
renderblocks.renderStandardBlock(block, x, y, z);
}
@@ -292,21 +240,21 @@ public class PipeRendererWorld implements ISimpleBlockRenderingHandler {
}
// X START - END
- zeroState[0][0] = Utils.pipeMinPos;
- zeroState[0][1] = Utils.pipeMaxPos;
+ zeroState[0][0] = CoreConstants.PIPE_MIN_POS;
+ zeroState[0][1] = CoreConstants.PIPE_MAX_POS;
// Y START - END
- zeroState[1][0] = facadeThickness;
- zeroState[1][1] = Utils.pipeMinPos;
+ zeroState[1][0] = TransportConstants.FACADE_THICKNESS;
+ zeroState[1][1] = CoreConstants.PIPE_MIN_POS;
// Z START - END
- zeroState[2][0] = Utils.pipeMinPos;
- zeroState[2][1] = Utils.pipeMaxPos;
+ zeroState[2][0] = CoreConstants.PIPE_MIN_POS;
+ zeroState[2][1] = CoreConstants.PIPE_MAX_POS;
state.currentTexture = BuildCraftTransport.instance.pipeIconProvider.getIcon(PipeIconProvider.TYPE.PipeStructureCobblestone.ordinal()); // Structure Pipe
for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) {
if (state.facadeMatrix.getFacadeBlockId(direction) != 0 && !state.pipeConnectionMatrix.isConnected(direction)) {
- float[][] rotated = deepClone(zeroState);
- transform(rotated, direction);
+ float[][] rotated = MatrixTranformations.deepClone(zeroState);
+ MatrixTranformations.transform(rotated, direction);
renderblocks.setRenderBounds(rotated[0][0], rotated[1][0], rotated[2][0], rotated[0][1], rotated[1][1], rotated[2][1]);
renderblocks.renderStandardBlock(block, x, y, z);
@@ -333,8 +281,8 @@ public class PipeRendererWorld implements ISimpleBlockRenderingHandler {
for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) {
if (state.plugMatrix.isConnected(direction)) {
- float[][] rotated = deepClone(zeroState);
- transform(rotated, direction);
+ float[][] rotated = MatrixTranformations.deepClone(zeroState);
+ MatrixTranformations.transform(rotated, direction);
renderblocks.setRenderBounds(rotated[0][0], rotated[1][0], rotated[2][0], rotated[0][1], rotated[1][1], rotated[2][1]);
renderblocks.renderStandardBlock(block, x, y, z);
@@ -355,8 +303,8 @@ public class PipeRendererWorld implements ISimpleBlockRenderingHandler {
for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) {
if (state.plugMatrix.isConnected(direction)) {
- float[][] rotated = deepClone(zeroState);
- transform(rotated, direction);
+ float[][] rotated = MatrixTranformations.deepClone(zeroState);
+ MatrixTranformations.transform(rotated, direction);
renderblocks.setRenderBounds(rotated[0][0], rotated[1][0], rotated[2][0], rotated[0][1], rotated[1][1], rotated[2][1]);
renderblocks.renderStandardBlock(block, x, y, z);
diff --git a/common/buildcraft/transport/render/TileEntityPickupFX.java b/common/buildcraft/transport/render/TileEntityPickupFX.java
index 3a525cbd..d5ac1411 100644
--- a/common/buildcraft/transport/render/TileEntityPickupFX.java
+++ b/common/buildcraft/transport/render/TileEntityPickupFX.java
@@ -11,7 +11,7 @@
*/
package buildcraft.transport.render;
-import buildcraft.core.utils.Utils;
+import buildcraft.transport.utils.TransportUtils;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.particle.EntityFX;
@@ -42,7 +42,7 @@ public class TileEntityPickupFX extends EntityFX
this.entityToPickUp = par2Entity;
this.entityPickingUp = par3Entity;
this.maxAge = 3;
- this.yOffs = Utils.getPipeFloorOf(par2Entity.getEntityItem());
+ this.yOffs = TransportUtils.getPipeFloorOf(par2Entity.getEntityItem());
}
@Override
diff --git a/common/buildcraft/transport/utils/TransportUtils.java b/common/buildcraft/transport/utils/TransportUtils.java
new file mode 100644
index 00000000..fb601108
--- /dev/null
+++ b/common/buildcraft/transport/utils/TransportUtils.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) SpaceToad, 2011-2012
+ * http://www.mod-buildcraft.com
+ *
+ * BuildCraft is distributed under the terms of the Minecraft Mod Public
+ * License 1.0, or MMPL. Please check the contents of the license located in
+ * http://www.mod-buildcraft.com/MMPL-1.0.txt
+ */
+package buildcraft.transport.utils;
+
+import buildcraft.core.CoreConstants;
+import net.minecraft.item.ItemStack;
+
+/**
+ *
+ * @author CovertJaguar
+ */
+public class TransportUtils {
+
+ /**
+ * Depending on the kind of item in the pipe, set the floor at a different
+ * level to optimize graphical aspect.
+ */
+ public static float getPipeFloorOf(ItemStack item) {
+ return CoreConstants.PIPE_MIN_POS;
+ }
+}