From ad502a8568921452ce57f50da1a25e7fcdc348f6 Mon Sep 17 00:00:00 2001
From: AnimeGitB <AnimeGitB@bigblueball.in>
Date: Thu, 24 Nov 2022 23:48:38 +1030
Subject: [PATCH] Finally enforce deprecation of ancient Banners.json fields
 Also add costItemId10 column so people know it exists, and removeC6FromPool
 column because it's a cool setting nobody knows about.

---
 .../grasscutter/game/gacha/GachaBanner.java   | 50 ++++++++-----------
 .../grasscutter/game/gacha/GachaSystem.java   |  6 ++-
 src/main/resources/defaults/data/Banners.tsj  |  4 +-
 3 files changed, 29 insertions(+), 31 deletions(-)

diff --git a/src/main/java/emu/grasscutter/game/gacha/GachaBanner.java b/src/main/java/emu/grasscutter/game/gacha/GachaBanner.java
index 7dc0d3ce..9122475d 100644
--- a/src/main/java/emu/grasscutter/game/gacha/GachaBanner.java
+++ b/src/main/java/emu/grasscutter/game/gacha/GachaBanner.java
@@ -14,7 +14,7 @@ public class GachaBanner {
     @Getter private int gachaType;
     @Getter private int scheduleId;
     @Getter private String prefabPath;
-    private String previewPrefabPath;
+    @Getter private String previewPrefabPath;
     @Getter private String titlePath;
     private int costItemId = 0;
     private int costItemAmount = 1;
@@ -24,8 +24,8 @@ public class GachaBanner {
     @Getter private int endTime;
     @Getter private int sortId;
     @Getter private int gachaTimesLimit = Integer.MAX_VALUE;
-    private int[] rateUpItems4 = {};
-    private int[] rateUpItems5 = {};
+    @Getter private int[] rateUpItems4 = {};
+    @Getter 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, 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};
@@ -52,9 +52,11 @@ public class GachaBanner {
     @Deprecated private int hardPity = -1;
     @Deprecated private int minItemType = -1;
     @Deprecated private int maxItemType = -1;
+    @Getter private boolean deprecated = false;
 
-    private static void warnDeprecated(String name, String replacement) {
-        Grasscutter.getLogger().error("Deprecated field found in Banners.json: "+name+" was replaced back in early May 2022, use "+replacement+" instead. If you do not remove this key from your config, it will refuse to load in a future Grasscutter version.");
+    private void warnDeprecated(String name, String replacement) {
+        Grasscutter.getLogger().error("Deprecated field found in Banners config: "+name+" was replaced back in early May 2022, use "+replacement+" instead. You MUST remove this field from your config.");
+        this.deprecated = true;
     }
     public void onLoad() {
         if (eventChance != -1)
@@ -73,30 +75,24 @@ public class GachaBanner {
             warnDeprecated("rateUpItems1", "rateUpItems5");
         if (rateUpItems2.length > 0)
             warnDeprecated("rateUpItems2", "rateUpItems4");
-    }
-
-    public String getPreviewPrefabPath() {
-        if (this.previewPrefabPath != null && !this.previewPrefabPath.isEmpty())
-            return this.previewPrefabPath;
-        return "UI_Tab_" + this.prefabPath;
+        if (this.previewPrefabPath != null && this.previewPrefabPath.equals("UI_Tab_" + this.prefabPath))
+            Grasscutter.getLogger().error("Redundant field found in Banners config: previewPrefabPath does not need to be specified if it is identical to prefabPath prefixed with \"UI_Tab_\".");
+        if (this.previewPrefabPath == null || this.previewPrefabPath.isEmpty())
+            this.previewPrefabPath = "UI_Tab_" + this.prefabPath;
+        if (this.costItemId10 == 0)
+            this.costItemId10 = this.costItemId;
     }
 
     public ItemParamData getCost(int numRolls) {
         return switch (numRolls) {
-            case 10 -> new ItemParamData((costItemId10 > 0) ? costItemId10 : getCostItem(), costItemAmount10);
-            default -> new ItemParamData(getCostItem(), costItemAmount * numRolls);
+            case 10 -> new ItemParamData(costItemId10, costItemAmount10);
+            default -> new ItemParamData(costItemId, costItemAmount * numRolls);
         };
     }
 
+    @Deprecated
     public int getCostItem() {
-        return (costItem > 0) ? costItem : costItemId;
-    }
-
-    public int[] getRateUpItems4() {
-        return (rateUpItems2.length > 0) ? rateUpItems2 : rateUpItems4;
-    }
-    public int[] getRateUpItems5() {
-        return (rateUpItems1.length > 0) ? rateUpItems1 : rateUpItems5;
+        return costItemId;
     }
 
     public boolean hasEpitomized() {
@@ -120,7 +116,7 @@ public class GachaBanner {
     public int getEventChance(int rarity) {
         return switch (rarity) {
             case 4 -> eventChance4;
-            default -> (eventChance > -1) ? eventChance : eventChance5;
+            default -> eventChance5;
         };
     }
 
@@ -138,8 +134,6 @@ public class GachaBanner {
                         + "/gacha/details?s=" + sessionKey + "&scheduleId=" + scheduleId;
 
         // Grasscutter.getLogger().info("record = " + record);
-        ItemParamData costItem1 = this.getCost(1);
-        ItemParamData costItem10 = this.getCost(10);
         PlayerGachaBannerInfo gachaInfo = player.getGachaInfo().getBannerInfo(this);
         int leftGachaTimes = switch (gachaTimesLimit) {
             case Integer.MAX_VALUE -> Integer.MAX_VALUE;
@@ -150,10 +144,10 @@ public class GachaBanner {
                 .setScheduleId(this.getScheduleId())
                 .setBeginTime(this.getBeginTime())
                 .setEndTime(this.getEndTime())
-                .setCostItemId(costItem1.getId())
-                .setCostItemNum(costItem1.getCount())
-                .setTenCostItemId(costItem10.getId())
-                .setTenCostItemNum(costItem10.getCount())
+                .setCostItemId(this.costItemId)
+                .setCostItemNum(this.costItemAmount)
+                .setTenCostItemId(this.costItemId10)
+                .setTenCostItemNum(this.costItemAmount10)
                 .setGachaPrefabPath(this.getPrefabPath())
                 .setGachaPreviewPrefabPath(this.getPreviewPrefabPath())
                 .setGachaProbUrl(details)
diff --git a/src/main/java/emu/grasscutter/game/gacha/GachaSystem.java b/src/main/java/emu/grasscutter/game/gacha/GachaSystem.java
index f775570a..02805612 100644
--- a/src/main/java/emu/grasscutter/game/gacha/GachaSystem.java
+++ b/src/main/java/emu/grasscutter/game/gacha/GachaSystem.java
@@ -74,7 +74,11 @@ public class GachaSystem extends BaseGameSystem {
             if (banners.size() > 0) {
                 for (GachaBanner banner : banners) {
                     banner.onLoad();
-                    getGachaBanners().put(banner.getScheduleId(), banner);
+                    if (banner.isDeprecated()) {
+                        Grasscutter.getLogger().error("A Banner has not been loaded because it contains one or more deprecated fields. Remove the fields mentioned above and reload.");
+                    } else {
+                        getGachaBanners().put(banner.getScheduleId(), banner);
+                    }
                 }
                 Grasscutter.getLogger().debug("Banners successfully loaded.");
             } else {
diff --git a/src/main/resources/defaults/data/Banners.tsj b/src/main/resources/defaults/data/Banners.tsj
index a619c247..35dc84ce 100644
--- a/src/main/resources/defaults/data/Banners.tsj
+++ b/src/main/resources/defaults/data/Banners.tsj
@@ -1,5 +1,5 @@
-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
+comment	gachaType	scheduleId	bannerType	prefabPath	titlePath	costItemId	beginTime	endTime	sortId	rateUpItems5	rateUpItems4	weights5	weights4	fallbackItems5Pool2	fallbackItems5Pool1	fallbackItems4Pool1	eventChance4	eventChance5	costItemId10	costItemAmount10	gachaTimesLimit	removeC6FromPool
+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]]		[]
-- 
GitLab