Mekanism-tilera-Edition/src/main/java/mekanism/common/LaserManager.java
Ben Spiers b29f2adc4d LASERS
2014-09-14 05:20:16 +01:00

75 lines
2.4 KiB
Java

package mekanism.common;
import java.util.List;
import mekanism.api.Coord4D;
import mekanism.api.MekanismConfig.general;
import mekanism.api.Pos3D;
import mekanism.api.lasers.ILaserReceptor;
import net.minecraft.entity.Entity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class LaserManager
{
public static void fireLaser(TileEntity from, ForgeDirection direction, double energy, World world)
{
fireLaser(new Pos3D(from).centre().translate(direction, 0.501), direction, energy, world);
}
public static void fireLaser(Pos3D from, ForgeDirection direction, double energy, World world)
{
Pos3D to = from.clone().translate(direction, general.laserRange);
MovingObjectPosition mop = world.rayTraceBlocks(Vec3.createVectorHelper(from.xPos, from.yPos, from.zPos), Vec3.createVectorHelper(to.xPos, to.yPos, to.zPos));
if(mop != null)
{
to = new Pos3D(mop.hitVec);
Coord4D toCoord = new Coord4D(mop.blockX, mop.blockY, mop.blockZ);
TileEntity tile = toCoord.getTileEntity(world);
if(tile instanceof ILaserReceptor)
{
if(((ILaserReceptor)tile).canLasersDig() && energy > ((ILaserReceptor)tile).energyToDig())
{
}
else
{
((ILaserReceptor)tile).receiveLaserEnergy(energy, ForgeDirection.getOrientation(mop.sideHit));
}
}
}
from.translateExcludingSide(direction, -0.1);
to.translateExcludingSide(direction, 0.1);
for(Entity e : (List<Entity>)world.getEntitiesWithinAABB(Entity.class, Pos3D.getAABB(from, to)))
{
if(!e.isImmuneToFire()) e.setFire((int)(energy / 1000));
}
}
public static void fireLaserClient(TileEntity from, ForgeDirection direction, double energy, World world)
{
fireLaserClient(new Pos3D(from).centre().translate(direction, 0.501), direction, energy, world);
}
public static void fireLaserClient(Pos3D from, ForgeDirection direction, double energy, World world)
{
Pos3D to = from.clone().translate(direction, general.laserRange);
MovingObjectPosition mop = world.rayTraceBlocks(Vec3.createVectorHelper(from.xPos, from.yPos, from.zPos), Vec3.createVectorHelper(to.xPos, to.yPos, to.zPos));
if(mop != null)
{
to = new Pos3D(mop.hitVec);
}
from.translate(direction, -0.501);
Mekanism.proxy.renderLaser(world, from, to, direction, energy);
}
}