Continues implementation

This commit is contained in:
2025-05-20 22:05:16 +02:00
parent 38ada274e3
commit dd1697902a
365 changed files with 142568 additions and 122351 deletions
+8
View File
@@ -0,0 +1,8 @@
Account
Analytics
Chat
Config
Error
Packages
Presence
Stats
+21 -4
View File
@@ -13,9 +13,12 @@
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id> <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id> <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
<quarkus.platform.version>3.21.4</quarkus.platform.version> <quarkus.platform.version>3.22.2</quarkus.platform.version>
<skipITs>true</skipITs> <skipITs>true</skipITs>
<jwt.version>4.5.0</jwt.version> <jwt.version>4.5.0</jwt.version>
<lazysodium.version>5.1.4</lazysodium.version>
<jna.version>5.17.0</jna.version>
<socketio.version>2.0.13</socketio.version>
<steamworks.version>1.9.0</steamworks.version> <steamworks.version>1.9.0</steamworks.version>
<surefire-plugin.version>3.5.2</surefire-plugin.version> <surefire-plugin.version>3.5.2</surefire-plugin.version>
</properties> </properties>
@@ -49,12 +52,26 @@
<version>${jwt.version}</version> <version>${jwt.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>io.quarkus</groupId> <groupId>com.goterl</groupId>
<artifactId>quarkus-rest</artifactId> <artifactId>lazysodium-java</artifactId>
<version>${lazysodium.version}</version>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
</dependency>
<dependency>
<groupId>com.corundumstudio.socketio</groupId>
<artifactId>netty-socketio</artifactId>
<version>${socketio.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>io.quarkus</groupId> <groupId>io.quarkus</groupId>
<artifactId>quarkus-websockets-next</artifactId> <artifactId>quarkus-grpc</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>io.quarkus</groupId> <groupId>io.quarkus</groupId>
@@ -0,0 +1,71 @@
package ch.gtache.elderscrollslegends.card;
import java.util.Objects;
import static java.util.Objects.requireNonNull;
public abstract class AbstractCard {
private final int id;
private final String name;
private final CardInfo cardInfo;
private final CardTechnicalInfo technicalInfo;
private final int manaCost;
private final Keywords keywords;
private final Immunity immunity;
protected AbstractCard(final int id, final String name, final CardInfo cardInfo, final CardTechnicalInfo info,
final int manaCost, final Keywords keywords, final Immunity immunity) {
this.id = id;
this.name = requireNonNull(name);
this.cardInfo = requireNonNull(cardInfo);
this.technicalInfo = requireNonNull(info);
this.manaCost = manaCost;
this.keywords = requireNonNull(keywords);
this.immunity = requireNonNull(immunity);
}
public int id() {
return id;
}
public String name() {
return name;
}
public CardInfo cardInfo() {
return cardInfo;
}
public CardTechnicalInfo technicalInfo() {
return technicalInfo;
}
public int manaCost() {
return manaCost;
}
public Keywords keywords() {
return keywords;
}
public Immunity immunity() {
return immunity;
}
@Override
public boolean equals(final Object obj) {
if (obj == null || getClass() != obj.getClass()) return false;
final var card = (AbstractCard) obj;
return id == card.id && Objects.equals(cardInfo, card.cardInfo) &&
Objects.equals(technicalInfo, card.technicalInfo) &&
Objects.equals(name, card.name) && manaCost == card.manaCost &&
Objects.equals(keywords, card.keywords) && Objects.equals(immunity, card.immunity);
}
@Override
public int hashCode() {
return Objects.hash(id, name, cardInfo, technicalInfo, manaCost, keywords, immunity);
}
}
@@ -0,0 +1,38 @@
package ch.gtache.elderscrollslegends.card;
import java.util.Objects;
public class ActionCard extends AbstractCard {
private final boolean betray;
private final boolean empower;
public ActionCard(final int id, final String name, final CardInfo cardInfo, final CardTechnicalInfo technicalInfo,
final int manaCost, final Keywords keywords, final Immunity immunity,
final boolean betray, final boolean empower) {
super(id, name, cardInfo, technicalInfo, manaCost, keywords, immunity);
this.betray = betray;
this.empower = empower;
}
public boolean betray() {
return betray;
}
public boolean empower() {
return empower;
}
@Override
public boolean equals(final Object o) {
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
final var that = (ActionCard) o;
return betray == that.betray && empower == that.empower;
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), betray, empower);
}
}
@@ -0,0 +1,4 @@
package ch.gtache.elderscrollslegends.card;
public record AttackHealth(int attack, int health) {
}
@@ -0,0 +1,18 @@
package ch.gtache.elderscrollslegends.card;
import java.util.Objects;
public class AvatarCard extends AbstractCard {
private final AvatarValues values;
public AvatarCard(final int id, final String name, final CardInfo cardInfo, final CardTechnicalInfo info,
final int manaCost, final Keywords keywords, final Immunity immunity, final AvatarValues values) {
super(id, name, cardInfo, info, manaCost, keywords, immunity);
this.values = Objects.requireNonNull(values);
}
public AvatarValues values() {
return values;
}
}
@@ -0,0 +1,5 @@
package ch.gtache.elderscrollslegends.card;
public record AvatarHealthValues(boolean doubleHealing, int gainHealthFromRuneBreaks, boolean noHealing,
int percentDamageTaken, int startingHealth) {
}
@@ -0,0 +1,5 @@
package ch.gtache.elderscrollslegends.card;
public record AvatarValues(boolean blockDrawsFromRuneBreak, boolean cannotCounterattack, boolean extraManaPlayRules,
int maxMana, AvatarHealthValues healthValues) {
}
@@ -0,0 +1,19 @@
package ch.gtache.elderscrollslegends.card;
import ch.gtache.elderscrollslegends.service.profile.CollectionName;
import ch.gtache.elderscrollslegends.service.profile.Rarity;
import java.util.Collection;
import java.util.Objects;
import java.util.Set;
public record CardInfo(CollectionName collection, boolean unique, Rarity rarity, CardType type,
Collection<CardSubtype> subtypes) {
public CardInfo {
Objects.requireNonNull(collection);
Objects.requireNonNull(rarity);
Objects.requireNonNull(type);
subtypes = Set.copyOf(subtypes);
}
}
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.card;
public enum CardSource { public enum CardSource {
Normal, Normal,
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.card;
public enum CardSubtype { public enum CardSubtype {
Intelligence, Intelligence,
@@ -0,0 +1,18 @@
package ch.gtache.elderscrollslegends.card;
import java.util.Objects;
public record CardTechnicalInfo(CardSource source, int season, boolean production,
boolean premiumOnly, boolean invalidArenaPick, boolean canBeFirstEverSoloPick,
int maxCopies, String exportCode) {
public CardTechnicalInfo {
Objects.requireNonNull(source);
if (season < 0) {
throw new IllegalArgumentException("season must be >= 0");
}
if (maxCopies < 0) {
throw new IllegalArgumentException("maxCopies must be >= 0");
}
}
}
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.card;
public enum CardType { public enum CardType {
Creature, Support, Action, Item, Avatar, Double Creature, Support, Action, Item, Avatar, Double
@@ -0,0 +1,12 @@
package ch.gtache.elderscrollslegends.card;
public record CreatureAttackInfo(boolean canAttackFriendFace, boolean canAttackFriendlies,
boolean canAttackOtherLane, boolean canBeAttackedFromAnyLane,
boolean canOnlyAttackCreatures, boolean cannotAttack,
boolean damageAvatarOfAttackedCreature, boolean ignoreTaunt,
int numAttacksPerTurn, boolean moveToAttackOtherLane) {
public CreatureAttackInfo(final int numAttacksPerTurn) {
this(false, false, false, false, false, false, false, false, numAttacksPerTurn, false);
}
}
@@ -0,0 +1,59 @@
package ch.gtache.elderscrollslegends.card;
import java.util.Objects;
public class CreatureCard extends AbstractCard {
private final CreatureStats stats;
private final CreatureAttackInfo attackInfo;
private final Exalt exalt;
private final FreezeInfo freezeInfo;
private final CreatureFlags flags;
public CreatureCard(final int id, final String name, final CardInfo cardInfo, final CardTechnicalInfo technicalInfo,
final int manaCost, final Keywords keywords, final Immunity immunity,
final CreatureStats stats, final CreatureAttackInfo attackInfo,
final Exalt exalt, final FreezeInfo freezeInfo, final CreatureFlags flags) {
super(id, name, cardInfo, technicalInfo, manaCost, keywords, immunity);
this.stats = Objects.requireNonNull(stats);
this.attackInfo = Objects.requireNonNull(attackInfo);
this.exalt = Objects.requireNonNull(exalt);
this.freezeInfo = Objects.requireNonNull(freezeInfo);
this.flags = Objects.requireNonNull(flags);
}
public CreatureStats stats() {
return stats;
}
public CreatureAttackInfo attackInfo() {
return attackInfo;
}
public Exalt exalt() {
return exalt;
}
public FreezeInfo freezeInfo() {
return freezeInfo;
}
public CreatureFlags flags() {
return flags;
}
@Override
public boolean equals(final Object o) {
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
final var that = (CreatureCard) o;
return Objects.equals(stats, that.stats) && Objects.equals(attackInfo, that.attackInfo) &&
Objects.equals(exalt, that.exalt) && Objects.equals(freezeInfo, that.freezeInfo) &&
Objects.equals(flags, that.flags);
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), stats, attackInfo, exalt, freezeInfo, flags);
}
}
@@ -0,0 +1,7 @@
package ch.gtache.elderscrollslegends.card;
public record CreatureFlags(boolean boardSplash, boolean colossal, boolean cover, boolean drainOnBothTurns,
boolean firstStrike, boolean guardsBothLanes, int oblivionGateLevel,
int preventOpponentManaPlay, boolean reanimated, boolean slayOnBothTurns,
boolean unstoppable, boolean untouchable) {
}
@@ -0,0 +1,4 @@
package ch.gtache.elderscrollslegends.card;
public record CreatureStats(AttackHealth attackHealth, int maxHealth, boolean wounded) {
}
@@ -0,0 +1,46 @@
package ch.gtache.elderscrollslegends.card;
import java.util.Objects;
public class DoubleCard extends AbstractCard {
private final CreatureStats stats;
private final CreatureAttackInfo attackInfo;
private final DoubleInfo doubleInfo;
public DoubleCard(final int id, final String name, final CardInfo cardInfo, final CardTechnicalInfo technicalInfo,
final int manaCost, final Keywords keywords, final Immunity immunity,
final CreatureStats stats, final CreatureAttackInfo attackInfo,
final DoubleInfo doubleInfo) {
super(id, name, cardInfo, technicalInfo, manaCost, keywords, immunity);
this.stats = Objects.requireNonNull(stats);
this.attackInfo = Objects.requireNonNull(attackInfo);
this.doubleInfo = Objects.requireNonNull(doubleInfo);
}
public CreatureStats stats() {
return stats;
}
public CreatureAttackInfo attackInfo() {
return attackInfo;
}
public DoubleInfo doubleInfo() {
return doubleInfo;
}
@Override
public boolean equals(final Object o) {
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
final var that = (DoubleCard) o;
return Objects.equals(stats, that.stats) && Objects.equals(attackInfo, that.attackInfo) &&
Objects.equals(doubleInfo, that.doubleInfo);
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), stats, attackInfo, doubleInfo);
}
}
@@ -0,0 +1,4 @@
package ch.gtache.elderscrollslegends.card;
public record DoubleInfo(AbstractCard card1, AbstractCard card2, boolean betray) {
}
@@ -0,0 +1,4 @@
package ch.gtache.elderscrollslegends.card;
public record Exalt(boolean canExalt, boolean exalted, int exaltCost) {
}
@@ -0,0 +1,4 @@
package ch.gtache.elderscrollslegends.card;
public record FreezeInfo(boolean hasFreeze, boolean iceFreeze, boolean permanentFreeze, boolean webFreeze) {
}
@@ -0,0 +1,23 @@
package ch.gtache.elderscrollslegends.card;
public record Immunity(boolean immune, boolean immuneToActionDamage, boolean immuneToBanish,
boolean immuneToCover, boolean immuneToEnemyActionTargeting,
boolean immuneToEnemyCliffCreatures, boolean immuneToEnemyDragons,
boolean immuneToEnemyKeywords, boolean immuneToFreeze, boolean immuneToLethal,
boolean immuneMusic, boolean immuneToSilence, boolean immuneToSteal,
boolean immuneToSupportDamage, boolean immuneToWounded) {
public Immunity(final boolean immuneToBanish, final boolean immuneToSteal) {
this(false, false, immuneToBanish, false, false,
false, false, false, false,
false, false, false, immuneToSteal, false,
false);
}
public Immunity(final boolean immuneToBanish, final boolean immuneToSilence, final boolean immuneToSteal) {
this(false, false, immuneToBanish, false, false,
false, false, false, false,
false, false, immuneToSilence, immuneToSteal, false,
false);
}
}
@@ -0,0 +1,52 @@
package ch.gtache.elderscrollslegends.card;
import java.util.Objects;
public class ItemCard extends AbstractCard {
private final boolean amuletOfMara;
private final boolean canOnlyAttackCreatures;
private final boolean mobilize;
private final AttackHealth attackHealth;
public ItemCard(final int id, final String name, final CardInfo cardInfo, final CardTechnicalInfo technicalInfo,
final int manaCost, final Keywords keywords, final Immunity immunity, final boolean amuletOfMara,
final boolean canOnlyAttackCreatures, final boolean mobilize, final AttackHealth attackHealth) {
super(id, name, cardInfo, technicalInfo, manaCost, keywords, immunity);
this.amuletOfMara = amuletOfMara;
this.canOnlyAttackCreatures = canOnlyAttackCreatures;
this.mobilize = mobilize;
this.attackHealth = Objects.requireNonNull(attackHealth);
}
public boolean amuletOfMara() {
return amuletOfMara;
}
public boolean canOnlyAttackCreatures() {
return canOnlyAttackCreatures;
}
public boolean isMobilize() {
return mobilize;
}
public AttackHealth attackHealth() {
return attackHealth;
}
@Override
public boolean equals(final Object o) {
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
final var itemCard = (ItemCard) o;
return amuletOfMara == itemCard.amuletOfMara && canOnlyAttackCreatures == itemCard.canOnlyAttackCreatures &&
mobilize == itemCard.mobilize &&
Objects.equals(attackHealth, itemCard.attackHealth);
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), amuletOfMara, canOnlyAttackCreatures, mobilize, attackHealth);
}
}
@@ -0,0 +1,6 @@
package ch.gtache.elderscrollslegends.card;
public record Keywords(boolean breakthrough, boolean charge, boolean drain, boolean guard,
boolean lethal, boolean mobilize, boolean prophecy, int rally, boolean regenerate,
boolean taunt, boolean ward) {
}
@@ -0,0 +1,38 @@
package ch.gtache.elderscrollslegends.card;
import java.util.Objects;
public class SupportCard extends AbstractCard {
private final boolean indestructible;
private final SupportUseInfo useInfo;
public SupportCard(final int id, final String name, final CardInfo cardInfo, final CardTechnicalInfo technicalInfo,
final int manaCost, final Keywords keywords, final Immunity immunity,
final boolean indestructible, final SupportUseInfo useInfo) {
super(id, name, cardInfo, technicalInfo, manaCost, keywords, immunity);
this.indestructible = indestructible;
this.useInfo = Objects.requireNonNull(useInfo);
}
public boolean indestructible() {
return indestructible;
}
public SupportUseInfo useInfo() {
return useInfo;
}
@Override
public boolean equals(final Object o) {
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
final var that = (SupportCard) o;
return indestructible == that.indestructible && Objects.equals(useInfo, that.useInfo);
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), indestructible, useInfo);
}
}
@@ -0,0 +1,4 @@
package ch.gtache.elderscrollslegends.card;
public record SupportUseInfo(int abilityUsesPerTurn, int totalUsesAllowed, boolean unlimitedUses, int usesLeft) {
}
@@ -0,0 +1,4 @@
package ch.gtache.elderscrollslegends.client;
public record AITargetRules(AllyRule AllyRule) {
}
@@ -0,0 +1,5 @@
package ch.gtache.elderscrollslegends.client;
public enum AllowedDeck {
PlayerAny
}
@@ -0,0 +1,5 @@
package ch.gtache.elderscrollslegends.client;
public enum AllyRule {
TargetBoth
}
@@ -0,0 +1,5 @@
package ch.gtache.elderscrollslegends.client;
public enum Are {
Friends
}
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
public enum AttributeMethod { public enum AttributeMethod {
CardAttribute, CardAttribute,
@@ -0,0 +1,5 @@
package ch.gtache.elderscrollslegends.client;
public record AttributeModification(ModificationType ModificationType, AttributeName AttributeName,
int Value, int DynamicValue, boolean LockedDynamicValue) {
}
@@ -0,0 +1,5 @@
package ch.gtache.elderscrollslegends.client;
public enum AttributeName {
ManaCost
}
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
public enum CardAttribute { public enum CardAttribute {
Attack, Attack,
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
public enum CardMechanic { public enum CardMechanic {
Summon, Summon,
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
public enum CardRareAttribute { public enum CardRareAttribute {
None, None,
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import com.fasterxml.jackson.annotation.JsonAlias; import com.fasterxml.jackson.annotation.JsonAlias;
@@ -0,0 +1,5 @@
package ch.gtache.elderscrollslegends.client;
public enum CardRole {
Self
}
@@ -0,0 +1,5 @@
package ch.gtache.elderscrollslegends.client;
public enum ClientTargetingType {
NoTarget
}
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
public enum CompletionType { public enum CompletionType {
Placeholder, Placeholder,
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
public enum CountIs { public enum CountIs {
GreaterThan, GreaterThan,
@@ -0,0 +1,5 @@
package ch.gtache.elderscrollslegends.client;
public enum CountingType {
Events
}
@@ -0,0 +1,5 @@
package ch.gtache.elderscrollslegends.client;
public enum CustomUIType {
None
}
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
public enum EffectTriggerType { public enum EffectTriggerType {
AbilityEffect, AbilityEffect,
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
public enum EmoteType { public enum EmoteType {
Hello, Hello,
@@ -0,0 +1,16 @@
package ch.gtache.elderscrollslegends.client;
import java.util.List;
public record Enchantment(String NameForEditor, JSONRawKey DisplayTitle, JSONRawKey DisplayText,
int MaxTurns, boolean DeferApplication, boolean DeferApplicationLast,
boolean BasicItemEnchantment, boolean KeepWhenMovesOffBoard, boolean ExpiresAtStartOfTurn,
boolean ExpiresAtStartOfSourcesTurn, boolean ExpiresAtEndOfTurn, boolean ExpiresAtEndOfFight,
boolean ExpiresOnAttack, boolean ExpiresOnIncomingDamage, boolean ExpiresAtEndOfProphecy,
boolean ExpiresAtEndOfTurnAfterNotAttacking, boolean ExpiresAfterRuneBreak,
boolean PermanentExpiresOnLeavingBoard, boolean PermanentExpiresOnChange,
boolean ResetWoundedState, List<AttributeModification> AttributeModifications,
List<Object> GrantedEffects, List<Object> GrantedAuras, List<Object> AddedCreatureSubtypes,
List<Object> NewColorSubtypes, List<Object> SubcardDistributionSubtypes,
List<Object> MechanicEntries, List<Object> CardReferences, List<Object> TagReferences) {
}
@@ -0,0 +1,7 @@
package ch.gtache.elderscrollslegends.client;
import java.util.List;
public record Enchantments(String Name, boolean UseBuffFx, boolean UseDebuffFx, List<JSONSelector> Selectors,
StackCount StackCount, Enchantment Enchantment) {
}
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
public enum FXAction { public enum FXAction {
TriggeredEffect, TriggeredEffect,
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
public enum HuntType { public enum HuntType {
None, None,
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import java.util.List; import java.util.List;
@@ -0,0 +1,8 @@
package ch.gtache.elderscrollslegends.client;
import java.util.List;
public record JSONAura(String NameForEditor, boolean ExclusiveAura, boolean HideStatusFx,
List<CardRequirements> CardRequirements, List<PlayerRequirements> playerRequirements,
List<Enchantments> EnchantmentsToApply) {
}
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
public record JSONAvatar(JSONResourceId ResourceId, JSONResource RaceId, JSONResource EmotePackage, String Image, public record JSONAvatar(JSONResourceId ResourceId, JSONResource RaceId, JSONResource EmotePackage, String Image,
String CircularImage, int ContentPackIndex) { String CircularImage, int ContentPackIndex) {
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import java.util.List; import java.util.List;
@@ -1,5 +1,8 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import ch.gtache.elderscrollslegends.card.CardSource;
import ch.gtache.elderscrollslegends.card.CardSubtype;
import ch.gtache.elderscrollslegends.card.CardType;
import ch.gtache.elderscrollslegends.service.profile.Rarity; import ch.gtache.elderscrollslegends.service.profile.Rarity;
import java.util.List; import java.util.List;
@@ -30,4 +33,8 @@ public record JSONCard(JSONResourceId ResourceId, boolean Production, String Nam
boolean AllowContentPackOverride, boolean AllowContentPackOverride,
List<JSONEntityAttribute> EntityAttributes List<JSONEntityAttribute> EntityAttributes
) { ) {
public String getAttribute(final String name) {
return EntityAttributes.stream().filter(attr -> attr.Name().equals(name)).findFirst().map(JSONEntityAttribute::Value).map(String::valueOf).orElse(null);
}
} }
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import java.util.List; import java.util.List;
@@ -1,4 +1,6 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import ch.gtache.elderscrollslegends.card.CardType;
import java.util.List; import java.util.List;
@@ -0,0 +1,5 @@
package ch.gtache.elderscrollslegends.client;
public record JSONCardFX(int AssetHash, FXAction FXAction, EffectTriggerType EffectTriggerType,
String CardFxDefinition) {
}
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
public record JSONDialogueDataEvent(String CoinImage, JSONRawKey DialogueTextKey, public record JSONDialogueDataEvent(String CoinImage, JSONRawKey DialogueTextKey,
String DialogueAudio, int ContentPackIndex, boolean EndConversationBranch, String DialogueAudio, int ContentPackIndex, boolean EndConversationBranch,
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import java.util.List; import java.util.List;
@@ -1,6 +1,6 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
public record JSONDynamicText(long Tag, AttributeMethod Method, CardAttribute CardAttribute, public record JSONDynamicText(int Tag, AttributeMethod Method, CardAttribute CardAttribute,
PlayerAttribute PlayerAttribute, CardRareAttribute CardRareAttribute, PlayerAttribute PlayerAttribute, CardRareAttribute CardRareAttribute,
PlayerRareAttribute PlayerRareAttribute, HuntType HuntType, int HuntIndex) { PlayerRareAttribute PlayerRareAttribute, HuntType HuntType, int HuntIndex) {
} }
@@ -0,0 +1,4 @@
package ch.gtache.elderscrollslegends.client;
public record JSONEffect() {
}
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
public record JSONEmoteData(EmoteType EmoteType, JSONRawKey EmoteString, String EmoteAudio, int ContentPackIndex) { public record JSONEmoteData(EmoteType EmoteType, JSONRawKey EmoteString, String EmoteAudio, int ContentPackIndex) {
} }
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import com.fasterxml.jackson.annotation.JsonAlias; import com.fasterxml.jackson.annotation.JsonAlias;
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
public record JSONHanger(JSONRawKey DisplayTitle, JSONRawKey DisplayText) { public record JSONHanger(JSONRawKey DisplayTitle, JSONRawKey DisplayText) {
} }
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
public record JSONKeyValue(String Key, int Value) { public record JSONKeyValue(String Key, int Value) {
} }
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
public record JSONMechanic(CardMechanic MechanicType, boolean DisplayHanger, boolean DisplayIcon) { public record JSONMechanic(CardMechanic MechanicType, boolean DisplayHanger, boolean DisplayIcon) {
} }
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.StreamReadFeature; import com.fasterxml.jackson.core.StreamReadFeature;
@@ -0,0 +1,4 @@
package ch.gtache.elderscrollslegends.client;
public record JSONPosition(double x, double y) {
}
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
public record JSONRace(JSONResourceId ResourceId, JSONRawKey Name, JSONRawKey Description, public record JSONRace(JSONResourceId ResourceId, JSONRawKey Name, JSONRawKey Description,
JSONRawKey Bonus, JSONRawKey GuestPlayerName) { JSONRawKey Bonus, JSONRawKey GuestPlayerName) {
@@ -0,0 +1,4 @@
package ch.gtache.elderscrollslegends.client;
public record JSONRawKey(String RawKey) {
}
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import ch.gtache.elderscrollslegends.service.campaign.DialogModalType; import ch.gtache.elderscrollslegends.service.campaign.DialogModalType;
@@ -0,0 +1,4 @@
package ch.gtache.elderscrollslegends.client;
public record JSONResource(int resourceId) {
}
@@ -0,0 +1,4 @@
package ch.gtache.elderscrollslegends.client;
public record JSONResourceId(int Id, String UniqueName, CompletionType CompletionType) {
}
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import com.fasterxml.jackson.annotation.JsonAlias; import com.fasterxml.jackson.annotation.JsonAlias;
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import ch.gtache.elderscrollslegends.service.profile.Rarity; import ch.gtache.elderscrollslegends.service.profile.Rarity;
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import javax.swing.*; import javax.swing.*;
import java.util.List; import java.util.List;
@@ -0,0 +1,5 @@
package ch.gtache.elderscrollslegends.client;
public enum JournalType {
Played
}
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
public record LaneConditional(SelectorCheck Check, boolean IgnoreDuringBetrayPrep) { public record LaneConditional(SelectorCheck Check, boolean IgnoreDuringBetrayPrep) {
} }
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import com.fasterxml.jackson.annotation.JsonAlias; import com.fasterxml.jackson.annotation.JsonAlias;
@@ -0,0 +1,5 @@
package ch.gtache.elderscrollslegends.client;
public enum LhsCard {
Inciter
}
@@ -0,0 +1,5 @@
package ch.gtache.elderscrollslegends.client;
public enum LhsLane {
Self
}
@@ -0,0 +1,5 @@
package ch.gtache.elderscrollslegends.client;
public enum LhsPlayer {
Self
}
@@ -0,0 +1,5 @@
package ch.gtache.elderscrollslegends.client;
public enum ModificationType {
Add
}
@@ -0,0 +1,5 @@
package ch.gtache.elderscrollslegends.client;
public enum OtherCard {
Self
}
@@ -0,0 +1,19 @@
package ch.gtache.elderscrollslegends.client;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Collectors;
public class ParseAvatars {
public static void main(final String[] args) throws IOException {
final var parser = new JSONParser();
final var content = Files.readString(Paths.get("client-config/AvatarCollection.json"));
final var avatars = parser.parse(content, JSONAvatarCollection.class);
System.out.println(avatars.Races().stream().map(r -> "(" + r.ResourceId().Id() + ",'" + r.ResourceId().UniqueName() + "')").collect(Collectors.joining(",\n")) + ";");
System.out.println();
System.out.println(avatars.Avatars().stream().map(a -> "(" + a.ResourceId().Id() + ",'" + a.ResourceId().UniqueName() + "'," + a.RaceId().resourceId() + ")").collect(Collectors.joining(",\n")) + ";");
System.out.println(avatars.FallbackAvatar());
}
}
@@ -0,0 +1,27 @@
package ch.gtache.elderscrollslegends.client;
import com.fasterxml.jackson.core.type.TypeReference;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
public class ParseCampaigns {
public static void main(final String[] args) throws IOException {
final var parser = new JSONParser();
final var content = Files.readString(Paths.get("client-config/Campaigns.json"));
final var campaigns = parser.parse(content, new CampaignsReference());
final var atomicInteger = new AtomicInteger(0);
System.out.println(campaigns.stream().flatMap(c -> c.Acts().stream().flatMap(a -> {
atomicInteger.set(0);
return a.Chapters().stream().map(chap -> "(" + a.ResourceId().Id() + "," + chap.ResourceId().Id() + "," + atomicInteger.getAndIncrement() + ",'" + chap.ResourceId().UniqueName() + "','')");
})).collect(Collectors.joining(",\n")) + ";");
}
private static final class CampaignsReference extends TypeReference<List<JSONCampaign>> {
}
}
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
@@ -11,9 +11,9 @@ public class ParseCardDefinitions {
public static void main(final String[] args) throws IOException { public static void main(final String[] args) throws IOException {
final var parser = new JSONParser(); final var parser = new JSONParser();
final var content = Files.readString(Paths.get("client-config\\CardDefinitions.json")); final var content = Files.readString(Paths.get("client-config/CardDefinitions.json"));
final var campaigns = parser.parse(content, new CardsReference()); final var cards = parser.parse(content, new CardsReference());
System.out.println(campaigns); System.out.println(cards);
} }
private static final class CardsReference extends TypeReference<List<JSONCardDefinition>> { private static final class CardsReference extends TypeReference<List<JSONCardDefinition>> {
@@ -0,0 +1,79 @@
package ch.gtache.elderscrollslegends.client;
import ch.gtache.elderscrollslegends.card.CardType;
import com.fasterxml.jackson.core.type.TypeReference;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
public class ParseCards {
public static void main(final String[] args) throws IOException {
final var parser = new JSONParser();
final var content = Files.readString(Paths.get("client-config/CardCollection.json"));
final var cards = parser.parse(content, new CardsReference());
// System.out.println(cards.stream().flatMap(cc -> cc.Cards().stream()
// .map(c -> "(" +
// c.ResourceId().Id() + ",'" +
// c.ResourceId().UniqueName().replace("'", "''") + "'," +
// c.Production() + "," +
// c.Unique() + "," +
// c.IsPremiumOnly() + "," +
// c.CanBeFirstEverSoloPick() + "," +
// c.InvalidArenaPick() + "," +
// c.MaxCopies() + "," +
// "(SELECT id FROM collection WHERE name='" + cc.Name() + "')," +
// "(SELECT id FROM rarity WHERE name='" + c.Rarity().name() + "')," +
// c.SeasonId() + "," +
// "(SELECT id FROM card.type WHERE name='" + c.Definition().name() + "')," +
// "(SELECT id FROM card.source WHERE name='" + c.Source().name() + "'),'" +
// c.ExportCode() + "')")).collect(Collectors.joining(",\n")) + ";");
// System.out.println();
// System.out.println(cards.stream().flatMap(cc -> cc.Cards().stream()
// .flatMap(c -> c.Subtypes().stream().map(s -> "(" +
// c.ResourceId().Id() + "," +
// "(SELECT id FROM subtype WHERE name='" + s.name() + "'))")
// )).collect(Collectors.joining(",\n")) + ";");
final var map = new HashMap<CardType, List<String>>();
cards.forEach(cc -> cc.Cards().forEach(c -> {
final var list = map.computeIfAbsent(c.Definition(), k -> new ArrayList<>());
final var string = switch (c.Definition()) {
case Action -> {
final var attributes = List.of("Betray", "Breakthrough", "Drain", "HasEmpower", "ImmuneToBanish", "ImmuneToSteal", "Deathtouch", "ManaCost", "Prophecy");
yield "(" + c.ResourceId().Id() + "," + attributes.stream().map(c::getAttribute).collect(Collectors.joining(",")) + ")";
}
case Avatar -> {
final var attributes = List.of("BlockDrawsFromRuneBreak", "CannotCounterattack", "DoubleHealing", "ExtraManaPlayRules", "GainHealthFromRuneBreak", "MaxMana", "NoHealing", "PercentDamageTaken", "StartingHealth");
yield "(" + c.ResourceId().Id() + "," + attributes.stream().map(c::getAttribute).collect(Collectors.joining(",")) + ")";
}
case Creature -> {
final var attributes = List.of("Attack", "BoardSplash", "Breakthrough", "CanAttackFriendFace", "CanAttackFriendlies", "CanAttackOtherLane", "CanBeAttackedFromAnyLane", "CanOnlyAttackCreatures", "CannotAttack", "Charge", "Colossal", "Cover", "DamageAvatarOfAttackedCreature", "Drain", "DrainOnBothTurns", "ExaltCost", "Exalted", "FirstStrike", "Freeze", "GuardsBothLanes", "IceFreeze", "IgnoreTaunt", "Immune", "ImmuneMusic", "ImmuneToActionDamage", "ImmuneToBanish", "ImmuneToCover", "ImmuneToEnemyActionTargeting", "ImmuneToEnemyCliffCreatures", "ImmuneToEnemyDragons", "ImmuneToEnemyKeywords", "ImmuneToFreeze", "ImmuneToLethal", "ImmuneToSilence", "ImmuneToSteal", "ImmuneToSupportDamage", "ImmuneToWounded", "Deathtouch", "ManaCost", "MaxHealth", "MoveToAttackOtherLane", "NumAttacksPerTurn", "OblivionGateLevel", "PermFreeze", "PreventOpponentManaPlay", "Prophecy", "Rally", "Reanimated", "Regenerate", "SlayOnBothTurns", "Taunt", "Unstoppable", "Untouchable", "Ward", "WebFreeze", "Wounded");
yield "(" + c.ResourceId().Id() + "," + attributes.stream().map(c::getAttribute).collect(Collectors.joining(",")) + ")";
}
case Double -> {
final var attributes = List.of("Attack", "Betray", "Breakthrough", "Charge", "Drain", "ImmuneToBanish", "ImmuneToSteal", "Deathtouch", "ManaCost", "MaxHealth", "NumAttacksPerTurn", "Prophecy", "Rally", "Regenerate", "Taunt", "Ward");
yield "(" + c.ResourceId().Id() + "," + c.DoubleCardReferences().getFirst().resourceId() + "," + c.DoubleCardReferences().getLast().resourceId() + "," + attributes.stream().map(c::getAttribute).collect(Collectors.joining(",")) + ")";
}
case Item -> {
final var attributes = List.of("AmuletOfMaraFog", "Attack", "Breakthrough", "CanOnlyAttackCreatures", "Charge", "Drain", "ImmuneToBanish", "ImmuneToSilence", "ImmuneToSteal", "Deathtouch", "ManaCost", "MaxHealth", "Mobilize", "Prophecy", "Rally", "Regenerate", "Taunt", "Ward");
yield "(" + c.ResourceId().Id() + "," + attributes.stream().map(c::getAttribute).collect(Collectors.joining(",")) + ")";
}
case Support -> {
final var attributes = List.of("AbilityUsesPerTurn", "ImmuneToBanish", "ImmuneToSteal", "Indestructible", "ManaCost", "TotalUsesAllowed", "UnlimitedUses");
yield "(" + c.ResourceId().Id() + "," + attributes.stream().map(c::getAttribute).collect(Collectors.joining(",")) + ")";
}
};
list.add(string);
}));
map.forEach((s, list) -> System.out.println("\n" + s + "\n" + String.join(",\n", list)));
}
private static final class CardsReference extends TypeReference<List<JSONCardCollection>> {
}
}
@@ -1,4 +1,4 @@
package ch.gtache.elderscrollslegends.service.utils; package ch.gtache.elderscrollslegends.client;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
@@ -6,14 +6,15 @@ import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
public class ParseTitles { public class ParseTitles {
public static void main(final String[] args) throws IOException { public static void main(final String[] args) throws IOException {
final var parser = new JSONParser(); final var parser = new JSONParser();
final var content = Files.readString(Paths.get("client-config\\Titles.json")); final var content = Files.readString(Paths.get("client-config/Titles.json"));
final var campaigns = parser.parse(content, new TitlesReference()); final var titles = parser.parse(content, new TitlesReference());
System.out.println(campaigns); System.out.println(titles.stream().map(t -> "(" + t.ResourceId().Id() + ",'" + t.ResourceId().UniqueName() + "',(SELECT id FROM rarity WHERE name='" + t.Rarity().name() + "')," + t.Hidden() + ")").collect(Collectors.joining(",\n")));
} }
private static final class TitlesReference extends TypeReference<List<JSONTitle>> { private static final class TitlesReference extends TypeReference<List<JSONTitle>> {

Some files were not shown because too many files have changed in this diff Show More