mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-02-03 22:52:56 +08:00
Notify client of unlocked recipies on login.
This commit is contained in:
parent
8484a535f4
commit
a957b8c5b8
@ -0,0 +1,78 @@
|
|||||||
|
package emu.grasscutter.game.managers;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Dictionary;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import emu.grasscutter.data.GameData;
|
||||||
|
import emu.grasscutter.game.player.Player;
|
||||||
|
import emu.grasscutter.net.proto.CookRecipeDataOuterClass;
|
||||||
|
import emu.grasscutter.server.packet.send.PacketCookDataNotify;
|
||||||
|
|
||||||
|
public class CookingManager {
|
||||||
|
private static Set<Integer> defaultUnlockedRecipies;
|
||||||
|
private final Player player;
|
||||||
|
|
||||||
|
public CookingManager(Player player) {
|
||||||
|
this.player = player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void initialize() {
|
||||||
|
// Initialize the set of recipies that are unlocked by default.
|
||||||
|
defaultUnlockedRecipies = new HashSet<>();
|
||||||
|
|
||||||
|
for (var recipe : GameData.getCookRecipeDataMap().values()) {
|
||||||
|
if (recipe.isDefaultUnlocked()) {
|
||||||
|
defaultUnlockedRecipies.add(recipe.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/********************
|
||||||
|
* Perform cooking.
|
||||||
|
********************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************
|
||||||
|
* Notify unlocked recipies.
|
||||||
|
********************/
|
||||||
|
private void addDefaultUnlocked() {
|
||||||
|
// Get recipies that are already unlocked.
|
||||||
|
var unlockedRecipies = this.player.getUnlockedRecipies();
|
||||||
|
|
||||||
|
// Get recipies that should be unlocked by default but aren't.
|
||||||
|
var additionalRecipies = new HashSet<>(defaultUnlockedRecipies);
|
||||||
|
additionalRecipies.removeAll(unlockedRecipies.keySet());
|
||||||
|
|
||||||
|
// Add them to the player.
|
||||||
|
for (int id : additionalRecipies) {
|
||||||
|
unlockedRecipies.put(id, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendCookDataNofity() {
|
||||||
|
// Default unlocked recipies to player if they don't have them yet.
|
||||||
|
this.addDefaultUnlocked();
|
||||||
|
|
||||||
|
// Get unlocked recipies.
|
||||||
|
var unlockedRecipies = this.player.getUnlockedRecipies();
|
||||||
|
|
||||||
|
// Construct CookRecipeData protos.
|
||||||
|
List<CookRecipeDataOuterClass.CookRecipeData> data = new ArrayList<>();
|
||||||
|
for (var recipe : unlockedRecipies.entrySet()) {
|
||||||
|
int recipeId = recipe.getKey();
|
||||||
|
int proficiency = recipe.getValue();
|
||||||
|
|
||||||
|
CookRecipeDataOuterClass.CookRecipeData proto = CookRecipeDataOuterClass.CookRecipeData.newBuilder()
|
||||||
|
.setRecipeId(recipeId)
|
||||||
|
.setProficiency(proficiency)
|
||||||
|
.build();
|
||||||
|
data.add(proto);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send packet.
|
||||||
|
this.player.sendPacket(new PacketCookDataNotify(data));
|
||||||
|
}
|
||||||
|
}
|
@ -30,6 +30,7 @@ import emu.grasscutter.game.inventory.GameItem;
|
|||||||
import emu.grasscutter.game.inventory.Inventory;
|
import emu.grasscutter.game.inventory.Inventory;
|
||||||
import emu.grasscutter.game.mail.Mail;
|
import emu.grasscutter.game.mail.Mail;
|
||||||
import emu.grasscutter.game.mail.MailHandler;
|
import emu.grasscutter.game.mail.MailHandler;
|
||||||
|
import emu.grasscutter.game.managers.CookingManager;
|
||||||
import emu.grasscutter.game.managers.FurnitureManager;
|
import emu.grasscutter.game.managers.FurnitureManager;
|
||||||
import emu.grasscutter.game.managers.InsectCaptureManager;
|
import emu.grasscutter.game.managers.InsectCaptureManager;
|
||||||
import emu.grasscutter.game.managers.ResinManager;
|
import emu.grasscutter.game.managers.ResinManager;
|
||||||
@ -113,6 +114,7 @@ public class Player {
|
|||||||
private Set<Integer> unlockedFurniture;
|
private Set<Integer> unlockedFurniture;
|
||||||
private Set<Integer> unlockedFurnitureSuite;
|
private Set<Integer> unlockedFurnitureSuite;
|
||||||
private List<ActiveForgeData> activeForges;
|
private List<ActiveForgeData> activeForges;
|
||||||
|
private Map<Integer, Integer> unlockedRecipies;
|
||||||
|
|
||||||
private Integer widgetId;
|
private Integer widgetId;
|
||||||
|
|
||||||
@ -184,6 +186,8 @@ public class Player {
|
|||||||
@Transient private GameHome home;
|
@Transient private GameHome home;
|
||||||
@Transient private FurnitureManager furnitureManager;
|
@Transient private FurnitureManager furnitureManager;
|
||||||
@Transient private BattlePassManager battlePassManager;
|
@Transient private BattlePassManager battlePassManager;
|
||||||
|
@Transient private CookingManager cookingManager;
|
||||||
|
// @Transient private
|
||||||
@Getter @Transient private ActivityManager activityManager;
|
@Getter @Transient private ActivityManager activityManager;
|
||||||
|
|
||||||
@Transient private CollectionManager collectionManager;
|
@Transient private CollectionManager collectionManager;
|
||||||
@ -228,6 +232,7 @@ public class Player {
|
|||||||
this.unlockedFurniture = new HashSet<>();
|
this.unlockedFurniture = new HashSet<>();
|
||||||
this.unlockedFurnitureSuite = new HashSet<>();
|
this.unlockedFurnitureSuite = new HashSet<>();
|
||||||
this.activeForges = new ArrayList<>();
|
this.activeForges = new ArrayList<>();
|
||||||
|
this.unlockedRecipies = new HashMap<>();
|
||||||
|
|
||||||
this.setSceneId(3);
|
this.setSceneId(3);
|
||||||
this.setRegionId(1);
|
this.setRegionId(1);
|
||||||
@ -254,6 +259,7 @@ public class Player {
|
|||||||
this.resinManager = new ResinManager(this);
|
this.resinManager = new ResinManager(this);
|
||||||
this.forgingManager = new ForgingManager(this);
|
this.forgingManager = new ForgingManager(this);
|
||||||
this.furnitureManager = new FurnitureManager(this);
|
this.furnitureManager = new FurnitureManager(this);
|
||||||
|
this.cookingManager = new CookingManager(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// On player creation
|
// On player creation
|
||||||
@ -288,6 +294,7 @@ public class Player {
|
|||||||
this.deforestationManager = new DeforestationManager(this);
|
this.deforestationManager = new DeforestationManager(this);
|
||||||
this.forgingManager = new ForgingManager(this);
|
this.forgingManager = new ForgingManager(this);
|
||||||
this.furnitureManager = new FurnitureManager(this);
|
this.furnitureManager = new FurnitureManager(this);
|
||||||
|
this.cookingManager = new CookingManager(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getUid() {
|
public int getUid() {
|
||||||
@ -666,6 +673,10 @@ public class Player {
|
|||||||
return this.activeForges;
|
return this.activeForges;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<Integer, Integer> getUnlockedRecipies() {
|
||||||
|
return this.unlockedRecipies;
|
||||||
|
}
|
||||||
|
|
||||||
public MpSettingType getMpSetting() {
|
public MpSettingType getMpSetting() {
|
||||||
return MpSettingType.MP_SETTING_TYPE_ENTER_AFTER_APPLY; // TEMP
|
return MpSettingType.MP_SETTING_TYPE_ENTER_AFTER_APPLY; // TEMP
|
||||||
}
|
}
|
||||||
@ -1298,6 +1309,10 @@ public class Player {
|
|||||||
return battlePassManager;
|
return battlePassManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CookingManager getCookingManager() {
|
||||||
|
return cookingManager;
|
||||||
|
}
|
||||||
|
|
||||||
public void loadBattlePassManager() {
|
public void loadBattlePassManager() {
|
||||||
if (this.battlePassManager != null) return;
|
if (this.battlePassManager != null) return;
|
||||||
this.battlePassManager = DatabaseHelper.loadBattlePass(this);
|
this.battlePassManager = DatabaseHelper.loadBattlePass(this);
|
||||||
@ -1506,6 +1521,7 @@ public class Player {
|
|||||||
session.send(new PacketCombineDataNotify(this.unlockedCombines));
|
session.send(new PacketCombineDataNotify(this.unlockedCombines));
|
||||||
this.forgingManager.sendForgeDataNotify();
|
this.forgingManager.sendForgeDataNotify();
|
||||||
this.resinManager.onPlayerLogin();
|
this.resinManager.onPlayerLogin();
|
||||||
|
this.cookingManager.sendCookDataNofity();
|
||||||
getTodayMoonCard(); // The timer works at 0:0, some users log in after that, use this method to check if they have received a reward today or not. If not, send the reward.
|
getTodayMoonCard(); // The timer works at 0:0, some users log in after that, use this method to check if they have received a reward today or not. If not, send the reward.
|
||||||
|
|
||||||
// Battle Pass trigger
|
// Battle Pass trigger
|
||||||
|
@ -12,6 +12,7 @@ import emu.grasscutter.game.dungeons.DungeonManager;
|
|||||||
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.ExpeditionManager;
|
||||||
import emu.grasscutter.game.gacha.GachaManager;
|
import emu.grasscutter.game.gacha.GachaManager;
|
||||||
|
import emu.grasscutter.game.managers.CookingManager;
|
||||||
import emu.grasscutter.game.managers.InventoryManager;
|
import emu.grasscutter.game.managers.InventoryManager;
|
||||||
import emu.grasscutter.game.managers.MultiplayerManager;
|
import emu.grasscutter.game.managers.MultiplayerManager;
|
||||||
import emu.grasscutter.game.managers.chat.ChatManager;
|
import emu.grasscutter.game.managers.chat.ChatManager;
|
||||||
@ -88,6 +89,7 @@ public final class GameServer extends KcpServer {
|
|||||||
DungeonChallenge.initialize();
|
DungeonChallenge.initialize();
|
||||||
EnergyManager.initialize();
|
EnergyManager.initialize();
|
||||||
StaminaManager.initialize();
|
StaminaManager.initialize();
|
||||||
|
CookingManager.initialize();
|
||||||
|
|
||||||
this.address = address;
|
this.address = address;
|
||||||
this.packetHandler = new GameServerPacketHandler(PacketHandler.class);
|
this.packetHandler = new GameServerPacketHandler(PacketHandler.class);
|
||||||
|
@ -0,0 +1,21 @@
|
|||||||
|
package emu.grasscutter.server.packet.send;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import emu.grasscutter.net.packet.BasePacket;
|
||||||
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
|
import emu.grasscutter.net.proto.CookDataNotifyOuterClass.CookDataNotify;
|
||||||
|
import emu.grasscutter.net.proto.CookRecipeDataOuterClass.CookRecipeData;
|
||||||
|
|
||||||
|
public class PacketCookDataNotify extends BasePacket {
|
||||||
|
|
||||||
|
public PacketCookDataNotify(List<CookRecipeData> recipies) {
|
||||||
|
super(PacketOpcodes.CookDataNotify);
|
||||||
|
|
||||||
|
CookDataNotify proto = CookDataNotify.newBuilder()
|
||||||
|
.addAllRecipeDataList(recipies)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
this.setData(proto);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user