From ba6f18537935a5b84ea5c89008c3b7f1b909d9fc Mon Sep 17 00:00:00 2001 From: BlueRaja Date: Sun, 29 Jan 2017 05:47:29 -0600 Subject: [PATCH] Fixed issue causing some Aether Revolt cards to not import correctly --- .../magicduelsimporter/carddata/CardDataManager.java | 2 +- .../magicduels/MagicDuelsDeckManager.java | 9 +++++---- .../magicduelsimporter/magicduels/Profile.java | 12 +++++++----- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/com/blueraja/magicduelsimporter/carddata/CardDataManager.java b/src/com/blueraja/magicduelsimporter/carddata/CardDataManager.java index fe99c9f..2322d78 100644 --- a/src/com/blueraja/magicduelsimporter/carddata/CardDataManager.java +++ b/src/com/blueraja/magicduelsimporter/carddata/CardDataManager.java @@ -34,7 +34,7 @@ public void clear() { _cardEntries.clear(); } - public Iterable getAllCards() { + public List getAllCards() { return _cardEntries; } diff --git a/src/com/blueraja/magicduelsimporter/magicduels/MagicDuelsDeckManager.java b/src/com/blueraja/magicduelsimporter/magicduels/MagicDuelsDeckManager.java index 1e5e482..070927f 100644 --- a/src/com/blueraja/magicduelsimporter/magicduels/MagicDuelsDeckManager.java +++ b/src/com/blueraja/magicduelsimporter/magicduels/MagicDuelsDeckManager.java @@ -26,15 +26,16 @@ public MagicDuelsDeckManager(CardDataManager cardDataManager, String profilePath public Deck getOwnedCards() throws IOException { Profile profile = getProfile(); - byte[] cardsArray = profile.readCards(); + int numCards = _cardDataManager.getAllCards().size(); + byte[] cardsArray = profile.readCards(numCards); Deck deck = new Deck("Magic Duels collection"); for(int i = 0; i < cardsArray.length; i++) { Optional cardData = _cardDataManager.getDataForMagicDuelsId(i); - int numCards = cardsArray[i]&7; //number of cards are determined by 3 LSB - if(numCards > 0) { + int numOwned = cardsArray[i]&7; //number of cards are determined by 3 LSB + if(numOwned > 0) { if(cardData.isPresent()) { - deck.addCard(cardData.get(), numCards); + deck.addCard(cardData.get(), numOwned); } else { System.out.println("Missing data for magic duels card #" + i + ", which is owned"); } diff --git a/src/com/blueraja/magicduelsimporter/magicduels/Profile.java b/src/com/blueraja/magicduelsimporter/magicduels/Profile.java index a5b916a..bcbf47f 100644 --- a/src/com/blueraja/magicduelsimporter/magicduels/Profile.java +++ b/src/com/blueraja/magicduelsimporter/magicduels/Profile.java @@ -29,12 +29,14 @@ public Profile(File profileFile) throws FileNotFoundException, IOException { content[0x45A] ^= content[0x459+fieldLen]; } - public byte[] readCards() { - byte[] cards = new byte[1024]; + public byte[] readCards(int numCards) { + byte[] cards = new byte[numCards+1]; int offset = (content[0x45E] & 0xFF) + ((content[0x45F] & 0xFF)<<8) + 0x4E0; - for (int i=0; i<512; i++) { + for (int i=0; i>4) & 0x0F); + if(2*i+1 < cards.length) { + cards[2*i+1] = (byte) ((content[offset + i]>>4) & 0x0F); + } } return cards; } @@ -326,7 +328,7 @@ public static void main(String[] args) { File profileFile = new File(fileName); Profile myProfile = new Profile(profileFile); myProfile.exportProfile(profileFile.toString()+".bin"); - byte[] cards = myProfile.readCards(); + byte[] cards = myProfile.readCards(1024); (new RandomAccessFile("Cards.bin", "rw")).write(cards); // (new RandomAccessFile("Cards.bin", "r")).read(cards); // myProfile.writeCards(cards);