Fixed Tesla zapping

This commit is contained in:
Calclavia 2013-08-04 21:21:07 -04:00
parent afb563898a
commit 07ac511e17
7 changed files with 27 additions and 26 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1,018 B

After

Width:  |  Height:  |  Size: 752 B

View file

@ -244,20 +244,21 @@ public class Vector3
return world.getBlockTileEntity((int) this.x, (int) this.y, (int) this.z); return world.getBlockTileEntity((int) this.x, (int) this.y, (int) this.z);
} }
public MovingObjectPosition rayTraceEntities(World world, double rotationYaw, double rotationPitch, double reachDistance) public MovingObjectPosition rayTraceEntities(World world, Vector3 target)
{ {
MovingObjectPosition pickedEntity = null; MovingObjectPosition pickedEntity = null;
Vec3 startingPosition = this.toVec3(); Vec3 startingPosition = this.toVec3();
Vec3 look = getDeltaPositionFromRotation(rotationYaw, rotationPitch).toVec3(); Vec3 look = target.normalize().toVec3();
double reachDistance = this.distance(target);
Vec3 reachPoint = Vec3.createVectorHelper(startingPosition.xCoord + look.xCoord * reachDistance, startingPosition.yCoord + look.yCoord * reachDistance, startingPosition.zCoord + look.zCoord * reachDistance); Vec3 reachPoint = Vec3.createVectorHelper(startingPosition.xCoord + look.xCoord * reachDistance, startingPosition.yCoord + look.yCoord * reachDistance, startingPosition.zCoord + look.zCoord * reachDistance);
double checkBorder = 1.1 * reachDistance; double checkBorder = 1.1 * reachDistance;
AxisAlignedBB boxToScan = AxisAlignedBB.getAABBPool().getAABB(-checkBorder, -checkBorder, -checkBorder, checkBorder, checkBorder, checkBorder).offset(this.x, this.y, this.z); AxisAlignedBB boxToScan = AxisAlignedBB.getAABBPool().getAABB(-checkBorder, -checkBorder, -checkBorder, checkBorder, checkBorder, checkBorder).offset(this.x, this.y, this.z);
;
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
List<Entity> entitiesHit = world.getEntitiesWithinAABBExcludingEntity(null, boxToScan); List<Entity> entitiesHit = world.getEntitiesWithinAABBExcludingEntity(null, boxToScan);
double closestEntity = reachDistance; double closestEntity = reachDistance;
if (entitiesHit == null || entitiesHit.isEmpty()) if (entitiesHit == null || entitiesHit.isEmpty())
{ {
return null; return null;

View file

@ -11,6 +11,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import resonantinduction.ResonantInduction;
import resonantinduction.base.BlockBase; import resonantinduction.base.BlockBase;
import resonantinduction.render.BlockRenderingHandler; import resonantinduction.render.BlockRenderingHandler;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
@ -26,7 +27,8 @@ public class BlockBattery extends BlockBase implements ITileEntityProvider
{ {
public BlockBattery(int id) public BlockBattery(int id)
{ {
super("battery", id, Material.iron); super("battery", id);
this.func_111022_d(ResonantInduction.PREFIX + "machine");
} }
@Override @Override
@ -43,28 +45,28 @@ public class BlockBattery extends BlockBase implements ITileEntityProvider
return true; return true;
} }
@Override @Override
public void onNeighborBlockChange(World world, int x, int y, int z, int id) public void onNeighborBlockChange(World world, int x, int y, int z, int id)
{ {
if(!world.isRemote) if (!world.isRemote)
{ {
if(id == blockID) if (id == blockID)
{ {
TileEntityBattery battery = (TileEntityBattery)world.getBlockTileEntity(x, y, z); TileEntityBattery battery = (TileEntityBattery) world.getBlockTileEntity(x, y, z);
battery.update(); battery.update();
} }
} }
} }
@Override @Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entityliving, ItemStack itemstack) public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entityliving, ItemStack itemstack)
{ {
if(!world.isRemote) if (!world.isRemote)
{ {
TileEntityBattery battery = (TileEntityBattery)world.getBlockTileEntity(x, y, z); TileEntityBattery battery = (TileEntityBattery) world.getBlockTileEntity(x, y, z);
battery.update(); battery.update();
} }
} }
@ -74,13 +76,13 @@ public class BlockBattery extends BlockBase implements ITileEntityProvider
{ {
return false; return false;
} }
@Override @Override
public boolean isOpaqueCube() public boolean isOpaqueCube()
{ {
return false; return false;
} }
@Override @Override
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public int getRenderType() public int getRenderType()

View file

@ -20,7 +20,7 @@ public class BlockEMContractor extends BlockBase implements ITileEntityProvider
{ {
public BlockEMContractor(int id) public BlockEMContractor(int id)
{ {
super("contractor", id, Material.iron); super("contractor", id);
this.func_111022_d(ResonantInduction.PREFIX + "machine"); this.func_111022_d(ResonantInduction.PREFIX + "machine");
} }

View file

@ -30,7 +30,7 @@ public class BlockMultimeter extends BlockBase implements ITileEntityProvider
public BlockMultimeter(int id) public BlockMultimeter(int id)
{ {
super("multimeter", id, Material.iron); super("multimeter", id);
} }
public static int determineOrientation(World par0World, int par1, int par2, int par3, EntityLivingBase par4EntityLivingBase) public static int determineOrientation(World par0World, int par1, int par2, int par3, EntityLivingBase par4EntityLivingBase)

View file

@ -23,7 +23,7 @@ public class BlockTesla extends BlockBase implements ITileEntityProvider
{ {
public BlockTesla(int id) public BlockTesla(int id)
{ {
super("tesla", id, Material.iron); super("tesla", id);
this.func_111022_d(ResonantInduction.PREFIX + "machine"); this.func_111022_d(ResonantInduction.PREFIX + "machine");
} }

View file

@ -168,17 +168,14 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe
if (this.attackEntities && this.zapCounter % 5 == 0) if (this.attackEntities && this.zapCounter % 5 == 0)
{ {
double[] rotations = topTeslaVector.difference(targetVector).normalize().getDeltaRotationFromPosition(); MovingObjectPosition mop = topTeslaVector.clone().translate(0.5).rayTraceEntities(this.worldObj, targetVector.clone().translate(0.5));
MovingObjectPosition mop = topTeslaVector.rayTraceEntities(this.worldObj, rotations[0], rotations[1], distance);
// System.out.println(Vector3.getDeltaPositionFromRotation(rotations[0],
// rotations[1]) + " :" + mop);
if (mop != null && mop.entityHit != null) if (mop != null && mop.entityHit != null)
{ {
if (mop.entityHit instanceof EntityLivingBase) if (mop.entityHit instanceof EntityLivingBase)
{ {
mop.entityHit.attackEntityFrom(DamageSource.magic, 1); mop.entityHit.attackEntityFrom(DamageSource.magic, 3);
ResonantInduction.proxy.renderElectricShock(this.worldObj, new Vector3(topTesla).translate(new Vector3(0.5)), new Vector3(mop.entityHit)); ResonantInduction.proxy.renderElectricShock(this.worldObj, new Vector3(topTesla).clone().translate(0.5), new Vector3(mop.entityHit));
} }
} }
} }
@ -269,7 +266,7 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe
@Override @Override
public Packet getDescriptionPacket() public Packet getDescriptionPacket()
{ {
return PacketHandler.getTileEntityPacket(this, (byte) 1, this.getEnergyStored(), this.dyeID, this.canReceive); return PacketHandler.getTileEntityPacket(this, (byte) 1, this.getEnergyStored(), this.dyeID, this.canReceive, this.attackEntities);
} }
@Override @Override
@ -289,6 +286,7 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe
this.energy = input.readFloat(); this.energy = input.readFloat();
this.dyeID = input.readInt(); this.dyeID = input.readInt();
this.canReceive = input.readBoolean(); this.canReceive = input.readBoolean();
this.attackEntities = input.readBoolean();
break; break;
} }