185 lines
3.4 KiB
Java
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;
|
|
}
|
|
}
|