diff options
author | nea <nea@nea.moe> | 2023-06-03 18:06:26 +0200 |
---|---|---|
committer | nea <nea@nea.moe> | 2023-06-03 18:06:26 +0200 |
commit | 840b4097c19ac230ee790c0b76cc8bceeed19bfa (patch) | |
tree | 53e104a0d370887b5495b9a3c417438dba45bec9 /src | |
parent | 2557516647be58a52bd292a540b74b5b83089949 (diff) | |
download | neurepoparsing-840b4097c19ac230ee790c0b76cc8bceeed19bfa.tar.gz neurepoparsing-840b4097c19ac230ee790c0b76cc8bceeed19bfa.tar.bz2 neurepoparsing-840b4097c19ac230ee790c0b76cc8bceeed19bfa.zip |
Add pet numbers
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/io/github/moulberry/repo/NEUConstants.java | 6 | ||||
-rw-r--r-- | src/main/java/io/github/moulberry/repo/constants/PetNumbers.java | 90 | ||||
-rw-r--r-- | src/test/java/TestMain.java | 3 |
3 files changed, 99 insertions, 0 deletions
diff --git a/src/main/java/io/github/moulberry/repo/NEUConstants.java b/src/main/java/io/github/moulberry/repo/NEUConstants.java index f0163d4..f60a2fa 100644 --- a/src/main/java/io/github/moulberry/repo/NEUConstants.java +++ b/src/main/java/io/github/moulberry/repo/NEUConstants.java @@ -4,6 +4,8 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import io.github.moulberry.repo.constants.*; +import io.github.moulberry.repo.data.Rarity; +import io.github.moulberry.repo.util.PetId; import lombok.Getter; import java.util.List; @@ -26,6 +28,8 @@ public class NEUConstants implements IReloadable { Leveling leveling; @Getter PetLevelingData petLevelingData; + @Getter + Map<@PetId String, Map<Rarity, PetNumbers>> petNumbers; public void reload(NEURepository repository) throws NEURepositoryException { bonuses = repository.requireFile("constants/bonuses.json").json(Bonuses.class); @@ -39,6 +43,8 @@ public class NEUConstants implements IReloadable { misc = repository.requireFile("constants/misc.json").json(Misc.class); leveling = repository.requireFile("constants/leveling.json").json(Leveling.class); petLevelingData = repository.requireFile("constants/pets.json").json(PetLevelingData.class); + petNumbers = repository.requireFile("constants/petnums.json").json(new TypeToken<Map<@PetId String, Map<Rarity, PetNumbers>>>() { + }); } diff --git a/src/main/java/io/github/moulberry/repo/constants/PetNumbers.java b/src/main/java/io/github/moulberry/repo/constants/PetNumbers.java new file mode 100644 index 0000000..c9f9b5b --- /dev/null +++ b/src/main/java/io/github/moulberry/repo/constants/PetNumbers.java @@ -0,0 +1,90 @@ +package io.github.moulberry.repo.constants; + +import com.google.gson.annotations.SerializedName; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.ToString; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Nullable; + +import java.util.*; + +@Getter +public class PetNumbers { + /** + * Stats at the {@link #getLowLevel()} of this curve. + */ + @SerializedName("1") + Stats statsAtLowLevel; + /** + * Stats at the {@link #getHighLevel()} of this curve. + */ + @SerializedName("100") + Stats statsAtHighLevel; + @SerializedName("stats_levelling_curve") + @ApiStatus.Obsolete + String levelingCurve; + private transient int minLevel, maxLevel; + + /** + * The first level at which this pet has stats. + */ + public int getLowLevel() { + if (minLevel > 0) return minLevel; + if (levelingCurve == null) + return 1; + String[] split = levelingCurve.split(":"); + assert split.length == 3; + assert Objects.equals(split[2], "1"); + return minLevel = Integer.parseInt(split[0]); + } + + /** + * The last level at which this pet has stats. + */ + public int getHighLevel() { + if (maxLevel > 0) return maxLevel; + if (levelingCurve == null) + return 100; + String[] split = levelingCurve.split(":"); + assert split.length == 3; + assert Objects.equals(split[2], "1"); + return maxLevel = Integer.parseInt(split[1]); + } + + @Nullable + public Stats interpolatedStatsAtLevel(int level) { + if (level < getLowLevel()) return null; + if (level > getHighLevel()) return null; + double progress = (level - getLowLevel()) / (double) (getHighLevel() - getLowLevel()); + + Stats stats = new Stats(); + for (String stat : getStatsAtLowLevel().statNumbers.keySet()) { + Double lowStat = getStatsAtLowLevel().getStatNumbers().get(stat); + Double highStat = getStatsAtHighLevel().getStatNumbers().get(stat); + stats.getStatNumbers().put(stat, lowStat + (highStat - lowStat) * progress); + } + Iterator<Double> lowStatIt = getStatsAtLowLevel().getOtherNumbers().iterator(); + Iterator<Double> highStatIt = getStatsAtHighLevel().getOtherNumbers().iterator(); + while (lowStatIt.hasNext() && highStatIt.hasNext()) { + Double lowStat = lowStatIt.next(); + Double highStat = highStatIt.next(); + stats.getOtherNumbers().add(lowStat + (highStat - lowStat) * progress); + } + return stats; + } + + @Getter + @AllArgsConstructor + @ToString + @NoArgsConstructor + public static class Stats { + @SerializedName("otherNums") + List<Double> otherNumbers = new ArrayList<>(); + @SerializedName("statNums") + Map<String, Double> statNumbers = new HashMap<>(); + } + + +} diff --git a/src/test/java/TestMain.java b/src/test/java/TestMain.java index 0e9c155..b24f8e1 100644 --- a/src/test/java/TestMain.java +++ b/src/test/java/TestMain.java @@ -5,6 +5,7 @@ import io.github.moulberry.repo.NEURepositoryVersion; import io.github.moulberry.repo.data.NEUForgeRecipe; import io.github.moulberry.repo.data.NEUMobDropRecipe; import io.github.moulberry.repo.data.NEUUnknownRecipe; +import io.github.moulberry.repo.data.Rarity; import java.nio.file.Paths; import java.util.stream.Collectors; @@ -24,6 +25,8 @@ public class TestMain { .map(NEUUnknownRecipe::getType) .collect(Collectors.toSet())); System.out.println("pet exp type for ROCK: " + repository.getConstants().getPetLevelingData().getPetExpTypes().get("ROCK")); + System.out.println("stats of level 1 legendary sheep " + repository.getConstants().getPetNumbers().get("SHEEP").get(Rarity.LEGENDARY).interpolatedStatsAtLevel(1)); + System.out.println("stats of level 150 golden dragon " + repository.getConstants().getPetNumbers().get("GOLDEN_DRAGON").get(Rarity.LEGENDARY).interpolatedStatsAtLevel(150)); System.out.println("max level of golden dragon: " + repository.getConstants().getPetLevelingData().getPetLevelingBehaviourOverrides().get("GOLDEN_DRAGON").getMaxLevel()); System.out.println("amount of people with rainbow names: " + repository.getConstants().getMisc().getRainbowNames().size()); System.out.println("display name for dynamic zone: " + repository.getConstants().getMisc().getAreaNames().get("dynamic")); |