package tc.oc.pgm.modules;
import java.util.Set;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import tc.oc.pgm.match.Match;
import tc.oc.pgm.match.MatchModule;
import tc.oc.pgm.match.MatchScope;
import tc.oc.pgm.events.ListenerScope;
@ListenerScope(MatchScope.RUNNING)
public class ToolRepairMatchModule extends MatchModule implements Listener {
protected final Set<Material> toRepair;
public ToolRepairMatchModule(Match match, Set<Material> toRepair) {
super(match);
this.toRepair = toRepair;
}
private boolean canRepair(ItemStack pickup, ItemStack invStack) {
return invStack != null &&
invStack.getType().equals(pickup.getType()) &&
invStack.getEnchantments().equals(pickup.getEnchantments());
}
private void doRepair(PlayerPickupItemEvent event, ItemStack stack) {
ItemStack pickup = event.getItem().getItemStack();
int hitsLeft = pickup.getType().getMaxDurability() - pickup.getDurability() + 1;
stack.setDurability((short) Math.max(stack.getDurability() - hitsLeft, 0));
event.setCancelled(true);
event.getItem().remove();
event.getPlayer().playSound(event.getPlayer().getLocation(), Sound.ENTITY_ITEM_PICKUP, 0.5f, 1f);
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void processRepair(PlayerPickupItemEvent event) {
ItemStack pickup = event.getItem().getItemStack();
if(this.toRepair.contains(pickup.getType())) {
PlayerInventory inv = event.getPlayer().getInventory();
for(ItemStack invStack : inv.contents()) {
if(this.canRepair(pickup, invStack)) {
this.doRepair(event, invStack);
return;
}
}
}
}
}