mirror of
https://github.com/array-in-a-matrix/brainwine.git
synced 2025-04-02 11:11:58 -04:00
Added crafting workshop requirements
This commit is contained in:
parent
9e907ce56d
commit
03d43ef97e
3 changed files with 44 additions and 12 deletions
|
@ -2,23 +2,23 @@ package brainwine.gameserver.item;
|
|||
|
||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||
|
||||
public class CraftingIngredient {
|
||||
public class CraftingRequirement {
|
||||
|
||||
private final LazyItemGetter item;
|
||||
private final int quantity;
|
||||
|
||||
private CraftingIngredient(LazyItemGetter item, int quantity) {
|
||||
private CraftingRequirement(LazyItemGetter item, int quantity) {
|
||||
this.item = item;
|
||||
this.quantity = quantity;
|
||||
}
|
||||
|
||||
@JsonCreator
|
||||
private CraftingIngredient(String item) {
|
||||
private CraftingRequirement(String item) {
|
||||
this(new LazyItemGetter(item), 1);
|
||||
}
|
||||
|
||||
@JsonCreator
|
||||
private CraftingIngredient(Object[] data) {
|
||||
private CraftingRequirement(Object[] data) {
|
||||
this(new LazyItemGetter((String)data[0]), (int)data[1]);
|
||||
}
|
||||
|
|
@ -119,7 +119,10 @@ public class Item {
|
|||
private Pair<DamageType, Float> damageInfo;
|
||||
|
||||
@JsonProperty("ingredients")
|
||||
private List<CraftingIngredient> ingredients = new ArrayList<>();
|
||||
private List<CraftingRequirement> craftingIngredients = new ArrayList<>();
|
||||
|
||||
@JsonProperty("crafting_helpers")
|
||||
private List<CraftingRequirement> craftingHelpers = new ArrayList<>();
|
||||
|
||||
@JsonProperty("use")
|
||||
private Map<ItemUseType, Object> useConfigs = new HashMap<>();
|
||||
|
@ -305,11 +308,19 @@ public class Item {
|
|||
}
|
||||
|
||||
public boolean isCraftable() {
|
||||
return !ingredients.isEmpty();
|
||||
return !craftingIngredients.isEmpty();
|
||||
}
|
||||
|
||||
public List<CraftingIngredient> getIngredients() {
|
||||
return ingredients;
|
||||
public List<CraftingRequirement> getCraftingIngredients() {
|
||||
return craftingIngredients;
|
||||
}
|
||||
|
||||
public boolean requiresWorkshop() {
|
||||
return !craftingHelpers.isEmpty();
|
||||
}
|
||||
|
||||
public List<CraftingRequirement> getCraftingHelpers() {
|
||||
return craftingHelpers;
|
||||
}
|
||||
|
||||
public boolean hasUse(ItemUseType... types) {
|
||||
|
|
|
@ -6,9 +6,12 @@ import brainwine.gameserver.annotations.OptionalField;
|
|||
import brainwine.gameserver.annotations.RequestInfo;
|
||||
import brainwine.gameserver.entity.player.Inventory;
|
||||
import brainwine.gameserver.entity.player.Player;
|
||||
import brainwine.gameserver.item.CraftingIngredient;
|
||||
import brainwine.gameserver.item.CraftingRequirement;
|
||||
import brainwine.gameserver.item.Item;
|
||||
import brainwine.gameserver.server.PlayerRequest;
|
||||
import brainwine.gameserver.util.MathUtils;
|
||||
import brainwine.gameserver.util.Pair;
|
||||
import brainwine.gameserver.zone.MetaBlock;
|
||||
|
||||
/**
|
||||
* TODO Account for skills, bonuses etc..
|
||||
|
@ -28,10 +31,11 @@ public class CraftRequest extends PlayerRequest {
|
|||
return;
|
||||
}
|
||||
|
||||
List<CraftingIngredient> ingredients = item.getIngredients();
|
||||
// Check if player has necessary ingredients
|
||||
List<CraftingRequirement> ingredients = item.getCraftingIngredients();
|
||||
Inventory inventory = player.getInventory();
|
||||
|
||||
for(CraftingIngredient ingredient : ingredients) {
|
||||
for(CraftingRequirement ingredient : ingredients) {
|
||||
Item item = ingredient.getItem();
|
||||
|
||||
if(!inventory.hasItem(item, ingredient.getQuantity() * quantity)) {
|
||||
|
@ -40,7 +44,24 @@ public class CraftRequest extends PlayerRequest {
|
|||
}
|
||||
}
|
||||
|
||||
for(CraftingIngredient ingredient : ingredients) {
|
||||
// Check if required crafting helpers are nearby
|
||||
if(item.requiresWorkshop()) {
|
||||
List<MetaBlock> workshop = player.getZone().getMetaBlocksWhere(metaBlock
|
||||
-> MathUtils.inRange(player.getX(), player.getY(), metaBlock.getX(), metaBlock.getY(), 10));
|
||||
|
||||
for(CraftingRequirement craftingHelper : item.getCraftingHelpers()) {
|
||||
int quantityMissing = craftingHelper.getQuantity() - (int)workshop.stream().filter(metaBlock
|
||||
-> metaBlock.getItem() == craftingHelper.getItem()).count();
|
||||
|
||||
if(quantityMissing > 0) {
|
||||
player.alert(String.format("You can't craft this item because your workshop is lacking %sx %s.",
|
||||
quantityMissing, craftingHelper.getItem().getTitle()));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(CraftingRequirement ingredient : ingredients) {
|
||||
inventory.removeItem(ingredient.getItem(), ingredient.getQuantity() * quantity);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue