Added gear shaft
This commit is contained in:
parent
73ddd6ff18
commit
17108484f9
10 changed files with 324 additions and 57 deletions
|
@ -12,7 +12,9 @@ import resonantinduction.electrical.multimeter.RenderMultimeter;
|
||||||
import resonantinduction.electrical.transformer.ItemTransformer;
|
import resonantinduction.electrical.transformer.ItemTransformer;
|
||||||
import resonantinduction.electrical.transformer.RenderTransformer;
|
import resonantinduction.electrical.transformer.RenderTransformer;
|
||||||
import resonantinduction.mechanical.gear.ItemGear;
|
import resonantinduction.mechanical.gear.ItemGear;
|
||||||
|
import resonantinduction.mechanical.gear.ItemGearShaft;
|
||||||
import resonantinduction.mechanical.gear.RenderGear;
|
import resonantinduction.mechanical.gear.RenderGear;
|
||||||
|
import resonantinduction.mechanical.gear.RenderGearShaft;
|
||||||
import cpw.mods.fml.client.FMLClientHandler;
|
import cpw.mods.fml.client.FMLClientHandler;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
@ -51,6 +53,10 @@ public class RenderRIItem implements IItemRenderer
|
||||||
{
|
{
|
||||||
RenderGear.INSTANCE.renderInventory(null, 0, 0, null);
|
RenderGear.INSTANCE.renderInventory(null, 0, 0, null);
|
||||||
}
|
}
|
||||||
|
else if (item.getItem() instanceof ItemGearShaft)
|
||||||
|
{
|
||||||
|
RenderGearShaft.INSTANCE.renderInventory(null, 0, 0, null);
|
||||||
|
}
|
||||||
else if (item.getItem() instanceof ItemMultimeter)
|
else if (item.getItem() instanceof ItemMultimeter)
|
||||||
{
|
{
|
||||||
GL11.glRotatef(180, 0, 1, 0);
|
GL11.glRotatef(180, 0, 1, 0);
|
||||||
|
|
|
@ -14,6 +14,7 @@ public class ClientProxy extends CommonProxy
|
||||||
public void preInit()
|
public void preInit()
|
||||||
{
|
{
|
||||||
MinecraftForgeClient.registerItemRenderer(Mechanical.itemGear.itemID, RenderRIItem.INSTANCE);
|
MinecraftForgeClient.registerItemRenderer(Mechanical.itemGear.itemID, RenderRIItem.INSTANCE);
|
||||||
|
MinecraftForgeClient.registerItemRenderer(Mechanical.itemGearShaft.itemID, RenderRIItem.INSTANCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -18,6 +18,7 @@ import resonantinduction.mechanical.fluid.pump.TileGrate;
|
||||||
import resonantinduction.mechanical.fluid.tank.BlockTank;
|
import resonantinduction.mechanical.fluid.tank.BlockTank;
|
||||||
import resonantinduction.mechanical.fluid.tank.TileTank;
|
import resonantinduction.mechanical.fluid.tank.TileTank;
|
||||||
import resonantinduction.mechanical.gear.ItemGear;
|
import resonantinduction.mechanical.gear.ItemGear;
|
||||||
|
import resonantinduction.mechanical.gear.ItemGearShaft;
|
||||||
import resonantinduction.mechanical.item.ItemPipeGauge;
|
import resonantinduction.mechanical.item.ItemPipeGauge;
|
||||||
import resonantinduction.mechanical.logistic.BlockDetector;
|
import resonantinduction.mechanical.logistic.BlockDetector;
|
||||||
import resonantinduction.mechanical.logistic.BlockManipulator;
|
import resonantinduction.mechanical.logistic.BlockManipulator;
|
||||||
|
@ -72,7 +73,7 @@ public class Mechanical
|
||||||
|
|
||||||
// Energy
|
// Energy
|
||||||
public static Item itemGear;
|
public static Item itemGear;
|
||||||
public static Block itemGearShaft;
|
public static Item itemGearShaft;
|
||||||
|
|
||||||
// Transport
|
// Transport
|
||||||
public static Block blockConveyorBelt;
|
public static Block blockConveyorBelt;
|
||||||
|
@ -101,6 +102,7 @@ public class Mechanical
|
||||||
Settings.load();
|
Settings.load();
|
||||||
NetworkRegistry.instance().registerGuiHandler(this, proxy);
|
NetworkRegistry.instance().registerGuiHandler(this, proxy);
|
||||||
itemGear = contentRegistry.createItem(ItemGear.class);
|
itemGear = contentRegistry.createItem(ItemGear.class);
|
||||||
|
itemGearShaft = contentRegistry.createItem(ItemGearShaft.class);
|
||||||
|
|
||||||
blockConveyorBelt = contentRegistry.createTile(BlockConveyorBelt.class, TileConveyorBelt.class);
|
blockConveyorBelt = contentRegistry.createTile(BlockConveyorBelt.class, TileConveyorBelt.class);
|
||||||
blockManipulator = contentRegistry.createTile(BlockManipulator.class, TileManipulator.class);
|
blockManipulator = contentRegistry.createTile(BlockManipulator.class, TileManipulator.class);
|
||||||
|
|
|
@ -2,6 +2,7 @@ package resonantinduction.mechanical;
|
||||||
|
|
||||||
import resonantinduction.mechanical.fluid.pipe.PartPipe;
|
import resonantinduction.mechanical.fluid.pipe.PartPipe;
|
||||||
import resonantinduction.mechanical.gear.PartGear;
|
import resonantinduction.mechanical.gear.PartGear;
|
||||||
|
import resonantinduction.mechanical.gear.PartGearShaft;
|
||||||
import codechicken.multipart.MultiPartRegistry;
|
import codechicken.multipart.MultiPartRegistry;
|
||||||
import codechicken.multipart.MultiPartRegistry.IPartFactory;
|
import codechicken.multipart.MultiPartRegistry.IPartFactory;
|
||||||
import codechicken.multipart.MultipartGenerator;
|
import codechicken.multipart.MultipartGenerator;
|
||||||
|
@ -11,7 +12,7 @@ public class MultipartMechanical implements IPartFactory
|
||||||
{
|
{
|
||||||
public static MultipartMechanical INSTANCE;
|
public static MultipartMechanical INSTANCE;
|
||||||
|
|
||||||
public static final String[] PART_TYPES = { "resonant_induction_gear", "resonant_induction_pipe" };
|
public static final String[] PART_TYPES = { "resonant_induction_gear", "resonant_induction_gear_shaft", "resonant_induction_pipe" };
|
||||||
|
|
||||||
public MultipartMechanical()
|
public MultipartMechanical()
|
||||||
{
|
{
|
||||||
|
@ -27,6 +28,10 @@ public class MultipartMechanical implements IPartFactory
|
||||||
{
|
{
|
||||||
return new PartGear();
|
return new PartGear();
|
||||||
}
|
}
|
||||||
|
else if (name.equals("resonant_induction_gear_shaft"))
|
||||||
|
{
|
||||||
|
return new PartGearShaft();
|
||||||
|
}
|
||||||
else if (name.equals("resonant_induction_pipe"))
|
else if (name.equals("resonant_induction_pipe"))
|
||||||
{
|
{
|
||||||
return new PartPipe();
|
return new PartPipe();
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
package resonantinduction.mechanical.gear;
|
||||||
|
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import resonantinduction.core.Settings;
|
||||||
|
import resonantinduction.core.prefab.part.ItemMultipartBase;
|
||||||
|
import codechicken.lib.vec.BlockCoord;
|
||||||
|
import codechicken.lib.vec.Vector3;
|
||||||
|
import codechicken.multipart.MultiPartRegistry;
|
||||||
|
import codechicken.multipart.TMultiPart;
|
||||||
|
|
||||||
|
public class ItemGearShaft extends ItemMultipartBase
|
||||||
|
{
|
||||||
|
public ItemGearShaft()
|
||||||
|
{
|
||||||
|
super("gearShaft", Settings.getNextItemID());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TMultiPart newPart(ItemStack itemStack, EntityPlayer player, World world, BlockCoord pos, int side, Vector3 hit)
|
||||||
|
{
|
||||||
|
PartGearShaft part = (PartGearShaft) MultiPartRegistry.createPart("resonant_induction_gear_shaft", false);
|
||||||
|
|
||||||
|
if (part != null)
|
||||||
|
{
|
||||||
|
part.preparePlacement(side, itemStack.getItemDamage());
|
||||||
|
}
|
||||||
|
|
||||||
|
return part;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
package resonantinduction.mechanical.gear;
|
package resonantinduction.mechanical.gear;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
@ -16,8 +17,11 @@ import resonantinduction.mechanical.network.PartMechanical;
|
||||||
import calclavia.lib.multiblock.reference.IMultiBlockStructure;
|
import calclavia.lib.multiblock.reference.IMultiBlockStructure;
|
||||||
import calclavia.lib.multiblock.reference.MultiBlockHandler;
|
import calclavia.lib.multiblock.reference.MultiBlockHandler;
|
||||||
import calclavia.lib.prefab.block.BlockAdvanced;
|
import calclavia.lib.prefab.block.BlockAdvanced;
|
||||||
|
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.ControlKeyModifer;
|
import codechicken.multipart.ControlKeyModifer;
|
||||||
import codechicken.multipart.TMultiPart;
|
import codechicken.multipart.TMultiPart;
|
||||||
import codechicken.multipart.TileMultipart;
|
import codechicken.multipart.TileMultipart;
|
||||||
|
@ -32,6 +36,20 @@ import cpw.mods.fml.relauncher.SideOnly;
|
||||||
*/
|
*/
|
||||||
public class PartGear extends PartMechanical implements IMechanical, IMultiBlockStructure<PartGear>
|
public class PartGear extends PartMechanical implements IMechanical, IMultiBlockStructure<PartGear>
|
||||||
{
|
{
|
||||||
|
public static Cuboid6[][] oBoxes = new Cuboid6[6][2];
|
||||||
|
|
||||||
|
static
|
||||||
|
{
|
||||||
|
oBoxes[0][0] = new Cuboid6(1 / 8D, 0, 0, 7 / 8D, 1 / 8D, 1);
|
||||||
|
oBoxes[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);
|
||||||
|
oBoxes[s][0] = oBoxes[0][0].copy().apply(t);
|
||||||
|
oBoxes[s][1] = oBoxes[0][1].copy().apply(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private int manualCrankTime = 0;
|
private int manualCrankTime = 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -82,13 +100,6 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock
|
||||||
@Override
|
@Override
|
||||||
public boolean activate(EntityPlayer player, MovingObjectPosition hit, ItemStack item)
|
public boolean activate(EntityPlayer player, MovingObjectPosition hit, ItemStack item)
|
||||||
{
|
{
|
||||||
if (!world().isRemote)
|
|
||||||
{
|
|
||||||
// System.out.println(this + ":" + getNetwork());
|
|
||||||
// for(Object obj : connections)
|
|
||||||
// System.out.println(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (BlockAdvanced.isUsableWrench(player, player.getCurrentEquippedItem(), x(), y(), z()))
|
if (BlockAdvanced.isUsableWrench(player, player.getCurrentEquippedItem(), x(), y(), z()))
|
||||||
{
|
{
|
||||||
if (player.isSneaking())
|
if (player.isSneaking())
|
||||||
|
@ -112,7 +123,7 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return super.activate(player, hit, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -159,14 +170,21 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock
|
||||||
for (int i = 0; i < 6; i++)
|
for (int i = 0; i < 6; i++)
|
||||||
{
|
{
|
||||||
ForgeDirection checkDir = ForgeDirection.getOrientation(i);
|
ForgeDirection checkDir = ForgeDirection.getOrientation(i);
|
||||||
IMechanical instance = ((IMechanical) tile()).getInstance(checkDir);
|
|
||||||
|
|
||||||
if (connections[checkDir.ordinal()] == null && checkDir != placementSide && checkDir != placementSide.getOpposite() && instance != null && instance.canConnect(checkDir.getOpposite(), this))
|
/**
|
||||||
|
* If we're checking for the block that is opposite to the gear's placement side
|
||||||
|
* (the center), then we try to look for a gear shaft in the center.
|
||||||
|
*/
|
||||||
|
|
||||||
|
IMechanical instance = ((IMechanical) tile()).getInstance(checkDir == placementSide.getOpposite() ? ForgeDirection.UNKNOWN : checkDir);
|
||||||
|
|
||||||
|
if (connections[checkDir.ordinal()] == null && checkDir != placementSide && instance != null && instance.canConnect(checkDir.getOpposite(), this))
|
||||||
{
|
{
|
||||||
connections[checkDir.ordinal()] = instance;
|
connections[checkDir.ordinal()] = instance;
|
||||||
getNetwork().merge(instance.getNetwork());
|
getNetwork().merge(instance.getNetwork());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int displaceCheck = 1;
|
int displaceCheck = 1;
|
||||||
|
@ -338,12 +356,6 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock
|
||||||
return multiBlock;
|
return multiBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public universalelectricity.api.vector.Vector3 getPosition()
|
|
||||||
{
|
|
||||||
return new universalelectricity.api.vector.Vector3(x(), y(), z());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float getRatio(ForgeDirection dir)
|
public float getRatio(ForgeDirection dir)
|
||||||
{
|
{
|
||||||
|
@ -377,9 +389,13 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock
|
||||||
*/
|
*/
|
||||||
if (from == placementSide.getOpposite())
|
if (from == placementSide.getOpposite())
|
||||||
{
|
{
|
||||||
if (source instanceof PartGear)
|
if (source instanceof PartGear || source instanceof PartGearShaft)
|
||||||
{
|
{
|
||||||
if (((PartGear) source).tile() == tile() && !getMultiBlock().isConstructed())
|
if (source instanceof PartGearShaft)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (((PartGear) source).tile() == tile() && !getMultiBlock().isConstructed())
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -422,4 +438,25 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Multipart Bounds
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Iterable<Cuboid6> getOcclusionBoxes()
|
||||||
|
{
|
||||||
|
return Arrays.asList(oBoxes[this.placementSide.ordinal()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSlotMask()
|
||||||
|
{
|
||||||
|
return 1 << this.placementSide.ordinal();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Cuboid6 getBounds()
|
||||||
|
{
|
||||||
|
return FaceMicroClass.aBounds()[0x10 | this.placementSide.ordinal()];
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,152 @@
|
||||||
|
package resonantinduction.mechanical.gear;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
|
import resonantinduction.mechanical.Mechanical;
|
||||||
|
import resonantinduction.mechanical.network.IMechanical;
|
||||||
|
import resonantinduction.mechanical.network.PartMechanical;
|
||||||
|
import codechicken.lib.raytracer.IndexedCuboid6;
|
||||||
|
import codechicken.lib.vec.Cuboid6;
|
||||||
|
import codechicken.lib.vec.Rotation;
|
||||||
|
import codechicken.lib.vec.Vector3;
|
||||||
|
import codechicken.multipart.PartMap;
|
||||||
|
import cpw.mods.fml.relauncher.Side;
|
||||||
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We assume all the force acting on the gear is 90 degrees.
|
||||||
|
*
|
||||||
|
* @author Calclavia
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class PartGearShaft extends PartMechanical
|
||||||
|
{
|
||||||
|
public static Cuboid6[] sides = new Cuboid6[7];
|
||||||
|
|
||||||
|
static
|
||||||
|
{
|
||||||
|
sides[0] = new IndexedCuboid6(0, new Cuboid6(0.36, 0.000, 0.36, 0.64, 0.36, 0.64));
|
||||||
|
sides[1] = new IndexedCuboid6(1, new Cuboid6(0.36, 0.64, 0.36, 0.64, 1.000, 0.64));
|
||||||
|
sides[2] = new IndexedCuboid6(2, new Cuboid6(0.36, 0.36, 0.000, 0.64, 0.64, 0.36));
|
||||||
|
sides[3] = new IndexedCuboid6(3, new Cuboid6(0.36, 0.36, 0.64, 0.64, 0.64, 1.000));
|
||||||
|
sides[4] = new IndexedCuboid6(4, new Cuboid6(0.000, 0.36, 0.36, 0.36, 0.64, 0.64));
|
||||||
|
sides[5] = new IndexedCuboid6(5, new Cuboid6(0.64, 0.36, 0.36, 1.000, 0.64, 0.64));
|
||||||
|
sides[6] = new IndexedCuboid6(6, new Cuboid6(0.36, 0.36, 0.36, 0.64, 0.64, 0.64));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update()
|
||||||
|
{
|
||||||
|
super.update();
|
||||||
|
|
||||||
|
if (!this.world().isRemote)
|
||||||
|
{
|
||||||
|
// Decelerate the gear.
|
||||||
|
torque *= 0.95f;
|
||||||
|
angularVelocity *= 0.95f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Refresh should be called sparingly.
|
||||||
|
*/
|
||||||
|
public void refresh()
|
||||||
|
{
|
||||||
|
connections = new Object[6];
|
||||||
|
|
||||||
|
/** Check for internal connections, the FRONT and BACK. */
|
||||||
|
for (int i = 0; i < 6; i++)
|
||||||
|
{
|
||||||
|
ForgeDirection checkDir = ForgeDirection.getOrientation(i);
|
||||||
|
|
||||||
|
if (checkDir == placementSide || checkDir == placementSide.getOpposite())
|
||||||
|
{
|
||||||
|
IMechanical instance = ((IMechanical) tile()).getInstance(checkDir);
|
||||||
|
System.out.println("FOUND POSSIBLE CHECK"+instance);
|
||||||
|
|
||||||
|
if (instance != null && instance.canConnect(checkDir.getOpposite(), this))
|
||||||
|
{
|
||||||
|
connections[checkDir.ordinal()] = instance;
|
||||||
|
getNetwork().merge(instance.getNetwork());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Look for connections outside this block space, the relative FRONT and BACK */
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
ForgeDirection checkDir = ForgeDirection.getOrientation(Rotation.rotateSide(this.placementSide.ordinal(), i));
|
||||||
|
|
||||||
|
if (connections[checkDir.ordinal()] == null && (checkDir == placementSide || checkDir == placementSide.getOpposite()))
|
||||||
|
{
|
||||||
|
TileEntity checkTile = new universalelectricity.api.vector.Vector3(tile()).translate(checkDir).getTileEntity(world());
|
||||||
|
|
||||||
|
if (checkTile instanceof IMechanical)
|
||||||
|
{
|
||||||
|
IMechanical instance = (IMechanical) ((IMechanical) checkTile).getInstance(placementSide);
|
||||||
|
|
||||||
|
if (instance != null && instance.canConnect(checkDir.getOpposite(), this))
|
||||||
|
{
|
||||||
|
connections[checkDir.ordinal()] = instance;
|
||||||
|
getNetwork().merge(instance.getNetwork());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getNetwork().reconstruct();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ItemStack getItem()
|
||||||
|
{
|
||||||
|
return new ItemStack(Mechanical.itemGearShaft);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SideOnly(Side.CLIENT)
|
||||||
|
public void renderDynamic(Vector3 pos, float frame, int pass)
|
||||||
|
{
|
||||||
|
if (pass == 0)
|
||||||
|
{
|
||||||
|
RenderGearShaft.INSTANCE.renderDynamic(this, pos.x, pos.y, pos.z, frame);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getType()
|
||||||
|
{
|
||||||
|
return "resonant_induction_gear_shaft";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canConnect(ForgeDirection from, Object source)
|
||||||
|
{
|
||||||
|
return from == placementSide || from == placementSide.getOpposite();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Multipart Bounds
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int getSlotMask()
|
||||||
|
{
|
||||||
|
return PartMap.CENTER.mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterable<Cuboid6> getOcclusionBoxes()
|
||||||
|
{
|
||||||
|
return Arrays.asList(sides);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Cuboid6 getBounds()
|
||||||
|
{
|
||||||
|
return new Cuboid6(0.375, 0.375, 0.375, 0.625, 0.625, 0.625);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
package resonantinduction.mechanical.gear;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.client.renderer.RenderBlocks;
|
||||||
|
import net.minecraftforge.client.model.AdvancedModelLoader;
|
||||||
|
import net.minecraftforge.client.model.IModelCustom;
|
||||||
|
|
||||||
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
|
import resonantinduction.core.Reference;
|
||||||
|
import calclavia.lib.render.RenderUtility;
|
||||||
|
import cpw.mods.fml.relauncher.Side;
|
||||||
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
|
@SideOnly(Side.CLIENT)
|
||||||
|
public class RenderGearShaft
|
||||||
|
{
|
||||||
|
public static final RenderGearShaft INSTANCE = new RenderGearShaft();
|
||||||
|
public final IModelCustom MODEL = AdvancedModelLoader.loadModel(Reference.MODEL_DIRECTORY + "gears.obj");
|
||||||
|
|
||||||
|
public void renderInventory(Block block, int metadata, int modelID, RenderBlocks renderer)
|
||||||
|
{
|
||||||
|
GL11.glRotatef(90, 1, 0, 0);
|
||||||
|
RenderUtility.bind(Reference.BLOCK_TEXTURE_DIRECTORY + "planks_oak.png");
|
||||||
|
MODEL.renderOnly("Shaft");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void renderDynamic(PartGearShaft part, double x, double y, double z, float frame)
|
||||||
|
{
|
||||||
|
GL11.glPushMatrix();
|
||||||
|
// Center the model first.
|
||||||
|
GL11.glTranslatef((float) x + 0.5f, (float) y + 0.5f, (float) z + 0.5f);
|
||||||
|
GL11.glTranslatef(0, 0.5f, 0);
|
||||||
|
GL11.glPushMatrix();
|
||||||
|
|
||||||
|
RenderUtility.rotateFaceBlockToSide(part.placementSide);
|
||||||
|
|
||||||
|
GL11.glRotatef((float) Math.toDegrees(part.angle), 0, 1, 0);
|
||||||
|
|
||||||
|
RenderUtility.bind(Reference.BLOCK_TEXTURE_DIRECTORY + "planks_oak.png");
|
||||||
|
MODEL.renderOnly("Shaft");
|
||||||
|
|
||||||
|
GL11.glPopMatrix();
|
||||||
|
GL11.glPopMatrix();
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
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.util.MovingObjectPosition;
|
import net.minecraft.util.MovingObjectPosition;
|
||||||
|
@ -28,19 +29,6 @@ import codechicken.multipart.TMultiPart;
|
||||||
*/
|
*/
|
||||||
public abstract class PartMechanical extends JCuboidPart implements JNormalOcclusion, TFacePart, IMechanical
|
public abstract class PartMechanical extends JCuboidPart implements JNormalOcclusion, TFacePart, IMechanical
|
||||||
{
|
{
|
||||||
public static Cuboid6[][] oBoxes = new Cuboid6[6][2];
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
oBoxes[0][0] = new Cuboid6(1 / 8D, 0, 0, 7 / 8D, 1 / 8D, 1);
|
|
||||||
oBoxes[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);
|
|
||||||
oBoxes[s][0] = oBoxes[0][0].copy().apply(t);
|
|
||||||
oBoxes[s][1] = oBoxes[0][1].copy().apply(t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private IMechanicalNetwork network;
|
private IMechanicalNetwork network;
|
||||||
|
|
||||||
|
@ -68,12 +56,25 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
|
||||||
this.placementSide = ForgeDirection.getOrientation((byte) (side ^ 1));
|
this.placementSide = ForgeDirection.getOrientation((byte) (side ^ 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean activate(EntityPlayer player, MovingObjectPosition hit, ItemStack item)
|
||||||
|
{
|
||||||
|
if (!world().isRemote)
|
||||||
|
{
|
||||||
|
System.out.println(this + ":" + getNetwork());
|
||||||
|
for(Object obj : connections)
|
||||||
|
System.out.println(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update()
|
public void update()
|
||||||
{
|
{
|
||||||
// TODO: Fix gear network somehow tick while network is invalid.
|
// TODO: Fix gear network somehow tick while network is invalid.
|
||||||
getNetwork().addConnector(this);
|
getNetwork().addConnector(this);
|
||||||
|
|
||||||
ticks++;
|
ticks++;
|
||||||
angle += angularVelocity / 20;
|
angle += angularVelocity / 20;
|
||||||
|
|
||||||
|
@ -183,18 +184,6 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
|
||||||
// read(packet, packet.readUByte());
|
// read(packet, packet.readUByte());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getSlotMask()
|
|
||||||
{
|
|
||||||
return 1 << this.placementSide.ordinal();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Cuboid6 getBounds()
|
|
||||||
{
|
|
||||||
return FaceMicroClass.aBounds()[0x10 | this.placementSide.ordinal()];
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int redstoneConductionMap()
|
public int redstoneConductionMap()
|
||||||
{
|
{
|
||||||
|
@ -207,16 +196,6 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Multipart Methods
|
|
||||||
*/
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterable<Cuboid6> getOcclusionBoxes()
|
|
||||||
{
|
|
||||||
return Arrays.asList(oBoxes[this.placementSide.ordinal()]);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void load(NBTTagCompound nbt)
|
public void load(NBTTagCompound nbt)
|
||||||
{
|
{
|
||||||
|
@ -265,7 +244,7 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
|
||||||
@Override
|
@Override
|
||||||
public void setNetwork(IMechanicalNetwork network)
|
public void setNetwork(IMechanicalNetwork network)
|
||||||
{
|
{
|
||||||
network = network;
|
this.network = network;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -312,4 +291,10 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
|
||||||
{
|
{
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public universalelectricity.api.vector.Vector3 getPosition()
|
||||||
|
{
|
||||||
|
return new universalelectricity.api.vector.Vector3(x(), y(), z());
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -7,6 +7,7 @@ import net.minecraftforge.common.ForgeDirection;
|
||||||
import resonantinduction.mechanical.network.IMechanical;
|
import resonantinduction.mechanical.network.IMechanical;
|
||||||
import resonantinduction.mechanical.network.IMechanicalNetwork;
|
import resonantinduction.mechanical.network.IMechanicalNetwork;
|
||||||
import universalelectricity.api.vector.Vector3;
|
import universalelectricity.api.vector.Vector3;
|
||||||
|
import codechicken.multipart.PartMap;
|
||||||
import codechicken.multipart.TMultiPart;
|
import codechicken.multipart.TMultiPart;
|
||||||
import codechicken.multipart.TileMultipart;
|
import codechicken.multipart.TileMultipart;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue