Refactor various inventory functions

This commit is contained in:
Melledy
2025-11-12 03:33:00 -08:00
parent 2c74441583
commit 281d61d0ab
14 changed files with 61 additions and 87 deletions

View File

@@ -1,11 +1,9 @@
package emu.nebula.data.resources; package emu.nebula.data.resources;
import java.util.ArrayList;
import java.util.List;
import emu.nebula.data.BaseDef; import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType; import emu.nebula.data.ResourceType;
import emu.nebula.game.instance.InstanceData; import emu.nebula.game.instance.InstanceData;
import emu.nebula.game.inventory.ItemRewardList;
import emu.nebula.game.inventory.ItemRewardParam; import emu.nebula.game.inventory.ItemRewardParam;
import emu.nebula.util.JsonUtils; import emu.nebula.util.JsonUtils;
@@ -21,8 +19,8 @@ public class CharGemInstanceDef extends BaseDef implements InstanceData {
private int EnergyConsume; private int EnergyConsume;
private String BaseAwardPreview; private String BaseAwardPreview;
private transient List<ItemRewardParam> firstRewards; private transient ItemRewardList firstRewards;
private transient List<ItemRewardParam> rewards; private transient ItemRewardList rewards;
@Override @Override
public int getId() { public int getId() {
@@ -32,8 +30,8 @@ public class CharGemInstanceDef extends BaseDef implements InstanceData {
@Override @Override
public void onLoad() { public void onLoad() {
// Init reward lists // Init reward lists
this.firstRewards = new ArrayList<>(); this.firstRewards = new ItemRewardList();
this.rewards = new ArrayList<>(); this.rewards = new ItemRewardList();
// Parse rewards // Parse rewards
var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class); var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class);

View File

@@ -1,12 +1,10 @@
package emu.nebula.data.resources; package emu.nebula.data.resources;
import java.util.List;
import emu.nebula.data.BaseDef; import emu.nebula.data.BaseDef;
import emu.nebula.data.GameData; import emu.nebula.data.GameData;
import emu.nebula.data.ResourceType; import emu.nebula.data.ResourceType;
import emu.nebula.game.instance.InstanceData; import emu.nebula.game.instance.InstanceData;
import emu.nebula.game.inventory.ItemRewardParam; import emu.nebula.game.inventory.ItemRewardList;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
@@ -36,18 +34,18 @@ public class DailyInstanceDef extends BaseDef implements InstanceData {
@Override @Override
@Deprecated @Deprecated
public List<ItemRewardParam> getFirstRewards() { public ItemRewardList getFirstRewards() {
return null; return null;
} }
@Override @Override
@Deprecated @Deprecated
public List<ItemRewardParam> getRewards() { public ItemRewardList getRewards() {
return null; return null;
} }
@Override @Override
public List<ItemRewardParam> getFirstRewards(int rewardType) { public ItemRewardList getFirstRewards(int rewardType) {
var data = this.getRewardGroup(rewardType); var data = this.getRewardGroup(rewardType);
if (data != null) { if (data != null) {
@@ -58,7 +56,7 @@ public class DailyInstanceDef extends BaseDef implements InstanceData {
} }
@Override @Override
public List<ItemRewardParam> getRewards(int rewardType) { public ItemRewardList getRewards(int rewardType) {
var data = this.getRewardGroup(rewardType); var data = this.getRewardGroup(rewardType);
if (data != null) { if (data != null) {

View File

@@ -1,12 +1,11 @@
package emu.nebula.data.resources; package emu.nebula.data.resources;
import java.util.ArrayList;
import java.util.List;
import emu.nebula.data.BaseDef; import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType; import emu.nebula.data.ResourceType;
import emu.nebula.game.inventory.ItemRewardList;
import emu.nebula.game.inventory.ItemRewardParam; import emu.nebula.game.inventory.ItemRewardParam;
import emu.nebula.util.JsonUtils; import emu.nebula.util.JsonUtils;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
@@ -16,8 +15,8 @@ public class DailyInstanceRewardGroupDef extends BaseDef {
private int DailyRewardType; private int DailyRewardType;
private String BaseAwardPreview; private String BaseAwardPreview;
private transient List<ItemRewardParam> firstRewards; private transient ItemRewardList firstRewards;
private transient List<ItemRewardParam> rewards; private transient ItemRewardList rewards;
@Override @Override
public int getId() { public int getId() {
@@ -27,8 +26,8 @@ public class DailyInstanceRewardGroupDef extends BaseDef {
@Override @Override
public void onLoad() { public void onLoad() {
// Init reward lists // Init reward lists
this.firstRewards = new ArrayList<>(); this.firstRewards = new ItemRewardList();
this.rewards = new ArrayList<>(); this.rewards = new ItemRewardList();
// Parse rewards // Parse rewards
var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class); var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class);

View File

@@ -1,11 +1,9 @@
package emu.nebula.data.resources; package emu.nebula.data.resources;
import java.util.ArrayList;
import java.util.List;
import emu.nebula.data.BaseDef; import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType; import emu.nebula.data.ResourceType;
import emu.nebula.game.instance.InstanceData; import emu.nebula.game.instance.InstanceData;
import emu.nebula.game.inventory.ItemRewardList;
import emu.nebula.game.inventory.ItemRewardParam; import emu.nebula.game.inventory.ItemRewardParam;
import emu.nebula.util.JsonUtils; import emu.nebula.util.JsonUtils;
@@ -21,8 +19,8 @@ public class RegionBossLevelDef extends BaseDef implements InstanceData {
private int EnergyConsume; private int EnergyConsume;
private String BaseAwardPreview; private String BaseAwardPreview;
private transient List<ItemRewardParam> firstRewards; private transient ItemRewardList firstRewards;
private transient List<ItemRewardParam> rewards; private transient ItemRewardList rewards;
@Override @Override
public int getId() { public int getId() {
@@ -32,8 +30,8 @@ public class RegionBossLevelDef extends BaseDef implements InstanceData {
@Override @Override
public void onLoad() { public void onLoad() {
// Init reward lists // Init reward lists
this.firstRewards = new ArrayList<>(); this.firstRewards = new ItemRewardList();
this.rewards = new ArrayList<>(); this.rewards = new ItemRewardList();
// Parse rewards // Parse rewards
var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class); var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class);

View File

@@ -1,11 +1,9 @@
package emu.nebula.data.resources; package emu.nebula.data.resources;
import java.util.ArrayList;
import java.util.List;
import emu.nebula.data.BaseDef; import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType; import emu.nebula.data.ResourceType;
import emu.nebula.game.instance.InstanceData; import emu.nebula.game.instance.InstanceData;
import emu.nebula.game.inventory.ItemRewardList;
import emu.nebula.game.inventory.ItemRewardParam; import emu.nebula.game.inventory.ItemRewardParam;
import emu.nebula.util.JsonUtils; import emu.nebula.util.JsonUtils;
import lombok.Getter; import lombok.Getter;
@@ -20,8 +18,8 @@ public class SkillInstanceDef extends BaseDef implements InstanceData {
private int EnergyConsume; private int EnergyConsume;
private String BaseAwardPreview; private String BaseAwardPreview;
private transient List<ItemRewardParam> firstRewards; private transient ItemRewardList firstRewards;
private transient List<ItemRewardParam> rewards; private transient ItemRewardList rewards;
@Override @Override
public int getId() { public int getId() {
@@ -31,8 +29,8 @@ public class SkillInstanceDef extends BaseDef implements InstanceData {
@Override @Override
public void onLoad() { public void onLoad() {
// Init reward lists // Init reward lists
this.firstRewards = new ArrayList<>(); this.firstRewards = new ItemRewardList();
this.rewards = new ArrayList<>(); this.rewards = new ItemRewardList();
// Parse rewards // Parse rewards
var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class); var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class);

View File

@@ -1,11 +1,9 @@
package emu.nebula.data.resources; package emu.nebula.data.resources;
import java.util.ArrayList;
import java.util.List;
import emu.nebula.data.BaseDef; import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType; import emu.nebula.data.ResourceType;
import emu.nebula.game.instance.InstanceData; import emu.nebula.game.instance.InstanceData;
import emu.nebula.game.inventory.ItemRewardList;
import emu.nebula.game.inventory.ItemRewardParam; import emu.nebula.game.inventory.ItemRewardParam;
import emu.nebula.util.JsonUtils; import emu.nebula.util.JsonUtils;
@@ -19,8 +17,8 @@ public class WeekBossLevelDef extends BaseDef implements InstanceData {
private int NeedWorldClass; private int NeedWorldClass;
private String BaseAwardPreview; private String BaseAwardPreview;
private transient List<ItemRewardParam> firstRewards; private transient ItemRewardList firstRewards;
private transient List<ItemRewardParam> rewards; private transient ItemRewardList rewards;
@Override @Override
public int getId() { public int getId() {
@@ -34,8 +32,8 @@ public class WeekBossLevelDef extends BaseDef implements InstanceData {
@Override @Override
public void onLoad() { public void onLoad() {
// Init reward lists // Init reward lists
this.firstRewards = new ArrayList<>(); this.firstRewards = new ItemRewardList();
this.rewards = new ArrayList<>(); this.rewards = new ItemRewardList();
// Parse rewards // Parse rewards
var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class); var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class);

View File

@@ -140,7 +140,7 @@ public class AgentManager extends PlayerManager implements GameDatabaseObject {
} }
// Create rewards // Create rewards
var rewards = duration.getRewards().generateRewards(); var rewards = duration.getRewards().generate();
result.setRewards(rewards); result.setRewards(rewards);
// Add to inventory // Add to inventory

View File

@@ -181,7 +181,7 @@ public class Character implements GameDatabaseObject {
params.add(GameConstants.GOLD_ITEM_ID, (int) Math.ceil(exp * 0.15D)); params.add(GameConstants.GOLD_ITEM_ID, (int) Math.ceil(exp * 0.15D));
// Verify that the player has the items // Verify that the player has the items
if (!this.getPlayer().getInventory().verifyItems(params)) { if (!this.getPlayer().getInventory().hasItems(params)) {
return null; return null;
} }
@@ -207,7 +207,7 @@ public class Character implements GameDatabaseObject {
} }
// Verify that the player has the items // Verify that the player has the items
if (!this.getPlayer().getInventory().verifyItems(data.getMaterials())) { if (!this.getPlayer().getInventory().hasItems(data.getMaterials())) {
return null; return null;
} }
@@ -257,7 +257,7 @@ public class Character implements GameDatabaseObject {
} }
// Verify that the player has the items // Verify that the player has the items
if (!this.getPlayer().getInventory().verifyItems(data.getMaterials())) { if (!this.getPlayer().getInventory().hasItems(data.getMaterials())) {
return null; return null;
} }

View File

@@ -161,7 +161,7 @@ public class GameDisc implements GameDatabaseObject {
params.add(GameConstants.GOLD_ITEM_ID, (int) Math.ceil(exp * 0.25D)); params.add(GameConstants.GOLD_ITEM_ID, (int) Math.ceil(exp * 0.25D));
// Verify that the player has the items // Verify that the player has the items
if (!this.getPlayer().getInventory().verifyItems(params)) { if (!this.getPlayer().getInventory().hasItems(params)) {
return null; return null;
} }
@@ -190,7 +190,7 @@ public class GameDisc implements GameDatabaseObject {
} }
// Verify that the player has the items // Verify that the player has the items
if (!this.getPlayer().getInventory().verifyItems(data.getMaterials())) { if (!this.getPlayer().getInventory().hasItems(data.getMaterials())) {
return null; return null;
} }
@@ -218,7 +218,7 @@ public class GameDisc implements GameDatabaseObject {
materials.add(this.getData().getTransformItemId(), count); materials.add(this.getData().getTransformItemId(), count);
// Verify that the player has the items // Verify that the player has the items
if (!this.getPlayer().getInventory().verifyItems(materials)) { if (!this.getPlayer().getInventory().hasItems(materials)) {
return null; return null;
} }

View File

@@ -1,9 +1,6 @@
package emu.nebula.game.instance; package emu.nebula.game.instance;
import java.util.List; import emu.nebula.game.inventory.ItemRewardList;
import emu.nebula.game.inventory.ItemParamMap;
import emu.nebula.game.inventory.ItemRewardParam;
import emu.nebula.game.player.Player; import emu.nebula.game.player.Player;
public interface InstanceData { public interface InstanceData {
@@ -14,38 +11,20 @@ public interface InstanceData {
public int getEnergyConsume(); public int getEnergyConsume();
// Handle reward generation // Item rewards
public List<ItemRewardParam> getFirstRewards(); public ItemRewardList getFirstRewards();
public default List<ItemRewardParam> getFirstRewards(int rewardType) { public default ItemRewardList getFirstRewards(int rewardType) {
return getFirstRewards(); return getFirstRewards();
} }
public default ItemParamMap generateFirstRewards(int rewardType) { public ItemRewardList getRewards();
return this.generateRewards(this.getFirstRewards());
}
public List<ItemRewardParam> getRewards(); public default ItemRewardList getRewards(int rewardType) {
public default List<ItemRewardParam> getRewards(int rewardType) {
return getRewards(); return getRewards();
} }
public default ItemParamMap generateRewards(int rewardType) {
return this.generateRewards(this.getRewards());
}
public default ItemParamMap generateRewards(List<ItemRewardParam> params) {
var map = new ItemParamMap();
for (var param : params) {
map.add(param.getId(), param.getRandomCount());
}
return map;
}
/** /**
* Checks if the player has enough energy to complete this instance * Checks if the player has enough energy to complete this instance
* @return true if the player has enough energy * @return true if the player has enough energy

View File

@@ -115,7 +115,7 @@ public class InstanceManager extends PlayerManager {
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
// Generate rewards for each settle count // Generate rewards for each settle count
var rewards = data.generateRewards(rewardType); var rewards = data.getRewards(rewardType).generate();
// Add to reward list // Add to reward list
list.add(rewards); list.add(rewards);

View File

@@ -19,9 +19,9 @@ public class InstanceSettleData {
public void generateRewards(InstanceData data, int rewardType) { public void generateRewards(InstanceData data, int rewardType) {
if (this.isFirst) { if (this.isFirst) {
this.firstRewards = data.generateFirstRewards(rewardType); this.firstRewards = data.getFirstRewards(rewardType).generate();
} }
this.rewards = data.generateRewards(rewardType); this.rewards = data.getRewards(rewardType).generate();
} }
} }

View File

@@ -483,7 +483,7 @@ public class Inventory extends PlayerManager implements GameDatabaseObject {
/** /**
* Checks if the player has enough quanity of this item * Checks if the player has enough quanity of this item
*/ */
public synchronized boolean verifyItem(int id, int count) { public synchronized boolean hasItem(int id, int count) {
// Sanity check // Sanity check
if (count == 0) { if (count == 0) {
return true; return true;
@@ -511,6 +511,12 @@ public class Inventory extends PlayerManager implements GameDatabaseObject {
case Char -> { case Char -> {
yield getPlayer().getCharacters().hasCharacter(id); yield getPlayer().getCharacters().hasCharacter(id);
} }
case CharacterSkin -> {
yield this.hasSkin(id);
}
case Title -> {
yield this.getTitles().contains(id);
}
default -> { default -> {
// Not implemented // Not implemented
yield false; yield false;
@@ -521,11 +527,11 @@ public class Inventory extends PlayerManager implements GameDatabaseObject {
return result; return result;
} }
public synchronized boolean verifyItems(ItemParamMap params) { public synchronized boolean hasItems(ItemParamMap params) {
boolean hasItems = true; boolean hasItems = true;
for (var param : params.entries()) { for (var param : params.entries()) {
hasItems = this.verifyItem(param.getIntKey(), param.getIntValue()); hasItems = this.hasItem(param.getIntKey(), param.getIntValue());
if (!hasItems) { if (!hasItems) {
return hasItems; return hasItems;
@@ -553,7 +559,7 @@ public class Inventory extends PlayerManager implements GameDatabaseObject {
var materials = data.getMaterials().mulitply(num); var materials = data.getMaterials().mulitply(num);
// Verify that we have the materials // Verify that we have the materials
if (!this.verifyItems(materials)) { if (!this.hasItems(materials)) {
return change; return change;
} }
@@ -572,7 +578,7 @@ public class Inventory extends PlayerManager implements GameDatabaseObject {
var change = new PlayerChangeInfo(); var change = new PlayerChangeInfo();
// Make sure we have the gems // Make sure we have the gems
if (!this.verifyItem(GameConstants.ENERGY_BUY_ITEM_ID, 30)) { if (!this.hasItem(GameConstants.ENERGY_BUY_ITEM_ID, 30)) {
return change; return change;
} }
@@ -604,7 +610,7 @@ public class Inventory extends PlayerManager implements GameDatabaseObject {
// Make sure we have the currency // Make sure we have the currency
int cost = buyCount * currencyCount; int cost = buyCount * currencyCount;
if (!this.verifyItem(currencyId, cost)) { if (!this.hasItem(currencyId, cost)) {
return change; return change;
} }
@@ -631,7 +637,7 @@ public class Inventory extends PlayerManager implements GameDatabaseObject {
} }
// Make sure we have this item // Make sure we have this item
if (!this.verifyItem(id, count)) { if (!this.hasItem(id, count)) {
return change; return change;
} }

View File

@@ -9,7 +9,7 @@ public class ItemRewardList extends ArrayList<ItemRewardParam> {
super(); super();
} }
public ItemParamMap generateRewards() { public ItemParamMap generate() {
var map = new ItemParamMap(); var map = new ItemParamMap();
for (var param : this) { for (var param : this) {