Refactor game server managers to systems

This commit is contained in:
Melledy 2022-07-18 22:47:38 -07:00
parent d20e9d1f72
commit 2e19e70fe1
63 changed files with 254 additions and 264 deletions

View File

@ -22,7 +22,7 @@ public final class AnnounceCommand implements CommandHandler {
@Override @Override
public void execute(Player sender, Player targetPlayer, List<String> args) { public void execute(Player sender, Player targetPlayer, List<String> args) {
var manager = Grasscutter.getGameServer().getAnnouncementManager(); var manager = Grasscutter.getGameServer().getAnnouncementSystem();
if (args.size() < 1) { if (args.size() < 1) {
CommandHandler.sendTranslatedMessage(sender, "commands.announce.command_usage"); CommandHandler.sendTranslatedMessage(sender, "commands.announce.command_usage");
return; return;

View File

@ -41,10 +41,10 @@ public final class CoopCommand implements CommandHandler {
// There's no target==host check but this just places them in multiplayer in their own world which seems fine. // There's no target==host check but this just places them in multiplayer in their own world which seems fine.
if (targetPlayer.isInMultiplayer()) { if (targetPlayer.isInMultiplayer()) {
targetPlayer.getServer().getMultiplayerManager().leaveCoop(targetPlayer); targetPlayer.getServer().getMultiplayerSystem().leaveCoop(targetPlayer);
} }
host.getServer().getMultiplayerManager().applyEnterMp(targetPlayer, host.getUid()); host.getServer().getMultiplayerSystem().applyEnterMp(targetPlayer, host.getUid());
targetPlayer.getServer().getMultiplayerManager().applyEnterMpReply(host, targetPlayer.getUid(), true); targetPlayer.getServer().getMultiplayerSystem().applyEnterMpReply(host, targetPlayer.getUid(), true);
CommandHandler.sendMessage(sender, translate(sender, "commands.coop.success", targetPlayer.getNickname(), host.getNickname())); CommandHandler.sendMessage(sender, translate(sender, "commands.coop.success", targetPlayer.getNickname(), host.getNickname()));
} }
} }

View File

@ -25,7 +25,7 @@ public final class EnterDungeonCommand implements CommandHandler {
return; return;
} }
boolean result = targetPlayer.getServer().getDungeonManager().enterDungeon(targetPlayer.getSession().getPlayer(), 0, dungeonId); boolean result = targetPlayer.getServer().getDungeonSystem().enterDungeon(targetPlayer.getSession().getPlayer(), 0, dungeonId);
if (!result) { if (!result) {
CommandHandler.sendMessage(sender, translate(sender, "commands.enter_dungeon.not_found_error")); CommandHandler.sendMessage(sender, translate(sender, "commands.enter_dungeon.not_found_error"));

View File

@ -18,9 +18,9 @@ public final class ReloadCommand implements CommandHandler {
Grasscutter.loadConfig(); Grasscutter.loadConfig();
Grasscutter.loadLanguage(); Grasscutter.loadLanguage();
Grasscutter.getGameServer().getGachaManager().load(); Grasscutter.getGameServer().getGachaSystem().load();
Grasscutter.getGameServer().getDropManager().load(); Grasscutter.getGameServer().getDropSystem().load();
Grasscutter.getGameServer().getShopManager().load(); Grasscutter.getGameServer().getShopSystem().load();
CommandHandler.sendMessage(sender, translate(sender, "commands.reload.reload_done")); CommandHandler.sendMessage(sender, translate(sender, "commands.reload.reload_done"));
} }

View File

@ -146,7 +146,7 @@ public final class SetPropCommand implements CommandHandler {
} }
private boolean setTowerLevel(Player sender, Player targetPlayer, int topFloor) { private boolean setTowerLevel(Player sender, Player targetPlayer, int topFloor) {
List<Integer> floorIds = targetPlayer.getServer().getTowerScheduleManager().getAllFloors(); List<Integer> floorIds = targetPlayer.getServer().getTowerSystem().getAllFloors();
if (topFloor < 0 || topFloor > floorIds.size()) { if (topFloor < 0 || topFloor > floorIds.size()) {
String min = Integer.toString(0); String min = Integer.toString(0);
String max = Integer.toString(floorIds.size()); String max = Integer.toString(floorIds.size());

View File

@ -140,11 +140,11 @@ public class BattlePassManager extends BasePlayerDataManager {
// Mission triggers // Mission triggers
public void triggerMission(WatcherTriggerType triggerType) { public void triggerMission(WatcherTriggerType triggerType) {
getPlayer().getServer().getBattlePassMissionManager().triggerMission(getPlayer(), triggerType); getPlayer().getServer().getBattlePassSystem().triggerMission(getPlayer(), triggerType);
} }
public void triggerMission(WatcherTriggerType triggerType, int param, int progress) { public void triggerMission(WatcherTriggerType triggerType, int param, int progress) {
getPlayer().getServer().getBattlePassMissionManager().triggerMission(getPlayer(), triggerType, param, progress); getPlayer().getServer().getBattlePassSystem().triggerMission(getPlayer(), triggerType, param, progress);
} }
// Handlers // Handlers

View File

@ -11,16 +11,17 @@ import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.BattlePassMissionRefreshType; import emu.grasscutter.game.props.BattlePassMissionRefreshType;
import emu.grasscutter.game.props.BattlePassMissionStatus; import emu.grasscutter.game.props.BattlePassMissionStatus;
import emu.grasscutter.game.props.WatcherTriggerType; import emu.grasscutter.game.props.WatcherTriggerType;
import emu.grasscutter.server.game.BaseGameSystem;
import emu.grasscutter.server.game.GameServer; import emu.grasscutter.server.game.GameServer;
import emu.grasscutter.server.packet.send.PacketBattlePassMissionUpdateNotify; import emu.grasscutter.server.packet.send.PacketBattlePassMissionUpdateNotify;
public class BattlePassMissionManager { public class BattlePassSystem extends BaseGameSystem {
private final GameServer server;
private final Map<WatcherTriggerType, List<BattlePassMissionData>> cachedTriggers; private final Map<WatcherTriggerType, List<BattlePassMissionData>> cachedTriggers;
// BP Mission manager for the server, contains cached triggers so we dont have to load it for each player // BP Mission manager for the server, contains cached triggers so we dont have to load it for each player
public BattlePassMissionManager(GameServer server) { public BattlePassSystem(GameServer server) {
this.server = server; super(server);
this.cachedTriggers = new HashMap<>(); this.cachedTriggers = new HashMap<>();
for (BattlePassMissionData missionData : GameData.getBattlePassMissionDataMap().values()) { for (BattlePassMissionData missionData : GameData.getBattlePassMissionDataMap().values()) {

View File

@ -12,6 +12,7 @@ import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.ActionReason; import emu.grasscutter.game.props.ActionReason;
import emu.grasscutter.net.proto.RetcodeOuterClass; import emu.grasscutter.net.proto.RetcodeOuterClass;
import emu.grasscutter.net.proto.RetcodeOuterClass.Retcode; import emu.grasscutter.net.proto.RetcodeOuterClass.Retcode;
import emu.grasscutter.server.game.BaseGameSystem;
import emu.grasscutter.server.game.GameServer; import emu.grasscutter.server.game.GameServer;
import emu.grasscutter.server.packet.send.PacketCombineFormulaDataNotify; import emu.grasscutter.server.packet.send.PacketCombineFormulaDataNotify;
import emu.grasscutter.server.packet.send.PacketCombineRsp; import emu.grasscutter.server.packet.send.PacketCombineRsp;
@ -29,16 +30,11 @@ import java.util.List;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
public class CombineManger { public class CombineManger extends BaseGameSystem {
private final GameServer gameServer;
private final static Int2ObjectMap<List<Integer>> reliquaryDecomposeData = new Int2ObjectOpenHashMap<>(); private final static Int2ObjectMap<List<Integer>> reliquaryDecomposeData = new Int2ObjectOpenHashMap<>();
public GameServer getGameServer() { public CombineManger(GameServer server) {
return gameServer; super(server);
}
public CombineManger(GameServer gameServer) {
this.gameServer = gameServer;
} }
public static void initialize() { public static void initialize() {

View File

@ -12,6 +12,7 @@ import emu.grasscutter.game.inventory.ItemType;
import emu.grasscutter.game.player.Player; import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.ActionReason; import emu.grasscutter.game.props.ActionReason;
import emu.grasscutter.game.world.Scene; import emu.grasscutter.game.world.Scene;
import emu.grasscutter.server.game.BaseGameSystem;
import emu.grasscutter.server.game.GameServer; import emu.grasscutter.server.game.GameServer;
import emu.grasscutter.utils.Position; import emu.grasscutter.utils.Position;
import emu.grasscutter.utils.Utils; import emu.grasscutter.utils.Utils;
@ -23,25 +24,19 @@ import java.io.Reader;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
public class DropManager { public class DropSystem extends BaseGameSystem {
public GameServer getGameServer() { private final Int2ObjectMap<List<DropData>> dropData;
return gameServer;
}
private final GameServer gameServer; public DropSystem(GameServer server) {
super(server);
this.dropData = new Int2ObjectOpenHashMap<>();
this.load();
}
public Int2ObjectMap<List<DropData>> getDropData() { public Int2ObjectMap<List<DropData>> getDropData() {
return dropData; return dropData;
} }
private final Int2ObjectMap<List<DropData>> dropData;
public DropManager(GameServer gameServer) {
this.gameServer = gameServer;
this.dropData = new Int2ObjectOpenHashMap<>();
this.load();
}
public synchronized void load() { public synchronized void load() {
try (Reader fileReader = new InputStreamReader(DataLoader.load("Drop.json"))) { try (Reader fileReader = new InputStreamReader(DataLoader.load("Drop.json"))) {
getDropData().clear(); getDropData().clear();

View File

@ -11,6 +11,7 @@ import emu.grasscutter.game.quest.enums.QuestTrigger;
import emu.grasscutter.game.world.Scene; import emu.grasscutter.game.world.Scene;
import emu.grasscutter.net.packet.BasePacket; import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes; import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.server.game.BaseGameSystem;
import emu.grasscutter.server.game.GameServer; import emu.grasscutter.server.game.GameServer;
import emu.grasscutter.server.packet.send.PacketDungeonEntryInfoRsp; import emu.grasscutter.server.packet.send.PacketDungeonEntryInfoRsp;
import emu.grasscutter.server.packet.send.PacketPlayerEnterDungeonRsp; import emu.grasscutter.server.packet.send.PacketPlayerEnterDungeonRsp;
@ -18,15 +19,11 @@ import emu.grasscutter.utils.Position;
import java.util.List; import java.util.List;
public class DungeonManager { public class DungeonSystem extends BaseGameSystem {
private final GameServer server;
private static final BasicDungeonSettleListener basicDungeonSettleObserver = new BasicDungeonSettleListener(); private static final BasicDungeonSettleListener basicDungeonSettleObserver = new BasicDungeonSettleListener();
public DungeonManager(GameServer server) {
this.server = server;
}
public GameServer getServer() { public DungeonSystem(GameServer server) {
return server; super(server);
} }
public void getEntryInfo(Player player, int pointId) { public void getEntryInfo(Player player, int pointId) {

View File

@ -19,7 +19,7 @@ public class GadgetChest extends GadgetContent {
} }
public boolean onInteract(Player player, GadgetInteractReq req) { public boolean onInteract(Player player, GadgetInteractReq req) {
var chestInteractHandlerMap = getGadget().getScene().getWorld().getServer().getWorldDataManager().getChestInteractHandlerMap(); var chestInteractHandlerMap = getGadget().getScene().getWorld().getServer().getWorldDataSystem().getChestInteractHandlerMap();
var handler = chestInteractHandlerMap.get(getGadget().getGadgetData().getJsonName()); var handler = chestInteractHandlerMap.get(getGadget().getGadgetData().getJsonName());
if(handler == null){ if(handler == null){
Grasscutter.getLogger().warn("Could not found the handler of this type of Chests {}", getGadget().getGadgetData().getJsonName()); Grasscutter.getLogger().warn("Could not found the handler of this type of Chests {}", getGadget().getGadgetData().getJsonName());

View File

@ -19,7 +19,7 @@ public class BossChestInteractHandler implements ChestInteractHandler{
@Override @Override
public boolean onInteract(GadgetChest chest, Player player) { public boolean onInteract(GadgetChest chest, Player player) {
var worldDataManager = chest.getGadget().getScene().getWorld().getServer().getWorldDataManager(); var worldDataManager = chest.getGadget().getScene().getWorld().getServer().getWorldDataSystem();
var monster = chest.getGadget().getMetaGadget().group.monsters.get(chest.getGadget().getMetaGadget().boss_chest.monster_config_id); var monster = chest.getGadget().getMetaGadget().group.monsters.get(chest.getGadget().getMetaGadget().boss_chest.monster_config_id);
var reward = worldDataManager.getRewardByBossId(monster.monster_id); var reward = worldDataManager.getRewardByBossId(monster.monster_id);

View File

@ -3,6 +3,7 @@ package emu.grasscutter.game.expedition;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import emu.grasscutter.Grasscutter; import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.DataLoader; import emu.grasscutter.data.DataLoader;
import emu.grasscutter.server.game.BaseGameSystem;
import emu.grasscutter.server.game.GameServer; import emu.grasscutter.server.game.GameServer;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
@ -15,23 +16,19 @@ import java.util.List;
import static emu.grasscutter.Configuration.*; import static emu.grasscutter.Configuration.*;
public class ExpeditionManager { public class ExpeditionSystem extends BaseGameSystem {
public GameServer getGameServer() {
return gameServer;
}
private final GameServer gameServer;
public Int2ObjectMap<List<ExpeditionRewardDataList>> getExpeditionRewardDataList() { return expeditionRewardData; }
private final Int2ObjectMap<List<ExpeditionRewardDataList>> expeditionRewardData; private final Int2ObjectMap<List<ExpeditionRewardDataList>> expeditionRewardData;
public ExpeditionManager(GameServer gameServer) { public ExpeditionSystem(GameServer server) {
this.gameServer = gameServer; super(server);
this.expeditionRewardData = new Int2ObjectOpenHashMap<>(); this.expeditionRewardData = new Int2ObjectOpenHashMap<>();
this.load(); this.load();
} }
public Int2ObjectMap<List<ExpeditionRewardDataList>> getExpeditionRewardDataList() {
return expeditionRewardData;
}
public synchronized void load() { public synchronized void load() {
try (Reader fileReader = new InputStreamReader(DataLoader.load("ExpeditionReward.json"))) { try (Reader fileReader = new InputStreamReader(DataLoader.load("ExpeditionReward.json"))) {
getExpeditionRewardDataList().clear(); getExpeditionRewardDataList().clear();

View File

@ -33,6 +33,7 @@ import emu.grasscutter.net.proto.GachaTransferItemOuterClass.GachaTransferItem;
import emu.grasscutter.net.proto.GetGachaInfoRspOuterClass.GetGachaInfoRsp; import emu.grasscutter.net.proto.GetGachaInfoRspOuterClass.GetGachaInfoRsp;
import emu.grasscutter.net.proto.ItemParamOuterClass.ItemParam; import emu.grasscutter.net.proto.ItemParamOuterClass.ItemParam;
import emu.grasscutter.net.proto.RetcodeOuterClass.Retcode; import emu.grasscutter.net.proto.RetcodeOuterClass.Retcode;
import emu.grasscutter.server.game.BaseGameSystem;
import emu.grasscutter.server.game.GameServer; import emu.grasscutter.server.game.GameServer;
import emu.grasscutter.server.game.GameServerTickEvent; import emu.grasscutter.server.game.GameServerTickEvent;
import emu.grasscutter.server.packet.send.PacketDoGachaRsp; import emu.grasscutter.server.packet.send.PacketDoGachaRsp;
@ -46,8 +47,7 @@ import org.greenrobot.eventbus.Subscribe;
import static emu.grasscutter.Configuration.*; import static emu.grasscutter.Configuration.*;
public class GachaManager { public class GachaSystem extends BaseGameSystem {
private final GameServer server;
private final Int2ObjectMap<GachaBanner> gachaBanners; private final Int2ObjectMap<GachaBanner> gachaBanners;
private WatchService watchService; private WatchService watchService;
@ -56,17 +56,13 @@ public class GachaManager {
private int[] fallbackItems4Pool2Default = {11401, 11402, 11403, 11405, 12401, 12402, 12403, 12405, 13401, 13407, 14401, 14402, 14403, 14409, 15401, 15402, 15403, 15405}; private int[] fallbackItems4Pool2Default = {11401, 11402, 11403, 11405, 12401, 12402, 12403, 12405, 13401, 13407, 14401, 14402, 14403, 14409, 15401, 15402, 15403, 15405};
private int[] fallbackItems5Pool2Default = {11501, 11502, 12501, 12502, 13502, 13505, 14501, 14502, 15501, 15502}; private int[] fallbackItems5Pool2Default = {11501, 11502, 12501, 12502, 13502, 13505, 14501, 14502, 15501, 15502};
public GachaManager(GameServer server) { public GachaSystem(GameServer server) {
this.server = server; super(server);
this.gachaBanners = new Int2ObjectOpenHashMap<>(); this.gachaBanners = new Int2ObjectOpenHashMap<>();
this.load(); this.load();
this.startWatcher(server); this.startWatcher(server);
} }
public GameServer getServer() {
return server;
}
public Int2ObjectMap<GachaBanner> getGachaBanners() { public Int2ObjectMap<GachaBanner> getGachaBanners() {
return gachaBanners; return gachaBanners;
} }

View File

@ -260,11 +260,11 @@ public class Inventory extends BasePlayerManager implements Iterable<GameItem> {
private void addVirtualItem(int itemId, int count) { private void addVirtualItem(int itemId, int count) {
switch (itemId) { switch (itemId) {
case 101 -> // Character exp case 101 -> // Character exp
this.player.getServer().getInventoryManager().upgradeAvatar(this.player, this.player.getTeamManager().getCurrentAvatarEntity().getAvatar(), count); this.player.getServer().getInventorySystem().upgradeAvatar(this.player, this.player.getTeamManager().getCurrentAvatarEntity().getAvatar(), count);
case 102 -> // Adventure exp case 102 -> // Adventure exp
this.player.addExpDirectly(count); this.player.addExpDirectly(count);
case 105 -> // Companionship exp case 105 -> // Companionship exp
this.player.getServer().getInventoryManager().upgradeAvatarFetterLevel(this.player, this.player.getTeamManager().getCurrentAvatarEntity().getAvatar(), count); this.player.getServer().getInventorySystem().upgradeAvatarFetterLevel(this.player, this.player.getTeamManager().getCurrentAvatarEntity().getAvatar(), count);
case 106 -> // Resin case 106 -> // Resin
this.player.getResinManager().addResin(count); this.player.getResinManager().addResin(count);
case 107 -> // Legendary Key case 107 -> // Legendary Key

View File

@ -6,6 +6,7 @@ import emu.grasscutter.data.DataLoader;
import emu.grasscutter.game.player.Player; import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.world.World; import emu.grasscutter.game.world.World;
import emu.grasscutter.net.proto.AnnounceDataOuterClass; import emu.grasscutter.net.proto.AnnounceDataOuterClass;
import emu.grasscutter.server.game.BaseGameSystem;
import emu.grasscutter.server.game.GameServer; import emu.grasscutter.server.game.GameServer;
import emu.grasscutter.server.packet.send.PacketServerAnnounceNotify; import emu.grasscutter.server.packet.send.PacketServerAnnounceNotify;
import emu.grasscutter.server.packet.send.PacketServerAnnounceRevokeNotify; import emu.grasscutter.server.packet.send.PacketServerAnnounceRevokeNotify;
@ -19,24 +20,22 @@ import java.io.InputStreamReader;
import java.util.*; import java.util.*;
@Getter @Getter
public class AnnouncementManager { public class AnnouncementSystem extends BaseGameSystem {
private final Map<Integer, AnnounceConfigItem> announceConfigItemMap;
public final GameServer server; public AnnouncementSystem(GameServer server){
public AnnouncementManager(GameServer server){ super(server);
this.server = server; this.announceConfigItemMap = new HashMap<>();
loadConfig(); loadConfig();
} }
Map<Integer, AnnounceConfigItem> announceConfigItemMap = new HashMap<>();
private int loadConfig() { private int loadConfig() {
try (var fileReader = new InputStreamReader(DataLoader.load("Announcement.json"))) { try (var fileReader = new InputStreamReader(DataLoader.load("Announcement.json"))) {
List<AnnounceConfigItem> announceConfigItems = Grasscutter.getGsonFactory().fromJson(fileReader, List<AnnounceConfigItem> announceConfigItems = Grasscutter.getGsonFactory().fromJson(fileReader,
TypeToken.getParameterized(List.class, AnnounceConfigItem.class).getType()); TypeToken.getParameterized(List.class, AnnounceConfigItem.class).getType());
announceConfigItemMap = new HashMap<>(); announceConfigItemMap.clear();
announceConfigItems.forEach(i -> announceConfigItemMap.put(i.getTemplateId(), i)); announceConfigItems.forEach(i -> announceConfigItemMap.put(i.getTemplateId(), i));
} catch (Exception e) { } catch (Exception e) {
Grasscutter.getLogger().error("Unable to load server announce config.", e); Grasscutter.getLogger().error("Unable to load server announce config.", e);
} }

View File

@ -27,15 +27,14 @@ import emu.grasscutter.game.shop.ShopChestBatchUseTable;
import emu.grasscutter.game.shop.ShopChestTable; import emu.grasscutter.game.shop.ShopChestTable;
import emu.grasscutter.net.proto.ItemParamOuterClass.ItemParam; import emu.grasscutter.net.proto.ItemParamOuterClass.ItemParam;
import emu.grasscutter.net.proto.MaterialInfoOuterClass.MaterialInfo; import emu.grasscutter.net.proto.MaterialInfoOuterClass.MaterialInfo;
import emu.grasscutter.server.game.BaseGameSystem;
import emu.grasscutter.server.game.GameServer; import emu.grasscutter.server.game.GameServer;
import emu.grasscutter.server.packet.send.*; import emu.grasscutter.server.packet.send.*;
import emu.grasscutter.utils.Utils; import emu.grasscutter.utils.Utils;
import it.unimi.dsi.fastutil.ints.Int2IntMap; import it.unimi.dsi.fastutil.ints.Int2IntMap;
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
public class InventoryManager { public class InventorySystem extends BaseGameSystem {
private final GameServer server;
private final static int RELIC_MATERIAL_1 = 105002; // Sanctifying Unction private final static int RELIC_MATERIAL_1 = 105002; // Sanctifying Unction
private final static int RELIC_MATERIAL_2 = 105003; // Sanctifying Essence private final static int RELIC_MATERIAL_2 = 105003; // Sanctifying Essence
private final static int RELIC_MATERIAL_EXP_1 = 2500; // Sanctifying Unction private final static int RELIC_MATERIAL_EXP_1 = 2500; // Sanctifying Unction
@ -55,12 +54,8 @@ public class InventoryManager {
private final static int AVATAR_BOOK_EXP_2 = 5000; // Adventurer's Experience private final static int AVATAR_BOOK_EXP_2 = 5000; // Adventurer's Experience
private final static int AVATAR_BOOK_EXP_3 = 20000; // Hero's Wit private final static int AVATAR_BOOK_EXP_3 = 20000; // Hero's Wit
public InventoryManager(GameServer server) { public InventorySystem(GameServer server) {
this.server = server; super(server);
}
public GameServer getServer() {
return server;
} }
public void lockEquip(Player player, long targetEquipGuid, boolean isLocked) { public void lockEquip(Player player, long targetEquipGuid, boolean isLocked) {
@ -850,7 +845,7 @@ public class InventoryManager {
// Handle combine diagrams. // Handle combine diagrams.
if (useItem.getItemData().getItemUse().get(0).getUseOp().equals("ITEM_USE_UNLOCK_COMBINE")) { if (useItem.getItemData().getItemUse().get(0).getUseOp().equals("ITEM_USE_UNLOCK_COMBINE")) {
// Unlock. // Unlock.
useSuccess = player.getServer().getCombineManger().unlockCombineDiagram(player, useItem); useSuccess = player.getServer().getCombineSystem().unlockCombineDiagram(player, useItem);
} }
// Handle cooking recipies. // Handle cooking recipies.
if (useItem.getItemData().getItemUse().get(0).getUseOp().equals("ITEM_USE_UNLOCK_COOK_RECIPE")) { if (useItem.getItemData().getItemUse().get(0).getUseOp().equals("ITEM_USE_UNLOCK_COOK_RECIPE")) {
@ -883,7 +878,7 @@ public class InventoryManager {
} }
break; break;
case MATERIAL_CHEST: case MATERIAL_CHEST:
List<ShopChestTable> shopChestTableList = player.getServer().getShopManager().getShopChestData(); List<ShopChestTable> shopChestTableList = player.getServer().getShopSystem().getShopChestData();
List<GameItem> rewardItemList = new ArrayList<>(); List<GameItem> rewardItemList = new ArrayList<>();
for (ShopChestTable shopChestTable : shopChestTableList) { for (ShopChestTable shopChestTable : shopChestTableList) {
if (shopChestTable.getItemId() != useItem.getItemId()) { if (shopChestTable.getItemId() != useItem.getItemId()) {
@ -914,7 +909,7 @@ public class InventoryManager {
if (optionId < 1) { if (optionId < 1) {
break; break;
} }
List<ShopChestBatchUseTable> shopChestBatchUseTableList = player.getServer().getShopManager().getShopChestBatchUseData(); List<ShopChestBatchUseTable> shopChestBatchUseTableList = player.getServer().getShopSystem().getShopChestBatchUseData();
for (ShopChestBatchUseTable shopChestBatchUseTable : shopChestBatchUseTableList) { for (ShopChestBatchUseTable shopChestBatchUseTable : shopChestBatchUseTableList) {
if (shopChestBatchUseTable.getItemId() != useItem.getItemId()) { if (shopChestBatchUseTable.getItemId() != useItem.getItemId()) {
continue; continue;

View File

@ -8,20 +8,16 @@ import emu.grasscutter.net.proto.PlayerApplyEnterMpReasonOuterClass.PlayerApplyE
import emu.grasscutter.game.player.Player; import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.player.Player.SceneLoadState; import emu.grasscutter.game.player.Player.SceneLoadState;
import emu.grasscutter.net.proto.PlayerApplyEnterMpResultNotifyOuterClass; import emu.grasscutter.net.proto.PlayerApplyEnterMpResultNotifyOuterClass;
import emu.grasscutter.server.game.BaseGameSystem;
import emu.grasscutter.server.game.GameServer; import emu.grasscutter.server.game.GameServer;
import emu.grasscutter.server.packet.send.PacketPlayerApplyEnterMpNotify; import emu.grasscutter.server.packet.send.PacketPlayerApplyEnterMpNotify;
import emu.grasscutter.server.packet.send.PacketPlayerApplyEnterMpResultNotify; import emu.grasscutter.server.packet.send.PacketPlayerApplyEnterMpResultNotify;
import emu.grasscutter.server.packet.send.PacketPlayerEnterSceneNotify; import emu.grasscutter.server.packet.send.PacketPlayerEnterSceneNotify;
public class MultiplayerManager { public class MultiplayerSystem extends BaseGameSystem {
private final GameServer server;
public MultiplayerManager(GameServer server) { public MultiplayerSystem(GameServer server) {
this.server = server; super(server);
}
public GameServer getServer() {
return server;
} }
public void applyEnterMp(Player player, int targetUid) { public void applyEnterMp(Player player, int targetUid) {

View File

@ -1436,7 +1436,7 @@ public class Player {
getStaminaManager().stopSustainedStaminaHandler(); getStaminaManager().stopSustainedStaminaHandler();
// force to leave the dungeon (inside has a "if") // force to leave the dungeon (inside has a "if")
this.getServer().getDungeonManager().exitDungeon(this); this.getServer().getDungeonSystem().exitDungeon(this);
// Leave world // Leave world
if (this.getWorld() != null) { if (this.getWorld() != null) {

View File

@ -58,7 +58,7 @@ public class GameQuest {
this.mainQuest.getChildQuests().put(this.questId, this); this.mainQuest.getChildQuests().put(this.questId, this);
this.getData().getBeginExec().forEach(e -> getOwner().getServer().getQuestHandler().triggerExec(this, e, e.getParam())); this.getData().getBeginExec().forEach(e -> getOwner().getServer().getQuestSystem().triggerExec(this, e, e.getParam()));
this.getOwner().getQuestManager().triggerEvent(QuestTrigger.QUEST_CONTENT_QUEST_STATE_EQUAL, this.questId, this.state.getValue()); this.getOwner().getQuestManager().triggerEvent(QuestTrigger.QUEST_CONTENT_QUEST_STATE_EQUAL, this.questId, this.state.getValue());
@ -171,7 +171,7 @@ public class GameQuest {
this.save(); this.save();
} }
this.getData().getFinishExec().forEach(e -> getOwner().getServer().getQuestHandler().triggerExec(this, e, e.getParam())); this.getData().getFinishExec().forEach(e -> getOwner().getServer().getQuestSystem().triggerExec(this, e, e.getParam()));
this.getOwner().getQuestManager().triggerEvent(QuestTrigger.QUEST_CONTENT_QUEST_STATE_EQUAL, this.questId, this.state.getValue()); this.getOwner().getQuestManager().triggerEvent(QuestTrigger.QUEST_CONTENT_QUEST_STATE_EQUAL, this.questId, this.state.getValue());
@ -205,7 +205,7 @@ public class GameQuest {
// TODO // TODO
for (int i = 0; i < questData.getAcceptCond().size(); i++) { for (int i = 0; i < questData.getAcceptCond().size(); i++) {
QuestCondition condition = questData.getAcceptCond().get(i); QuestCondition condition = questData.getAcceptCond().get(i);
boolean result = getOwner().getServer().getQuestHandler().triggerCondition(this, condition, boolean result = getOwner().getServer().getQuestSystem().triggerCondition(this, condition,
condition.getParamStr(), condition.getParamStr(),
condition.getParam()); condition.getParam());

View File

@ -153,7 +153,7 @@ public class QuestManager extends BasePlayerManager {
continue; continue;
} }
boolean result = getPlayer().getServer().getQuestHandler().triggerContent(quest, condition, paramStr, params); boolean result = getPlayer().getServer().getQuestSystem().triggerContent(quest, condition, paramStr, params);
if (result) { if (result) {
quest.getFinishProgressList()[i] = 1; quest.getFinishProgressList()[i] = 1;

View File

@ -4,6 +4,9 @@ import java.util.Set;
import emu.grasscutter.data.excels.QuestData; import emu.grasscutter.data.excels.QuestData;
import emu.grasscutter.game.quest.handlers.QuestExecHandler; import emu.grasscutter.game.quest.handlers.QuestExecHandler;
import emu.grasscutter.server.game.BaseGameSystem;
import emu.grasscutter.server.game.GameServer;
import org.reflections.Reflections; import org.reflections.Reflections;
import emu.grasscutter.Grasscutter; import emu.grasscutter.Grasscutter;
@ -13,12 +16,14 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public class ServerQuestHandler { public class QuestSystem extends BaseGameSystem {
private final Int2ObjectMap<QuestBaseHandler> condHandlers; private final Int2ObjectMap<QuestBaseHandler> condHandlers;
private final Int2ObjectMap<QuestBaseHandler> contHandlers; private final Int2ObjectMap<QuestBaseHandler> contHandlers;
private final Int2ObjectMap<QuestExecHandler> execHandlers; private final Int2ObjectMap<QuestExecHandler> execHandlers;
public ServerQuestHandler() { public QuestSystem(GameServer server) {
super(server);
this.condHandlers = new Int2ObjectOpenHashMap<>(); this.condHandlers = new Int2ObjectOpenHashMap<>();
this.contHandlers = new Int2ObjectOpenHashMap<>(); this.contHandlers = new Int2ObjectOpenHashMap<>();
this.execHandlers = new Int2ObjectOpenHashMap<>(); this.execHandlers = new Int2ObjectOpenHashMap<>();

View File

@ -6,6 +6,7 @@ import emu.grasscutter.data.DataLoader;
import emu.grasscutter.data.GameData; import emu.grasscutter.data.GameData;
import emu.grasscutter.data.common.ItemParamData; import emu.grasscutter.data.common.ItemParamData;
import emu.grasscutter.data.excels.ShopGoodsData; import emu.grasscutter.data.excels.ShopGoodsData;
import emu.grasscutter.server.game.BaseGameSystem;
import emu.grasscutter.server.game.GameServer; import emu.grasscutter.server.game.GameServer;
import emu.grasscutter.utils.Utils; import emu.grasscutter.utils.Utils;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
@ -21,8 +22,21 @@ import java.util.List;
import static emu.grasscutter.Configuration.*; import static emu.grasscutter.Configuration.*;
public class ShopManager { public class ShopSystem extends BaseGameSystem {
private final GameServer server; private final Int2ObjectMap<List<ShopInfo>> shopData;
private final List<ShopChestTable> shopChestData;
private final List<ShopChestBatchUseTable> shopChestBatchUseData;
private static final int REFRESH_HOUR = 4; // In GMT+8 server
private static final String TIME_ZONE = "Asia/Shanghai"; // GMT+8 Timezone
public ShopSystem(GameServer server) {
super(server);
this.shopData = new Int2ObjectOpenHashMap<>();
this.shopChestData = new ArrayList<>();
this.shopChestBatchUseData = new ArrayList<>();
this.load();
}
public Int2ObjectMap<List<ShopInfo>> getShopData() { public Int2ObjectMap<List<ShopInfo>> getShopData() {
return shopData; return shopData;
@ -36,21 +50,6 @@ public class ShopManager {
return shopChestBatchUseData; return shopChestBatchUseData;
} }
private final Int2ObjectMap<List<ShopInfo>> shopData;
private final List<ShopChestTable> shopChestData;
private final List<ShopChestBatchUseTable> shopChestBatchUseData;
public ShopManager(GameServer server) {
this.server = server;
this.shopData = new Int2ObjectOpenHashMap<>();
this.shopChestData = new ArrayList<>();
this.shopChestBatchUseData = new ArrayList<>();
this.load();
}
private static final int REFRESH_HOUR = 4; // In GMT+8 server
private static final String TIME_ZONE = "Asia/Shanghai"; // GMT+8 Timezone
public static int getShopNextRefreshTime(ShopInfo shopInfo) { public static int getShopNextRefreshTime(ShopInfo shopInfo) {
return switch (shopInfo.getShopRefreshType()) { return switch (shopInfo.getShopRefreshType()) {
case SHOP_REFRESH_DAILY -> Utils.getNextTimestampOfThisHour(REFRESH_HOUR, TIME_ZONE, shopInfo.getShopRefreshParam()); case SHOP_REFRESH_DAILY -> Utils.getNextTimestampOfThisHour(REFRESH_HOUR, TIME_ZONE, shopInfo.getShopRefreshParam());

View File

@ -74,7 +74,7 @@ public class TowerManager extends BasePlayerManager {
notifyCurLevelRecordChange(); notifyCurLevelRecordChange();
// use team user choose // use team user choose
player.getTeamManager().useTemporaryTeam(0); player.getTeamManager().useTemporaryTeam(0);
player.getServer().getDungeonManager().handoffDungeon(player, dungeonId, player.getServer().getDungeonSystem().handoffDungeon(player, dungeonId,
towerDungeonSettleListener); towerDungeonSettleListener);
// make sure user can exit dungeon correctly // make sure user can exit dungeon correctly
@ -116,10 +116,10 @@ public class TowerManager extends BasePlayerManager {
return getTowerData().currentLevel < 3; return getTowerData().currentLevel < 3;
} }
public int getNextFloorId() { public int getNextFloorId() {
return player.getServer().getTowerScheduleManager().getNextFloorId(getTowerData().currentFloorId); return player.getServer().getTowerSystem().getNextFloorId(getTowerData().currentFloorId);
} }
public boolean hasNextFloor(){ public boolean hasNextFloor(){
return player.getServer().getTowerScheduleManager().getNextFloorId(getTowerData().currentFloorId) > 0; return player.getServer().getTowerSystem().getNextFloorId(getTowerData().currentFloorId) > 0;
} }
public void clearEntry() { public void clearEntry() {
@ -128,10 +128,10 @@ public class TowerManager extends BasePlayerManager {
public boolean canEnterScheduleFloor(){ public boolean canEnterScheduleFloor(){
Map<Integer, TowerLevelRecord> recordMap = getRecordMap(); Map<Integer, TowerLevelRecord> recordMap = getRecordMap();
if(!recordMap.containsKey(player.getServer().getTowerScheduleManager().getLastEntranceFloor())){ if(!recordMap.containsKey(player.getServer().getTowerSystem().getLastEntranceFloor())){
return false; return false;
} }
return recordMap.get(player.getServer().getTowerScheduleManager().getLastEntranceFloor()) return recordMap.get(player.getServer().getTowerSystem().getLastEntranceFloor())
.getStarCount() >= 6; .getStarCount() >= 6;
} }

View File

@ -4,6 +4,7 @@ import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.DataLoader; import emu.grasscutter.data.DataLoader;
import emu.grasscutter.data.GameData; import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.TowerScheduleData; import emu.grasscutter.data.excels.TowerScheduleData;
import emu.grasscutter.server.game.BaseGameSystem;
import emu.grasscutter.server.game.GameServer; import emu.grasscutter.server.game.GameServer;
import java.io.FileReader; import java.io.FileReader;
@ -14,15 +15,10 @@ import java.util.List;
import static emu.grasscutter.Configuration.*; import static emu.grasscutter.Configuration.*;
public class TowerScheduleManager { public class TowerSystem extends BaseGameSystem {
private final GameServer gameServer;
public GameServer getGameServer() { public TowerSystem(GameServer server) {
return gameServer; super(server);
}
public TowerScheduleManager(GameServer gameServer) {
this.gameServer = gameServer;
this.load(); this.load();
} }

View File

@ -399,7 +399,7 @@ public class Scene {
// Reward drop // Reward drop
if (target instanceof EntityMonster && this.getSceneType() != SceneType.SCENE_DUNGEON) { if (target instanceof EntityMonster && this.getSceneType() != SceneType.SCENE_DUNGEON) {
getWorld().getServer().getDropManager().callDrop((EntityMonster) target); getWorld().getServer().getDropSystem().callDrop((EntityMonster) target);
} }
this.removeEntity(target); this.removeEntity(target);

View File

@ -14,6 +14,7 @@ import emu.grasscutter.game.player.Player;
import emu.grasscutter.net.proto.InvestigationMonsterOuterClass; import emu.grasscutter.net.proto.InvestigationMonsterOuterClass;
import emu.grasscutter.scripts.data.SceneGroup; import emu.grasscutter.scripts.data.SceneGroup;
import emu.grasscutter.scripts.data.SceneMonster; import emu.grasscutter.scripts.data.SceneMonster;
import emu.grasscutter.server.game.BaseGameSystem;
import emu.grasscutter.server.game.GameServer; import emu.grasscutter.server.game.GameServer;
import java.io.InputStream; import java.io.InputStream;
@ -24,13 +25,12 @@ import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
public class WorldDataManager { public class WorldDataSystem extends BaseGameSystem {
private final GameServer gameServer;
private final Map<String, ChestInteractHandler> chestInteractHandlerMap; // chestType-Handler private final Map<String, ChestInteractHandler> chestInteractHandlerMap; // chestType-Handler
private final Map<String, SceneGroup> sceneInvestigationGroupMap; // <sceneId_groupId, Group> private final Map<String, SceneGroup> sceneInvestigationGroupMap; // <sceneId_groupId, Group>
public WorldDataManager(GameServer gameServer){ public WorldDataSystem(GameServer server){
this.gameServer = gameServer; super(server);
this.chestInteractHandlerMap = new HashMap<>(); this.chestInteractHandlerMap = new HashMap<>();
this.sceneInvestigationGroupMap = new ConcurrentHashMap<>(); this.sceneInvestigationGroupMap = new ConcurrentHashMap<>();

View File

@ -0,0 +1,13 @@
package emu.grasscutter.server.game;
public abstract class BaseGameSystem {
protected final GameServer server;
public BaseGameSystem(GameServer server) {
this.server = server;
}
public GameServer getServer() {
return this.server;
}
}

View File

@ -5,27 +5,27 @@ import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.CommandMap; import emu.grasscutter.command.CommandMap;
import emu.grasscutter.database.DatabaseHelper; import emu.grasscutter.database.DatabaseHelper;
import emu.grasscutter.game.Account; import emu.grasscutter.game.Account;
import emu.grasscutter.game.battlepass.BattlePassMissionManager; import emu.grasscutter.game.battlepass.BattlePassSystem;
import emu.grasscutter.game.combine.CombineManger; import emu.grasscutter.game.combine.CombineManger;
import emu.grasscutter.game.drop.DropManager; import emu.grasscutter.game.drop.DropSystem;
import emu.grasscutter.game.dungeons.DungeonManager; import emu.grasscutter.game.dungeons.DungeonSystem;
import emu.grasscutter.game.dungeons.challenge.DungeonChallenge; import emu.grasscutter.game.dungeons.challenge.DungeonChallenge;
import emu.grasscutter.game.expedition.ExpeditionManager; import emu.grasscutter.game.expedition.ExpeditionSystem;
import emu.grasscutter.game.gacha.GachaManager; import emu.grasscutter.game.gacha.GachaSystem;
import emu.grasscutter.game.managers.AnnouncementManager; import emu.grasscutter.game.managers.AnnouncementSystem;
import emu.grasscutter.game.managers.CookingManager; import emu.grasscutter.game.managers.CookingManager;
import emu.grasscutter.game.managers.InventoryManager; import emu.grasscutter.game.managers.InventorySystem;
import emu.grasscutter.game.managers.MultiplayerManager; import emu.grasscutter.game.managers.MultiplayerSystem;
import emu.grasscutter.game.managers.chat.ChatManager; import emu.grasscutter.game.managers.chat.ChatManager;
import emu.grasscutter.game.managers.chat.ChatManagerHandler; import emu.grasscutter.game.managers.chat.ChatManagerHandler;
import emu.grasscutter.game.managers.energy.EnergyManager; import emu.grasscutter.game.managers.energy.EnergyManager;
import emu.grasscutter.game.managers.stamina.StaminaManager; import emu.grasscutter.game.managers.stamina.StaminaManager;
import emu.grasscutter.game.player.Player; import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.quest.ServerQuestHandler; import emu.grasscutter.game.quest.QuestSystem;
import emu.grasscutter.game.shop.ShopManager; import emu.grasscutter.game.shop.ShopSystem;
import emu.grasscutter.game.tower.TowerScheduleManager; import emu.grasscutter.game.tower.TowerSystem;
import emu.grasscutter.game.world.World; import emu.grasscutter.game.world.World;
import emu.grasscutter.game.world.WorldDataManager; import emu.grasscutter.game.world.WorldDataSystem;
import emu.grasscutter.net.packet.PacketHandler; import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail; import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail;
import emu.grasscutter.server.event.types.ServerEvent; import emu.grasscutter.server.event.types.ServerEvent;
@ -47,30 +47,35 @@ import java.util.concurrent.ConcurrentHashMap;
import static emu.grasscutter.utils.Language.translate; import static emu.grasscutter.utils.Language.translate;
import static emu.grasscutter.Configuration.*; import static emu.grasscutter.Configuration.*;
@Getter
public final class GameServer extends KcpServer { public final class GameServer extends KcpServer {
// Game server base
private final InetSocketAddress address; private final InetSocketAddress address;
private final GameServerPacketHandler packetHandler; private final GameServerPacketHandler packetHandler;
private final ServerQuestHandler questHandler;
@Getter private final ServerTaskScheduler scheduler;
private final Map<Integer, Player> players; private final Map<Integer, Player> players;
private final Set<World> worlds; private final Set<World> worlds;
// Server systems
private final InventorySystem inventorySystem;
private final GachaSystem gachaSystem;
private final ShopSystem shopSystem;
private final MultiplayerSystem multiplayerSystem;
private final DungeonSystem dungeonSystem;
private final ExpeditionSystem expeditionSystem;
private final DropSystem dropSystem;
private final WorldDataSystem worldDataSystem;
private final BattlePassSystem battlePassSystem;
private final CombineManger combineSystem;
private final TowerSystem towerSystem;
private final AnnouncementSystem announcementSystem;
private final QuestSystem questSystem;
// Extra
private final ServerTaskScheduler scheduler;
private final CommandMap commandMap;
private final TaskMap taskMap;
private ChatManagerHandler chatManager; private ChatManagerHandler chatManager;
@Getter private final InventoryManager inventoryManager;
@Getter private final GachaManager gachaManager;
@Getter private final ShopManager shopManager;
@Getter private final MultiplayerManager multiplayerManager;
@Getter private final DungeonManager dungeonManager;
@Getter private final ExpeditionManager expeditionManager;
@Getter private final CommandMap commandMap;
@Getter private final TaskMap taskMap;
@Getter private final DropManager dropManager;
@Getter private final WorldDataManager worldDataManager;
@Getter private final BattlePassMissionManager battlePassMissionManager;
@Getter private final CombineManger combineManger;
@Getter private final TowerScheduleManager towerScheduleManager;
@Getter private final AnnouncementManager announcementManager;
public GameServer() { public GameServer() {
this(getAdapterInetSocketAddress()); this(getAdapterInetSocketAddress());
@ -78,11 +83,11 @@ public final class GameServer extends KcpServer {
public GameServer(InetSocketAddress address) { public GameServer(InetSocketAddress address) {
ChannelConfig channelConfig = new ChannelConfig(); ChannelConfig channelConfig = new ChannelConfig();
channelConfig.nodelay(true,40,2,true); channelConfig.nodelay(true, 40, 2, true);
channelConfig.setMtu(1400); channelConfig.setMtu(1400);
channelConfig.setSndwnd(256); channelConfig.setSndwnd(256);
channelConfig.setRcvwnd(256); channelConfig.setRcvwnd(256);
channelConfig.setTimeoutMillis(30*1000);//30s channelConfig.setTimeoutMillis(30 * 1000);//30s
channelConfig.setUseConvChannel(true); channelConfig.setUseConvChannel(true);
channelConfig.setAckNoDelay(false); channelConfig.setAckNoDelay(false);
@ -94,56 +99,56 @@ public final class GameServer extends KcpServer {
CookingManager.initialize(); CookingManager.initialize();
CombineManger.initialize(); CombineManger.initialize();
// Game Server base
this.address = address; this.address = address;
this.packetHandler = new GameServerPacketHandler(PacketHandler.class); this.packetHandler = new GameServerPacketHandler(PacketHandler.class);
this.questHandler = new ServerQuestHandler();
this.scheduler = new ServerTaskScheduler();
this.players = new ConcurrentHashMap<>(); this.players = new ConcurrentHashMap<>();
this.worlds = Collections.synchronizedSet(new HashSet<>()); this.worlds = Collections.synchronizedSet(new HashSet<>());
this.chatManager = new ChatManager(this); // Extra
this.inventoryManager = new InventoryManager(this); this.scheduler = new ServerTaskScheduler();
this.gachaManager = new GachaManager(this);
this.shopManager = new ShopManager(this);
this.multiplayerManager = new MultiplayerManager(this);
this.dungeonManager = new DungeonManager(this);
this.commandMap = new CommandMap(true); this.commandMap = new CommandMap(true);
this.taskMap = new TaskMap(true); this.taskMap = new TaskMap(true);
this.dropManager = new DropManager(this);
this.expeditionManager = new ExpeditionManager(this); // Create game systems
this.combineManger = new CombineManger(this); this.inventorySystem = new InventorySystem(this);
this.towerScheduleManager = new TowerScheduleManager(this); this.gachaSystem = new GachaSystem(this);
this.worldDataManager = new WorldDataManager(this); this.shopSystem = new ShopSystem(this);
this.battlePassMissionManager = new BattlePassMissionManager(this); this.multiplayerSystem = new MultiplayerSystem(this);
this.announcementManager = new AnnouncementManager(this); this.dungeonSystem = new DungeonSystem(this);
this.dropSystem = new DropSystem(this);
this.expeditionSystem = new ExpeditionSystem(this);
this.combineSystem = new CombineManger(this);
this.towerSystem = new TowerSystem(this);
this.worldDataSystem = new WorldDataSystem(this);
this.battlePassSystem = new BattlePassSystem(this);
this.announcementSystem = new AnnouncementSystem(this);
this.questSystem = new QuestSystem(this);
// Chata manager
this.chatManager = new ChatManager(this);
// Hook into shutdown event. // Hook into shutdown event.
Runtime.getRuntime().addShutdownHook(new Thread(this::onServerShutdown)); Runtime.getRuntime().addShutdownHook(new Thread(this::onServerShutdown));
} }
public GameServerPacketHandler getPacketHandler() { @Deprecated
return packetHandler;
}
public ServerQuestHandler getQuestHandler() {
return questHandler;
}
public Map<Integer, Player> getPlayers() {
return players;
}
public Set<World> getWorlds() {
return worlds;
}
public ChatManagerHandler getChatManager() { public ChatManagerHandler getChatManager() {
return chatManager; return chatManager;
} }
@Deprecated
public void setChatManager(ChatManagerHandler chatManager) { public void setChatManager(ChatManagerHandler chatManager) {
this.chatManager = chatManager; this.chatManager = chatManager;
} }
public ChatManagerHandler getChatSystem() {
return chatManager;
}
public void setChatSystem(ChatManagerHandler chatManager) {
this.chatManager = chatManager;
}
private static InetSocketAddress getAdapterInetSocketAddress(){ private static InetSocketAddress getAdapterInetSocketAddress(){
InetSocketAddress inetSocketAddress; InetSocketAddress inetSocketAddress;

View File

@ -4,7 +4,7 @@ import emu.grasscutter.Grasscutter;
import emu.grasscutter.database.DatabaseHelper; import emu.grasscutter.database.DatabaseHelper;
import emu.grasscutter.game.Account; import emu.grasscutter.game.Account;
import emu.grasscutter.game.gacha.GachaBanner; import emu.grasscutter.game.gacha.GachaBanner;
import emu.grasscutter.game.gacha.GachaManager; import emu.grasscutter.game.gacha.GachaSystem;
import emu.grasscutter.game.player.Player; import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.http.Router; import emu.grasscutter.server.http.Router;
import emu.grasscutter.tools.Tools; import emu.grasscutter.tools.Tools;
@ -108,7 +108,7 @@ public final class GachaHandler implements Router {
// Get the banner info for the banner we want. // Get the banner info for the banner we want.
int scheduleId = Integer.parseInt(request.query("scheduleId")); int scheduleId = Integer.parseInt(request.query("scheduleId"));
GachaManager manager = Grasscutter.getGameServer().getGachaManager(); GachaSystem manager = Grasscutter.getGameServer().getGachaSystem();
GachaBanner banner = manager.getGachaBanners().get(scheduleId); GachaBanner banner = manager.getGachaBanners().get(scheduleId);
// Add 5-star items. // Add 5-star items.

View File

@ -34,8 +34,8 @@ public class HandlerAvatarExpeditionGetRewardReq extends PacketHandler {
List<GameItem> items = new LinkedList<>(); List<GameItem> items = new LinkedList<>();
if (session.getServer().getExpeditionManager().getExpeditionRewardDataList().containsKey(expInfo.getExpId())) { if (session.getServer().getExpeditionSystem().getExpeditionRewardDataList().containsKey(expInfo.getExpId())) {
for (ExpeditionRewardDataList RewardDataList : session.getServer().getExpeditionManager().getExpeditionRewardDataList().get(expInfo.getExpId())) { for (ExpeditionRewardDataList RewardDataList : session.getServer().getExpeditionSystem().getExpeditionRewardDataList().get(expInfo.getExpId())) {
if(RewardDataList.getHourTime() == expInfo.getHourTime()){ if(RewardDataList.getHourTime() == expInfo.getHourTime()){
if(!RewardDataList.getExpeditionRewardData().isEmpty()){ if(!RewardDataList.getExpeditionRewardData().isEmpty()){
for (ExpeditionRewardData RewardData :RewardDataList.getExpeditionRewardData()) { for (ExpeditionRewardData RewardData :RewardDataList.getExpeditionRewardData()) {

View File

@ -14,7 +14,7 @@ public class HandlerAvatarPromoteReq extends PacketHandler {
AvatarPromoteReq req = AvatarPromoteReq.parseFrom(payload); AvatarPromoteReq req = AvatarPromoteReq.parseFrom(payload);
// Ascend avatar // Ascend avatar
session.getServer().getInventoryManager().promoteAvatar(session.getPlayer(), req.getGuid()); session.getServer().getInventorySystem().promoteAvatar(session.getPlayer(), req.getGuid());
} }
} }

View File

@ -14,7 +14,7 @@ public class HandlerAvatarSkillUpgradeReq extends PacketHandler {
AvatarSkillUpgradeReq req = AvatarSkillUpgradeReq.parseFrom(payload); AvatarSkillUpgradeReq req = AvatarSkillUpgradeReq.parseFrom(payload);
// Level up avatar talent // Level up avatar talent
session.getServer().getInventoryManager().upgradeAvatarSkill(session.getPlayer(), req.getAvatarGuid(), req.getAvatarSkillId()); session.getServer().getInventorySystem().upgradeAvatarSkill(session.getPlayer(), req.getAvatarGuid(), req.getAvatarSkillId());
} }
} }

View File

@ -14,7 +14,7 @@ public class HandlerAvatarUpgradeReq extends PacketHandler {
AvatarUpgradeReq req = AvatarUpgradeReq.parseFrom(payload); AvatarUpgradeReq req = AvatarUpgradeReq.parseFrom(payload);
// Level up avatar // Level up avatar
session.getServer().getInventoryManager().upgradeAvatar( session.getServer().getInventorySystem().upgradeAvatar(
session.getPlayer(), session.getPlayer(),
req.getAvatarGuid(), req.getAvatarGuid(),
req.getItemId(), req.getItemId(),

View File

@ -6,7 +6,7 @@ import emu.grasscutter.game.inventory.GameItem;
import emu.grasscutter.game.props.ActionReason; import emu.grasscutter.game.props.ActionReason;
import emu.grasscutter.game.shop.ShopInfo; import emu.grasscutter.game.shop.ShopInfo;
import emu.grasscutter.game.shop.ShopLimit; import emu.grasscutter.game.shop.ShopLimit;
import emu.grasscutter.game.shop.ShopManager; import emu.grasscutter.game.shop.ShopSystem;
import emu.grasscutter.net.packet.Opcodes; import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler; import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes; import emu.grasscutter.net.packet.PacketOpcodes;
@ -29,7 +29,7 @@ public class HandlerBuyGoodsReq extends PacketHandler {
@Override @Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
BuyGoodsReqOuterClass.BuyGoodsReq buyGoodsReq = BuyGoodsReqOuterClass.BuyGoodsReq.parseFrom(payload); BuyGoodsReqOuterClass.BuyGoodsReq buyGoodsReq = BuyGoodsReqOuterClass.BuyGoodsReq.parseFrom(payload);
List<ShopInfo> configShop = session.getServer().getShopManager().getShopData().get(buyGoodsReq.getShopType()); List<ShopInfo> configShop = session.getServer().getShopSystem().getShopData().get(buyGoodsReq.getShopType());
if (configShop == null) if (configShop == null)
return; return;
@ -46,7 +46,7 @@ public class HandlerBuyGoodsReq extends PacketHandler {
int bought = 0; int bought = 0;
if (shopLimit != null) { if (shopLimit != null) {
if (currentTs > shopLimit.getNextRefreshTime()) { if (currentTs > shopLimit.getNextRefreshTime()) {
shopLimit.setNextRefreshTime(ShopManager.getShopNextRefreshTime(sg)); shopLimit.setNextRefreshTime(ShopSystem.getShopNextRefreshTime(sg));
} else { } else {
bought = shopLimit.getHasBoughtInPeriod(); bought = shopLimit.getHasBoughtInPeriod();
} }
@ -65,7 +65,7 @@ public class HandlerBuyGoodsReq extends PacketHandler {
return; return;
} }
session.getPlayer().addShopLimit(sg.getGoodsId(), buyGoodsReq.getBuyCount(), ShopManager.getShopNextRefreshTime(sg)); session.getPlayer().addShopLimit(sg.getGoodsId(), buyGoodsReq.getBuyCount(), ShopSystem.getShopNextRefreshTime(sg));
GameItem item = new GameItem(GameData.getItemDataMap().get(sg.getGoodsItem().getId())); GameItem item = new GameItem(GameData.getItemDataMap().get(sg.getGoodsItem().getId()));
item.setCount(buyGoodsReq.getBuyCount() * sg.getGoodsItem().getCount()); item.setCount(buyGoodsReq.getBuyCount() * sg.getGoodsItem().getCount());
session.getPlayer().getInventory().addItem(item, ActionReason.Shop, true); // fix: not notify when got virtual item from shop session.getPlayer().getInventory().addItem(item, ActionReason.Shop, true); // fix: not notify when got virtual item from shop

View File

@ -17,7 +17,7 @@ public class HandlerCalcWeaponUpgradeReturnItemsReq extends PacketHandler {
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
CalcWeaponUpgradeReturnItemsReq req = CalcWeaponUpgradeReturnItemsReq.parseFrom(payload); CalcWeaponUpgradeReturnItemsReq req = CalcWeaponUpgradeReturnItemsReq.parseFrom(payload);
List<ItemParam> returnOres = session.getServer().getInventoryManager().calcWeaponUpgradeReturnItems( List<ItemParam> returnOres = session.getServer().getInventorySystem().calcWeaponUpgradeReturnItems(
session.getPlayer(), session.getPlayer(),
req.getTargetWeaponGuid(), req.getTargetWeaponGuid(),
req.getFoodWeaponGuidListList(), req.getFoodWeaponGuidListList(),

View File

@ -21,7 +21,7 @@ public class HandlerCombineReq extends PacketHandler {
CombineReqOuterClass.CombineReq req = CombineReqOuterClass.CombineReq.parseFrom(payload); CombineReqOuterClass.CombineReq req = CombineReqOuterClass.CombineReq.parseFrom(payload);
var result = session.getServer().getCombineManger() var result = session.getServer().getCombineSystem()
.combineItem(session.getPlayer(), req.getCombineId(), req.getCombineCount()); .combineItem(session.getPlayer(), req.getCombineId(), req.getCombineCount());
if(result == null){ if(result == null){

View File

@ -13,6 +13,6 @@ public class HandlerDestroyMaterialReq extends PacketHandler {
DestroyMaterialReq req = DestroyMaterialReq.parseFrom(payload); DestroyMaterialReq req = DestroyMaterialReq.parseFrom(payload);
// Delete items // Delete items
session.getServer().getInventoryManager().destroyMaterial(session.getPlayer(), req.getMaterialListList()); session.getServer().getInventorySystem().destroyMaterial(session.getPlayer(), req.getMaterialListList());
} }
} }

View File

@ -12,6 +12,6 @@ public class HandlerDoGachaReq extends PacketHandler {
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
DoGachaReq req = DoGachaReq.parseFrom(payload); DoGachaReq req = DoGachaReq.parseFrom(payload);
session.getServer().getGachaManager().doPulls(session.getPlayer(), req.getGachaScheduleId(), req.getGachaTimes()); session.getServer().getGachaSystem().doPulls(session.getPlayer(), req.getGachaScheduleId(), req.getGachaTimes());
} }
} }

View File

@ -13,7 +13,7 @@ public class HandlerDungeonEntryInfoReq extends PacketHandler {
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
DungeonEntryInfoReq req = DungeonEntryInfoReq.parseFrom(payload); DungeonEntryInfoReq req = DungeonEntryInfoReq.parseFrom(payload);
session.getServer().getDungeonManager().getEntryInfo(session.getPlayer(), req.getPointId()); session.getServer().getDungeonSystem().getEntryInfo(session.getPlayer(), req.getPointId());
} }
} }

View File

@ -16,7 +16,7 @@ public class HandlerGachaWishReq extends PacketHandler {
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
GachaWishReq req = GachaWishReq.parseFrom(payload); GachaWishReq req = GachaWishReq.parseFrom(payload);
GachaBanner banner = session.getServer().getGachaManager().getGachaBanners().get(req.getGachaScheduleId()); GachaBanner banner = session.getServer().getGachaSystem().getGachaBanners().get(req.getGachaScheduleId());
PlayerGachaBannerInfo gachaInfo = session.getPlayer().getGachaInfo().getBannerInfo(banner); PlayerGachaBannerInfo gachaInfo = session.getPlayer().getGachaInfo().getBannerInfo(banner);
gachaInfo.setFailedChosenItemPulls(0); gachaInfo.setFailedChosenItemPulls(0);

View File

@ -14,7 +14,7 @@ public class HandlerGetGachaInfoReq extends PacketHandler {
@Override @Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
session.send(new PacketGetGachaInfoRsp(session.getServer().getGachaManager(), session.getPlayer())); session.send(new PacketGetGachaInfoRsp(session.getServer().getGachaSystem(), session.getPlayer()));
} }
} }

View File

@ -16,7 +16,7 @@ public class HandlerGetInvestigationMonsterReq extends PacketHandler {
session.send(new PacketGetInvestigationMonsterRsp( session.send(new PacketGetInvestigationMonsterRsp(
session.getPlayer(), session.getPlayer(),
session.getServer().getWorldDataManager(), session.getServer().getWorldDataSystem(),
req.getCityIdListList())); req.getCityIdListList()));
} }

View File

@ -14,7 +14,7 @@ public class HandlerPlayerApplyEnterMpReq extends PacketHandler {
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
PlayerApplyEnterMpReq req = PlayerApplyEnterMpReq.parseFrom(payload); PlayerApplyEnterMpReq req = PlayerApplyEnterMpReq.parseFrom(payload);
session.getServer().getMultiplayerManager().applyEnterMp(session.getPlayer(), req.getTargetUid()); session.getServer().getMultiplayerSystem().applyEnterMp(session.getPlayer(), req.getTargetUid());
session.send(new PacketPlayerApplyEnterMpRsp(req.getTargetUid())); session.send(new PacketPlayerApplyEnterMpRsp(req.getTargetUid()));
} }

View File

@ -14,7 +14,7 @@ public class HandlerPlayerApplyEnterMpResultReq extends PacketHandler {
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
PlayerApplyEnterMpResultReq req = PlayerApplyEnterMpResultReq.parseFrom(payload); PlayerApplyEnterMpResultReq req = PlayerApplyEnterMpResultReq.parseFrom(payload);
session.getServer().getMultiplayerManager().applyEnterMpReply(session.getPlayer(), req.getApplyUid(), req.getIsAgreed()); session.getServer().getMultiplayerSystem().applyEnterMpReply(session.getPlayer(), req.getApplyUid(), req.getIsAgreed());
session.send(new PacketPlayerApplyEnterMpResultRsp(req.getApplyUid(), req.getIsAgreed())); session.send(new PacketPlayerApplyEnterMpResultRsp(req.getApplyUid(), req.getIsAgreed()));
} }

View File

@ -14,7 +14,7 @@ public class HandlerPlayerEnterDungeonReq extends PacketHandler {
// Auto template // Auto template
PlayerEnterDungeonReq req = PlayerEnterDungeonReq.parseFrom(payload); PlayerEnterDungeonReq req = PlayerEnterDungeonReq.parseFrom(payload);
session.getServer().getDungeonManager().enterDungeon(session.getPlayer(), req.getPointId(), req.getDungeonId()); session.getServer().getDungeonSystem().enterDungeon(session.getPlayer(), req.getPointId(), req.getDungeonId());
} }
} }

View File

@ -13,7 +13,7 @@ public class HandlerPlayerGetForceQuitBanInfoReq extends PacketHandler {
@Override @Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
if (session.getServer().getMultiplayerManager().leaveCoop(session.getPlayer())) { if (session.getServer().getMultiplayerSystem().leaveCoop(session.getPlayer())) {
// Success // Success
session.send(new PacketPlayerGetForceQuitBanInfoRsp(RetcodeOuterClass.Retcode.RET_SUCC_VALUE)); session.send(new PacketPlayerGetForceQuitBanInfoRsp(RetcodeOuterClass.Retcode.RET_SUCC_VALUE));
} else { } else {

View File

@ -10,7 +10,7 @@ public class HandlerPlayerQuitDungeonReq extends PacketHandler {
@Override @Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
session.getPlayer().getServer().getDungeonManager().exitDungeon(session.getPlayer()); session.getPlayer().getServer().getDungeonSystem().exitDungeon(session.getPlayer());
} }
} }

View File

@ -11,6 +11,6 @@ public class HandlerReliquaryDecomposeReq extends PacketHandler {
@Override @Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
ReliquaryDecomposeReq req = ReliquaryDecomposeReq.parseFrom(payload); ReliquaryDecomposeReq req = ReliquaryDecomposeReq.parseFrom(payload);
session.getServer().getCombineManger().decomposeReliquaries(session.getPlayer(), req.getConfigId(), req.getTargetCount(), req.getGuidListList()); session.getServer().getCombineSystem().decomposeReliquaries(session.getPlayer(), req.getConfigId(), req.getTargetCount(), req.getGuidListList());
} }
} }

View File

@ -13,7 +13,7 @@ public class HandlerReliquaryUpgradeReq extends PacketHandler {
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
ReliquaryUpgradeReq req = ReliquaryUpgradeReq.parseFrom(payload); ReliquaryUpgradeReq req = ReliquaryUpgradeReq.parseFrom(payload);
session.getServer().getInventoryManager().upgradeRelic(session.getPlayer(), req.getTargetReliquaryGuid(), req.getFoodReliquaryGuidListList(), req.getItemParamListList()); session.getServer().getInventorySystem().upgradeRelic(session.getPlayer(), req.getTargetReliquaryGuid(), req.getFoodReliquaryGuidListList(), req.getItemParamListList());
} }
} }

View File

@ -14,7 +14,7 @@ public class HandlerSceneKickPlayerReq extends PacketHandler {
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
SceneKickPlayerReq req = SceneKickPlayerReq.parseFrom(payload); SceneKickPlayerReq req = SceneKickPlayerReq.parseFrom(payload);
if (session.getServer().getMultiplayerManager().kickPlayer(session.getPlayer(), req.getTargetUid())) { if (session.getServer().getMultiplayerSystem().kickPlayer(session.getPlayer(), req.getTargetUid())) {
// Success // Success
session.send(new PacketSceneKickPlayerRsp(req.getTargetUid())); session.send(new PacketSceneKickPlayerRsp(req.getTargetUid()));
} else { } else {

View File

@ -13,7 +13,7 @@ public class HandlerSetEquipLockStateReq extends PacketHandler {
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
SetEquipLockStateReq req = SetEquipLockStateReq.parseFrom(payload); SetEquipLockStateReq req = SetEquipLockStateReq.parseFrom(payload);
session.getServer().getInventoryManager().lockEquip(session.getPlayer(), req.getTargetEquipGuid(), req.getIsLocked()); session.getServer().getInventorySystem().lockEquip(session.getPlayer(), req.getTargetEquipGuid(), req.getIsLocked());
} }
} }

View File

@ -12,7 +12,7 @@ public class HandlerTowerAllDataReq extends PacketHandler {
@Override @Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
session.send(new PacketTowerAllDataRsp( session.send(new PacketTowerAllDataRsp(
session.getServer().getTowerScheduleManager(), session.getServer().getTowerSystem(),
session.getPlayer().getTowerManager() session.getPlayer().getTowerManager()
)); ));
} }

View File

@ -14,7 +14,7 @@ public class HandlerUnlockAvatarTalentReq extends PacketHandler {
UnlockAvatarTalentReq req = UnlockAvatarTalentReq.parseFrom(payload); UnlockAvatarTalentReq req = UnlockAvatarTalentReq.parseFrom(payload);
// Unlock avatar const // Unlock avatar const
session.getServer().getInventoryManager().unlockAvatarConstellation(session.getPlayer(), req.getAvatarGuid()); session.getServer().getInventorySystem().unlockAvatarConstellation(session.getPlayer(), req.getAvatarGuid());
} }
} }

View File

@ -15,7 +15,7 @@ public class HandlerUseItemReq extends PacketHandler {
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
UseItemReq req = UseItemReq.parseFrom(payload); UseItemReq req = UseItemReq.parseFrom(payload);
GameItem useItem = session.getServer().getInventoryManager().useItem(session.getPlayer(), req.getTargetGuid(), req.getGuid(), req.getCount(), req.getOptionIdx()); GameItem useItem = session.getServer().getInventorySystem().useItem(session.getPlayer(), req.getTargetGuid(), req.getGuid(), req.getCount(), req.getOptionIdx());
if (useItem != null) { if (useItem != null) {
session.send(new PacketUseItemRsp(req.getTargetGuid(), useItem)); session.send(new PacketUseItemRsp(req.getTargetGuid(), useItem));
} else { } else {

View File

@ -14,7 +14,7 @@ public class HandlerWeaponAwakenReq extends PacketHandler {
WeaponAwakenReq req = WeaponAwakenReq.parseFrom(payload); WeaponAwakenReq req = WeaponAwakenReq.parseFrom(payload);
// Weapon refinement // Weapon refinement
session.getServer().getInventoryManager().refineWeapon(session.getPlayer(), req.getTargetWeaponGuid(), req.getItemGuid()); session.getServer().getInventorySystem().refineWeapon(session.getPlayer(), req.getTargetWeaponGuid(), req.getItemGuid());
} }
} }

View File

@ -14,7 +14,7 @@ public class HandlerWeaponPromoteReq extends PacketHandler {
WeaponPromoteReq req = WeaponPromoteReq.parseFrom(payload); WeaponPromoteReq req = WeaponPromoteReq.parseFrom(payload);
// Ascend weapon // Ascend weapon
session.getServer().getInventoryManager().promoteWeapon(session.getPlayer(), req.getTargetWeaponGuid()); session.getServer().getInventorySystem().promoteWeapon(session.getPlayer(), req.getTargetWeaponGuid());
} }
} }

View File

@ -14,7 +14,7 @@ public class HandlerWeaponUpgradeReq extends PacketHandler {
WeaponUpgradeReq req = WeaponUpgradeReq.parseFrom(payload); WeaponUpgradeReq req = WeaponUpgradeReq.parseFrom(payload);
// Level up weapon // Level up weapon
session.getServer().getInventoryManager().upgradeWeapon( session.getServer().getInventorySystem().upgradeWeapon(
session.getPlayer(), session.getPlayer(),
req.getTargetWeaponGuid(), req.getTargetWeaponGuid(),
req.getFoodWeaponGuidListList(), req.getFoodWeaponGuidListList(),

View File

@ -1,13 +1,13 @@
package emu.grasscutter.server.packet.send; package emu.grasscutter.server.packet.send;
import emu.grasscutter.game.gacha.GachaManager; import emu.grasscutter.game.gacha.GachaSystem;
import emu.grasscutter.game.player.Player; import emu.grasscutter.game.player.Player;
import emu.grasscutter.net.packet.BasePacket; import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes; import emu.grasscutter.net.packet.PacketOpcodes;
public class PacketGetGachaInfoRsp extends BasePacket { public class PacketGetGachaInfoRsp extends BasePacket {
public PacketGetGachaInfoRsp(GachaManager manager, Player player) { public PacketGetGachaInfoRsp(GachaSystem manager, Player player) {
super(PacketOpcodes.GetGachaInfoRsp); super(PacketOpcodes.GetGachaInfoRsp);
this.setData(manager.toProto(player)); this.setData(manager.toProto(player));

View File

@ -1,7 +1,7 @@
package emu.grasscutter.server.packet.send; package emu.grasscutter.server.packet.send;
import emu.grasscutter.game.player.Player; import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.world.WorldDataManager; import emu.grasscutter.game.world.WorldDataSystem;
import emu.grasscutter.net.packet.BasePacket; import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes; import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.GetActivityInfoRspOuterClass; import emu.grasscutter.net.proto.GetActivityInfoRspOuterClass;
@ -11,7 +11,7 @@ import java.util.List;
public class PacketGetInvestigationMonsterRsp extends BasePacket { public class PacketGetInvestigationMonsterRsp extends BasePacket {
public PacketGetInvestigationMonsterRsp(Player player, WorldDataManager worldDataManager, List<Integer> cityIdListList) { public PacketGetInvestigationMonsterRsp(Player player, WorldDataSystem worldDataManager, List<Integer> cityIdListList) {
super(PacketOpcodes.GetInvestigationMonsterRsp); super(PacketOpcodes.GetInvestigationMonsterRsp);

View File

@ -4,7 +4,7 @@ import emu.grasscutter.Grasscutter;
import emu.grasscutter.game.player.Player; import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.shop.ShopInfo; import emu.grasscutter.game.shop.ShopInfo;
import emu.grasscutter.game.shop.ShopLimit; import emu.grasscutter.game.shop.ShopLimit;
import emu.grasscutter.game.shop.ShopManager; import emu.grasscutter.game.shop.ShopSystem;
import emu.grasscutter.net.packet.BasePacket; import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes; import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.GetShopRspOuterClass; import emu.grasscutter.net.proto.GetShopRspOuterClass;
@ -27,7 +27,7 @@ public class PacketGetShopRsp extends BasePacket {
.setCityId(1) //mock .setCityId(1) //mock
.setCityReputationLevel(10); //mock .setCityReputationLevel(10); //mock
ShopManager manager = Grasscutter.getGameServer().getShopManager(); ShopSystem manager = Grasscutter.getGameServer().getShopSystem();
if (manager.getShopData().get(shopType) != null) { if (manager.getShopData().get(shopType) != null) {
List<ShopInfo> list = manager.getShopData().get(shopType); List<ShopInfo> list = manager.getShopData().get(shopType);
List<ShopGoods> goodsList = new ArrayList<>(); List<ShopGoods> goodsList = new ArrayList<>();
@ -54,7 +54,7 @@ public class PacketGetShopRsp extends BasePacket {
int currentTs = Utils.getCurrentSeconds(); int currentTs = Utils.getCurrentSeconds();
ShopLimit currentShopLimit = inv.getGoodsLimit(info.getGoodsId()); ShopLimit currentShopLimit = inv.getGoodsLimit(info.getGoodsId());
int nextRefreshTime = ShopManager.getShopNextRefreshTime(info); int nextRefreshTime = ShopSystem.getShopNextRefreshTime(info);
if (currentShopLimit != null) { if (currentShopLimit != null) {
if (currentShopLimit.getNextRefreshTime() < currentTs) { // second game day if (currentShopLimit.getNextRefreshTime() < currentTs) { // second game day
currentShopLimit.setHasBoughtInPeriod(0); currentShopLimit.setHasBoughtInPeriod(0);

View File

@ -1,7 +1,7 @@
package emu.grasscutter.server.packet.send; package emu.grasscutter.server.packet.send;
import emu.grasscutter.game.tower.TowerManager; import emu.grasscutter.game.tower.TowerManager;
import emu.grasscutter.game.tower.TowerScheduleManager; import emu.grasscutter.game.tower.TowerSystem;
import emu.grasscutter.net.packet.BasePacket; import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes; import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.TowerAllDataRspOuterClass.TowerAllDataRsp; import emu.grasscutter.net.proto.TowerAllDataRspOuterClass.TowerAllDataRsp;
@ -17,7 +17,7 @@ import java.util.stream.IntStream;
public class PacketTowerAllDataRsp extends BasePacket { public class PacketTowerAllDataRsp extends BasePacket {
public PacketTowerAllDataRsp(TowerScheduleManager towerScheduleManager, TowerManager towerManager) { public PacketTowerAllDataRsp(TowerSystem towerScheduleManager, TowerManager towerManager) {
super(PacketOpcodes.TowerAllDataRsp); super(PacketOpcodes.TowerAllDataRsp);
var recordList = towerManager.getRecordMap().values().stream() var recordList = towerManager.getRecordMap().values().stream()

View File

@ -1,7 +1,7 @@
package emu.grasscutter.task.tasks; package emu.grasscutter.task.tasks;
import emu.grasscutter.Grasscutter; import emu.grasscutter.Grasscutter;
import emu.grasscutter.game.managers.AnnouncementManager; import emu.grasscutter.game.managers.AnnouncementSystem;
import emu.grasscutter.task.Task; import emu.grasscutter.task.Task;
import emu.grasscutter.task.TaskHandler; import emu.grasscutter.task.TaskHandler;
import org.quartz.JobExecutionContext; import org.quartz.JobExecutionContext;
@ -29,11 +29,11 @@ public final class AnnouncementTask extends TaskHandler {
@Override @Override
public synchronized void execute(JobExecutionContext context) throws JobExecutionException { public synchronized void execute(JobExecutionContext context) throws JobExecutionException {
var current = new Date(); var current = new Date();
var announceConfigItems = Grasscutter.getGameServer().getAnnouncementManager().getAnnounceConfigItemMap().values().stream() var announceConfigItems = Grasscutter.getGameServer().getAnnouncementSystem().getAnnounceConfigItemMap().values().stream()
.filter(AnnouncementManager.AnnounceConfigItem::isTick) .filter(AnnouncementSystem.AnnounceConfigItem::isTick)
.filter(i -> current.after(i.getBeginTime())) .filter(i -> current.after(i.getBeginTime()))
.filter(i -> current.before(i.getEndTime())) .filter(i -> current.before(i.getEndTime()))
.collect(Collectors.toMap(AnnouncementManager.AnnounceConfigItem::getTemplateId, y -> y)); .collect(Collectors.toMap(AnnouncementSystem.AnnounceConfigItem::getTemplateId, y -> y));
announceConfigItems.values().forEach(i -> intervalMap.compute(i.getTemplateId(), (k,v) -> v == null ? 1 : v + 1)); announceConfigItems.values().forEach(i -> intervalMap.compute(i.getTemplateId(), (k,v) -> v == null ? 1 : v + 1));
@ -43,7 +43,7 @@ public final class AnnouncementTask extends TaskHandler {
.map(i -> announceConfigItems.get(i.getKey())) .map(i -> announceConfigItems.get(i.getKey()))
.toList(); .toList();
Grasscutter.getGameServer().getAnnouncementManager().broadcast(toSend); Grasscutter.getGameServer().getAnnouncementSystem().broadcast(toSend);
Grasscutter.getLogger().debug("Broadcast {} announcement(s) to all online players", toSend.size()); Grasscutter.getLogger().debug("Broadcast {} announcement(s) to all online players", toSend.size());
// clear the interval count // clear the interval count