Mekanism-tilera-Edition/src/main/java/mekanism/common/tile/TileEntityElectricChest.java
2014-11-10 21:53:29 +00:00

185 lines
3.4 KiB
Java

package mekanism.common.tile;
import java.util.ArrayList;
import mekanism.common.PacketHandler;
import mekanism.common.util.ChargeUtils;
import mekanism.common.util.InventoryUtils;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import io.netty.buffer.ByteBuf;
public class TileEntityElectricChest extends TileEntityElectricBlock
{
public static int[] INV;
public String password = "";
public boolean authenticated = false;
public boolean locked = false;
public float lidAngle;
public float prevLidAngle;
public TileEntityElectricChest()
{
super("ElectricChest", 12000);
inventory = new ItemStack[55];
}
@Override
public void onUpdate()
{
super.onUpdate();
prevLidAngle = lidAngle;
float increment = 0.1F;
if((playersUsing.size() > 0) && (lidAngle == 0.0F))
{
worldObj.playSoundEffect(xCoord + 0.5F, yCoord + 0.5D, zCoord + 0.5F, "random.chestopen", 0.5F, (worldObj.rand.nextFloat()*0.1F) + 0.9F);
}
if((playersUsing.size() == 0 && lidAngle > 0.0F) || (playersUsing.size() > 0 && lidAngle < 1.0F))
{
float angle = lidAngle;
if(playersUsing.size() > 0)
{
lidAngle += increment;
}
else {
lidAngle -= increment;
}
if(lidAngle > 1.0F)
{
lidAngle = 1.0F;
}
float split = 0.5F;
if(lidAngle < split && angle >= split)
{
worldObj.playSoundEffect(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D, "random.chestclosed", 0.5F, (worldObj.rand.nextFloat()*0.1F) + 0.9F);
}
if(lidAngle < 0.0F)
{
lidAngle = 0.0F;
}
}
ChargeUtils.discharge(54, this);
}
@Override
public void readFromNBT(NBTTagCompound nbtTags)
{
super.readFromNBT(nbtTags);
authenticated = nbtTags.getBoolean("authenticated");
locked = nbtTags.getBoolean("locked");
password = nbtTags.getString("password");
}
@Override
public void writeToNBT(NBTTagCompound nbtTags)
{
super.writeToNBT(nbtTags);
nbtTags.setBoolean("authenticated", authenticated);
nbtTags.setBoolean("locked", locked);
nbtTags.setString("password", password);
}
@Override
public void handlePacketData(ByteBuf dataStream)
{
super.handlePacketData(dataStream);
authenticated = dataStream.readBoolean();
locked = dataStream.readBoolean();
password = PacketHandler.readString(dataStream);
}
@Override
public ArrayList getNetworkedData(ArrayList data)
{
super.getNetworkedData(data);
data.add(authenticated);
data.add(locked);
data.add(password);
return data;
}
public boolean canAccess()
{
return authenticated && (getEnergy() == 0 || !locked);
}
@Override
public boolean isItemValidForSlot(int slotID, ItemStack itemstack)
{
if(slotID == 54)
{
return ChargeUtils.canBeDischarged(itemstack);
}
else {
return true;
}
}
@Override
public int[] getAccessibleSlotsFromSide(int side)
{
if(side == 0 || !canAccess())
{
return InventoryUtils.EMPTY;
}
else {
if(INV == null)
{
INV = new int[55];
for(int i = 0; i < INV.length; i++)
{
INV[i] = i;
}
}
return INV;
}
}
@Override
public boolean canExtractItem(int slotID, ItemStack itemstack, int side)
{
if(slotID == 54)
{
return ChargeUtils.canBeOutputted(itemstack, false);
}
else {
return true;
}
}
@Override
public boolean wrenchCanRemove(EntityPlayer entityPlayer)
{
return false;
}
@Override
public boolean canSetFacing(int side)
{
return side != 0 && side != 1;
}
}