icbm/src/main/java/icbm/gangshao/turret/mount/TTurretSeat.java

118 lines
3.9 KiB
Java

package icbm.gangshao.turret.mount;
import calclavia.lib.CalculationHelper;
import icbm.gangshao.turret.TTurretBase;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.MovingObjectPosition;
import universalelectricity.core.vector.Vector3;
import universalelectricity.prefab.multiblock.IMultiBlock;
public abstract class TTurretSeat extends TTurretBase implements IMultiBlock {
protected ESeat entityFake;
public TTurretSeat() {
this.entityFake = null;
}
@Override
public void updateEntity() {
super.updateEntity();
if (this.entityFake != null
&& this.entityFake.riddenByEntity instanceof EntityPlayer) {
final EntityPlayer mountedPlayer
= (EntityPlayer) this.entityFake.riddenByEntity;
if (((Entity) mountedPlayer).rotationPitch > super.maxPitch) {
((Entity) mountedPlayer).rotationPitch = super.maxPitch;
}
if (((Entity) mountedPlayer).rotationPitch < super.minPitch) {
((Entity) mountedPlayer).rotationPitch = super.minPitch;
}
final float rotationPitch = ((Entity) mountedPlayer).rotationPitch;
super.wantedRotationPitch = rotationPitch;
super.currentRotationPitch = rotationPitch;
final float rotationYaw = ((Entity) mountedPlayer).rotationYaw;
super.wantedRotationYaw = rotationYaw;
super.currentRotationYaw = rotationYaw;
}
}
public MovingObjectPosition rayTrace(final double distance) {
return CalculationHelper.doCustomRayTrace(
this.worldObj,
this.getMuzzle(),
super.wantedRotationYaw,
super.wantedRotationPitch,
true,
distance
);
}
@Override
public boolean onActivated(final EntityPlayer entityPlayer) {
if (entityPlayer.isSneaking()) {
this.tryActivateWeapon();
} else {
if (this.entityFake != null) {
if (this.entityFake.riddenByEntity instanceof EntityPlayer) {
final EntityPlayer mountedPlayer
= (EntityPlayer) this.entityFake.riddenByEntity;
if (entityPlayer == mountedPlayer) {
if (!this.worldObj.isRemote) {
// TODO: WTF
// PacketManager.sendPacketToClients(this.getRotationPacket());
}
// TODO: WTF
// entityPlayer.unmountEntity((Entity) this.entityFake);
this.entityFake.setDead();
this.entityFake = null;
return true;
}
}
return false;
}
this.mount(entityPlayer);
}
return true;
}
public void mount(final EntityPlayer entityPlayer) {
if (!this.worldObj.isRemote) {
if (this.entityFake == null) {
this.entityFake = new ESeat(
this.worldObj,
new Vector3(this.xCoord + 0.5, this.yCoord + 1.2, this.zCoord + 0.5),
this,
true
);
this.worldObj.spawnEntityInWorld((Entity) this.entityFake);
}
((Entity) entityPlayer).rotationYaw = super.currentRotationYaw;
((Entity) entityPlayer).rotationPitch = super.currentRotationPitch;
entityPlayer.mountEntity((Entity) this.entityFake);
}
}
public void tryActivateWeapon() {
if (this.canActivateWeapon()) {
this.onWeaponActivated();
}
}
@Override
public boolean canApplyPotion(final PotionEffect par1PotionEffect) {
return false;
}
}