Multimeter now implements PartFace

This commit is contained in:
Calclavia 2014-02-21 17:00:34 +08:00
parent 642806b5c5
commit d3e7347ac1
4 changed files with 24 additions and 78 deletions

View file

@ -16,6 +16,7 @@ import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler;
import resonantinduction.api.mechanical.IMechanical;
import resonantinduction.core.ResonantInduction;
import resonantinduction.core.prefab.part.PartFace;
import resonantinduction.electrical.Electrical;
import universalelectricity.api.CompatibilityModule;
import universalelectricity.api.energy.IConductor;
@ -25,15 +26,10 @@ import calclavia.lib.network.IPacketReceiver;
import codechicken.lib.data.MCDataInput;
import codechicken.lib.data.MCDataOutput;
import codechicken.lib.vec.Cuboid6;
import codechicken.lib.vec.Rotation;
import codechicken.lib.vec.Transformation;
import codechicken.lib.vec.Vector3;
import codechicken.microblock.FaceMicroClass;
import codechicken.multipart.IRedstonePart;
import codechicken.multipart.JCuboidPart;
import codechicken.multipart.JNormalOcclusion;
import codechicken.multipart.NormalOcclusionTest;
import codechicken.multipart.TFacePart;
import codechicken.multipart.TMultiPart;
import codechicken.multipart.TileMultipart;
@ -49,22 +45,8 @@ import cpw.mods.fml.relauncher.SideOnly;
* @author Calclavia
*
*/
public class PartMultimeter extends JCuboidPart implements IConnector<MultimeterNetwork>, TFacePart, JNormalOcclusion, IRedstonePart, IPacketReceiver
public class PartMultimeter extends PartFace implements IConnector<MultimeterNetwork>, IRedstonePart, IPacketReceiver
{
public static Cuboid6[][] bounds = new Cuboid6[6][2];
static
{
bounds[0][0] = new Cuboid6(1 / 8D, 0, 0, 7 / 8D, 1 / 8D, 1);
bounds[0][1] = new Cuboid6(0, 0, 1 / 8D, 1, 1 / 8D, 7 / 8D);
for (int s = 1; s < 6; s++)
{
Transformation t = Rotation.sideRotations[s].at(Vector3.center);
bounds[s][0] = bounds[0][0].copy().apply(t);
bounds[s][1] = bounds[0][1].copy().apply(t);
}
}
public enum DetectMode
{
NONE("none"), LESS_THAN("lessThan"), LESS_THAN_EQUAL("lessThanOrEqual"), EQUAL("equal"),
@ -85,18 +67,10 @@ public class PartMultimeter extends JCuboidPart implements IConnector<Multimeter
// TODO: Move warn settings over.
public boolean redstoneOn;
private byte side;
private int ticks;
public boolean isPrimary;
private MultimeterNetwork network;
boolean isPrimary;
public void preparePlacement(int side, int itemDamage)
{
this.side = (byte) (side);
}
public boolean hasMultimeter(int x, int y, int z)
{
return getMultimeter(x, y, z) != null;
@ -165,7 +139,7 @@ public class PartMultimeter extends JCuboidPart implements IConnector<Multimeter
if (tileEntity instanceof TileMultipart)
{
TMultiPart part = ((TileMultipart) tileEntity).partMap(side);
TMultiPart part = ((TileMultipart) tileEntity).partMap(placementSide.ordinal());
if (part instanceof PartMultimeter)
{
@ -179,7 +153,7 @@ public class PartMultimeter extends JCuboidPart implements IConnector<Multimeter
@Override
public boolean activate(EntityPlayer player, MovingObjectPosition part, ItemStack item)
{
player.openGui(Electrical.INSTANCE, side, world(), x(), y(), z());
player.openGui(Electrical.INSTANCE, placementSide.ordinal(), world(), x(), y(), z());
return true;
}
@ -320,7 +294,7 @@ public class PartMultimeter extends JCuboidPart implements IConnector<Multimeter
public void readDesc(MCDataInput packet)
{
packet.readByte();
this.side = packet.readByte();
placementSide = ForgeDirection.getOrientation(packet.readByte());
detectMode = DetectMode.values()[packet.readByte()];
getNetwork().center = new universalelectricity.api.vector.Vector3(packet.readNBTTagCompound());
getNetwork().size = new universalelectricity.api.vector.Vector3(packet.readNBTTagCompound());
@ -331,7 +305,7 @@ public class PartMultimeter extends JCuboidPart implements IConnector<Multimeter
public void writeDesc(MCDataOutput packet)
{
packet.writeByte(0);
packet.writeByte(this.side);
packet.writeByte(placementSide.ordinal());
packet.writeByte((byte) detectMode.ordinal());
packet.writeNBTTagCompound(getNetwork().center.writeToNBT(new NBTTagCompound()));
packet.writeNBTTagCompound(getNetwork().size.writeToNBT(new NBTTagCompound()));
@ -358,7 +332,7 @@ public class PartMultimeter extends JCuboidPart implements IConnector<Multimeter
{
if (packetID == 0)
{
this.side = packet.readByte();
placementSide = ForgeDirection.getOrientation(packet.readByte());
detectMode = DetectMode.values()[packet.readByte()];
getNetwork().center = new universalelectricity.api.vector.Vector3(packet.readNBTTagCompound());
getNetwork().size = new universalelectricity.api.vector.Vector3(packet.readNBTTagCompound());
@ -392,7 +366,7 @@ public class PartMultimeter extends JCuboidPart implements IConnector<Multimeter
public ForgeDirection getDirection()
{
return ForgeDirection.getOrientation(this.side);
return ForgeDirection.getOrientation(this.placementSide.ordinal());
}
@Deprecated
@ -436,7 +410,7 @@ public class PartMultimeter extends JCuboidPart implements IConnector<Multimeter
}
else
{
PacketDispatcher.sendPacketToServer(ResonantInduction.PACKET_MULTIPART.getPacket(new universalelectricity.api.vector.Vector3(x(), y(), z()), side));
PacketDispatcher.sendPacketToServer(ResonantInduction.PACKET_MULTIPART.getPacket(new universalelectricity.api.vector.Vector3(x(), y(), z()), placementSide.ordinal()));
}
}
@ -444,7 +418,7 @@ public class PartMultimeter extends JCuboidPart implements IConnector<Multimeter
public void load(NBTTagCompound nbt)
{
super.load(nbt);
side = nbt.getByte("side");
placementSide = ForgeDirection.getOrientation(nbt.getByte("side"));
detectMode = DetectMode.values()[nbt.getByte("detectMode")];
redstoneTriggerLimit = nbt.getLong("energyLimit");
}
@ -453,7 +427,7 @@ public class PartMultimeter extends JCuboidPart implements IConnector<Multimeter
public void save(NBTTagCompound nbt)
{
super.save(nbt);
nbt.setByte("side", this.side);
nbt.setByte("side", (byte) placementSide.ordinal());
nbt.setByte("detectMode", (byte) detectMode.ordinal());
nbt.setLong("energyLimit", redstoneTriggerLimit);
}
@ -474,30 +448,6 @@ public class PartMultimeter extends JCuboidPart implements IConnector<Multimeter
return "resonant_induction_multimeter";
}
@Override
public int getSlotMask()
{
return 1 << this.side;
}
@Override
public Cuboid6 getBounds()
{
return FaceMicroClass.aBounds()[0x10 | this.side];
}
@Override
public Iterable<Cuboid6> getOcclusionBoxes()
{
return Arrays.asList(bounds[this.side]);
}
@Override
public boolean occlusionTest(TMultiPart npart)
{
return NormalOcclusionTest.apply(this, npart);
}
@Override
public int redstoneConductionMap()
{
@ -515,20 +465,6 @@ public class PartMultimeter extends JCuboidPart implements IConnector<Multimeter
return new ItemStack(Electrical.itemMultimeter);
}
@Override
public Iterable<ItemStack> getDrops()
{
List<ItemStack> drops = new ArrayList<ItemStack>();
drops.add(getItem());
return drops;
}
@Override
public ItemStack pickItem(MovingObjectPosition hit)
{
return getItem();
}
@Override
@SideOnly(Side.CLIENT)
public void renderDynamic(Vector3 pos, float frame, int pass)

View file

@ -116,7 +116,7 @@ public class ResonantInduction
GameRegistry.registerItem(itemDust, itemDust.getUnlocalizedName());
GameRegistry.registerItem(itemRefinedDust, itemRefinedDust.getUnlocalizedName());
// Already registered wih ContentRegistry
// Already registered with ContentRegistry
// GameRegistry.registerTileEntity(TileMaterial.class, "ri_material");
GameRegistry.registerTileEntity(TileFluidMixture.class, "ri_fluid_mixture");
proxy.preInit();

View file

@ -17,7 +17,9 @@ import codechicken.lib.vec.Vector3;
import codechicken.microblock.FaceMicroClass;
import codechicken.multipart.JCuboidPart;
import codechicken.multipart.JNormalOcclusion;
import codechicken.multipart.NormalOcclusionTest;
import codechicken.multipart.TFacePart;
import codechicken.multipart.TMultiPart;
public abstract class PartFace extends JCuboidPart implements JNormalOcclusion, TFacePart
{
@ -41,9 +43,11 @@ public abstract class PartFace extends JCuboidPart implements JNormalOcclusion,
/** The relative direction this block faces. */
public byte facing = 0;
protected int ticks;
public void preparePlacement(int side, int facing)
{
this.placementSide = ForgeDirection.getOrientation( side);
this.placementSide = ForgeDirection.getOrientation(side);
this.facing = (byte) (facing - 2);
}
@ -91,6 +95,12 @@ public abstract class PartFace extends JCuboidPart implements JNormalOcclusion,
return Arrays.asList(bounds[this.placementSide.ordinal()]);
}
@Override
public boolean occlusionTest(TMultiPart npart)
{
return NormalOcclusionTest.apply(this, npart);
}
@Override
public Iterable<ItemStack> getDrops()
{

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

After

Width:  |  Height:  |  Size: 888 B