diff --git a/common/buildcraft/core/utils/MathUtils.java b/common/buildcraft/core/utils/MathUtils.java
new file mode 100644
index 00000000..4a676d97
--- /dev/null
+++ b/common/buildcraft/core/utils/MathUtils.java
@@ -0,0 +1,20 @@
+/*
+ * 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;
+
+/**
+ *
+ * @author CovertJaguar
+ */
+public class MathUtils {
+
+ public static double clamp(double value, double min, double max) {
+ return value < min ? min : (value > max ? max : value);
+ }
+}
diff --git a/common/buildcraft/transport/BlockGenericPipe.java b/common/buildcraft/transport/BlockGenericPipe.java
index 73a93723..cd056b73 100644
--- a/common/buildcraft/transport/BlockGenericPipe.java
+++ b/common/buildcraft/transport/BlockGenericPipe.java
@@ -609,6 +609,7 @@ public class BlockGenericPipe extends BlockBuildCraft {
if (isValid(pipe)) {
pipe.container.scheduleNeighborChange();
+ pipe.container.redstonePowered = world.isBlockIndirectlyGettingPowered(x, y, z);
}
}
diff --git a/common/buildcraft/transport/Gate.java b/common/buildcraft/transport/Gate.java
index 3e4ffcf1..66cfac71 100644
--- a/common/buildcraft/transport/Gate.java
+++ b/common/buildcraft/transport/Gate.java
@@ -190,7 +190,7 @@ public abstract class Gate {
boolean[] oldBroadcastSignal = broadcastSignal;
broadcastRedstone = false;
- broadcastSignal = new boolean[]{false, false, false, false};
+ broadcastSignal = new boolean[4];
// Tell the gate to prepare for resolving actions. (Disable pulser)
startResolution();
diff --git a/common/buildcraft/transport/Pipe.java b/common/buildcraft/transport/Pipe.java
index d0693a64..ad45c878 100644
--- a/common/buildcraft/transport/Pipe.java
+++ b/common/buildcraft/transport/Pipe.java
@@ -67,6 +67,13 @@ public abstract class Pipe implements IPipe, IDropContr
transport.setTile((TileGenericPipe) tile);
}
+// public final void handlePipeEvent(PipeEvent event) {
+// try {
+// Method method = getClass().getDeclaredMethod("eventHandler", event.getClass());
+// method.invoke(this, event);
+// } catch (Exception ex) {
+// }
+// }
private static class EventHandler {
public final Method method;
@@ -83,15 +90,8 @@ public abstract class Pipe implements IPipe, IDropContr
eventHandlers.put(getClass(), handlerMap);
}
EventHandler handler = handlerMap.get(event.getClass());
- if (handler == null) {
- try {
- Method method = getClass().getDeclaredMethod("eventHandler", event.getClass());
- handler = new EventHandler(method);
- } catch (Exception ex) {
- handler = new EventHandler(null);
- }
- handlerMap.put(event.getClass(), handler);
- }
+ if (handler == null)
+ handler = makeEventHandler(event, handlerMap);
if (handler.method == null)
return;
try {
@@ -100,6 +100,18 @@ public abstract class Pipe implements IPipe, IDropContr
}
}
+ private EventHandler makeEventHandler(PipeEvent event, Map, EventHandler> handlerMap) {
+ EventHandler handler;
+ try {
+ Method method = getClass().getDeclaredMethod("eventHandler", event.getClass());
+ handler = new EventHandler(method);
+ } catch (Exception ex) {
+ handler = new EventHandler(null);
+ }
+ handlerMap.put(event.getClass(), handler);
+ return handler;
+ }
+
public boolean blockActivated(EntityPlayer entityplayer) {
return false;
}
diff --git a/common/buildcraft/transport/PipeTransportItems.java b/common/buildcraft/transport/PipeTransportItems.java
index ca61cfc2..3fc178a1 100644
--- a/common/buildcraft/transport/PipeTransportItems.java
+++ b/common/buildcraft/transport/PipeTransportItems.java
@@ -19,6 +19,7 @@ import buildcraft.core.network.PacketIds;
import buildcraft.core.proxy.CoreProxy;
import buildcraft.core.utils.BCLog;
import buildcraft.core.utils.BlockUtil;
+import buildcraft.core.utils.MathUtils;
import buildcraft.transport.network.PacketPipeTransportContent;
import buildcraft.transport.network.PacketPipeTransportNBT;
import buildcraft.transport.network.PacketSimpleId;
@@ -33,12 +34,12 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
+import java.util.EnumSet;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
-import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.ISidedInventory;
@@ -47,6 +48,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.network.packet.Packet;
import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.MathHelper;
import net.minecraftforge.common.ForgeDirection;
public class PipeTransportItems extends PipeTransport {
@@ -151,17 +153,9 @@ public class PipeTransportItems extends PipeTransport {
}
private void readjustPosition(TravelingItem item) {
- double x = item.xCoord;
- double y = item.yCoord;
- double z = item.zCoord;
-
- x = Math.max(x, container.xCoord + 0.01);
- y = Math.max(y, container.yCoord + 0.01);
- z = Math.max(z, container.zCoord + 0.01);
-
- x = Math.min(x, container.xCoord + 0.99);
- y = Math.min(y, container.yCoord + 0.99);
- z = Math.min(z, container.zCoord + 0.99);
+ double x = MathUtils.clamp(item.xCoord, container.xCoord + 0.01, container.xCoord + 0.99);
+ double y = MathUtils.clamp(item.yCoord, container.yCoord + 0.01, container.yCoord + 0.99);
+ double z = MathUtils.clamp(item.zCoord, container.zCoord + 0.01, container.zCoord + 0.99);
if (item.input != ForgeDirection.UP && item.input != ForgeDirection.DOWN) {
y = container.yCoord + TransportUtils.getPipeFloorOf(item.getItemStack());
@@ -284,9 +278,10 @@ public class PipeTransportItems extends PipeTransport {
item.blacklist.add(item.input.getOpposite());
- for (ForgeDirection o : ForgeDirection.VALID_DIRECTIONS) {
- if (item.blacklist.contains(o))
- continue;
+ EnumSet sides = EnumSet.complementOf(item.blacklist);
+ sides.remove(ForgeDirection.UNKNOWN);
+
+ for (ForgeDirection o : sides) {
if (container.pipe.outputOpen(o) && canReceivePipeObjects(o, item))
result.add(o);
}
diff --git a/common/buildcraft/transport/TileGenericPipe.java b/common/buildcraft/transport/TileGenericPipe.java
index 92f61a33..39c73b10 100644
--- a/common/buildcraft/transport/TileGenericPipe.java
+++ b/common/buildcraft/transport/TileGenericPipe.java
@@ -89,6 +89,7 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, IFlui
private boolean blockNeighborChange = false;
private boolean refreshRenderState = false;
private boolean pipeBound = false;
+ public boolean redstonePowered = false;
private int[] facadeBlocks = new int[ForgeDirection.VALID_DIRECTIONS.length];
private int[] facadeMeta = new int[ForgeDirection.VALID_DIRECTIONS.length];
private boolean[] plugs = new boolean[ForgeDirection.VALID_DIRECTIONS.length];
@@ -99,6 +100,7 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, IFlui
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
+ nbt.setBoolean("redstonePowered", redstonePowered);
if (pipe != null) {
nbt.setInteger("pipeId", pipe.itemID);
@@ -117,7 +119,8 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, IFlui
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
-
+ redstonePowered = nbt.getBoolean("redstonePowered");
+
coreState.pipeId = nbt.getInteger("pipeId");
pipe = BlockGenericPipe.createPipe(coreState.pipeId);
diff --git a/common/buildcraft/transport/triggers/TriggerRedstoneInput.java b/common/buildcraft/transport/triggers/TriggerRedstoneInput.java
index 11c2af88..2aca6efc 100644
--- a/common/buildcraft/transport/triggers/TriggerRedstoneInput.java
+++ b/common/buildcraft/transport/triggers/TriggerRedstoneInput.java
@@ -44,7 +44,7 @@ public class TriggerRedstoneInput extends BCTrigger implements ITriggerPipe {
}
private boolean isBeingPowered(Pipe pipe) {
- return pipe.container.worldObj.isBlockIndirectlyGettingPowered(pipe.container.xCoord, pipe.container.yCoord, pipe.container.zCoord);
+ return pipe.container.redstonePowered;
}
@Override