generated from tilera/1710mod
118 lines
3.9 KiB
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;
|
|
}
|
|
}
|