package joshie.harvest.shops.purchasable; import joshie.harvest.api.buildings.Building; import joshie.harvest.api.shops.IRequirement; import joshie.harvest.buildings.HFBuildings; import joshie.harvest.core.helpers.TextHelper; import joshie.harvest.town.TownHelper; import joshie.harvest.town.data.TownData; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import org.apache.commons.lang3.text.WordUtils; import javax.annotation.Nonnull; import java.util.Arrays; import java.util.List; import java.util.Locale; public class PurchasableBuilding extends PurchasableMaterials { private final Building building; private final String tooltip; public PurchasableBuilding(long cost, Building building, IRequirement... requirements) { super(requirements); this.building = building; this.cost = cost; this.tooltip = building.getResource().getResourceDomain() + ".structures." + building.getResource().getResourcePath() + ".tooltip"; this.resource = ((cost >= 0) ? "buy:" : "sell:") + building.getResource().toString().replace(":", "_"); } @Override public ItemStack getDisplayStack() { return building.getSpawner(); } @Override protected ItemStack getPurchasedStack() { return HFBuildings.CHEAT_BUILDINGS ? building.getSpawner() : building.getBlueprint(); } @Override @SuppressWarnings("unchecked") public boolean isPurchasable(World world, EntityPlayer player) { TownData town = TownHelper.getClosestTownToEntity(player, false); return !town.hasBuilding(building) && building.getRules().canDo(world, player, 1) && hasBuildingRequirements(player); } private boolean hasBuildingRequirements(EntityPlayer player) { ResourceLocation[] requirements = building.getRequirements(); return requirements.length == 0 || TownHelper.getClosestTownToEntity(player, false).hasBuildings(requirements); } @Override public boolean canDo(@Nonnull World world, @Nonnull EntityPlayer player, int amount) { return amount == 1 && super.canDo(world, player, amount); } @Override @SuppressWarnings("unchecked") public boolean canList(@Nonnull World world, @Nonnull EntityPlayer player) { return (!TownHelper.getClosestTownToEntity(player, false).hasBuilding(building) || building.canHaveMultiple()) && building.getRules().canDo(world, player, 1) && hasBuildingRequirements(player); } @Override public String getDisplayName() { return building.getLocalisedName(); } @SideOnly(Side.CLIENT) @Override public void addTooltip(List<String> list) { list.add(TextFormatting.GOLD + getDisplayName()); list.add("---------------------------"); String tooltip = WordUtils.wrap(TextHelper.localize(this.tooltip.toLowerCase(Locale.ENGLISH)), 40); list.addAll(Arrays.asList(tooltip.split("\r\n"))); } }