/* * 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.gui.buttons; import net.minecraft.nbt.NBTTagByte; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagString; /** * * @author CovertJaguar <http://www.railcraft.info> * @param <T> */ public class MultiButtonController<T extends IMultiButtonState> { private int currentState; private final T[] validStates; public MultiButtonController(int startState, T... validStates) { this.currentState = startState; this.validStates = validStates; } protected MultiButtonController(MultiButtonController<T> controller) { this.currentState = controller.currentState; this.validStates = controller.validStates; } public MultiButtonController<T> copy() { return new MultiButtonController(this); } public T[] getValidStates() { return validStates; } public int incrementState() { int newState = currentState + 1; if (newState >= validStates.length) { newState = 0; } currentState = newState; return currentState; } public int decrementState() { int newState = currentState - 1; if (newState < 0) { newState = validStates.length - 1; } currentState = newState; return currentState; } public void setCurrentState(int state) { currentState = state; } public void setCurrentState(T state) { for (int i = 0; i < validStates.length; i++) { if (validStates[i] == state) { currentState = i; return; } } } public int getCurrentState() { return currentState; } public T getButtonState() { return validStates[currentState]; } public void writeToNBT(NBTTagCompound nbt, String tag) { nbt.setString(tag, getButtonState().name()); } public void readFromNBT(NBTTagCompound nbt, String tag) { if (nbt.getTag(tag) instanceof NBTTagString) { String name = nbt.getString(tag); for (int i = 0; i < validStates.length; i++) { if (validStates[i].name().equals(name)) { currentState = i; break; } } } else if (nbt.getTag(tag) instanceof NBTTagByte) { currentState = nbt.getByte(tag); } } }