package joshie.harvest.shops.purchasable; import joshie.harvest.api.shops.IPurchaseableMaterials; import joshie.harvest.api.shops.IRequirement; import joshie.harvest.shops.requirement.Logs; import joshie.harvest.shops.requirement.Stone; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import javax.annotation.Nonnull; public class PurchasableMaterials extends Purchasable implements IPurchaseableMaterials { protected IRequirement[] requirements; public PurchasableMaterials(IRequirement... requirements) { this.requirements = requirements; } public PurchasableMaterials(long cost, int logs, int stone, ItemStack stack) { super(cost, stack); if (logs != 0 && stone == 0) requirements = new IRequirement[] { Logs.of(logs) }; else if (logs == 0 && stone != 0) requirements = new IRequirement[] { Stone.of(stone) }; else requirements = new IRequirement[] { Logs.of(logs), Stone.of(stone) }; } public PurchasableMaterials(long cost, ItemStack stack, IRequirement... requirements) { super(cost, stack); this.requirements = requirements; } @Override public IRequirement[] getRequirements() { return requirements; } @Override public boolean canDo(@Nonnull World world, @Nonnull EntityPlayer player, int amount) { for (IRequirement requirement: requirements) { if (!requirement.isFulfilled(world, player, amount)) return false; } return isPurchasable(world, player); } @Override public boolean canList(@Nonnull World world, @Nonnull EntityPlayer player) { return true; } @Override public ItemStack getDisplayStack() { return stack; } @Override public void onPurchased(EntityPlayer player) { for (IRequirement requirement: requirements) { requirement.onPurchased(player); } super.onPurchased(player); } public boolean isPurchasable(World world, EntityPlayer player) { return true; } @Override public String getDisplayName() { return stack != null ? stack.getDisplayName() : getDisplayStack().getDisplayName(); } }