63 lines
1.8 KiB
Java
63 lines
1.8 KiB
Java
package tc.oc.pgm.kits;
|
|
|
|
import org.bukkit.inventory.ItemStack;
|
|
import org.bukkit.inventory.PlayerInventory;
|
|
import tc.oc.commons.bukkit.inventory.Slot;
|
|
import tc.oc.pgm.match.MatchPlayer;
|
|
|
|
import java.util.Map;
|
|
import java.util.Optional;
|
|
import java.util.function.Function;
|
|
import java.util.stream.Collectors;
|
|
|
|
public class FreeItemKit extends BaseItemKit {
|
|
|
|
protected final ItemStack item;
|
|
|
|
public FreeItemKit(ItemStack item) {
|
|
this.item = item;
|
|
}
|
|
|
|
@Override
|
|
public ItemStack item() {
|
|
return item;
|
|
}
|
|
|
|
@Override
|
|
public void apply(MatchPlayer player, boolean force, ItemKitApplicator items) {
|
|
items.add(item);
|
|
}
|
|
|
|
@Override
|
|
public boolean isRemovable() {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void remove(MatchPlayer player) {
|
|
int left = item.getAmount();
|
|
PlayerInventory inv = player.getInventory();
|
|
for(Map.Entry<Slot.Player, Optional<ItemStack>> entry : Slot.Player.player()
|
|
.collect(Collectors.toMap(Function.identity(), slot -> slot.item(inv))).entrySet()) {
|
|
Slot.Player slot = entry.getKey();
|
|
Optional<ItemStack> itemMaybe = entry.getValue();
|
|
if(itemMaybe.isPresent() && this.item.isSimilar(itemMaybe.get())) {
|
|
ItemStack item = itemMaybe.get();
|
|
int delta = item.getAmount() - left;
|
|
if(delta > 0) {
|
|
ItemStack replaced = item.clone();
|
|
replaced.setAmount(delta);
|
|
slot.putItem(inv, replaced);
|
|
break;
|
|
} else {
|
|
slot.putItem(inv, null);
|
|
if(delta < 0) {
|
|
left = -delta;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|