/** * Copyright (c) 2011-2015, SpaceToad and the BuildCraft Team * http://www.mod-buildcraft.com * <p/> * BuildCraft is distributed under the terms of the Minecraft Mod Public * License 1.0, or MMPL. Please check the contents of the license located in * http://www.mod-buildcraft.com/MMPL-1.0.txt */ package buildcraft.core.lib.gui.buttons; import net.minecraft.nbt.NBTTagByte; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagString; /** * T should be an Enum of button states */ public final class MultiButtonController<T extends IMultiButtonState> { private int currentState; private final T[] validStates; private MultiButtonController(int startState, T... validStates) { this.currentState = startState; this.validStates = validStates; } public static <T extends IMultiButtonState> MultiButtonController<T> getController(int startState, T... validStates) { return new MultiButtonController<T>(startState, validStates); } public MultiButtonController<?> copy() { return new MultiButtonController<T>(currentState, validStates.clone()); } public T[] getValidStates() { return validStates; } public int incrementState() { int newState = currentState + 1; if (newState >= validStates.length) { newState = 0; } 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); } } }