From be8fbcbc025edfd5069ef4eeb5a4600773aaa09f Mon Sep 17 00:00:00 2001 From: iTruth <58349472+iTruth@users.noreply.github.com> Date: Thu, 20 Oct 2022 17:52:10 +0800 Subject: [PATCH] Fix StackOverFlow when execute /give all (#1878) * Fix StackOverFlow when execute /give all * Use more proper code --- .../java/emu/grasscutter/game/inventory/Inventory.java | 9 ++++++++- .../game/props/ItemUseAction/ItemUseGainCostume.java | 6 +++++- .../game/props/ItemUseAction/ItemUseGainFlycloak.java | 6 +++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/emu/grasscutter/game/inventory/Inventory.java b/src/main/java/emu/grasscutter/game/inventory/Inventory.java index 38fb268e..cb5ac633 100644 --- a/src/main/java/emu/grasscutter/game/inventory/Inventory.java +++ b/src/main/java/emu/grasscutter/game/inventory/Inventory.java @@ -140,7 +140,14 @@ public class Inventory extends BasePlayerManager implements Iterable<GameItem> { List<GameItem> changedItems = new ArrayList<>(); for (var item : items) { if (item.getItemId() == 0) continue; - GameItem result = putItem(item); + GameItem result = null; + try { + // putItem might throws exception + // ignore that exception and continue + result = putItem(item); + } catch (Exception e) { + e.printStackTrace(); + } if (result != null) { getPlayer().getBattlePassManager().triggerMission(WatcherTriggerType.TRIGGER_OBTAIN_MATERIAL_NUM, result.getItemId(), result.getCount()); changedItems.add(result); diff --git a/src/main/java/emu/grasscutter/game/props/ItemUseAction/ItemUseGainCostume.java b/src/main/java/emu/grasscutter/game/props/ItemUseAction/ItemUseGainCostume.java index a712f60b..67212354 100644 --- a/src/main/java/emu/grasscutter/game/props/ItemUseAction/ItemUseGainCostume.java +++ b/src/main/java/emu/grasscutter/game/props/ItemUseAction/ItemUseGainCostume.java @@ -2,6 +2,8 @@ package emu.grasscutter.game.props.ItemUseAction; import emu.grasscutter.game.props.ItemUseOp; +import emu.grasscutter.data.GameData; + public class ItemUseGainCostume extends ItemUseInt { @Override public ItemUseOp getItemUseOp() { @@ -14,7 +16,9 @@ public class ItemUseGainCostume extends ItemUseInt { @Override public boolean useItem(UseItemParams params) { - params.player.getInventory().addItem(this.i); // TODO: Currently this returns false for all virtual items - need to have a proper success/fail + if (GameData.getAvatarCostumeDataMap().containsKey(this.i)) { + params.player.addCostume(this.i); + } return true; } } diff --git a/src/main/java/emu/grasscutter/game/props/ItemUseAction/ItemUseGainFlycloak.java b/src/main/java/emu/grasscutter/game/props/ItemUseAction/ItemUseGainFlycloak.java index 4077b678..15c904c5 100644 --- a/src/main/java/emu/grasscutter/game/props/ItemUseAction/ItemUseGainFlycloak.java +++ b/src/main/java/emu/grasscutter/game/props/ItemUseAction/ItemUseGainFlycloak.java @@ -2,6 +2,8 @@ package emu.grasscutter.game.props.ItemUseAction; import emu.grasscutter.game.props.ItemUseOp; +import emu.grasscutter.data.GameData; + public class ItemUseGainFlycloak extends ItemUseInt { @Override public ItemUseOp getItemUseOp() { @@ -14,7 +16,9 @@ public class ItemUseGainFlycloak extends ItemUseInt { @Override public boolean useItem(UseItemParams params) { - params.player.getInventory().addItem(this.i); // TODO: Currently this returns false for all virtual items - need to have a proper success/fail + if (GameData.getAvatarFlycloakDataMap().containsKey(this.i)) { + params.player.addFlycloak(this.i); + } return true; } } -- GitLab