Added prefab partFace
This commit is contained in:
parent
ba7d489c50
commit
c1ce38ffbb
2 changed files with 137 additions and 160 deletions
|
@ -1,16 +1,12 @@
|
||||||
package resonantinduction.electrical.transformer;
|
package resonantinduction.electrical.transformer;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.MovingObjectPosition;
|
import net.minecraft.util.MovingObjectPosition;
|
||||||
import net.minecraftforge.common.ForgeDirection;
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
|
import resonantinduction.core.prefab.part.PartFace;
|
||||||
import resonantinduction.electrical.Electrical;
|
import resonantinduction.electrical.Electrical;
|
||||||
import universalelectricity.api.electricity.IElectricalNetwork;
|
import universalelectricity.api.electricity.IElectricalNetwork;
|
||||||
import universalelectricity.api.electricity.IVoltageInput;
|
import universalelectricity.api.electricity.IVoltageInput;
|
||||||
|
@ -18,40 +14,18 @@ import universalelectricity.api.electricity.IVoltageOutput;
|
||||||
import universalelectricity.api.energy.IConductor;
|
import universalelectricity.api.energy.IConductor;
|
||||||
import universalelectricity.api.energy.IEnergyInterface;
|
import universalelectricity.api.energy.IEnergyInterface;
|
||||||
import universalelectricity.api.vector.VectorHelper;
|
import universalelectricity.api.vector.VectorHelper;
|
||||||
|
import calclavia.lib.utility.WrenchUtility;
|
||||||
import codechicken.lib.data.MCDataInput;
|
import codechicken.lib.data.MCDataInput;
|
||||||
import codechicken.lib.data.MCDataOutput;
|
import codechicken.lib.data.MCDataOutput;
|
||||||
import codechicken.lib.vec.Cuboid6;
|
|
||||||
import codechicken.lib.vec.Rotation;
|
import codechicken.lib.vec.Rotation;
|
||||||
import codechicken.lib.vec.Transformation;
|
|
||||||
import codechicken.lib.vec.Vector3;
|
import codechicken.lib.vec.Vector3;
|
||||||
import codechicken.microblock.FaceMicroClass;
|
|
||||||
import codechicken.multipart.JCuboidPart;
|
|
||||||
import codechicken.multipart.JNormalOcclusion;
|
import codechicken.multipart.JNormalOcclusion;
|
||||||
import codechicken.multipart.TFacePart;
|
import codechicken.multipart.TFacePart;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
public class PartTransformer extends JCuboidPart implements JNormalOcclusion, TFacePart, IVoltageOutput, IEnergyInterface
|
public class PartTransformer extends PartFace implements JNormalOcclusion, TFacePart, IVoltageOutput, IEnergyInterface
|
||||||
{
|
{
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Side of the block this is placed on. */
|
|
||||||
public ForgeDirection placementSide;
|
|
||||||
|
|
||||||
/** The relative direction this block faces. */
|
|
||||||
public byte facing = 0;
|
|
||||||
|
|
||||||
/** Step the voltage up */
|
/** Step the voltage up */
|
||||||
private boolean stepUp;
|
private boolean stepUp;
|
||||||
|
@ -68,16 +42,14 @@ public class PartTransformer extends JCuboidPart implements JNormalOcclusion, TF
|
||||||
@Override
|
@Override
|
||||||
public void readDesc(MCDataInput packet)
|
public void readDesc(MCDataInput packet)
|
||||||
{
|
{
|
||||||
placementSide = ForgeDirection.getOrientation(packet.readByte());
|
super.readDesc(packet);
|
||||||
facing = packet.readByte();
|
|
||||||
multiplier = packet.readByte();
|
multiplier = packet.readByte();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeDesc(MCDataOutput packet)
|
public void writeDesc(MCDataOutput packet)
|
||||||
{
|
{
|
||||||
packet.writeByte(placementSide.ordinal());
|
super.writeDesc(packet);
|
||||||
packet.writeByte(facing);
|
|
||||||
packet.writeByte(multiplier);
|
packet.writeByte(multiplier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,55 +64,11 @@ public class PartTransformer extends JCuboidPart implements JNormalOcclusion, TF
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getSlotMask()
|
|
||||||
{
|
|
||||||
return 1 << this.placementSide.ordinal();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Cuboid6 getBounds()
|
|
||||||
{
|
|
||||||
return FaceMicroClass.aBounds()[0x10 | this.placementSide.ordinal()];
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int redstoneConductionMap()
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean solid(int arg0)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterable<Cuboid6> getOcclusionBoxes()
|
|
||||||
{
|
|
||||||
return Arrays.asList(bounds[this.placementSide.ordinal()]);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected ItemStack getItem()
|
protected ItemStack getItem()
|
||||||
{
|
{
|
||||||
return new ItemStack(Electrical.itemTransformer);
|
return new ItemStack(Electrical.itemTransformer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@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
|
@Override
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public void renderDynamic(Vector3 pos, float frame, int pass)
|
public void renderDynamic(Vector3 pos, float frame, int pass)
|
||||||
|
@ -155,7 +83,6 @@ public class PartTransformer extends JCuboidPart implements JNormalOcclusion, TF
|
||||||
public void load(NBTTagCompound nbt)
|
public void load(NBTTagCompound nbt)
|
||||||
{
|
{
|
||||||
super.load(nbt);
|
super.load(nbt);
|
||||||
placementSide = ForgeDirection.getOrientation(nbt.getByte("side"));
|
|
||||||
stepUp = nbt.getBoolean("stepUp");
|
stepUp = nbt.getBoolean("stepUp");
|
||||||
multiplier = nbt.getByte("multiplier");
|
multiplier = nbt.getByte("multiplier");
|
||||||
}
|
}
|
||||||
|
@ -164,7 +91,6 @@ public class PartTransformer extends JCuboidPart implements JNormalOcclusion, TF
|
||||||
public void save(NBTTagCompound nbt)
|
public void save(NBTTagCompound nbt)
|
||||||
{
|
{
|
||||||
super.save(nbt);
|
super.save(nbt);
|
||||||
nbt.setByte("side", (byte) this.placementSide.ordinal());
|
|
||||||
nbt.setBoolean("stepUp", this.stepUp);
|
nbt.setBoolean("stepUp", this.stepUp);
|
||||||
nbt.setByte("multiplier", multiplier);
|
nbt.setByte("multiplier", multiplier);
|
||||||
}
|
}
|
||||||
|
@ -175,11 +101,6 @@ public class PartTransformer extends JCuboidPart implements JNormalOcclusion, TF
|
||||||
return "resonant_induction_transformer";
|
return "resonant_induction_transformer";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ForgeDirection getFacing()
|
|
||||||
{
|
|
||||||
return ForgeDirection.getOrientation(this.facing + 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canConnect(ForgeDirection direction, Object obj)
|
public boolean canConnect(ForgeDirection direction, Object obj)
|
||||||
{
|
{
|
||||||
|
@ -244,7 +165,7 @@ public class PartTransformer extends JCuboidPart implements JNormalOcclusion, TF
|
||||||
@Override
|
@Override
|
||||||
public boolean activate(EntityPlayer player, MovingObjectPosition hit, ItemStack item)
|
public boolean activate(EntityPlayer player, MovingObjectPosition hit, ItemStack item)
|
||||||
{
|
{
|
||||||
if (this.isUsableWrench(player, player.inventory.getCurrentItem(), x(), y(), z()))
|
if (WrenchUtility.isUsableWrench(player, player.inventory.getCurrentItem(), x(), y(), z()))
|
||||||
{
|
{
|
||||||
if (!this.world().isRemote)
|
if (!this.world().isRemote)
|
||||||
{
|
{
|
||||||
|
@ -255,7 +176,7 @@ public class PartTransformer extends JCuboidPart implements JNormalOcclusion, TF
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
damageWrench(player, player.inventory.getCurrentItem(), x(), y(), z());
|
WrenchUtility.damageWrench(player, player.inventory.getCurrentItem(), x(), y(), z());
|
||||||
|
|
||||||
facing = (byte) ((facing + 1) % 3);
|
facing = (byte) ((facing + 1) % 3);
|
||||||
|
|
||||||
|
@ -273,78 +194,4 @@ public class PartTransformer extends JCuboidPart implements JNormalOcclusion, TF
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isUsableWrench(EntityPlayer entityPlayer, ItemStack itemStack, int x, int y, int z)
|
|
||||||
{
|
|
||||||
if (entityPlayer != null && itemStack != null)
|
|
||||||
{
|
|
||||||
Class wrenchClass = itemStack.getItem().getClass();
|
|
||||||
|
|
||||||
/** UE and Buildcraft */
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Method methodCanWrench = wrenchClass.getMethod("canWrench", EntityPlayer.class, Integer.TYPE, Integer.TYPE, Integer.TYPE);
|
|
||||||
return (Boolean) methodCanWrench.invoke(itemStack.getItem(), entityPlayer, x, y, z);
|
|
||||||
}
|
|
||||||
catch (NoClassDefFoundError e)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Industrialcraft */
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (wrenchClass == Class.forName("ic2.core.item.tool.ItemToolWrench") || wrenchClass == Class.forName("ic2.core.item.tool.ItemToolWrenchElectric"))
|
|
||||||
{
|
|
||||||
return itemStack.getItemDamage() < itemStack.getMaxDamage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function damages a wrench. Works with Buildcraft and Industrialcraft wrenches.
|
|
||||||
*
|
|
||||||
* @return True if damage was successfull.
|
|
||||||
*/
|
|
||||||
public boolean damageWrench(EntityPlayer entityPlayer, ItemStack itemStack, int x, int y, int z)
|
|
||||||
{
|
|
||||||
if (this.isUsableWrench(entityPlayer, itemStack, x, y, z))
|
|
||||||
{
|
|
||||||
Class wrenchClass = itemStack.getItem().getClass();
|
|
||||||
|
|
||||||
/** UE and Buildcraft */
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Method methodWrenchUsed = wrenchClass.getMethod("wrenchUsed", EntityPlayer.class, Integer.TYPE, Integer.TYPE, Integer.TYPE);
|
|
||||||
methodWrenchUsed.invoke(itemStack.getItem(), entityPlayer, x, y, z);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Industrialcraft */
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (wrenchClass == Class.forName("ic2.core.item.tool.ItemToolWrench") || wrenchClass == Class.forName("ic2.core.item.tool.ItemToolWrenchElectric"))
|
|
||||||
{
|
|
||||||
Method methodWrenchDamage = wrenchClass.getMethod("damage", ItemStack.class, Integer.TYPE, EntityPlayer.class);
|
|
||||||
methodWrenchDamage.invoke(itemStack.getItem(), itemStack, 1, entityPlayer);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
130
src/main/java/resonantinduction/core/prefab/part/PartFace.java
Normal file
130
src/main/java/resonantinduction/core/prefab/part/PartFace.java
Normal file
|
@ -0,0 +1,130 @@
|
||||||
|
package resonantinduction.core.prefab.part;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.util.MovingObjectPosition;
|
||||||
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
|
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.JCuboidPart;
|
||||||
|
import codechicken.multipart.JNormalOcclusion;
|
||||||
|
import codechicken.multipart.TFacePart;
|
||||||
|
|
||||||
|
public abstract class PartFace extends JCuboidPart implements JNormalOcclusion, TFacePart
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Side of the block this is placed on. */
|
||||||
|
public ForgeDirection placementSide;
|
||||||
|
|
||||||
|
/** The relative direction this block faces. */
|
||||||
|
public byte facing = 0;
|
||||||
|
|
||||||
|
public void preparePlacement(int side, int facing)
|
||||||
|
{
|
||||||
|
this.placementSide = ForgeDirection.getOrientation((byte) (side ^ 1));
|
||||||
|
this.facing = (byte) (facing - 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readDesc(MCDataInput packet)
|
||||||
|
{
|
||||||
|
placementSide = ForgeDirection.getOrientation(packet.readByte());
|
||||||
|
facing = packet.readByte();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeDesc(MCDataOutput packet)
|
||||||
|
{
|
||||||
|
packet.writeByte(placementSide.ordinal());
|
||||||
|
packet.writeByte(facing);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSlotMask()
|
||||||
|
{
|
||||||
|
return 1 << this.placementSide.ordinal();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Cuboid6 getBounds()
|
||||||
|
{
|
||||||
|
return FaceMicroClass.aBounds()[0x10 | this.placementSide.ordinal()];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int redstoneConductionMap()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean solid(int arg0)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterable<Cuboid6> getOcclusionBoxes()
|
||||||
|
{
|
||||||
|
return Arrays.asList(bounds[this.placementSide.ordinal()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterable<ItemStack> getDrops()
|
||||||
|
{
|
||||||
|
List<ItemStack> drops = new ArrayList<ItemStack>();
|
||||||
|
drops.add(getItem());
|
||||||
|
return drops;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract ItemStack getItem();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack pickItem(MovingObjectPosition hit)
|
||||||
|
{
|
||||||
|
return getItem();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void load(NBTTagCompound nbt)
|
||||||
|
{
|
||||||
|
super.load(nbt);
|
||||||
|
placementSide = ForgeDirection.getOrientation(nbt.getByte("side"));
|
||||||
|
facing = nbt.getByte("facing");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void save(NBTTagCompound nbt)
|
||||||
|
{
|
||||||
|
super.save(nbt);
|
||||||
|
nbt.setByte("side", (byte) placementSide.ordinal());
|
||||||
|
nbt.setByte("facing", facing);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ForgeDirection getFacing()
|
||||||
|
{
|
||||||
|
return ForgeDirection.getOrientation(this.facing + 2);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue