diff --git a/pom.xml b/pom.xml
index 94e643d..5a271e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -51,9 +51,15 @@
spring-boot-starter-validation
- mysql
- mysql-connector-java
- 8.0.33
+ com.h2database
+ h2
+
+
+
+ org.hibernate
+ hibernate-core
+ 6.5.2.Final
+ pom
org.projectlombok
@@ -62,6 +68,12 @@
1.18.28
provided
+
+ org.springframework.boot
+ spring-boot-devtools
+ runtime
+ true
+
org.reflections
reflections
diff --git a/src/main/java/com/alterdekim/hearthhack/component/StartupListener.java b/src/main/java/com/alterdekim/hearthhack/component/StartupListener.java
index 2797909..228ed4e 100644
--- a/src/main/java/com/alterdekim/hearthhack/component/StartupListener.java
+++ b/src/main/java/com/alterdekim/hearthhack/component/StartupListener.java
@@ -5,12 +5,16 @@ import com.alterdekim.hearthhack.config.FS;
import com.alterdekim.hearthhack.config.ServerConfig;
import com.alterdekim.hearthhack.parser.CardsXmlParser;
import com.alterdekim.hearthhack.parser.DBFParser;
+import com.alterdekim.hearthhack.xml.CardsXML;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.jdbc.DataSourceBuilder;
+import org.springframework.context.annotation.Bean;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
+import javax.sql.DataSource;
import java.io.File;
import java.io.IOException;
import java.nio.file.*;
@@ -46,6 +50,8 @@ public class StartupListener {
if( !Path.of(serverConfig.getWorkDir() + File.separator + FS.dbfDir).toFile().exists() ) initDbf();
if( !Path.of(serverConfig.getWorkDir() + File.separator + FS.dataDir).toFile().exists() ) initXml();
dbfConfig.setCards(DBFParser.parseCards(serverConfig.getWorkDir() + File.separator + FS.dbfDir));
+ CardsXML xml = DBFParser.parse(serverConfig.getWorkDir() + File.separator + FS.dataDir + File.separator + "enUS.xml", CardsXML.class);
+ log.info("CardsXML: {}", xml);
} catch (Exception e) {
log.error(e.getMessage());
}
@@ -82,4 +88,14 @@ public class StartupListener {
private boolean makeDir(String dirName) {
return Path.of(serverConfig.getWorkDir() + File.separator + dirName).toFile().mkdirs();
}
+
+ @Bean
+ public DataSource getDataSource() {
+ DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
+ dataSourceBuilder.driverClassName("org.h2.Driver");
+ dataSourceBuilder.url("jdbc:h2:file:"+serverConfig.getWorkDir()+File.separator+FS.dbDir+File.separator+"data.db;DATABASE_TO_UPPER=false;CASE_INSENSITIVE_IDENTIFIERS=TRUE;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;AUTO_RECONNECT=TRUE;MODE=PostgreSQL;");
+ dataSourceBuilder.username("SA");
+ dataSourceBuilder.password("");
+ return dataSourceBuilder.build();
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/alterdekim/hearthhack/entity/User.java b/src/main/java/com/alterdekim/hearthhack/entity/User.java
index ab22ddb..fa2e01d 100644
--- a/src/main/java/com/alterdekim/hearthhack/entity/User.java
+++ b/src/main/java/com/alterdekim/hearthhack/entity/User.java
@@ -38,10 +38,10 @@ public class User {
private List roles = new ArrayList<>();
@Column(nullable = false)
- private Integer dustBalance = 0;
+ private Integer dustBalance = 200;
@Column(nullable = false)
- private Integer goldBalance = 0;
+ private Integer goldBalance = 150;
@Column(nullable = false)
private Long defaultCardBack = 0L;
diff --git a/src/main/java/com/alterdekim/hearthhack/parser/DBFParser.java b/src/main/java/com/alterdekim/hearthhack/parser/DBFParser.java
index c4ece85..01e0ad8 100644
--- a/src/main/java/com/alterdekim/hearthhack/parser/DBFParser.java
+++ b/src/main/java/com/alterdekim/hearthhack/parser/DBFParser.java
@@ -2,11 +2,9 @@ package com.alterdekim.hearthhack.parser;
import com.alterdekim.hearthhack.dbf.CardsDBF;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
-import lombok.extern.slf4j.Slf4j;
-import org.xml.sax.helpers.DefaultHandler;
import java.io.File;
-public class DBFParser extends DefaultHandler {
+public class DBFParser {
public static CardsDBF parseCards(String path) throws Exception {
return parse(path + "/CARD.xml", CardsDBF.class);
diff --git a/src/main/java/com/alterdekim/hearthhack/xml/CardsXML.java b/src/main/java/com/alterdekim/hearthhack/xml/CardsXML.java
new file mode 100644
index 0000000..65b57e6
--- /dev/null
+++ b/src/main/java/com/alterdekim/hearthhack/xml/CardsXML.java
@@ -0,0 +1,18 @@
+package com.alterdekim.hearthhack.xml;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
+import lombok.*;
+
+import java.util.List;
+
+@ToString
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+public class CardsXML {
+ @JsonProperty("Entity")
+ @JacksonXmlElementWrapper(useWrapping = false)
+ private List entities;
+}
diff --git a/src/main/java/com/alterdekim/hearthhack/xml/XMLEntity.java b/src/main/java/com/alterdekim/hearthhack/xml/XMLEntity.java
new file mode 100644
index 0000000..f0bd376
--- /dev/null
+++ b/src/main/java/com/alterdekim/hearthhack/xml/XMLEntity.java
@@ -0,0 +1,46 @@
+package com.alterdekim.hearthhack.xml;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlText;
+import lombok.*;
+
+import java.util.List;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+public class XMLEntity {
+ //@JsonProperty("")
+ @JacksonXmlProperty(isAttribute = true, localName = "CardID")
+ private String cardId;
+
+ @JacksonXmlProperty(isAttribute = true)
+ private Integer version;
+
+ @JsonProperty("Tag")
+ @JacksonXmlElementWrapper(useWrapping = false)
+ private List tags;
+
+ @JacksonXmlProperty(localName = "MasterPower")
+ private XMLMasterPower masterPower;
+
+ @JsonProperty("Power")
+ @JacksonXmlElementWrapper(useWrapping = false)
+ private List power;
+
+ @JsonProperty("ReferencedTag")
+ @JacksonXmlElementWrapper(useWrapping = false)
+ private List refTags;
+
+ @JsonProperty("TriggeredPowerHistoryInfo")
+ @JacksonXmlElementWrapper(useWrapping = false)
+ private List powerHistoryInfos;
+
+ @JsonProperty("EntourageCard")
+ @JacksonXmlElementWrapper(useWrapping = false)
+ private List entourageCards;
+}
\ No newline at end of file
diff --git a/src/main/java/com/alterdekim/hearthhack/xml/XMLEntourageCard.java b/src/main/java/com/alterdekim/hearthhack/xml/XMLEntourageCard.java
new file mode 100644
index 0000000..f0a72ed
--- /dev/null
+++ b/src/main/java/com/alterdekim/hearthhack/xml/XMLEntourageCard.java
@@ -0,0 +1,15 @@
+package com.alterdekim.hearthhack.xml;
+
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import lombok.*;
+
+
+@ToString
+@Setter
+@Getter
+@AllArgsConstructor
+@NoArgsConstructor
+public class XMLEntourageCard {
+ @JacksonXmlProperty(isAttribute = true)
+ private String cardID;
+}
diff --git a/src/main/java/com/alterdekim/hearthhack/xml/XMLMasterPower.java b/src/main/java/com/alterdekim/hearthhack/xml/XMLMasterPower.java
new file mode 100644
index 0000000..a5fea71
--- /dev/null
+++ b/src/main/java/com/alterdekim/hearthhack/xml/XMLMasterPower.java
@@ -0,0 +1,15 @@
+package com.alterdekim.hearthhack.xml;
+
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlText;
+import lombok.*;
+
+
+@ToString
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+public class XMLMasterPower {
+ @JacksonXmlText
+ private String val;
+}
diff --git a/src/main/java/com/alterdekim/hearthhack/xml/XMLPlayRequirement.java b/src/main/java/com/alterdekim/hearthhack/xml/XMLPlayRequirement.java
new file mode 100644
index 0000000..9cae05e
--- /dev/null
+++ b/src/main/java/com/alterdekim/hearthhack/xml/XMLPlayRequirement.java
@@ -0,0 +1,18 @@
+package com.alterdekim.hearthhack.xml;
+
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import lombok.*;
+
+@ToString
+@Setter
+@Getter
+@AllArgsConstructor
+@NoArgsConstructor
+public class XMLPlayRequirement {
+
+ @JacksonXmlProperty(isAttribute = true)
+ private Integer param;
+
+ @JacksonXmlProperty(isAttribute = true)
+ private Integer reqID;
+}
diff --git a/src/main/java/com/alterdekim/hearthhack/xml/XMLPower.java b/src/main/java/com/alterdekim/hearthhack/xml/XMLPower.java
new file mode 100644
index 0000000..36b4cf5
--- /dev/null
+++ b/src/main/java/com/alterdekim/hearthhack/xml/XMLPower.java
@@ -0,0 +1,23 @@
+package com.alterdekim.hearthhack.xml;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import lombok.*;
+
+import java.util.List;
+
+@ToString
+@Setter
+@Getter
+@AllArgsConstructor
+@NoArgsConstructor
+public class XMLPower {
+
+ @JacksonXmlProperty(isAttribute = true)
+ private String definition;
+
+ @JsonProperty("PlayRequirement")
+ @JacksonXmlElementWrapper(useWrapping = false)
+ private List playRequirement;
+}
\ No newline at end of file
diff --git a/src/main/java/com/alterdekim/hearthhack/xml/XMLReferencedTag.java b/src/main/java/com/alterdekim/hearthhack/xml/XMLReferencedTag.java
new file mode 100644
index 0000000..9332978
--- /dev/null
+++ b/src/main/java/com/alterdekim/hearthhack/xml/XMLReferencedTag.java
@@ -0,0 +1,21 @@
+package com.alterdekim.hearthhack.xml;
+
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import lombok.*;
+
+
+@Getter
+@Setter
+@ToString
+@AllArgsConstructor
+@NoArgsConstructor
+public class XMLReferencedTag {
+ @JacksonXmlProperty(isAttribute = true)
+ private Integer enumID;
+ @JacksonXmlProperty(isAttribute = true)
+ private String name;
+ @JacksonXmlProperty(isAttribute = true)
+ private String type;
+ @JacksonXmlProperty(isAttribute = true)
+ private String value;
+}
diff --git a/src/main/java/com/alterdekim/hearthhack/xml/XMLTag.java b/src/main/java/com/alterdekim/hearthhack/xml/XMLTag.java
new file mode 100644
index 0000000..82cac3a
--- /dev/null
+++ b/src/main/java/com/alterdekim/hearthhack/xml/XMLTag.java
@@ -0,0 +1,25 @@
+package com.alterdekim.hearthhack.xml;
+
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlText;
+import lombok.*;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+public class XMLTag {
+ @JacksonXmlProperty(isAttribute = true)
+ private Integer enumID;
+ @JacksonXmlProperty(isAttribute = true)
+ private String type;
+ @JacksonXmlProperty(isAttribute = true)
+ private Integer value;
+ @JacksonXmlText
+ private String val;
+
+ public String getRawValue() {
+ return val != null ? val : String.valueOf(value);
+ }
+}
diff --git a/src/main/java/com/alterdekim/hearthhack/xml/XMLTriggeredPowerHistoryInfo.java b/src/main/java/com/alterdekim/hearthhack/xml/XMLTriggeredPowerHistoryInfo.java
new file mode 100644
index 0000000..ee59f00
--- /dev/null
+++ b/src/main/java/com/alterdekim/hearthhack/xml/XMLTriggeredPowerHistoryInfo.java
@@ -0,0 +1,16 @@
+package com.alterdekim.hearthhack.xml;
+
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import lombok.*;
+
+@Getter
+@Setter
+@ToString
+@AllArgsConstructor
+@NoArgsConstructor
+public class XMLTriggeredPowerHistoryInfo {
+ @JacksonXmlProperty(isAttribute = true)
+ private Integer effectIndex;
+ @JacksonXmlProperty(isAttribute = true)
+ private Boolean showInHistory;
+}