Fixed pipe placement crash

This commit is contained in:
Calclavia 2014-09-21 10:28:51 +08:00
parent af305ec049
commit 57a1375bd7
6 changed files with 104 additions and 115 deletions

View file

@ -25,7 +25,7 @@ public class NodeTank extends NodeConnector implements IFluidTank, IFluidHandler
{ {
static final int PACKET_DESCRIPTION = 100, PACKET_TANK = 101; static final int PACKET_DESCRIPTION = 100, PACKET_TANK = 101;
LimitedTank tank; LimitedTank tank;
byte renderSides = 0; int renderSides = 0;
public NodeTank(INodeProvider parent) public NodeTank(INodeProvider parent)
{ {
@ -204,7 +204,7 @@ public class NodeTank extends NodeConnector implements IFluidTank, IFluidHandler
return tank.maxOutput; return tank.maxOutput;
} }
public byte getRenderSides() public int getRenderSides()
{ {
return renderSides; return renderSides;
} }

View file

@ -9,10 +9,8 @@ import codechicken.lib.vec.Cuboid6
import codechicken.multipart._ import codechicken.multipart._
import cpw.mods.fml.relauncher.{Side, SideOnly} import cpw.mods.fml.relauncher.{Side, SideOnly}
import net.minecraft.entity.player.EntityPlayer import net.minecraft.entity.player.EntityPlayer
import net.minecraft.nbt.NBTTagCompound
import net.minecraft.util.{IIcon, MovingObjectPosition} import net.minecraft.util.{IIcon, MovingObjectPosition}
import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.common.util.ForgeDirection
import universalelectricity.api.core.grid.{INode, INodeProvider, ISave}
object PartFramedNode object PartFramedNode
{ {
@ -34,17 +32,17 @@ object PartFramedNode
insulatedSides(5) = new IndexedCuboid6(5, new Cuboid6(0.7, 0.3, 0.3, 1.0, 0.7, 0.7)) insulatedSides(5) = new IndexedCuboid6(5, new Cuboid6(0.7, 0.3, 0.3, 1.0, 0.7, 0.7))
insulatedSides(6) = new IndexedCuboid6(6, new Cuboid6(0.3, 0.3, 0.3, 0.7, 0.7, 0.7)) insulatedSides(6) = new IndexedCuboid6(6, new Cuboid6(0.3, 0.3, 0.3, 0.7, 0.7, 0.7))
def connectionMapContainsSide(connections: Byte, side: ForgeDirection): Boolean = def connectionMapContainsSide(connections: Int, side: ForgeDirection): Boolean =
{ {
val tester: Byte = (1 << side.ordinal).asInstanceOf[Byte] val tester = 1 << side.ordinal
return ((connections & tester) > 0) return (connections & tester) > 0
} }
} }
abstract class PartFramedNode extends PartAbstract with TNodePartConnector with TSlottedPart with TNormalOcclusion with TIconHitEffects abstract class PartFramedNode extends PartAbstract with TNodePartConnector with TSlottedPart with TNormalOcclusion with TIconHitEffects
{ {
/** Bitmask connections */ /** Bitmask connections */
var connectionMask: Byte = 0x00 var connectionMask = 0x00
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
protected var breakIcon: IIcon = null protected var breakIcon: IIcon = null
@ -52,11 +50,6 @@ abstract class PartFramedNode extends PartAbstract with TNodePartConnector with
/** Client Side */ /** Client Side */
private var testingSide: ForgeDirection = null private var testingSide: ForgeDirection = null
override def occlusionTest(other: TMultiPart): Boolean =
{
return NormalOcclusionTest.apply(this, other)
}
override def getStrength(hit: MovingObjectPosition, player: EntityPlayer): Float = override def getStrength(hit: MovingObjectPosition, player: EntityPlayer): Float =
{ {
return 10F return 10F
@ -108,15 +101,9 @@ abstract class PartFramedNode extends PartAbstract with TNodePartConnector with
return list return list
} }
def getAllCurrentConnections: Byte = def getAllCurrentConnections = connectionMask
{
return (connectionMask)
}
def getSlotMask: Int = def getSlotMask = PartMap.CENTER.mask
{
return PartMap.CENTER.mask
}
def getHollowSize: Int = def getHollowSize: Int =
{ {

View file

@ -12,6 +12,7 @@ import org.lwjgl.input.Keyboard
import resonant.lib.render.EnumColor import resonant.lib.render.EnumColor
import resonant.lib.utility.LanguageUtility import resonant.lib.utility.LanguageUtility
import resonant.lib.wrapper.WrapList._ import resonant.lib.wrapper.WrapList._
import resonantinduction.core.ResonantPartFactory
import universalelectricity.api.UnitDisplay import universalelectricity.api.UnitDisplay
class ItemPipe extends TItemMultiPart class ItemPipe extends TItemMultiPart
@ -21,7 +22,7 @@ class ItemPipe extends TItemMultiPart
def newPart(itemStack: ItemStack, player: EntityPlayer, world: World, pos: BlockCoord, side: Int, hit: Vector3): TMultiPart = def newPart(itemStack: ItemStack, player: EntityPlayer, world: World, pos: BlockCoord, side: Int, hit: Vector3): TMultiPart =
{ {
val part: PartPipe = MultiPartRegistry.createPart("resonant_induction_pipe", false).asInstanceOf[PartPipe] val part = ResonantPartFactory.create(classOf[PartPipe])
part.preparePlacement(itemStack.getItemDamage) part.preparePlacement(itemStack.getItemDamage)
return part return part
} }

View file

@ -22,15 +22,17 @@ import resonantinduction.mechanical.fluid.pipe.PipeMaterials.PipeMaterial
*/ */
class PartPipe extends PartFramedNode with TMaterial[PipeMaterial] with TColorable with TSlottedPart with TNormalOcclusion with IFluidHandler class PartPipe extends PartFramedNode with TMaterial[PipeMaterial] with TColorable with TSlottedPart with TNormalOcclusion with IFluidHandler
{ {
protected final val tank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME) val tank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME)
override lazy val node = new PipePressureNode(this)
/** /**
* Computes the average fluid for client to render. * Computes the average fluid for client to render.
*/ */
private val averageTankData = new EvictingList[Integer](20) private val averageTankData = new EvictingList[Integer](20)
private var markPacket: Boolean = true private var markPacket = true
override lazy val node = new PipePressureNode(this) material = PipeMaterials.ceramic
def preparePlacement(meta: Int) def preparePlacement(meta: Int)
{ {
@ -60,7 +62,7 @@ class PartPipe extends PartFramedNode with TMaterial[PipeMaterial] with TColorab
/** /**
* Sends fluid level to the client to be used in the renderer * Sends fluid level to the client to be used in the renderer
*/ */
def sendFluidUpdate def sendFluidUpdate()
{ {
val nbt = new NBTTagCompound val nbt = new NBTTagCompound
var averageAmount: Int = 0 var averageAmount: Int = 0
@ -82,15 +84,13 @@ class PartPipe extends PartFramedNode with TMaterial[PipeMaterial] with TColorab
override def read(packet: MCDataInput, packetID: Int) override def read(packet: MCDataInput, packetID: Int)
{ {
super.read(packet, packetID)
if (packetID == 3) if (packetID == 3)
{ {
tank.setCapacity(packet.readInt) tank.setCapacity(packet.readInt)
tank.readFromNBT(packet.readNBTTagCompound) tank.readFromNBT(packet.readNBTTagCompound)
} }
else
{
super.read(packet, packetID)
}
} }
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)

View file

@ -9,9 +9,11 @@ import resonantinduction.core.prefab.part.connector.TColorable$;
import universalelectricity.api.core.grid.INode; import universalelectricity.api.core.grid.INode;
import universalelectricity.api.core.grid.INodeProvider; import universalelectricity.api.core.grid.INodeProvider;
/** Pressure node for the pipe /**
* Pressure node for the pipe
* *
* @author Calclavia, Darkguardsman */ * @author Calclavia, Darkguardsman
*/
public class PipePressureNode extends NodePressure public class PipePressureNode extends NodePressure
{ {
public PipePressureNode(PartPipe parent) public PipePressureNode(PartPipe parent)
@ -24,14 +26,13 @@ public class PipePressureNode extends NodePressure
return (PartPipe) this.getParent(); return (PartPipe) this.getParent();
} }
public void doRecache() public void doRecache()
{ {
connections.clear(); connections.clear();
if (world() != null) if (world() != null)
{ {
byte previousConnections = pipe().getAllCurrentConnections(); int previousConnections = pipe().getAllCurrentConnections();
pipe().connectionMask_$eq((byte) 0); pipe().connectionMask_$eq((byte) 0);
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)

View file

@ -39,7 +39,7 @@ public class RenderPipe implements ISimpleItemRenderer
FluidStack fluid = part.tank().getFluid(); FluidStack fluid = part.tank().getFluid();
int capacity = part.tank().getCapacity(); int capacity = part.tank().getCapacity();
byte renderSides = part.getAllCurrentConnections(); int renderSides = part.getAllCurrentConnections();
/** /**
if (fluid != null && fluid.amount > 0) if (fluid != null && fluid.amount > 0)
{ {
@ -112,7 +112,7 @@ public class RenderPipe implements ISimpleItemRenderer
} }
@SuppressWarnings("incomplete-switch") @SuppressWarnings("incomplete-switch")
public static void render(int meta, int colorCode, byte sides) public static void render(int meta, int colorCode, int sides)
{ {
RenderUtility.enableBlending(); RenderUtility.enableBlending();
RenderUtility.bind(TEXTURE); RenderUtility.bind(TEXTURE);
@ -172,7 +172,7 @@ public class RenderPipe implements ISimpleItemRenderer
public void renderInventoryItem(IItemRenderer.ItemRenderType type, ItemStack itemStack, Object... data) public void renderInventoryItem(IItemRenderer.ItemRenderType type, ItemStack itemStack, Object... data)
{ {
GL11.glPushMatrix(); GL11.glPushMatrix();
render(itemStack.getItemDamage(), -1, Byte.parseByte("001100", 2)); render(itemStack.getItemDamage(), -1, 0xC);
GL11.glPopMatrix(); GL11.glPopMatrix();
} }
} }