/*
* Copyright (c) CovertJaguar, 2014 http://railcraft.info
*
* This code is the property of CovertJaguar
* and may only be used with explicit written
* permission unless otherwise specified on the
* license page at http://railcraft.info/wiki/info:license.
*/
package mods.railcraft.common.blocks.machine.delta;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.List;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.IIcon;
import mods.railcraft.common.blocks.machine.IEnumMachine;
import mods.railcraft.common.blocks.machine.TileMachineBase;
import mods.railcraft.common.util.misc.Game;
import mods.railcraft.common.util.misc.MiscTools;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityBodyHelper;
import net.minecraft.entity.EntityList;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.ai.EntityLookHelper;
import net.minecraft.world.World;
/**
*
* @author CovertJaguar <http://www.railcraft.info>
*/
public class TileCage extends TileMachineBase {
private boolean isOpen = false;
private EntityLiving entity;
private EntityLookHelper lookHelper;
private EntityBodyHelper bodyHelper;
private double lookX, lookZ;
private Entity lookTarget;
private int lookCounter;
@Override
public IEnumMachine getMachineType() {
return EnumMachineDelta.CAGE;
}
@Override
public IIcon getIcon(int side) {
if (side != 0 && side != 1 && isOpen)
return getMachineType().getTexture(6);
return getMachineType().getTexture(side);
}
@Override
public boolean blockActivated(EntityPlayer player, int side) {
// if (player.isSneaking()) {
if (Game.isHost(worldObj)) {
isOpen = !isOpen;
sendUpdateToClient();
}
return true;
// }
// return super.blockActivated(player, side);
}
@SideOnly(Side.CLIENT)
public Entity getEntity() {
if (entity == null) {
entity = (EntityLiving) EntityList.createEntityByName("Chicken", (World) null);
lookHelper = new EntityLookHelper((EntityLiving) entity);
bodyHelper = new EntityBodyHelper((EntityLiving) entity);
}
return entity;
}
@Override
public void updateEntity() {
super.updateEntity();
if (Game.isNotHost(worldObj))
if (entity != null) {
// entity.onUpdate();
entity.setPosition(0, 0, 0);
entity.prevRotationYawHead = entity.rotationYawHead;
entity.prevRotationYaw = entity.rotationYaw;
entity.prevRotationPitch = entity.rotationPitch;
entity.prevRenderYawOffset = entity.renderYawOffset;
if (lookCounter > 0) {
lookCounter--;
if (lookTarget == null)
lookHelper.setLookPosition(lookX, entity.getEyeHeight(), lookZ, 10, entity.getVerticalFaceSpeed());
else
lookHelper.setLookPosition(lookTarget.posX - (xCoord + 0.5), lookTarget.posY - (yCoord + entity.getEyeHeight()), lookTarget.posZ - (zCoord + 0.5), 10, entity.getVerticalFaceSpeed());
}
lookHelper.onUpdateLook();
bodyHelper.func_75664_a();
if (lookCounter <= 0) {
lookTarget = null;
if (entity.getRNG().nextDouble() < 0.1) {
List<EntityPlayer> nearby = MiscTools.getNearbyEntities(worldObj, EntityPlayer.class, xCoord, yCoord - 1, yCoord + 3, zCoord, 5);
if (!nearby.isEmpty() && entity.getRNG().nextDouble() < 0.4) {
lookTarget = nearby.get(MiscTools.RANDOM.nextInt(nearby.size()));
lookCounter = 60 + entity.getRNG().nextInt(60);
} else {
double d0 = (Math.PI * 2D) * entity.getRNG().nextDouble();
lookX = Math.cos(d0);
lookZ = Math.sin(d0);
lookCounter = 20 + entity.getRNG().nextInt(20);
}
}
}
}
return;
}
@Override
public void writePacketData(DataOutputStream data) throws IOException {
super.writePacketData(data);
data.writeBoolean(isOpen);
}
@Override
public void readPacketData(DataInputStream data) throws IOException {
super.readPacketData(data);
boolean o = data.readBoolean();
if (isOpen != o) {
isOpen = o;
markBlockForUpdate();
}
}
}