/*
* 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();
}
}