Fixed pipe placement crash
This commit is contained in:
parent
af305ec049
commit
57a1375bd7
6 changed files with 104 additions and 115 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 =
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue