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

117 lines
3.0 KiB
Java

package icbm.gangshao.turret.mount;
import cpw.mods.fml.common.registry.IEntityAdditionalSpawnData;
import icbm.core.MainBase;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.Entity;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import universalelectricity.core.vector.Vector3;
public class ESeat extends Entity implements IEntityAdditionalSpawnData {
private TileEntity controller;
private boolean shouldSit;
public ESeat(final World par1World) {
super(par1World);
this.shouldSit = false;
this.setSize(1.0f, 1.0f);
super.noClip = true;
}
public ESeat(
final World par1World,
final Vector3 position,
final TileEntity controller,
final boolean sit
) {
this(par1World);
super.isImmuneToFire = true;
this.setPosition(position.x, position.y, position.z);
this.controller = controller;
this.shouldSit = sit;
}
@Override
public String getCommandSenderName() {
return "Seat";
}
@Override
public void writeSpawnData(final ByteBuf data) {
if (this.controller != null) {
data.writeInt(this.controller.xCoord);
data.writeInt(this.controller.yCoord);
data.writeInt(this.controller.zCoord);
} else {
MainBase.LOGGER.severe("Failed to send ridable turret packet!");
}
data.writeBoolean(this.shouldSit);
}
@Override
public void readSpawnData(final ByteBuf data) {
try {
this.controller = super.worldObj.getTileEntity(
data.readInt(), data.readInt(), data.readInt()
);
this.shouldSit = data.readBoolean();
} catch (final Exception e) {
e.printStackTrace();
}
}
@Override
public void onUpdate() {
if (this.controller == null) {
this.setDead();
return;
}
if (this.controller.isInvalid()) {
this.setDead();
return;
}
if (this.controller instanceof TTurretSeat) {
((TTurretSeat) this.controller).entityFake = this;
}
if (super.worldObj.isRemote && super.riddenByEntity != null) {
super.riddenByEntity.updateRiderPosition();
}
super.posY = this.controller.yCoord + 1.2;
}
@Override
public double getMountedYOffset() {
return -0.5;
}
@Override
protected boolean canTriggerWalking() {
return false;
}
@Override
public boolean shouldRiderSit() {
return this.shouldSit;
}
@Override
protected void entityInit() {}
@Override
protected void readEntityFromNBT(final NBTTagCompound nbt) {
this.shouldSit = nbt.getBoolean("shouldSit");
}
@Override
protected void writeEntityToNBT(final NBTTagCompound nbt) {
nbt.setBoolean("shouldSit", this.shouldSit);
}
}