package net.geforcemods.securitycraft.tileentity; import net.geforcemods.securitycraft.api.CustomizableSCTE; import net.geforcemods.securitycraft.api.IPasswordProtected; import net.geforcemods.securitycraft.api.Option; import net.geforcemods.securitycraft.api.Option.OptionBoolean; import net.geforcemods.securitycraft.blocks.BlockKeypad; import net.geforcemods.securitycraft.gui.GuiHandler; import net.geforcemods.securitycraft.main.mod_SecurityCraft; import net.geforcemods.securitycraft.misc.EnumCustomModules; import net.geforcemods.securitycraft.util.BlockUtils; import net.geforcemods.securitycraft.util.PlayerUtils; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.translation.I18n; public class TileEntityKeypad extends CustomizableSCTE implements IPasswordProtected { private String passcode; private OptionBoolean isAlwaysActive = new OptionBoolean("isAlwaysActive", false) { @Override public void toggle() { super.toggle(); if(getValue()) { BlockUtils.setBlockProperty(worldObj, pos, BlockKeypad.POWERED, true); worldObj.notifyNeighborsOfStateChange(pos, mod_SecurityCraft.keypad); } else { BlockUtils.setBlockProperty(worldObj, pos, BlockKeypad.POWERED, false); worldObj.notifyNeighborsOfStateChange(pos, mod_SecurityCraft.keypad); } } }; @Override public void onModuleInserted(ItemStack stack, EnumCustomModules module) { if(module == EnumCustomModules.DISGUISE) { worldObj.markBlockRangeForRenderUpdate(pos, pos); } } @Override public void onModuleRemoved(ItemStack stack, EnumCustomModules module) { if(module == EnumCustomModules.DISGUISE) { worldObj.markBlockRangeForRenderUpdate(pos, pos); } } /** * Writes a tile entity to NBT. * @return */ @Override public NBTTagCompound writeToNBT(NBTTagCompound par1NBTTagCompound) { super.writeToNBT(par1NBTTagCompound); if(this.passcode != null && !this.passcode.isEmpty()){ par1NBTTagCompound.setString("passcode", this.passcode); } return par1NBTTagCompound; } /** * Reads a tile entity from NBT. */ @Override public void readFromNBT(NBTTagCompound par1NBTTagCompound) { super.readFromNBT(par1NBTTagCompound); if (par1NBTTagCompound.hasKey("passcode")) { if(par1NBTTagCompound.getInteger("passcode") != 0){ this.passcode = String.valueOf(par1NBTTagCompound.getInteger("passcode")); }else{ this.passcode = par1NBTTagCompound.getString("passcode"); } } } @Override public void activate(EntityPlayer player) { if(!worldObj.isRemote && BlockUtils.getBlock(getWorld(), getPos()) instanceof BlockKeypad){ BlockKeypad.activate(worldObj, pos); } } @Override public void openPasswordGUI(EntityPlayer player) { if(getPassword() == null) { player.openGui(mod_SecurityCraft.instance, GuiHandler.SETUP_PASSWORD_ID, worldObj, pos.getX(), pos.getY(), pos.getZ()); } else { player.openGui(mod_SecurityCraft.instance, GuiHandler.INSERT_PASSWORD_ID, worldObj, pos.getX(), pos.getY(), pos.getZ()); } } @Override public boolean onCodebreakerUsed(IBlockState blockState, EntityPlayer player, boolean isCodebreakerDisabled) { if(isCodebreakerDisabled) { PlayerUtils.sendMessageToPlayer(player, I18n.translateToLocal("tile.keypad.name"), I18n.translateToLocal("messages.codebreakerDisabled"), TextFormatting.RED); } else { if(!BlockUtils.getBlockPropertyAsBoolean(worldObj, pos, BlockKeypad.POWERED)) { activate(player); return true; } } return false; } @Override public String getPassword() { return (this.passcode != null && !this.passcode.isEmpty()) ? this.passcode : null; } @Override public void setPassword(String password) { passcode = password; } @Override public EnumCustomModules[] acceptedModules() { return new EnumCustomModules[]{EnumCustomModules.WHITELIST, EnumCustomModules.BLACKLIST, EnumCustomModules.DISGUISE}; } @Override public Option<?>[] customOptions() { return new Option[]{ isAlwaysActive }; } }