Skip to content

Commit

Permalink
Add Data TSJ loading, replace and update Banners
Browse files Browse the repository at this point in the history
  • Loading branch information
Birdulon committed Nov 24, 2022
1 parent 3596254 commit 1c4d263
Show file tree
Hide file tree
Showing 8 changed files with 43 additions and 96 deletions.
13 changes: 13 additions & 0 deletions src/main/java/emu/grasscutter/data/DataLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import emu.grasscutter.tools.Tools;
import emu.grasscutter.utils.FileUtils;
import emu.grasscutter.utils.JsonUtils;
import emu.grasscutter.utils.TsvUtils;
import lombok.val;

import java.io.FileNotFoundException;
import java.io.IOException;
Expand Down Expand Up @@ -88,6 +90,17 @@ public static <T1,T2> Map<T1,T2> loadMap(String resourcePath, Class<T1> keyType,
}
}

public static <T> List<T> loadTableToList(String resourcePath, Class<T> classType) throws IOException {
val path = FileUtils.getDataPathTsjJsonTsv(resourcePath);
Grasscutter.getLogger().info("Loading data table from: "+path);
return switch (FileUtils.getFileExtension(path)) {
case "json" -> JsonUtils.loadToList(path, classType);
case "tsj" -> TsvUtils.loadTsjToListSetField(path, classType);
case "tsv" -> TsvUtils.loadTsvToListSetField(path, classType);
default -> null;
};
}

public static void checkAllFiles() {
try {
List<Path> filenames = FileUtils.getPathsFromResource("/defaults/data/");
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/emu/grasscutter/data/ResourceLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -152,8 +152,8 @@ protected static void loadFromResource(Class<?> c, ResourceType type, Int2Object
protected static <T> void loadFromResource(Class<T> c, Path filename, Int2ObjectMap map) throws Exception {
val results = switch (FileUtils.getFileExtension(filename)) {
case "json" -> JsonUtils.loadToList(filename, c);
case "tsj" -> TsvUtils.loadTsjToListSetField(c, filename);
case "tsv" -> TsvUtils.loadTsvToListSetField(c, filename);
case "tsj" -> TsvUtils.loadTsjToListSetField(filename, c);
case "tsv" -> TsvUtils.loadTsvToListSetField(filename, c);
default -> null;
};
if (results == null) return;
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/emu/grasscutter/game/gacha/GachaBanner.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public class GachaBanner {
private int[] rateUpItems4 = {};
private int[] rateUpItems5 = {};
@Getter private int[] fallbackItems3 = {11301, 11302, 11306, 12301, 12302, 12305, 13303, 14301, 14302, 14304, 15301, 15302, 15304};
@Getter private int[] fallbackItems4Pool1 = {1014, 1020, 1023, 1024, 1025, 1027, 1031, 1032, 1034, 1036, 1039, 1043, 1044, 1045, 1048, 1053, 1055, 1056, 1064};
@Getter private int[] fallbackItems4Pool1 = {1014, 1020, 1023, 1024, 1025, 1027, 1031, 1032, 1034, 1036, 1039, 1043, 1044, 1045, 1048, 1053, 1055, 1056, 1059, 1064, 1065, 1067, 1068, 1072};
@Getter private int[] fallbackItems4Pool2 = {11401, 11402, 11403, 11405, 12401, 12402, 12403, 12405, 13401, 13407, 14401, 14402, 14403, 14409, 15401, 15402, 15403, 15405};
@Getter private int[] fallbackItems5Pool1 = {1003, 1016, 1042, 1035, 1041};
@Getter private int[] fallbackItems5Pool2 = {11501, 11502, 12501, 12502, 13502, 13505, 14501, 14502, 15501, 15502};
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/emu/grasscutter/game/gacha/GachaSystem.java
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public int getRandom(int[] array) {
public synchronized void load() {
getGachaBanners().clear();
try {
List<GachaBanner> banners = DataLoader.loadList("Banners.json", GachaBanner.class);
List<GachaBanner> banners = DataLoader.loadTableToList("Banners", GachaBanner.class);
if (banners.size() > 0) {
for (GachaBanner banner : banners) {
banner.onLoad();
Expand Down
25 changes: 18 additions & 7 deletions src/main/java/emu/grasscutter/utils/FileUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,19 @@ public final class FileUtils {
: Path.of(scripts);
};

private static final String[] TSJ_JSON_TSV = {"tsj", "json", "tsv"};
private static final Path[] DATA_PATHS = {DATA_USER_PATH, DATA_DEFAULT_PATH};
public static Path getDataPathTsjJsonTsv(String filename) {
val name = getFilenameWithoutExtension(filename);
for (val data_path : DATA_PATHS) {
for (val ext : TSJ_JSON_TSV) {
val path = data_path.resolve(name + "." + ext);
if (Files.exists(path)) return path;
}
}
return DATA_USER_PATH.resolve(name + ".tsj"); // Maybe they want to write to a new file
}

public static Path getDataPath(String path) {
Path userPath = DATA_USER_PATH.resolve(path);
if (Files.exists(userPath)) return userPath;
Expand Down Expand Up @@ -121,13 +134,11 @@ public static Path getExcelPath(String filename) {
// If none exist, return the TSJ path, in case it wants to create a file
public static Path getTsjJsonTsv(Path root, String filename) {
val name = getFilenameWithoutExtension(filename);
val tsj = root.resolve(name + ".tsj");
if (Files.exists(tsj)) return tsj;
val json = root.resolve(name + ".json");
if (Files.exists(json)) return json;
val tsv = root.resolve(name + ".tsv");
if (Files.exists(tsv)) return tsv;
return tsj;
for (val ext : TSJ_JSON_TSV) {
val path = root.resolve(name + "." + ext);
if (Files.exists(path)) return path;
}
return root.resolve(name + ".tsj");
}

public static Path getScriptPath(String path) {
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/emu/grasscutter/utils/TsvUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -402,7 +402,7 @@ private <K,V> Map<K,V> toMap(Class<K> keyClass, Class<V> valueClass, Type valueT
// Arrays are represented as arrayName.0, arrayName.1, etc. columns.
// Maps/POJOs are represented as objName.fieldOneName, objName.fieldTwoName, etc. columns.
// This is currently about 25x as slow as TSJ and Gson parsers, likely due to the tree spam.
public static <T> List<T> loadTsvToListSetField(Class<T> classType, Path filename) {
public static <T> List<T> loadTsvToListSetField(Path filename, Class<T> classType) {
try (val fileReader = Files.newBufferedReader(filename, StandardCharsets.UTF_8)) {
// val fieldMap = getClassFieldMap(classType);
// val constructor = classType.getDeclaredConstructor();
Expand Down Expand Up @@ -453,7 +453,7 @@ public static <T> List<T> loadTsvToListSetField(Class<T> classType, Path filenam

// This uses a hybrid format where columns can hold JSON-encoded values.
// I'll term it TSJ (tab-separated JSON) for now, it has convenient properties.
public static <T> List<T> loadTsjToListSetField(Class<T> classType, Path filename) {
public static <T> List<T> loadTsjToListSetField(Path filename, Class<T> classType) {
try (val fileReader = Files.newBufferedReader(filename, StandardCharsets.UTF_8)) {
val fieldMap = getClassFieldMap(classType);
val constructor = classType.getDeclaredConstructor();
Expand Down
83 changes: 0 additions & 83 deletions src/main/resources/defaults/data/Banners.json

This file was deleted.

6 changes: 6 additions & 0 deletions src/main/resources/defaults/data/Banners.tsj
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
comment gachaType scheduleId bannerType prefabPath titlePath costItemId beginTime endTime sortId rateUpItems5 rateUpItems4 weights5 weights4 fallbackItems5Pool2 fallbackItems5Pool1 fallbackItems4Pool1 eventChance4 eventChance5 costItemAmount10 gachaTimesLimit
Beginner's Banner. Do not change for no reason. 100 803 EVENT GachaShowPanel_A016 UI_GACHA_SHOW_PANEL_A016_TITLE 224 1924992000 9999 [1034] 8 20
Standard 200 893 STANDARD GachaShowPanel_A022 UI_GACHA_SHOW_PANEL_A022_TITLE 224 1924992000 1000 [[1, 75], [73, 150], [90, 10000]] [1006, 1014, 1015, 1020, 1021, 1023, 1024, 1025, 1027, 1031, 1032, 1034, 1036, 1039, 1043, 1044, 1045, 1048, 1053, 1055, 1056, 1059, 1064, 1065, 1067, 1068, 1072]
Character Event Banner 1 301 903 EVENT GachaShowPanel_A106 UI_GACHA_SHOW_PANEL_A071_TITLE 223 1924992000 9998 [1058] [1050, 1059, 1074] [[1, 80], [73, 80], [90, 10000]] []
Character Event Banner 2 400 923 EVENT GachaShowPanel_A107 UI_GACHA_SHOW_PANEL_A037_TITLE 223 1924992000 9998 [1033] [1050, 1059, 1074] [[1, 80], [73, 80], [90, 10000]] []
Weapon Event Banner 302 913 WEAPON GachaShowPanel_A108 UI_GACHA_SHOW_PANEL_A021_TITLE 223 1924992000 9997 [14509, 15507] [11401, 12402, 13401, 14401, 15402] [[1, 100], [62, 100], [73, 7800], [80, 10000]] [[1, 600], [7, 600], [8, 6600], [10, 12600]] [] 75 75

0 comments on commit 1c4d263

Please sign in to comment.