mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-16 08:56:04 +01:00
Funnel all gson calls into helper functions
Add deprecated getGsonFactory for plugin compat until 3.0
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package emu.grasscutter.game.activity;
|
||||
|
||||
import com.esotericsoftware.reflectasm.ConstructorAccess;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.data.DataLoader;
|
||||
import emu.grasscutter.data.GameData;
|
||||
@@ -14,9 +13,6 @@ import emu.grasscutter.server.packet.send.PacketActivityScheduleInfoNotify;
|
||||
import lombok.Getter;
|
||||
import org.reflections.Reflections;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
@@ -45,13 +41,8 @@ public class ActivityManager extends BasePlayerManager {
|
||||
activityWatcherTypeMap.put(typeName.value(), ConstructorAccess.get(item));
|
||||
});
|
||||
|
||||
try (Reader reader = DataLoader.loadReader("ActivityConfig.json")) {
|
||||
List<ActivityConfigItem> activities = Grasscutter.getGsonFactory().fromJson(
|
||||
reader,
|
||||
TypeToken.getParameterized(List.class, ActivityConfigItem.class).getType());
|
||||
|
||||
|
||||
activities.forEach(item -> {
|
||||
try {
|
||||
DataLoader.loadList("ActivityConfig.json", ActivityConfigItem.class).forEach(item -> {
|
||||
var activityData = GameData.getActivityDataMap().get(item.getActivityId());
|
||||
if (activityData == null) {
|
||||
Grasscutter.getLogger().warn("activity {} not exist.", item.getActivityId());
|
||||
|
||||
@@ -13,6 +13,7 @@ import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.game.props.ActionReason;
|
||||
import emu.grasscutter.net.proto.ActivityWatcherInfoOuterClass;
|
||||
import emu.grasscutter.server.packet.send.PacketActivityUpdateWatcherNotify;
|
||||
import emu.grasscutter.utils.Utils;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
@@ -68,7 +69,7 @@ public class PlayerActivityData {
|
||||
}
|
||||
|
||||
public void setDetail(Object detail){
|
||||
this.detail = Grasscutter.getGsonFactory().toJson(detail);
|
||||
this.detail = Utils.jsonEncode(detail);
|
||||
}
|
||||
|
||||
public void takeWatcherReward(int watcherId) {
|
||||
|
||||
@@ -8,6 +8,7 @@ import emu.grasscutter.game.props.ActivityType;
|
||||
import emu.grasscutter.net.proto.ActivityInfoOuterClass;
|
||||
import emu.grasscutter.net.proto.MusicBriefInfoOuterClass;
|
||||
import emu.grasscutter.net.proto.MusicGameActivityDetailInfoOuterClass;
|
||||
import emu.grasscutter.utils.Utils;
|
||||
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -47,8 +48,7 @@ public class MusicGameActivityHandler extends ActivityHandler {
|
||||
playerActivityData.save();
|
||||
}
|
||||
|
||||
return Grasscutter.getGsonFactory().fromJson(playerActivityData.getDetail(),
|
||||
MusicGamePlayerData.class);
|
||||
return Utils.jsonDecode(playerActivityData.getDetail(), MusicGamePlayerData.class);
|
||||
}
|
||||
|
||||
public boolean setMusicGameRecord(PlayerActivityData playerActivityData, MusicGamePlayerData.MusicGameRecord newRecord) {
|
||||
|
||||
@@ -6,8 +6,6 @@ import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.data.common.ItemParamData;
|
||||
import emu.grasscutter.data.excels.CombineData;
|
||||
import emu.grasscutter.game.inventory.GameItem;
|
||||
import emu.grasscutter.game.inventory.Inventory;
|
||||
import emu.grasscutter.game.inventory.ItemType;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.game.props.ActionReason;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
@@ -19,18 +17,12 @@ import emu.grasscutter.server.packet.send.PacketCombineFormulaDataNotify;
|
||||
import emu.grasscutter.server.packet.send.PacketCombineRsp;
|
||||
import emu.grasscutter.server.packet.send.PacketReliquaryDecomposeRsp;
|
||||
import emu.grasscutter.utils.Utils;
|
||||
import it.unimi.dsi.fastutil.Pair;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
public class CombineManger extends BaseGameSystem {
|
||||
private final static Int2ObjectMap<List<Integer>> reliquaryDecomposeData = new Int2ObjectOpenHashMap<>();
|
||||
|
||||
@@ -40,13 +32,10 @@ public class CombineManger extends BaseGameSystem {
|
||||
|
||||
public static void initialize() {
|
||||
// Read the data we need for strongbox.
|
||||
try (Reader fileReader = DataLoader.loadReader("ReliquaryDecompose.json")) {
|
||||
List<ReliquaryDecomposeEntry> decomposeEntries = Grasscutter.getGsonFactory().fromJson(fileReader, TypeToken.getParameterized(Collection.class, ReliquaryDecomposeEntry.class).getType());
|
||||
|
||||
for (ReliquaryDecomposeEntry entry : decomposeEntries) {
|
||||
try {
|
||||
DataLoader.loadList("ReliquaryDecompose.json", ReliquaryDecomposeEntry.class).forEach(entry -> {
|
||||
reliquaryDecomposeData.put(entry.getConfigId(), entry.getItems());
|
||||
}
|
||||
|
||||
});
|
||||
Grasscutter.getLogger().debug("Loaded {} reliquary decompose entries.", reliquaryDecomposeData.size());
|
||||
}
|
||||
catch (Exception ex) {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package emu.grasscutter.game.drop;
|
||||
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.data.DataLoader;
|
||||
import emu.grasscutter.data.GameData;
|
||||
@@ -19,9 +18,6 @@ import emu.grasscutter.utils.Utils;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class DropSystem extends BaseGameSystem {
|
||||
@@ -38,9 +34,9 @@ public class DropSystem extends BaseGameSystem {
|
||||
}
|
||||
|
||||
public synchronized void load() {
|
||||
try (Reader fileReader = DataLoader.loadReader("Drop.json")) {
|
||||
getDropData().clear();
|
||||
List<DropInfo> banners = Grasscutter.getGsonFactory().fromJson(fileReader, TypeToken.getParameterized(Collection.class, DropInfo.class).getType());
|
||||
getDropData().clear();
|
||||
try {
|
||||
List<DropInfo> banners = DataLoader.loadList("Drop.json", DropInfo.class);
|
||||
if (banners.size() > 0) {
|
||||
for (DropInfo di : banners) {
|
||||
getDropData().put(di.getMonsterId(), di.getDropDataList());
|
||||
|
||||
@@ -24,16 +24,11 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
|
||||
import it.unimi.dsi.fastutil.ints.IntSet;
|
||||
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
public class DungeonChallenge extends WorldChallenge {
|
||||
|
||||
/**
|
||||
@@ -46,13 +41,10 @@ public class DungeonChallenge extends WorldChallenge {
|
||||
|
||||
public static void initialize() {
|
||||
// Read the data we need for dungeon rewards drops.
|
||||
try (Reader fileReader = DataLoader.loadReader("DungeonDrop.json")) {
|
||||
List<DungeonDrop> dungeonDropList = Grasscutter.getGsonFactory().fromJson(fileReader, TypeToken.getParameterized(Collection.class, DungeonDrop.class).getType());
|
||||
|
||||
for (DungeonDrop entry : dungeonDropList) {
|
||||
try {
|
||||
DataLoader.loadList("DungeonDrop.json", DungeonDrop.class).forEach(entry -> {
|
||||
dungeonDropData.put(entry.getDungeonId(), entry.getDrops());
|
||||
}
|
||||
|
||||
});
|
||||
Grasscutter.getLogger().debug("Loaded {} dungeon drop data entries.", dungeonDropData.size());
|
||||
}
|
||||
catch (Exception ex) {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package emu.grasscutter.game.expedition;
|
||||
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.data.DataLoader;
|
||||
import emu.grasscutter.server.game.BaseGameSystem;
|
||||
@@ -8,12 +7,6 @@ import emu.grasscutter.server.game.GameServer;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
import static emu.grasscutter.config.Configuration.*;
|
||||
|
||||
import java.io.FileReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class ExpeditionSystem extends BaseGameSystem {
|
||||
@@ -30,9 +23,9 @@ public class ExpeditionSystem extends BaseGameSystem {
|
||||
}
|
||||
|
||||
public synchronized void load() {
|
||||
try (Reader fileReader = DataLoader.loadReader("ExpeditionReward.json")) {
|
||||
getExpeditionRewardDataList().clear();
|
||||
List<ExpeditionRewardInfo> banners = Grasscutter.getGsonFactory().fromJson(fileReader, TypeToken.getParameterized(Collection.class, ExpeditionRewardInfo.class).getType());
|
||||
getExpeditionRewardDataList().clear();
|
||||
try {
|
||||
List<ExpeditionRewardInfo> banners = DataLoader.loadList("ExpeditionReward.json", ExpeditionRewardInfo.class);
|
||||
if (banners.size() > 0) {
|
||||
for (ExpeditionRewardInfo di : banners) {
|
||||
getExpeditionRewardDataList().put(di.getExpId(), di.getExpeditionRewardDataList());
|
||||
|
||||
@@ -3,18 +3,11 @@ package emu.grasscutter.game.gacha;
|
||||
import static emu.grasscutter.config.Configuration.*;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.nio.file.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
import com.sun.nio.file.SensitivityWatchEventModifier;
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.data.DataLoader;
|
||||
@@ -76,9 +69,9 @@ public class GachaSystem extends BaseGameSystem {
|
||||
}
|
||||
|
||||
public synchronized void load() {
|
||||
try (Reader fileReader = DataLoader.loadReader("Banners.json")) {
|
||||
getGachaBanners().clear();
|
||||
List<GachaBanner> banners = Grasscutter.getGsonFactory().fromJson(fileReader, TypeToken.getParameterized(Collection.class, GachaBanner.class).getType());
|
||||
getGachaBanners().clear();
|
||||
try {
|
||||
List<GachaBanner> banners = DataLoader.loadList("Banners.json", GachaBanner.class);
|
||||
if (banners.size() > 0) {
|
||||
for (GachaBanner banner : banners) {
|
||||
getGachaBanners().put(banner.getScheduleId(), banner);
|
||||
|
||||
@@ -31,9 +31,6 @@ import emu.grasscutter.utils.Position;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -42,7 +39,6 @@ import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
import static emu.grasscutter.config.Configuration.GAME_OPTIONS;
|
||||
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
|
||||
public class EnergyManager extends BasePlayerManager {
|
||||
@@ -60,12 +56,10 @@ public class EnergyManager extends BasePlayerManager {
|
||||
|
||||
public static void initialize() {
|
||||
// Read the data we need for monster energy drops.
|
||||
try (Reader fileReader = DataLoader.loadReader("EnergyDrop.json")) {
|
||||
List<EnergyDropEntry> energyDropList = Grasscutter.getGsonFactory().fromJson(fileReader, TypeToken.getParameterized(Collection.class, EnergyDropEntry.class).getType());
|
||||
|
||||
for (EnergyDropEntry entry : energyDropList) {
|
||||
try {
|
||||
DataLoader.loadList("EnergyDrop.json", EnergyDropEntry.class).forEach(entry -> {
|
||||
energyDropData.put(entry.getDropId(), entry.getDropList());
|
||||
}
|
||||
});
|
||||
|
||||
Grasscutter.getLogger().debug("Energy drop data successfully loaded.");
|
||||
}
|
||||
@@ -74,12 +68,10 @@ public class EnergyManager extends BasePlayerManager {
|
||||
}
|
||||
|
||||
// Read the data for particle generation from skills
|
||||
try (Reader fileReader = new InputStreamReader(DataLoader.load("SkillParticleGeneration.json"))) {
|
||||
List<SkillParticleGenerationEntry> skillParticleGenerationList = Grasscutter.getGsonFactory().fromJson(fileReader, TypeToken.getParameterized(Collection.class, SkillParticleGenerationEntry.class).getType());
|
||||
|
||||
for (SkillParticleGenerationEntry entry : skillParticleGenerationList) {
|
||||
try {
|
||||
DataLoader.loadList("SkillParticleGeneration.json", SkillParticleGenerationEntry.class).forEach(entry -> {
|
||||
skillParticleGenerationData.put(entry.getAvatarId(), entry.getAmountList());
|
||||
}
|
||||
});
|
||||
|
||||
Grasscutter.getLogger().debug("Skill particle generation data successfully loaded.");
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package emu.grasscutter.game.shop;
|
||||
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.data.DataLoader;
|
||||
import emu.grasscutter.data.GameData;
|
||||
@@ -14,11 +13,7 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
import static emu.grasscutter.config.Configuration.*;
|
||||
|
||||
import java.io.FileReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
@@ -60,9 +55,9 @@ public class ShopSystem extends BaseGameSystem {
|
||||
}
|
||||
|
||||
private void loadShop() {
|
||||
try (Reader fileReader = DataLoader.loadReader("Shop.json")) {
|
||||
getShopData().clear();
|
||||
List<ShopTable> banners = Grasscutter.getGsonFactory().fromJson(fileReader, TypeToken.getParameterized(Collection.class, ShopTable.class).getType());
|
||||
getShopData().clear();
|
||||
try {
|
||||
List<ShopTable> banners = DataLoader.loadList("Shop.json", ShopTable.class);
|
||||
if (banners.size() > 0) {
|
||||
for (ShopTable shopTable : banners) {
|
||||
for (ShopInfo cost : shopTable.getItems()) {
|
||||
@@ -104,9 +99,9 @@ public class ShopSystem extends BaseGameSystem {
|
||||
}
|
||||
|
||||
private void loadShopChest() {
|
||||
try (Reader fileReader = DataLoader.loadReader("ShopChest.json")) {
|
||||
getShopChestData().clear();
|
||||
List<ShopChestTable> shopChestTableList = Grasscutter.getGsonFactory().fromJson(fileReader, TypeToken.getParameterized(Collection.class, ShopChestTable.class).getType());
|
||||
getShopChestData().clear();
|
||||
try {
|
||||
List<ShopChestTable> shopChestTableList = DataLoader.loadList("ShopChest.json", ShopChestTable.class);
|
||||
if (shopChestTableList.size() > 0) {
|
||||
getShopChestData().addAll(shopChestTableList);
|
||||
Grasscutter.getLogger().debug("ShopChest data successfully loaded.");
|
||||
@@ -119,9 +114,9 @@ public class ShopSystem extends BaseGameSystem {
|
||||
}
|
||||
|
||||
private void loadShopChestBatchUse() {
|
||||
try (Reader fileReader = DataLoader.loadReader("ShopChestBatchUse.json")) {
|
||||
getShopChestBatchUseData().clear();
|
||||
List<ShopChestBatchUseTable> shopChestBatchUseTableList = Grasscutter.getGsonFactory().fromJson(fileReader, TypeToken.getParameterized(Collection.class, ShopChestBatchUseTable.class).getType());
|
||||
getShopChestBatchUseData().clear();
|
||||
try {
|
||||
List<ShopChestBatchUseTable> shopChestBatchUseTableList = DataLoader.loadList("ShopChestBatchUse.json", ShopChestBatchUseTable.class);
|
||||
if (shopChestBatchUseTableList.size() > 0) {
|
||||
getShopChestBatchUseData().addAll(shopChestBatchUseTableList);
|
||||
Grasscutter.getLogger().debug("ShopChestBatchUse data successfully loaded.");
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package emu.grasscutter.game.systems;
|
||||
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.data.DataLoader;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
@@ -16,7 +15,6 @@ import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.experimental.FieldDefaults;
|
||||
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.*;
|
||||
|
||||
@Getter
|
||||
@@ -30,9 +28,8 @@ public class AnnouncementSystem extends BaseGameSystem {
|
||||
}
|
||||
|
||||
private int loadConfig() {
|
||||
try (var fileReader = DataLoader.loadReader("Announcement.json")) {
|
||||
List<AnnounceConfigItem> announceConfigItems = Grasscutter.getGsonFactory().fromJson(fileReader,
|
||||
TypeToken.getParameterized(List.class, AnnounceConfigItem.class).getType());
|
||||
try {
|
||||
List<AnnounceConfigItem> announceConfigItems = DataLoader.loadList("Announcement.json", AnnounceConfigItem.class);
|
||||
|
||||
announceConfigItemMap.clear();
|
||||
announceConfigItems.forEach(i -> announceConfigItemMap.put(i.getTemplateId(), i));
|
||||
|
||||
@@ -7,11 +7,6 @@ import emu.grasscutter.data.excels.TowerScheduleData;
|
||||
import emu.grasscutter.server.game.BaseGameSystem;
|
||||
import emu.grasscutter.server.game.GameServer;
|
||||
|
||||
import static emu.grasscutter.config.Configuration.*;
|
||||
|
||||
import java.io.FileReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -25,8 +20,8 @@ public class TowerSystem extends BaseGameSystem {
|
||||
private TowerScheduleConfig towerScheduleConfig;
|
||||
|
||||
public synchronized void load() {
|
||||
try (Reader fileReader = DataLoader.loadReader("TowerSchedule.json")) {
|
||||
towerScheduleConfig = Grasscutter.getGsonFactory().fromJson(fileReader, TowerScheduleConfig.class);
|
||||
try {
|
||||
towerScheduleConfig = DataLoader.loadClass("TowerSchedule.json", TowerScheduleConfig.class);
|
||||
} catch (Exception e) {
|
||||
Grasscutter.getLogger().error("Unable to load tower schedule config.", e);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package emu.grasscutter.game.world;
|
||||
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.data.DataLoader;
|
||||
import emu.grasscutter.data.GameData;
|
||||
@@ -17,9 +16,6 @@ import emu.grasscutter.scripts.data.SceneMonster;
|
||||
import emu.grasscutter.server.game.BaseGameSystem;
|
||||
import emu.grasscutter.server.game.GameServer;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -42,15 +38,11 @@ public class WorldDataSystem extends BaseGameSystem {
|
||||
// set the special chest first
|
||||
chestInteractHandlerMap.put("SceneObj_Chest_Flora", new BossChestInteractHandler());
|
||||
|
||||
try (Reader reader = DataLoader.loadReader("ChestReward.json")) {
|
||||
List<ChestReward> chestReward = Grasscutter.getGsonFactory().fromJson(
|
||||
reader,
|
||||
TypeToken.getParameterized(List.class, ChestReward.class).getType());
|
||||
|
||||
chestReward.forEach(reward ->
|
||||
reward.getObjNames().forEach(
|
||||
name -> chestInteractHandlerMap.putIfAbsent(name, new NormalChestInteractHandler(reward))));
|
||||
|
||||
try {
|
||||
DataLoader.loadList("ChestReward.json", ChestReward.class)
|
||||
.forEach(reward ->
|
||||
reward.getObjNames().forEach(name ->
|
||||
chestInteractHandlerMap.putIfAbsent(name, new NormalChestInteractHandler(reward))));
|
||||
} catch (Exception e) {
|
||||
Grasscutter.getLogger().error("Unable to load chest reward config.", e);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user