From c1ce38ffbb67b4fe40c204b5688ff74b4d1bdaf5 Mon Sep 17 00:00:00 2001 From: Calclavia Date: Thu, 20 Feb 2014 17:50:05 +0800 Subject: [PATCH] Added prefab partFace --- .../transformer/PartTransformer.java | 167 +----------------- .../core/prefab/part/PartFace.java | 130 ++++++++++++++ 2 files changed, 137 insertions(+), 160 deletions(-) create mode 100644 src/main/java/resonantinduction/core/prefab/part/PartFace.java diff --git a/electrical/src/main/java/resonantinduction/electrical/transformer/PartTransformer.java b/electrical/src/main/java/resonantinduction/electrical/transformer/PartTransformer.java index 22012d37..47dcd207 100644 --- a/electrical/src/main/java/resonantinduction/electrical/transformer/PartTransformer.java +++ b/electrical/src/main/java/resonantinduction/electrical/transformer/PartTransformer.java @@ -1,16 +1,12 @@ 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.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MovingObjectPosition; import net.minecraftforge.common.ForgeDirection; +import resonantinduction.core.prefab.part.PartFace; import resonantinduction.electrical.Electrical; import universalelectricity.api.electricity.IElectricalNetwork; import universalelectricity.api.electricity.IVoltageInput; @@ -18,40 +14,18 @@ import universalelectricity.api.electricity.IVoltageOutput; import universalelectricity.api.energy.IConductor; import universalelectricity.api.energy.IEnergyInterface; import universalelectricity.api.vector.VectorHelper; +import calclavia.lib.utility.WrenchUtility; 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; import cpw.mods.fml.relauncher.Side; 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 */ private boolean stepUp; @@ -68,16 +42,14 @@ public class PartTransformer extends JCuboidPart implements JNormalOcclusion, TF @Override public void readDesc(MCDataInput packet) { - placementSide = ForgeDirection.getOrientation(packet.readByte()); - facing = packet.readByte(); + super.readDesc(packet); multiplier = packet.readByte(); } @Override public void writeDesc(MCDataOutput packet) { - packet.writeByte(placementSide.ordinal()); - packet.writeByte(facing); + super.writeDesc(packet); packet.writeByte(multiplier); } @@ -92,55 +64,11 @@ public class PartTransformer extends JCuboidPart implements JNormalOcclusion, TF 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 getOcclusionBoxes() - { - return Arrays.asList(bounds[this.placementSide.ordinal()]); - } - protected ItemStack getItem() { return new ItemStack(Electrical.itemTransformer); } - @Override - public Iterable getDrops() - { - List drops = new ArrayList(); - 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) @@ -155,7 +83,6 @@ public class PartTransformer extends JCuboidPart implements JNormalOcclusion, TF public void load(NBTTagCompound nbt) { super.load(nbt); - placementSide = ForgeDirection.getOrientation(nbt.getByte("side")); stepUp = nbt.getBoolean("stepUp"); multiplier = nbt.getByte("multiplier"); } @@ -164,7 +91,6 @@ public class PartTransformer extends JCuboidPart implements JNormalOcclusion, TF public void save(NBTTagCompound nbt) { super.save(nbt); - nbt.setByte("side", (byte) this.placementSide.ordinal()); nbt.setBoolean("stepUp", this.stepUp); nbt.setByte("multiplier", multiplier); } @@ -175,11 +101,6 @@ public class PartTransformer extends JCuboidPart implements JNormalOcclusion, TF return "resonant_induction_transformer"; } - protected ForgeDirection getFacing() - { - return ForgeDirection.getOrientation(this.facing + 2); - } - @Override public boolean canConnect(ForgeDirection direction, Object obj) { @@ -244,7 +165,7 @@ public class PartTransformer extends JCuboidPart implements JNormalOcclusion, TF @Override 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) { @@ -255,7 +176,7 @@ public class PartTransformer extends JCuboidPart implements JNormalOcclusion, TF return true; } - damageWrench(player, player.inventory.getCurrentItem(), x(), y(), z()); + WrenchUtility.damageWrench(player, player.inventory.getCurrentItem(), x(), y(), z()); facing = (byte) ((facing + 1) % 3); @@ -273,78 +194,4 @@ public class PartTransformer extends JCuboidPart implements JNormalOcclusion, TF 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; - } } \ No newline at end of file diff --git a/src/main/java/resonantinduction/core/prefab/part/PartFace.java b/src/main/java/resonantinduction/core/prefab/part/PartFace.java new file mode 100644 index 00000000..14fd8f06 --- /dev/null +++ b/src/main/java/resonantinduction/core/prefab/part/PartFace.java @@ -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 getOcclusionBoxes() + { + return Arrays.asList(bounds[this.placementSide.ordinal()]); + } + + @Override + public Iterable getDrops() + { + List drops = new ArrayList(); + 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); + } +} \ No newline at end of file