diff --git a/build.gradle b/build.gradle index ec1c5a2..a71f3ff 100644 --- a/build.gradle +++ b/build.gradle @@ -20,10 +20,13 @@ dependencies { mappings "net.fabricmc:yarn:1.21.1+build.3:v2" modImplementation "net.fabricmc:fabric-loader:0.16.5" - modImplementation "net.fabricmc.fabric-api:fabric-api:0.106.1+1.21.1" + modImplementation "net.fabricmc.fabric-api:fabric-api:0.110.0+1.21.1" // Cobblemon modImplementation "com.cobblemon:fabric:1.7.3+1.21.1" + + // Kotlin stdlib needed at compile time to resolve Cobblemon's Kotlin class markers + compileOnly "org.jetbrains.kotlin:kotlin-stdlib:1.9.25" } java { diff --git a/build.sh b/build.sh index 9be4375..de079f4 100755 --- a/build.sh +++ b/build.sh @@ -2,13 +2,13 @@ set -euo pipefail cd "$(dirname "$0")" -IMAGE="gradle:8.7-jdk21" +IMAGE="gradle:8.10-jdk21" echo "=== Building with Docker ($IMAGE) ===" echo "Project dir: $(pwd)" echo "" -docker run --rm \ +docker run -it --rm \ -v "$PWD":/project \ -v "$PWD/.gradle_cache:/home/gradle/.gradle" \ -w /project \ diff --git a/src/main/java/com/example/cobbleapi/CobbleBattleApiMod.java b/src/main/java/com/example/cobbleapi/CobbleBattleApiMod.java index a053e99..25cddbb 100644 --- a/src/main/java/com/example/cobbleapi/CobbleBattleApiMod.java +++ b/src/main/java/com/example/cobbleapi/CobbleBattleApiMod.java @@ -128,8 +128,8 @@ public class CobbleBattleApiMod implements ModInitializer { return switch (subRoute) { case "battle" -> buildBattleState(uuid, player); - case "party" -> buildParty(uuid); - case "pc" -> buildPc(uuid); + case "party" -> buildParty(uuid, player); + case "pc" -> buildPc(uuid, player); default -> buildBasicStatus(uuid, player); }; } @@ -223,17 +223,13 @@ public class CobbleBattleApiMod implements ModInitializer { /** * GET /player//party → party pokémon list */ - private String buildParty(UUID uuid) { - PlayerPartyStore party; - try { - party = Cobblemon.INSTANCE.getStorage().getParty(uuid); - } catch (Exception e) { - return json("error", "could not load party"); - } + private String buildParty(UUID uuid, ServerPlayerEntity player) { + PlayerPartyStore party = Cobblemon.INSTANCE.getStorage().getParty(player); StringBuilder sb = new StringBuilder(); sb.append("{\"uuid\":\"").append(uuid).append("\",\"party\":["); boolean first = true; - for (Pokemon p : party) { + for (Pokemon p : party.toGappyList()) { + if (p == null) continue; if (!first) sb.append(','); first = false; appendPokemonJson(sb, p); @@ -245,20 +241,18 @@ public class CobbleBattleApiMod implements ModInitializer { /** * GET /player//pc → PC pokémon list */ - private String buildPc(UUID uuid) { - PCStore pc; - try { - pc = Cobblemon.INSTANCE.getStorage().getPC(uuid); - } catch (Exception e) { - return json("error", "could not load pc"); - } + private String buildPc(UUID uuid, ServerPlayerEntity player) { + PCStore pc = Cobblemon.INSTANCE.getStorage().getPC(player); StringBuilder sb = new StringBuilder(); sb.append("{\"uuid\":\"").append(uuid).append("\",\"pc\":["); boolean first = true; - for (Pokemon p : pc) { - if (!first) sb.append(','); - first = false; - appendPokemonJson(sb, p); + for (com.cobblemon.mod.common.api.storage.pc.PCBox box : pc.getBoxes()) { + for (Pokemon p : box.getNonEmptySlots().values()) { + if (p == null) continue; + if (!first) sb.append(','); + first = false; + appendPokemonJson(sb, p); + } } sb.append("]}"); return sb.toString();