package com.comphenix.xp.rewards.items; import org.apache.commons.lang.NullArgumentException; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.Player; import com.comphenix.xp.Configuration; import com.comphenix.xp.Server; import com.comphenix.xp.parser.text.ItemNameParser; import com.comphenix.xp.rewards.ResourceHolder; import com.comphenix.xp.rewards.ResourcesParser; import com.comphenix.xp.rewards.RewardService; import com.comphenix.xp.rewards.RewardTypes; public class RewardDrops implements RewardService { private ItemsParser itemsParser; private ItemNameParser itemNameParser; public RewardDrops(ItemNameParser parser) { setItemNameParser(parser); } public RewardDrops() { // No parsers are loaded } @Override public RewardTypes getRewardType() { return RewardTypes.DROPS; } @Override public String getServiceName() { return getRewardType().name(); } @Override public boolean canReward(Player player, ResourceHolder resource) { if (resource instanceof ItemsHolder) return true; else throw new IllegalArgumentException("Can only reward in items."); } @Override public void reward(Player player, ResourceHolder resource) { if (player == null) throw new NullArgumentException("player"); if (!(resource instanceof ItemsHolder)) throw new IllegalArgumentException("Can only reward in items."); // Delegate to more specific method reward(player, player.getLocation(), resource); } @Override public void reward(Player player, Location point, ResourceHolder resource) { if (player == null) throw new NullArgumentException("player"); // Delegate again reward(player.getWorld(), point, resource); } @Override public void reward(World world, Location point, ResourceHolder resource) { if (world == null) throw new NullArgumentException("world"); if (point == null) throw new NullArgumentException("point"); if (resource == null) throw new NullArgumentException("resource"); ItemsHolder holder = (ItemsHolder) resource; Server.spawnItem(world, point, holder.getRewards()); } @Override public ResourcesParser getResourcesParser(String[] namedParameters) { return itemsParser.withParameters(namedParameters); } public ItemNameParser getItemNameParser() { return itemNameParser; } public void setItemNameParser(ItemNameParser nameParser) { this.itemsParser = new ItemsParser(nameParser, null); this.itemNameParser = nameParser; } @Override public RewardService clone(Configuration config) { return new RewardDrops(itemNameParser); } }