diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/FoodBuffer.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/FoodBuffer.java deleted file mode 100644 index 843844c36..000000000 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/FoodBuffer.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.ljsd.jieling.handler.map; - -public class FoodBuffer { - - private int foodId; - - private int remainStep; - - public FoodBuffer() { - } - - public FoodBuffer(int foodId, int remainStep) { - this.foodId = foodId; - this.remainStep = remainStep; - } - - public int getFoodId() { - return foodId; - } - - public int getRemainStep() { - return remainStep; - } - - public void setFoodId(int foodId) { - this.foodId = foodId; - } - - public void setRemainStep(int remainStep) { - this.remainStep = remainStep; - } -} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java index 8245004ba..55c4f1302 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java @@ -797,7 +797,7 @@ public class MapLogic { mapManager.setCurMapId(0); mapManager.setTotalStep(0); mapManager.setTriggerXY(0); - mapManager.setFoodBuffers(new ArrayList<>()); + mapManager.setFoodBufferMap(new HashMap<>()); TemporaryItems temporaryItems = mapManager.getTemporaryItems(); if (temporaryItems != null) { ItemUtil.addTemporaryItemToBag(user, temporaryItems, needTemporaryItem); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java index ff292d3c0..9d762c2f6 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java @@ -37,7 +37,7 @@ public class MapManager extends MongoBase { private Map crossMapInfos = new ConcurrentHashMap<>(); - private List foodBuffers = new ArrayList(); + private Map foodBufferMap = new HashMap<>(); private Map allMissionProgress = new ConcurrentHashMap<>(); @@ -164,33 +164,38 @@ public class MapManager extends MongoBase { this.temporaryItems = temporaryItems; } - public List getFoodBuffers() { - return foodBuffers; - } public void eatFood(int foodId,int remainStep){ - this.foodBuffers.add(new FoodBuffer(foodId,remainStep)); - updateString( "foodBuffers", foodBuffers); + int finalRemainStep = remainStep; + if(this.foodBufferMap.containsKey(foodId)){ + finalRemainStep = this.foodBufferMap.get(foodId); + } + this.foodBufferMap.put(foodId,finalRemainStep); + updateString( "foodBuffers."+foodId, this.foodBufferMap.get(foodId)); } - public void setFoodBuffers(List foodBuffers) { - updateString( "foodBuffers", foodBuffers); - this.foodBuffers = foodBuffers; - } + public void updateFoodBufferByStep(int step){ - if(step>0 && !foodBuffers.isEmpty()){ - Iterator iterator = foodBuffers.iterator(); - while (iterator.hasNext()){ - FoodBuffer foodBuffer = iterator.next(); - int remainStep = foodBuffer.getRemainStep() - step; - if(foodBuffer.getRemainStep() - step <=0){ - iterator.remove(); - continue; + if(step>0 && !foodBufferMap.isEmpty()){ + Set removeFoodIds = new HashSet<>(); + Set> entries = foodBufferMap.entrySet(); + for(Map.Entry item : entries){ + Integer foodId = item.getKey(); + Integer remainStep = item.getValue(); + int finalRemainStep = remainStep - step; + if(finalRemainStep<=0){ + removeFoodIds.add(foodId); + continue; } - foodBuffer.setRemainStep(remainStep); + foodBufferMap.put(foodId,finalRemainStep); } - updateString( "foodBuffers", foodBuffers); + if(!removeFoodIds.isEmpty()){ + for(Integer removeFoodId :removeFoodIds ){ + foodBufferMap.remove(removeFoodId); + } + } + updateString( "foodBuffers", foodBufferMap); } } @@ -234,4 +239,13 @@ public class MapManager extends MongoBase { public int getLastUpdateEnergyTime() { return lastUpdateEnergyTime; } + + public Map getFoodBufferMap() { + return foodBufferMap; + } + + public void setFoodBufferMap(Map foodBufferMap) { + updateString("foodBufferMap", foodBufferMap); + this.foodBufferMap = foodBufferMap; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java index 9c8f5ed88..933c8a9f0 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java @@ -2,11 +2,9 @@ package com.ljsd.jieling.logic.fight; import com.ljsd.GameApplication; -import com.ljsd.common.mogodb.LjsdMongoTemplate; import com.ljsd.jieling.config.*; import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.db.mongo.MongoUtil; -import com.ljsd.jieling.handler.map.FoodBuffer; import com.ljsd.jieling.handler.map.MapManager; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.AdventureSeasonInfo; @@ -347,10 +345,9 @@ public class CombatLogic { public Map attributeByEatFood( User user,int type,int target){ Map foddAddResult = new HashMap<>(); MapManager mapManager = user.getMapManager(); - List foodBuffers = mapManager.getFoodBuffers(); - for(FoodBuffer foodBuffer : foodBuffers){ - int foodId = foodBuffer.getFoodId(); - + Map foodBufferMap = mapManager.getFoodBufferMap(); + for(Map.Entry foodBuffer : foodBufferMap.entrySet()){ + int foodId = foodBuffer.getKey(); SFoodsConfig sFoodsConfig = SFoodsConfig.getsFoodsConfigByFoodId(foodId); int typeTmp = sFoodsConfig.getType(); int targetTmp = sFoodsConfig.getTarget();