mirror of
https://github.com/Melledy/Grasscutter.git
synced 2024-11-25 20:56:28 +00:00
Small putItem refactor
This commit is contained in:
parent
bcc20c2d03
commit
bb37201105
@ -174,80 +174,86 @@ public class Inventory implements Iterable<GameItem> {
|
|||||||
InventoryTab tab = getInventoryTab(type);
|
InventoryTab tab = getInventoryTab(type);
|
||||||
|
|
||||||
// Add
|
// Add
|
||||||
if (type == ItemType.ITEM_WEAPON || type == ItemType.ITEM_RELIQUARY) {
|
switch (type) {
|
||||||
if (tab.getSize() >= tab.getMaxCapacity()) {
|
case ITEM_WEAPON:
|
||||||
return null;
|
case ITEM_RELIQUARY:
|
||||||
}
|
|
||||||
// Duplicates cause problems
|
|
||||||
item.setCount(Math.max(item.getCount(), 1));
|
|
||||||
// Adds to inventory
|
|
||||||
putItem(item, tab);
|
|
||||||
} else if (type == ItemType.ITEM_VIRTUAL) {
|
|
||||||
// Handle
|
|
||||||
this.addVirtualItem(item.getItemId(), item.getCount());
|
|
||||||
return item;
|
|
||||||
} else if (item.getItemData().getMaterialType() == MaterialType.MATERIAL_ADSORBATE) {
|
|
||||||
this.player.getEnergyManager().handlePickupElemBall(item);
|
|
||||||
return null;
|
|
||||||
} else if (item.getItemData().getMaterialType() == MaterialType.MATERIAL_AVATAR) {
|
|
||||||
// Get avatar id
|
|
||||||
int avatarId = (item.getItemId() % 1000) + 10000000;
|
|
||||||
// Dont let people give themselves extra main characters
|
|
||||||
if (avatarId == GameConstants.MAIN_CHARACTER_MALE || avatarId == GameConstants.MAIN_CHARACTER_FEMALE) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
// Add avatar
|
|
||||||
AvatarData avatarData = GameData.getAvatarDataMap().get(avatarId);
|
|
||||||
if (avatarData != null && !player.getAvatars().hasAvatar(avatarId)) {
|
|
||||||
this.getPlayer().addAvatar(new Avatar(avatarData));
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
} else if (item.getItemData().getMaterialType() == MaterialType.MATERIAL_FLYCLOAK) {
|
|
||||||
AvatarFlycloakData flycloakData = GameData.getAvatarFlycloakDataMap().get(item.getItemId());
|
|
||||||
if (flycloakData != null && !player.getFlyCloakList().contains(item.getItemId())) {
|
|
||||||
getPlayer().addFlycloak(item.getItemId());
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
} else if (item.getItemData().getMaterialType() == MaterialType.MATERIAL_COSTUME) {
|
|
||||||
AvatarCostumeData costumeData = GameData.getAvatarCostumeDataItemIdMap().get(item.getItemId());
|
|
||||||
if (costumeData != null && !player.getCostumeList().contains(costumeData.getId())) {
|
|
||||||
getPlayer().addCostume(costumeData.getId());
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
} else if (item.getItemData().getMaterialType() == MaterialType.MATERIAL_NAMECARD) {
|
|
||||||
if (!player.getNameCardList().contains(item.getItemId())) {
|
|
||||||
getPlayer().addNameCard(item.getItemId());
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
} else if (tab != null) {
|
|
||||||
GameItem existingItem = tab.getItemById(item.getItemId());
|
|
||||||
if (existingItem == null) {
|
|
||||||
// Item type didnt exist before, we will add it to main inventory map if there is enough space
|
|
||||||
if (tab.getSize() >= tab.getMaxCapacity()) {
|
if (tab.getSize() >= tab.getMaxCapacity()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
putItem(item, tab);
|
// Duplicates cause problems
|
||||||
} else {
|
item.setCount(Math.max(item.getCount(), 1));
|
||||||
// Add count
|
// Adds to inventory
|
||||||
existingItem.setCount(Math.min(existingItem.getCount() + item.getCount(), item.getItemData().getStackLimit()));
|
this.putItem(item, tab);
|
||||||
existingItem.save();
|
// Set ownership and save to db
|
||||||
return existingItem;
|
item.save();
|
||||||
}
|
return item;
|
||||||
} else {
|
case ITEM_VIRTUAL:
|
||||||
return null;
|
// Handle
|
||||||
}
|
this.addVirtualItem(item.getItemId(), item.getCount());
|
||||||
|
return item;
|
||||||
// Set ownership and save to db
|
default:
|
||||||
if (item.getItemData().getItemType() != ItemType.ITEM_VIRTUAL)
|
switch (item.getItemData().getMaterialType()) {
|
||||||
item.save();
|
case MATERIAL_ADSORBATE:
|
||||||
|
this.player.getEnergyManager().handlePickupElemBall(item);
|
||||||
return item;
|
return null;
|
||||||
|
case MATERIAL_AVATAR:
|
||||||
|
// Get avatar id
|
||||||
|
int avatarId = (item.getItemId() % 1000) + 10000000;
|
||||||
|
// Dont let people give themselves extra main characters
|
||||||
|
if (avatarId == GameConstants.MAIN_CHARACTER_MALE || avatarId == GameConstants.MAIN_CHARACTER_FEMALE) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
// Add avatar
|
||||||
|
AvatarData avatarData = GameData.getAvatarDataMap().get(avatarId);
|
||||||
|
if (avatarData != null && !this.player.getAvatars().hasAvatar(avatarId)) {
|
||||||
|
this.player.addAvatar(new Avatar(avatarData));
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
case MATERIAL_FLYCLOAK:
|
||||||
|
AvatarFlycloakData flycloakData = GameData.getAvatarFlycloakDataMap().get(item.getItemId());
|
||||||
|
if (flycloakData != null && !this.player.getFlyCloakList().contains(item.getItemId())) {
|
||||||
|
this.player.addFlycloak(item.getItemId());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
case MATERIAL_COSTUME:
|
||||||
|
AvatarCostumeData costumeData = GameData.getAvatarCostumeDataItemIdMap().get(item.getItemId());
|
||||||
|
if (costumeData != null && !this.player.getCostumeList().contains(costumeData.getId())) {
|
||||||
|
this.player.addCostume(costumeData.getId());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
case MATERIAL_NAMECARD:
|
||||||
|
if (!this.player.getNameCardList().contains(item.getItemId())) {
|
||||||
|
this.player.addNameCard(item.getItemId());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
default:
|
||||||
|
if (tab == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
GameItem existingItem = tab.getItemById(item.getItemId());
|
||||||
|
if (existingItem == null) {
|
||||||
|
// Item type didnt exist before, we will add it to main inventory map if there is enough space
|
||||||
|
if (tab.getSize() >= tab.getMaxCapacity()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
this.putItem(item, tab);
|
||||||
|
// Set ownership and save to db
|
||||||
|
item.save();
|
||||||
|
return item;
|
||||||
|
} else {
|
||||||
|
// Add count
|
||||||
|
existingItem.setCount(Math.min(existingItem.getCount() + item.getCount(), item.getItemData().getStackLimit()));
|
||||||
|
existingItem.save();
|
||||||
|
return existingItem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void putItem(GameItem item, InventoryTab tab) {
|
private synchronized void putItem(GameItem item, InventoryTab tab) {
|
||||||
getPlayer().getCodex().checkAddedItem(item);
|
this.player.getCodex().checkAddedItem(item);
|
||||||
// Set owner and guid FIRST!
|
// Set owner and guid FIRST!
|
||||||
item.setOwner(getPlayer());
|
item.setOwner(this.player);
|
||||||
// Put in item store
|
// Put in item store
|
||||||
getItems().put(item.getGuid(), item);
|
getItems().put(item.getGuid(), item);
|
||||||
if (tab != null) {
|
if (tab != null) {
|
||||||
@ -258,36 +264,36 @@ public class Inventory 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
|
||||||
getPlayer().getServer().getInventoryManager().upgradeAvatar(player, getPlayer().getTeamManager().getCurrentAvatarEntity().getAvatar(), count);
|
this.player.getServer().getInventoryManager().upgradeAvatar(this.player, this.player.getTeamManager().getCurrentAvatarEntity().getAvatar(), count);
|
||||||
case 102 -> // Adventure exp
|
case 102 -> // Adventure exp
|
||||||
getPlayer().addExpDirectly(count);
|
this.player.addExpDirectly(count);
|
||||||
case 105 -> // Companionship exp
|
case 105 -> // Companionship exp
|
||||||
getPlayer().getServer().getInventoryManager().upgradeAvatarFetterLevel(player, getPlayer().getTeamManager().getCurrentAvatarEntity().getAvatar(), count);
|
this.player.getServer().getInventoryManager().upgradeAvatarFetterLevel(this.player, this.player.getTeamManager().getCurrentAvatarEntity().getAvatar(), count);
|
||||||
case 106 -> // Resin
|
case 106 -> // Resin
|
||||||
getPlayer().getResinManager().addResin(count);
|
this.player.getResinManager().addResin(count);
|
||||||
case 201 -> // Primogem
|
case 201 -> // Primogem
|
||||||
getPlayer().setPrimogems(player.getPrimogems() + count);
|
this.player.setPrimogems(this.player.getPrimogems() + count);
|
||||||
case 202 -> // Mora
|
case 202 -> // Mora
|
||||||
getPlayer().setMora(player.getMora() + count);
|
this.player.setMora(this.player.getMora() + count);
|
||||||
case 203 -> // Genesis Crystals
|
case 203 -> // Genesis Crystals
|
||||||
getPlayer().setCrystals(player.getCrystals() + count);
|
this.player.setCrystals(this.player.getCrystals() + count);
|
||||||
case 204 -> // Home Coin
|
case 204 -> // Home Coin
|
||||||
getPlayer().setHomeCoin(player.getHomeCoin() + count);
|
this.player.setHomeCoin(this.player.getHomeCoin() + count);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getVirtualItemCount(int itemId) {
|
private int getVirtualItemCount(int itemId) {
|
||||||
switch (itemId) {
|
switch (itemId) {
|
||||||
case 201: // Primogem
|
case 201: // Primogem
|
||||||
return player.getPrimogems();
|
return this.player.getPrimogems();
|
||||||
case 202: // Mora
|
case 202: // Mora
|
||||||
return player.getMora();
|
return this.player.getMora();
|
||||||
case 203: // Genesis Crystals
|
case 203: // Genesis Crystals
|
||||||
return player.getCrystals();
|
return this.player.getCrystals();
|
||||||
case 106: // Resin
|
case 106: // Resin
|
||||||
return player.getProperty(PlayerProperty.PROP_PLAYER_RESIN);
|
return this.player.getProperty(PlayerProperty.PROP_PLAYER_RESIN);
|
||||||
case 204: // Home Coin
|
case 204: // Home Coin
|
||||||
return player.getHomeCoin();
|
return this.player.getHomeCoin();
|
||||||
default:
|
default:
|
||||||
GameItem item = getInventoryTab(ItemType.ITEM_MATERIAL).getItemById(itemId); // What if we ever want to operate on weapons/relics/furniture? :S
|
GameItem item = getInventoryTab(ItemType.ITEM_MATERIAL).getItemById(itemId); // What if we ever want to operate on weapons/relics/furniture? :S
|
||||||
return (item == null) ? 0 : item.getCount();
|
return (item == null) ? 0 : item.getCount();
|
||||||
|
Loading…
Reference in New Issue
Block a user