Emberveil sourcetests/OwnerBankCheck.java
import com.rs2.game.players.*;
import com.rs2.game.items.*;
import com.rs2.game.players.MainFrameIDs;
import org.apollo.cache.IndexedFileSystem;
import org.apollo.cache.decoder.ItemDefinitionDecoder;
import java.nio.file.*;
import java.util.Arrays;
public final class OwnerBankCheck {
static int checks;static void check(boolean b,String s){if(!b)throw new AssertionError(s);checks++;}
static class Fixture extends Client {
Fixture(){super(null,1);getOutStream().packetEncryption=new org.apollo.util.security.IsaacRandom(new int[]{1,2,3,4});}
public void flushOutStream(){getOutStream().currentOffset=0;}
}
public static void main(String[] args)throws Exception {
new ItemDefinitionDecoder(new IndexedFileSystem(Paths.get("data/cache"),true)).run();ItemDefinitions.load();
Fixture p=new Fixture();p.playerName=p.playerName2="bonds";p.playerPass="qa-only";p.playerRights=3;p.tutorialProgress=36;p.hasStarter=true;p.supportsExpandedBank=true;p.prepareBankStorage();
check(p.getBankSize()==1000,"owner has 1000 slots");check(p.bankItemsN.length==1000&&p.bankItemsV.length==1000,"matching bank arrays");
p.supportsExpandedBank=false;check(p.getBankSize()==352,"old client receives safe capacity");p.supportsExpandedBank=true;
Fixture normal=new Fixture();normal.playerName="bankqa";normal.playerRights=3;normal.supportsExpandedBank=true;normal.prepareBankStorage();check(normal.getBankSize()==352,"other accounts unchanged");
Arrays.fill(p.bankItems,0,999,996);Arrays.fill(p.bankItemsN,0,999,100000);p.lastMainFrameInterface=MainFrameIDs.BANK;p.isBanking=true;
p.playerItems[0]=386;p.playerItemsN[0]=5;
check(p.getItemAssistant().bankItem(385,0,5),"deposit to last owner slot");check(p.bankItems[999]==386&&p.bankItemsN[999]==5,"slot 999 contains exact deposit");
p.getItemAssistant().fromBank(385,999,2);check(p.bankItemsN[999]==3&&p.getItemAssistant().playerHasItem(385,2),"withdraw beyond old capacity");
p.getItemAssistant().fromBank(385,1000,1);check(p.bankItemsN[999]==3,"invalid slot ignored");
String previous=System.getProperty("user.dir");Path isolated=Paths.get(previous).getParent().getParent().resolve("runtime/owner-bank-save-check");
System.setProperty("user.dir",isolated.toString());
try {
PlayerHandler.players[1]=p;p.saveFile=p.saveCharacter=true;p.newPlayer=false;check(PlayerSave.saveGame(p),"isolated save succeeds");
Fixture loaded=new Fixture();loaded.playerName="bonds";loaded.supportsExpandedBank=true;
check(PlayerSave.loadPlayerInfo(loaded,"bonds","qa-only",true)==1,"isolated reload succeeds");
check(loaded.bankItems[999]==386&&loaded.bankItemsN[999]==3&&loaded.getBankSize()==1000,"extra slot survives save/reload");
} finally {System.setProperty("user.dir",previous);PlayerHandler.players[1]=null;}
System.out.println("PASS "+checks+" owner bank capacity/deposit/withdraw/save checks");
}
}