diff --git a/src/main/java/emu/grasscutter/data/excels/BattlePassMissionData.java b/src/main/java/emu/grasscutter/data/excels/BattlePassMissionData.java index 15a65bcd5..979d1f2ba 100644 --- a/src/main/java/emu/grasscutter/data/excels/BattlePassMissionData.java +++ b/src/main/java/emu/grasscutter/data/excels/BattlePassMissionData.java @@ -21,46 +21,46 @@ public class BattlePassMissionData extends GameResource { private int progress; private TriggerConfig triggerConfig; private BattlePassMissionRefreshType refreshType; - + private transient Set mainParams; - + public WatcherTriggerType getTriggerType() { - return this.getTriggerConfig().getTriggerType(); - } - - public boolean isCycleRefresh() { - return getRefreshType() == null || getRefreshType() == BattlePassMissionRefreshType.BATTLE_PASS_MISSION_REFRESH_CYCLE_CROSS_SCHEDULE; - } - - public boolean isValidRefreshType() { - return getRefreshType() == null || - getRefreshType() == BattlePassMissionRefreshType.BATTLE_PASS_MISSION_REFRESH_CYCLE_CROSS_SCHEDULE || - getScheduleId() == 2701; + return this.getTriggerConfig().getTriggerType(); } - + + public boolean isCycleRefresh() { + return getRefreshType() == null || getRefreshType() == BattlePassMissionRefreshType.BATTLE_PASS_MISSION_REFRESH_CYCLE_CROSS_SCHEDULE; + } + + public boolean isValidRefreshType() { + return getRefreshType() == null || + getRefreshType() == BattlePassMissionRefreshType.BATTLE_PASS_MISSION_REFRESH_CYCLE_CROSS_SCHEDULE || + getScheduleId() == 2701; + } + @Override public void onLoad() { - if (this.getTriggerConfig() != null && getTriggerConfig().getParamList()[0].length() > 0) { - this.mainParams = Arrays.stream(getTriggerConfig().getParamList()[0].split("[:;,]")).map(Integer::parseInt).collect(Collectors.toSet()); - } + if (this.getTriggerConfig() != null && getTriggerConfig().getParamList()[0].length() > 0) { + this.mainParams = Arrays.stream(getTriggerConfig().getParamList()[0].split("[:;,]")).map(Integer::parseInt).collect(Collectors.toSet()); + } } - + @Getter public static class TriggerConfig { - private WatcherTriggerType triggerType; - private String[] paramList; + private WatcherTriggerType triggerType; + private String[] paramList; } - + public emu.grasscutter.net.proto.BattlePassMissionOuterClass.BattlePassMission toProto() { - var protoBuilder = emu.grasscutter.net.proto.BattlePassMissionOuterClass.BattlePassMission.newBuilder(); - - protoBuilder - .setMissionId(getId()) - .setTotalProgress(this.getProgress()) - .setRewardBattlePassPoint(this.getAddPoint()) - .setMissionStatus(MissionStatus.MISSION_STATUS_UNFINISHED) - .setMissionType(this.getRefreshType() == null ? 0 : this.getRefreshType().getValue()); - - return protoBuilder.build(); - } + var protoBuilder = emu.grasscutter.net.proto.BattlePassMissionOuterClass.BattlePassMission.newBuilder(); + + protoBuilder + .setMissionId(getId()) + .setTotalProgress(this.getProgress()) + .setRewardBattlePassPoint(this.getAddPoint()) + .setMissionStatus(MissionStatus.MISSION_STATUS_UNFINISHED) + .setMissionType(this.getRefreshType() == null ? 0 : this.getRefreshType().getValue()); + + return protoBuilder.build(); + } } diff --git a/src/main/java/emu/grasscutter/data/excels/DungeonData.java b/src/main/java/emu/grasscutter/data/excels/DungeonData.java index 475672268..c52cdc16b 100644 --- a/src/main/java/emu/grasscutter/data/excels/DungeonData.java +++ b/src/main/java/emu/grasscutter/data/excels/DungeonData.java @@ -8,23 +8,23 @@ import lombok.Getter; @ResourceType(name = "DungeonExcelConfigData.json") public class DungeonData extends GameResource { @Getter(onMethod = @__(@Override)) - private int id; + private int id; @Getter private int sceneId; @Getter private int showLevel; - private int passRewardPreviewID; - private String involveType; // TODO enum - - private RewardPreviewData previewData; + private int passRewardPreviewID; + private String involveType; // TODO enum + + private RewardPreviewData previewData; @Getter private int statueCostID; @Getter private int statueCostCount; public RewardPreviewData getRewardPreview() {return previewData;} - @Override - public void onLoad() { - if (this.passRewardPreviewID > 0) { - this.previewData = GameData.getRewardPreviewDataMap().get(this.passRewardPreviewID); - } - } + @Override + public void onLoad() { + if (this.passRewardPreviewID > 0) { + this.previewData = GameData.getRewardPreviewDataMap().get(this.passRewardPreviewID); + } + } } diff --git a/src/main/java/emu/grasscutter/data/excels/MonsterData.java b/src/main/java/emu/grasscutter/data/excels/MonsterData.java index de31c3381..08ce10988 100644 --- a/src/main/java/emu/grasscutter/data/excels/MonsterData.java +++ b/src/main/java/emu/grasscutter/data/excels/MonsterData.java @@ -56,7 +56,7 @@ public class MonsterData extends GameResource { private List propGrowCurves; private long nameTextMapHash; private int campID; - + // Transient private int weaponId; private MonsterDescribeData describeData; @@ -78,23 +78,23 @@ public class MonsterData extends GameResource { }; } - @Override - public void onLoad() { - this.describeData = GameData.getMonsterDescribeDataMap().get(this.getDescribeId()); - - for (int id : this.equips) { - if (id == 0) { - continue; - } - GadgetData gadget = GameData.getGadgetDataMap().get(id); - if (gadget == null) { - continue; - } - if (gadget.getItemJsonName().equals("Default_MonsterWeapon")) { - this.weaponId = id; - } - } - } + @Override + public void onLoad() { + this.describeData = GameData.getMonsterDescribeDataMap().get(this.getDescribeId()); + + for (int id : this.equips) { + if (id == 0) { + continue; + } + GadgetData gadget = GameData.getGadgetDataMap().get(id); + if (gadget == null) { + continue; + } + if (gadget.getItemJsonName().equals("Default_MonsterWeapon")) { + this.weaponId = id; + } + } + } @Getter public class HpDrops { diff --git a/src/main/java/emu/grasscutter/data/excels/RewardPreviewData.java b/src/main/java/emu/grasscutter/data/excels/RewardPreviewData.java index 866bf0379..81271cc43 100644 --- a/src/main/java/emu/grasscutter/data/excels/RewardPreviewData.java +++ b/src/main/java/emu/grasscutter/data/excels/RewardPreviewData.java @@ -13,23 +13,23 @@ import emu.grasscutter.data.common.ItemParamStringData; @ResourceType(name = "RewardPreviewExcelConfigData.json", loadPriority = LoadPriority.HIGH) public class RewardPreviewData extends GameResource { @Getter(onMethod = @__(@Override)) - private int id; - private ItemParamStringData[] previewItems; - private ItemParamData[] previewItemsArray; + private int id; + private ItemParamStringData[] previewItems; + private ItemParamData[] previewItemsArray; - public ItemParamData[] getPreviewItems() { - return previewItemsArray; - } + public ItemParamData[] getPreviewItems() { + return previewItemsArray; + } - @Override - public void onLoad() { - if (this.previewItems != null && this.previewItems.length > 0) { - this.previewItemsArray = Arrays.stream(this.previewItems) - .filter(d -> d.getId() > 0 && d.getCount() != null && !d.getCount().isEmpty()) - .map(ItemParamStringData::toItemParamData) - .toArray(size -> new ItemParamData[size]); - } else { - this.previewItemsArray = new ItemParamData[0]; - } - } + @Override + public void onLoad() { + if (this.previewItems != null && this.previewItems.length > 0) { + this.previewItemsArray = Arrays.stream(this.previewItems) + .filter(d -> d.getId() > 0 && d.getCount() != null && !d.getCount().isEmpty()) + .map(ItemParamStringData::toItemParamData) + .toArray(size -> new ItemParamData[size]); + } else { + this.previewItemsArray = new ItemParamData[0]; + } + } } diff --git a/src/main/java/emu/grasscutter/game/props/FightProperty.java b/src/main/java/emu/grasscutter/game/props/FightProperty.java index 599b15640..32c45f1bb 100644 --- a/src/main/java/emu/grasscutter/game/props/FightProperty.java +++ b/src/main/java/emu/grasscutter/game/props/FightProperty.java @@ -16,131 +16,131 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import lombok.Getter; public enum FightProperty { - FIGHT_PROP_NONE(0), - FIGHT_PROP_BASE_HP(1), - FIGHT_PROP_HP(2), - FIGHT_PROP_HP_PERCENT(3), - FIGHT_PROP_BASE_ATTACK(4), - FIGHT_PROP_ATTACK(5), - FIGHT_PROP_ATTACK_PERCENT(6), - FIGHT_PROP_BASE_DEFENSE(7), - FIGHT_PROP_DEFENSE(8), - FIGHT_PROP_DEFENSE_PERCENT(9), - FIGHT_PROP_BASE_SPEED(10), - FIGHT_PROP_SPEED_PERCENT(11), - FIGHT_PROP_HP_MP_PERCENT(12), - FIGHT_PROP_ATTACK_MP_PERCENT(13), - FIGHT_PROP_CRITICAL(20), - FIGHT_PROP_ANTI_CRITICAL(21), - FIGHT_PROP_CRITICAL_HURT(22), - FIGHT_PROP_CHARGE_EFFICIENCY(23), - FIGHT_PROP_ADD_HURT(24), - FIGHT_PROP_SUB_HURT(25), - FIGHT_PROP_HEAL_ADD(26), - FIGHT_PROP_HEALED_ADD(27), - FIGHT_PROP_ELEMENT_MASTERY(28), - FIGHT_PROP_PHYSICAL_SUB_HURT(29), - FIGHT_PROP_PHYSICAL_ADD_HURT(30), - FIGHT_PROP_DEFENCE_IGNORE_RATIO(31), - FIGHT_PROP_DEFENCE_IGNORE_DELTA(32), - FIGHT_PROP_FIRE_ADD_HURT(40), - FIGHT_PROP_ELEC_ADD_HURT(41), - FIGHT_PROP_WATER_ADD_HURT(42), - FIGHT_PROP_GRASS_ADD_HURT(43), - FIGHT_PROP_WIND_ADD_HURT(44), - FIGHT_PROP_ROCK_ADD_HURT(45), - FIGHT_PROP_ICE_ADD_HURT(46), - FIGHT_PROP_HIT_HEAD_ADD_HURT(47), - FIGHT_PROP_FIRE_SUB_HURT(50), - FIGHT_PROP_ELEC_SUB_HURT(51), - FIGHT_PROP_WATER_SUB_HURT(52), - FIGHT_PROP_GRASS_SUB_HURT(53), - FIGHT_PROP_WIND_SUB_HURT(54), - FIGHT_PROP_ROCK_SUB_HURT(55), - FIGHT_PROP_ICE_SUB_HURT(56), - FIGHT_PROP_EFFECT_HIT(60), - FIGHT_PROP_EFFECT_RESIST(61), - FIGHT_PROP_FREEZE_RESIST(62), - FIGHT_PROP_TORPOR_RESIST(63), - FIGHT_PROP_DIZZY_RESIST(64), - FIGHT_PROP_FREEZE_SHORTEN(65), - FIGHT_PROP_TORPOR_SHORTEN(66), - FIGHT_PROP_DIZZY_SHORTEN(67), - FIGHT_PROP_MAX_FIRE_ENERGY(70), - FIGHT_PROP_MAX_ELEC_ENERGY(71), - FIGHT_PROP_MAX_WATER_ENERGY(72), - FIGHT_PROP_MAX_GRASS_ENERGY(73), - FIGHT_PROP_MAX_WIND_ENERGY(74), - FIGHT_PROP_MAX_ICE_ENERGY(75), - FIGHT_PROP_MAX_ROCK_ENERGY(76), - FIGHT_PROP_SKILL_CD_MINUS_RATIO(80), - FIGHT_PROP_SHIELD_COST_MINUS_RATIO(81), - FIGHT_PROP_CUR_FIRE_ENERGY(1000), - FIGHT_PROP_CUR_ELEC_ENERGY(1001), - FIGHT_PROP_CUR_WATER_ENERGY(1002), - FIGHT_PROP_CUR_GRASS_ENERGY(1003), - FIGHT_PROP_CUR_WIND_ENERGY(1004), - FIGHT_PROP_CUR_ICE_ENERGY(1005), - FIGHT_PROP_CUR_ROCK_ENERGY(1006), - FIGHT_PROP_CUR_HP(1010), - FIGHT_PROP_MAX_HP(2000), - FIGHT_PROP_CUR_ATTACK(2001), - FIGHT_PROP_CUR_DEFENSE(2002), - FIGHT_PROP_CUR_SPEED(2003), - FIGHT_PROP_NONEXTRA_ATTACK(3000), - FIGHT_PROP_NONEXTRA_DEFENSE(3001), - FIGHT_PROP_NONEXTRA_CRITICAL(3002), - FIGHT_PROP_NONEXTRA_ANTI_CRITICAL(3003), - FIGHT_PROP_NONEXTRA_CRITICAL_HURT(3004), - FIGHT_PROP_NONEXTRA_CHARGE_EFFICIENCY(3005), - FIGHT_PROP_NONEXTRA_ELEMENT_MASTERY(3006), - FIGHT_PROP_NONEXTRA_PHYSICAL_SUB_HURT(3007), - FIGHT_PROP_NONEXTRA_FIRE_ADD_HURT(3008), - FIGHT_PROP_NONEXTRA_ELEC_ADD_HURT(3009), - FIGHT_PROP_NONEXTRA_WATER_ADD_HURT(3010), - FIGHT_PROP_NONEXTRA_GRASS_ADD_HURT(3011), - FIGHT_PROP_NONEXTRA_WIND_ADD_HURT(3012), - FIGHT_PROP_NONEXTRA_ROCK_ADD_HURT(3013), - FIGHT_PROP_NONEXTRA_ICE_ADD_HURT(3014), - FIGHT_PROP_NONEXTRA_FIRE_SUB_HURT(3015), - FIGHT_PROP_NONEXTRA_ELEC_SUB_HURT(3016), - FIGHT_PROP_NONEXTRA_WATER_SUB_HURT(3017), - FIGHT_PROP_NONEXTRA_GRASS_SUB_HURT(3018), - FIGHT_PROP_NONEXTRA_WIND_SUB_HURT(3019), - FIGHT_PROP_NONEXTRA_ROCK_SUB_HURT(3020), - FIGHT_PROP_NONEXTRA_ICE_SUB_HURT(3021), - FIGHT_PROP_NONEXTRA_SKILL_CD_MINUS_RATIO(3022), - FIGHT_PROP_NONEXTRA_SHIELD_COST_MINUS_RATIO(3023), - FIGHT_PROP_NONEXTRA_PHYSICAL_ADD_HURT(3024); - - private final int id; - private static final Int2ObjectMap map = new Int2ObjectOpenHashMap<>(); - private static final Map stringMap = new HashMap<>(); - - public static final int[] fightProps = new int[] {1, 4, 7, 20, 21, 22, 23, 26, 27, 28, 29, 30, 40, 41, 42, 43, 44, 45, 46, 50, 51, 52, 53, 54, 55, 56, 2000, 2001, 2002, 2003, 1010}; - - static { - Stream.of(values()).forEach(e -> { - map.put(e.getId(), e); - stringMap.put(e.name(), e); - }); - } - - private FightProperty(int id) { - this.id = id; - } + FIGHT_PROP_NONE(0), + FIGHT_PROP_BASE_HP(1), + FIGHT_PROP_HP(2), + FIGHT_PROP_HP_PERCENT(3), + FIGHT_PROP_BASE_ATTACK(4), + FIGHT_PROP_ATTACK(5), + FIGHT_PROP_ATTACK_PERCENT(6), + FIGHT_PROP_BASE_DEFENSE(7), + FIGHT_PROP_DEFENSE(8), + FIGHT_PROP_DEFENSE_PERCENT(9), + FIGHT_PROP_BASE_SPEED(10), + FIGHT_PROP_SPEED_PERCENT(11), + FIGHT_PROP_HP_MP_PERCENT(12), + FIGHT_PROP_ATTACK_MP_PERCENT(13), + FIGHT_PROP_CRITICAL(20), + FIGHT_PROP_ANTI_CRITICAL(21), + FIGHT_PROP_CRITICAL_HURT(22), + FIGHT_PROP_CHARGE_EFFICIENCY(23), + FIGHT_PROP_ADD_HURT(24), + FIGHT_PROP_SUB_HURT(25), + FIGHT_PROP_HEAL_ADD(26), + FIGHT_PROP_HEALED_ADD(27), + FIGHT_PROP_ELEMENT_MASTERY(28), + FIGHT_PROP_PHYSICAL_SUB_HURT(29), + FIGHT_PROP_PHYSICAL_ADD_HURT(30), + FIGHT_PROP_DEFENCE_IGNORE_RATIO(31), + FIGHT_PROP_DEFENCE_IGNORE_DELTA(32), + FIGHT_PROP_FIRE_ADD_HURT(40), + FIGHT_PROP_ELEC_ADD_HURT(41), + FIGHT_PROP_WATER_ADD_HURT(42), + FIGHT_PROP_GRASS_ADD_HURT(43), + FIGHT_PROP_WIND_ADD_HURT(44), + FIGHT_PROP_ROCK_ADD_HURT(45), + FIGHT_PROP_ICE_ADD_HURT(46), + FIGHT_PROP_HIT_HEAD_ADD_HURT(47), + FIGHT_PROP_FIRE_SUB_HURT(50), + FIGHT_PROP_ELEC_SUB_HURT(51), + FIGHT_PROP_WATER_SUB_HURT(52), + FIGHT_PROP_GRASS_SUB_HURT(53), + FIGHT_PROP_WIND_SUB_HURT(54), + FIGHT_PROP_ROCK_SUB_HURT(55), + FIGHT_PROP_ICE_SUB_HURT(56), + FIGHT_PROP_EFFECT_HIT(60), + FIGHT_PROP_EFFECT_RESIST(61), + FIGHT_PROP_FREEZE_RESIST(62), + FIGHT_PROP_TORPOR_RESIST(63), + FIGHT_PROP_DIZZY_RESIST(64), + FIGHT_PROP_FREEZE_SHORTEN(65), + FIGHT_PROP_TORPOR_SHORTEN(66), + FIGHT_PROP_DIZZY_SHORTEN(67), + FIGHT_PROP_MAX_FIRE_ENERGY(70), + FIGHT_PROP_MAX_ELEC_ENERGY(71), + FIGHT_PROP_MAX_WATER_ENERGY(72), + FIGHT_PROP_MAX_GRASS_ENERGY(73), + FIGHT_PROP_MAX_WIND_ENERGY(74), + FIGHT_PROP_MAX_ICE_ENERGY(75), + FIGHT_PROP_MAX_ROCK_ENERGY(76), + FIGHT_PROP_SKILL_CD_MINUS_RATIO(80), + FIGHT_PROP_SHIELD_COST_MINUS_RATIO(81), + FIGHT_PROP_CUR_FIRE_ENERGY(1000), + FIGHT_PROP_CUR_ELEC_ENERGY(1001), + FIGHT_PROP_CUR_WATER_ENERGY(1002), + FIGHT_PROP_CUR_GRASS_ENERGY(1003), + FIGHT_PROP_CUR_WIND_ENERGY(1004), + FIGHT_PROP_CUR_ICE_ENERGY(1005), + FIGHT_PROP_CUR_ROCK_ENERGY(1006), + FIGHT_PROP_CUR_HP(1010), + FIGHT_PROP_MAX_HP(2000), + FIGHT_PROP_CUR_ATTACK(2001), + FIGHT_PROP_CUR_DEFENSE(2002), + FIGHT_PROP_CUR_SPEED(2003), + FIGHT_PROP_NONEXTRA_ATTACK(3000), + FIGHT_PROP_NONEXTRA_DEFENSE(3001), + FIGHT_PROP_NONEXTRA_CRITICAL(3002), + FIGHT_PROP_NONEXTRA_ANTI_CRITICAL(3003), + FIGHT_PROP_NONEXTRA_CRITICAL_HURT(3004), + FIGHT_PROP_NONEXTRA_CHARGE_EFFICIENCY(3005), + FIGHT_PROP_NONEXTRA_ELEMENT_MASTERY(3006), + FIGHT_PROP_NONEXTRA_PHYSICAL_SUB_HURT(3007), + FIGHT_PROP_NONEXTRA_FIRE_ADD_HURT(3008), + FIGHT_PROP_NONEXTRA_ELEC_ADD_HURT(3009), + FIGHT_PROP_NONEXTRA_WATER_ADD_HURT(3010), + FIGHT_PROP_NONEXTRA_GRASS_ADD_HURT(3011), + FIGHT_PROP_NONEXTRA_WIND_ADD_HURT(3012), + FIGHT_PROP_NONEXTRA_ROCK_ADD_HURT(3013), + FIGHT_PROP_NONEXTRA_ICE_ADD_HURT(3014), + FIGHT_PROP_NONEXTRA_FIRE_SUB_HURT(3015), + FIGHT_PROP_NONEXTRA_ELEC_SUB_HURT(3016), + FIGHT_PROP_NONEXTRA_WATER_SUB_HURT(3017), + FIGHT_PROP_NONEXTRA_GRASS_SUB_HURT(3018), + FIGHT_PROP_NONEXTRA_WIND_SUB_HURT(3019), + FIGHT_PROP_NONEXTRA_ROCK_SUB_HURT(3020), + FIGHT_PROP_NONEXTRA_ICE_SUB_HURT(3021), + FIGHT_PROP_NONEXTRA_SKILL_CD_MINUS_RATIO(3022), + FIGHT_PROP_NONEXTRA_SHIELD_COST_MINUS_RATIO(3023), + FIGHT_PROP_NONEXTRA_PHYSICAL_ADD_HURT(3024); - public int getId() { - return id; - } - - public static FightProperty getPropById(int value) { - return map.getOrDefault(value, FIGHT_PROP_NONE); - } - - public static FightProperty getPropByName(String name) { - return stringMap.getOrDefault(name, FIGHT_PROP_NONE); - } + private final int id; + private static final Int2ObjectMap map = new Int2ObjectOpenHashMap<>(); + private static final Map stringMap = new HashMap<>(); + + public static final int[] fightProps = new int[] {1, 4, 7, 20, 21, 22, 23, 26, 27, 28, 29, 30, 40, 41, 42, 43, 44, 45, 46, 50, 51, 52, 53, 54, 55, 56, 2000, 2001, 2002, 2003, 1010}; + + static { + Stream.of(values()).forEach(e -> { + map.put(e.getId(), e); + stringMap.put(e.name(), e); + }); + } + + private FightProperty(int id) { + this.id = id; + } + + public int getId() { + return id; + } + + public static FightProperty getPropById(int value) { + return map.getOrDefault(value, FIGHT_PROP_NONE); + } + + public static FightProperty getPropByName(String name) { + return stringMap.getOrDefault(name, FIGHT_PROP_NONE); + } public static FightProperty getPropByShortName(String name) { return shortNameMap.getOrDefault(name, FIGHT_PROP_NONE); @@ -153,28 +153,28 @@ public enum FightProperty { // This was originally for relic properties so some names might not be applicable for e.g. setstats private static final Map shortNameMap = Map.ofEntries( // Normal relic stats - entry("hp", FIGHT_PROP_HP), - entry("atk", FIGHT_PROP_ATTACK), - entry("def", FIGHT_PROP_DEFENSE), - entry("hp%", FIGHT_PROP_HP_PERCENT), - entry("atk%", FIGHT_PROP_ATTACK_PERCENT), - entry("def%", FIGHT_PROP_DEFENSE_PERCENT), - entry("em", FIGHT_PROP_ELEMENT_MASTERY), - entry("er", FIGHT_PROP_CHARGE_EFFICIENCY), - entry("hb", FIGHT_PROP_HEAL_ADD), + entry("hp", FIGHT_PROP_HP), + entry("atk", FIGHT_PROP_ATTACK), + entry("def", FIGHT_PROP_DEFENSE), + entry("hp%", FIGHT_PROP_HP_PERCENT), + entry("atk%", FIGHT_PROP_ATTACK_PERCENT), + entry("def%", FIGHT_PROP_DEFENSE_PERCENT), + entry("em", FIGHT_PROP_ELEMENT_MASTERY), + entry("er", FIGHT_PROP_CHARGE_EFFICIENCY), + entry("hb", FIGHT_PROP_HEAL_ADD), entry("heal", FIGHT_PROP_HEAL_ADD), - entry("cd", FIGHT_PROP_CRITICAL_HURT), - entry("cdmg", FIGHT_PROP_CRITICAL_HURT), - entry("cr", FIGHT_PROP_CRITICAL), - entry("crate", FIGHT_PROP_CRITICAL), - entry("phys%", FIGHT_PROP_PHYSICAL_ADD_HURT), - entry("dendro%", FIGHT_PROP_GRASS_ADD_HURT), - entry("geo%", FIGHT_PROP_ROCK_ADD_HURT), - entry("anemo%", FIGHT_PROP_WIND_ADD_HURT), - entry("hydro%", FIGHT_PROP_WATER_ADD_HURT), - entry("cryo%", FIGHT_PROP_ICE_ADD_HURT), - entry("electro%", FIGHT_PROP_ELEC_ADD_HURT), - entry("pyro%", FIGHT_PROP_FIRE_ADD_HURT), + entry("cd", FIGHT_PROP_CRITICAL_HURT), + entry("cdmg", FIGHT_PROP_CRITICAL_HURT), + entry("cr", FIGHT_PROP_CRITICAL), + entry("crate", FIGHT_PROP_CRITICAL), + entry("phys%", FIGHT_PROP_PHYSICAL_ADD_HURT), + entry("dendro%", FIGHT_PROP_GRASS_ADD_HURT), + entry("geo%", FIGHT_PROP_ROCK_ADD_HURT), + entry("anemo%", FIGHT_PROP_WIND_ADD_HURT), + entry("hydro%", FIGHT_PROP_WATER_ADD_HURT), + entry("cryo%", FIGHT_PROP_ICE_ADD_HURT), + entry("electro%", FIGHT_PROP_ELEC_ADD_HURT), + entry("pyro%", FIGHT_PROP_FIRE_ADD_HURT), // Other stats entry("maxhp", FIGHT_PROP_MAX_HP), entry("dmg", FIGHT_PROP_ADD_HURT), // This seems to get reset after attacks @@ -191,7 +191,7 @@ public enum FightProperty { entry("reshydro", FIGHT_PROP_WATER_SUB_HURT), entry("respyro", FIGHT_PROP_FIRE_SUB_HURT), entry("resphys", FIGHT_PROP_PHYSICAL_SUB_HURT) - ); + ); private static final List flatProps = Arrays.asList( FIGHT_PROP_BASE_HP, FIGHT_PROP_HP, FIGHT_PROP_BASE_ATTACK, FIGHT_PROP_ATTACK, FIGHT_PROP_BASE_DEFENSE, diff --git a/src/main/java/emu/grasscutter/task/TaskMap.java b/src/main/java/emu/grasscutter/task/TaskMap.java index 27e83c53f..99201d981 100644 --- a/src/main/java/emu/grasscutter/task/TaskMap.java +++ b/src/main/java/emu/grasscutter/task/TaskMap.java @@ -1,174 +1,174 @@ -package emu.grasscutter.task; - -import emu.grasscutter.Grasscutter; - -import org.quartz.*; -import org.quartz.impl.StdSchedulerFactory; -import org.reflections.Reflections; - -import java.util.*; - -@SuppressWarnings({"UnusedReturnValue", "unused"}) -public final class TaskMap { - private final Map tasks = new HashMap<>(); - private final Map annotations = new HashMap<>(); - private final Map afterReset = new HashMap<>(); - private final SchedulerFactory schedulerFactory = new StdSchedulerFactory(); - - public TaskMap() { - this(false); - } - - public TaskMap(boolean scan) { - if (scan) this.scan(); - } - - public static TaskMap getInstance() { - return Grasscutter.getGameServer().getTaskMap(); - } - - public void resetNow() { - // Unregister all tasks - for (TaskHandler task : this.tasks.values()) { - unregisterTask(task); - } - - // Run all afterReset tasks - for (TaskHandler task : this.afterReset.values()) { - try { - task.restartExecute(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - // Remove all afterReset tasks - this.afterReset.clear(); - - // Register all tasks - for (TaskHandler task : this.tasks.values()) { - registerTask(task.getClass().getAnnotation(Task.class).taskName(), task); - } - } - - public TaskMap unregisterTask(TaskHandler task) { - this.tasks.remove(task.getClass().getAnnotation(Task.class).taskName()); - this.annotations.remove(task.getClass().getAnnotation(Task.class).taskName()); - - try { - Scheduler scheduler = schedulerFactory.getScheduler(); - scheduler.deleteJob(new JobKey(task.getClass().getAnnotation(Task.class).taskName())); - } catch (SchedulerException e) { - e.printStackTrace(); - } - - task.onDisable(); - - return this; - } - - public boolean pauseTask(String taskName) { - try { - Scheduler scheduler = schedulerFactory.getScheduler(); - scheduler.pauseJob(new JobKey(taskName)); - } catch (SchedulerException e) { - e.printStackTrace(); - return false; - } - return true; - } - - public boolean resumeTask(String taskName) { - try { - Scheduler scheduler = schedulerFactory.getScheduler(); - scheduler.resumeJob(new JobKey(taskName)); - } catch (SchedulerException e) { - e.printStackTrace(); - return false; - } - return true; - } - - public boolean cancelTask(String taskName) { - Task task = this.annotations.get(taskName); - if (task == null) return false; - try { - this.unregisterTask(this.tasks.get(taskName)); - } catch (Exception e) { - e.printStackTrace(); - return false; - } - return true; - } - - public TaskMap registerTask(String taskName, TaskHandler task) { - Task annotation = task.getClass().getAnnotation(Task.class); - this.annotations.put(taskName, annotation); - this.tasks.put(taskName, task); - - // register task - try { - Scheduler scheduler = schedulerFactory.getScheduler(); - JobDetail job = JobBuilder - .newJob(task.getClass()) - .withIdentity(taskName) - .build(); - - Trigger convTrigger = TriggerBuilder.newTrigger() - .withIdentity(annotation.triggerName()) - .withSchedule(CronScheduleBuilder.cronSchedule(annotation.taskCronExpression())) - .build(); - - scheduler.scheduleJob(job, convTrigger); - - if (annotation.executeImmediately()) { - task.execute(null); - } - task.onEnable(); - } catch (SchedulerException e) { - e.printStackTrace(); - } - - return this; - } - - public List getHandlersAsList() { - return new ArrayList<>(this.tasks.values()); - } - - public HashMap getHandlers() { - return new LinkedHashMap<>(this.tasks); - } - - public TaskHandler getHandler(String taskName) { - return this.tasks.get(taskName); - } - - private void scan() { - Reflections reflector = Grasscutter.reflector; - Set> classes = reflector.getTypesAnnotatedWith(Task.class); - classes.forEach(annotated -> { - try { - Task taskData = annotated.getAnnotation(Task.class); - Object object = annotated.getDeclaredConstructor().newInstance(); - if (object instanceof TaskHandler) { - this.registerTask(taskData.taskName(), (TaskHandler) object); - if (taskData.executeImmediatelyAfterReset()) { - this.afterReset.put(taskData.taskName(), (TaskHandler) object); - } - } else { - Grasscutter.getLogger().error("Class " + annotated.getName() + " is not a TaskHandler!"); - } - } catch (Exception exception) { - Grasscutter.getLogger().error("Failed to register task handler for " + annotated.getSimpleName(), exception); - } - }); - try { - Scheduler scheduler = schedulerFactory.getScheduler(); - scheduler.start(); - } catch (SchedulerException e) { - e.printStackTrace(); - } - - } -} +package emu.grasscutter.task; + +import emu.grasscutter.Grasscutter; + +import org.quartz.*; +import org.quartz.impl.StdSchedulerFactory; +import org.reflections.Reflections; + +import java.util.*; + +@SuppressWarnings({"UnusedReturnValue", "unused"}) +public final class TaskMap { + private final Map tasks = new HashMap<>(); + private final Map annotations = new HashMap<>(); + private final Map afterReset = new HashMap<>(); + private final SchedulerFactory schedulerFactory = new StdSchedulerFactory(); + + public TaskMap() { + this(false); + } + + public TaskMap(boolean scan) { + if (scan) this.scan(); + } + + public static TaskMap getInstance() { + return Grasscutter.getGameServer().getTaskMap(); + } + + public void resetNow() { + // Unregister all tasks + for (TaskHandler task : this.tasks.values()) { + unregisterTask(task); + } + + // Run all afterReset tasks + for (TaskHandler task : this.afterReset.values()) { + try { + task.restartExecute(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + // Remove all afterReset tasks + this.afterReset.clear(); + + // Register all tasks + for (TaskHandler task : this.tasks.values()) { + registerTask(task.getClass().getAnnotation(Task.class).taskName(), task); + } + } + + public TaskMap unregisterTask(TaskHandler task) { + this.tasks.remove(task.getClass().getAnnotation(Task.class).taskName()); + this.annotations.remove(task.getClass().getAnnotation(Task.class).taskName()); + + try { + Scheduler scheduler = schedulerFactory.getScheduler(); + scheduler.deleteJob(new JobKey(task.getClass().getAnnotation(Task.class).taskName())); + } catch (SchedulerException e) { + e.printStackTrace(); + } + + task.onDisable(); + + return this; + } + + public boolean pauseTask(String taskName) { + try { + Scheduler scheduler = schedulerFactory.getScheduler(); + scheduler.pauseJob(new JobKey(taskName)); + } catch (SchedulerException e) { + e.printStackTrace(); + return false; + } + return true; + } + + public boolean resumeTask(String taskName) { + try { + Scheduler scheduler = schedulerFactory.getScheduler(); + scheduler.resumeJob(new JobKey(taskName)); + } catch (SchedulerException e) { + e.printStackTrace(); + return false; + } + return true; + } + + public boolean cancelTask(String taskName) { + Task task = this.annotations.get(taskName); + if (task == null) return false; + try { + this.unregisterTask(this.tasks.get(taskName)); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + return true; + } + + public TaskMap registerTask(String taskName, TaskHandler task) { + Task annotation = task.getClass().getAnnotation(Task.class); + this.annotations.put(taskName, annotation); + this.tasks.put(taskName, task); + + // register task + try { + Scheduler scheduler = schedulerFactory.getScheduler(); + JobDetail job = JobBuilder + .newJob(task.getClass()) + .withIdentity(taskName) + .build(); + + Trigger convTrigger = TriggerBuilder.newTrigger() + .withIdentity(annotation.triggerName()) + .withSchedule(CronScheduleBuilder.cronSchedule(annotation.taskCronExpression())) + .build(); + + scheduler.scheduleJob(job, convTrigger); + + if (annotation.executeImmediately()) { + task.execute(null); + } + task.onEnable(); + } catch (SchedulerException e) { + e.printStackTrace(); + } + + return this; + } + + public List getHandlersAsList() { + return new ArrayList<>(this.tasks.values()); + } + + public HashMap getHandlers() { + return new LinkedHashMap<>(this.tasks); + } + + public TaskHandler getHandler(String taskName) { + return this.tasks.get(taskName); + } + + private void scan() { + Reflections reflector = Grasscutter.reflector; + Set> classes = reflector.getTypesAnnotatedWith(Task.class); + classes.forEach(annotated -> { + try { + Task taskData = annotated.getAnnotation(Task.class); + Object object = annotated.getDeclaredConstructor().newInstance(); + if (object instanceof TaskHandler) { + this.registerTask(taskData.taskName(), (TaskHandler) object); + if (taskData.executeImmediatelyAfterReset()) { + this.afterReset.put(taskData.taskName(), (TaskHandler) object); + } + } else { + Grasscutter.getLogger().error("Class " + annotated.getName() + " is not a TaskHandler!"); + } + } catch (Exception exception) { + Grasscutter.getLogger().error("Failed to register task handler for " + annotated.getSimpleName(), exception); + } + }); + try { + Scheduler scheduler = schedulerFactory.getScheduler(); + scheduler.start(); + } catch (SchedulerException e) { + e.printStackTrace(); + } + + } +}