/* * 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.detector; import com.mojang.authlib.GameProfile; import mods.railcraft.common.blocks.signals.ISecure; import mods.railcraft.common.gui.buttons.LockButtonState; import mods.railcraft.common.gui.buttons.MultiButtonController; import mods.railcraft.common.plugins.forge.PlayerPlugin; import mods.railcraft.common.util.network.IGuiReturnHandler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; /** * @author CovertJaguar <http://www.railcraft.info/> */ public abstract class DetectorSecured extends Detector implements IGuiReturnHandler, ISecure<LockButtonState> { private final MultiButtonController<LockButtonState> lockController = new MultiButtonController(0, LockButtonState.VALUES); public DetectorSecured() { super(); } @Override public MultiButtonController<LockButtonState> getLockController() { return lockController; } @Override public float getHardness() { if (isSecure()) { return -1; } return super.getHardness(); } @Override public boolean isSecure() { return lockController.getButtonState() == LockButtonState.LOCKED; } private boolean canAccess(EntityPlayer player) { return !isSecure() || PlayerPlugin.isOwnerOrOp(getOwner(), player); } @Override public void writeToNBT(NBTTagCompound data) { super.writeToNBT(data); lockController.writeToNBT(data, "lock"); } @Override public void readFromNBT(NBTTagCompound data) { super.readFromNBT(data); lockController.readFromNBT(data, "lock"); } @Override public void writePacketData(DataOutputStream data) throws IOException { super.writePacketData(data); data.writeByte(lockController.getCurrentState()); } @Override public void readPacketData(DataInputStream data) throws IOException { super.readPacketData(data); lockController.setCurrentState(data.readByte()); } @Override public void writeGuiData(DataOutputStream data) throws IOException { data.writeByte(lockController.getCurrentState()); } @Override public void readGuiData(DataInputStream data, EntityPlayer sender) throws IOException { byte lock = data.readByte(); if (sender == null || canAccess(sender)) { lockController.setCurrentState(lock); } } @Override public String getName() { return tile.getName(); } @Override public String getLocalizationTag() { return tile.getLocalizationTag(); } @Override public GameProfile getOwner() { return tile.getOwner(); } }