I would do this all differently. What this does is force the script to do things that you can't control and are solely instance like and volatile.
What you should do is only change states in the switch statement.
When you start your script, you should have an IDLE state so that your script passes off the state for the first time and you go from there.
I use a pre execution method, which is what I call it, because it's the method I run before I update the script and perform actions.
ScriptState sState = State.IDLE;
public void preExectutionRun(){
if(sState.equals(State.IDLE){
if(player inventory is full){
if(player is in bank){
sState = State.BANK_ITEMS;
}
if(player is in fishing area){
sState = State.GO_TO_BANK
}
}
}
//etc for if the inventory isn't full and
//you have if statements for checking if
//you are in bank or fishing area.
}
Then I use a switch statement to carry out the script actions. Within this switch function I can be VERY VERY specific in when it switches states and when to Queue for the next state.
Drawn out example here.
http://pastebin.com/ZpNMSh7K