package joshie.progression.criteria.rewards; import joshie.progression.Progression; import joshie.progression.api.ProgressionAPI; import joshie.progression.api.criteria.IField; import joshie.progression.api.criteria.IFilterProvider; import joshie.progression.api.criteria.IFilterType; import joshie.progression.api.criteria.ProgressionRule; import joshie.progression.api.special.*; import joshie.progression.criteria.filters.block.FilterBaseBlock; import joshie.progression.gui.fields.ItemFilterField; import joshie.progression.gui.fields.ItemFilterFieldPreview; import joshie.progression.gui.filters.FilterTypeBlock; import joshie.progression.gui.filters.FilterTypeLocation; import joshie.progression.helpers.ItemHelper; import joshie.progression.lib.WorldLocation; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; import java.util.ArrayList; import java.util.List; @ProgressionRule(name="placeBlock", color=0xFF00680A) public class RewardPlaceBlock extends RewardBaseItemFilter implements ICustomDescription, ICustomWidth, ICustomTooltip, ISpecialFieldProvider, IRequestItem { public List<IFilterProvider> locations = new ArrayList(); protected transient IField field; public RewardPlaceBlock() { field = new ItemFilterField("locations", this); } @Override public String getDescription() { return Progression.translate("reward.placeBlock.description") + " \n" + field.getField(); } @Override public int getWidth(DisplayMode mode) { return mode == DisplayMode.DISPLAY ? 116: 100; } @Override public void addTooltip(List list) { list.add(TextFormatting.BLUE + Progression.translate("block.place")); list.add(getIcon().getDisplayName()); } @Override public void addSpecialFields(List<IField> fields, DisplayMode mode) { if (mode == DisplayMode.EDIT) { fields.add(new ItemFilterField("locations", this)); fields.add(new ItemFilterFieldPreview("filters", this, 25, 40, 2F)); } else fields.add(ProgressionAPI.fields.getItemPreview(this, "filters", 65, 42, 1.9F)); } @Override public List<IFilterProvider> getAllFilters() { ArrayList<IFilterProvider> all = new ArrayList(); all.addAll(locations); all.addAll(filters); return all; } @Override public IFilterType getFilterForField(String fieldName) { if (fieldName.equals("locations")) return FilterTypeLocation.INSTANCE; if (fieldName.equals("filters")) return FilterTypeBlock.INSTANCE; return null; } @Override public boolean shouldRunOnce() { return true; } @Override public ItemStack getRequestedStack(EntityPlayer player) { return ItemHelper.getRandomItemOfSize(filters, player, 1); } @Override public void reward(EntityPlayer player, ItemStack stack) { if (stack != null) { for (IFilterProvider filter: filters) { if (filter.getProvided().matches(stack)) { WorldLocation location = WorldLocation.getRandomLocationFromFilters(locations, player); if (location != null) { World world = DimensionManager.getWorld(location.dimension); Block block = FilterBaseBlock.getBlock(stack); int damage = stack.getItemDamage(); world.setBlockState(location.pos, block.getStateFromMeta(damage)); return; } } } } } @Override public void reward(EntityPlayerMP player) { ProgressionAPI.registry.requestItem(this, player); } }