79 lines
2.5 KiB
Java
79 lines
2.5 KiB
Java
package tc.oc.pgm.mutation.types.kit;
|
|
|
|
import org.bukkit.Material;
|
|
import org.bukkit.inventory.ItemStack;
|
|
import tc.oc.commons.bukkit.inventory.ArmorType;
|
|
import tc.oc.commons.bukkit.inventory.Slot;
|
|
import tc.oc.commons.bukkit.item.ItemUtils;
|
|
import tc.oc.pgm.kits.FreeItemKit;
|
|
import tc.oc.pgm.kits.ItemKitApplicator;
|
|
import tc.oc.pgm.kits.SlotItemKit;
|
|
import tc.oc.pgm.match.Match;
|
|
import tc.oc.pgm.match.MatchPlayer;
|
|
import tc.oc.pgm.mutation.types.KitMutation;
|
|
|
|
import java.util.List;
|
|
import java.util.WeakHashMap;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Stream;
|
|
|
|
public class ArmorMutation extends KitMutation {
|
|
|
|
final static FreeItemKit SWORD = new FreeItemKit(item(Material.DIAMOND_SWORD));
|
|
|
|
final static SlotItemKit[] ARMOR = new SlotItemKit[] {
|
|
new SlotItemKit(item(Material.DIAMOND_HELMET), Slot.Armor.forType(ArmorType.HELMET)),
|
|
new SlotItemKit(item(Material.DIAMOND_CHESTPLATE), Slot.Armor.forType(ArmorType.CHESTPLATE)),
|
|
new SlotItemKit(item(Material.DIAMOND_LEGGINGS), Slot.Armor.forType(ArmorType.LEGGINGS)),
|
|
new SlotItemKit(item(Material.DIAMOND_BOOTS), Slot.Armor.forType(ArmorType.BOOTS)),
|
|
};
|
|
|
|
final WeakHashMap<MatchPlayer, ItemStack> weapons;
|
|
|
|
public ArmorMutation(Match match) {
|
|
super(match, true, ARMOR);
|
|
this.kits.add(SWORD);
|
|
weapons = new WeakHashMap<>();
|
|
}
|
|
|
|
@Override
|
|
public void apply(MatchPlayer player) {
|
|
// Find the player's first weapon and store it for later
|
|
List<ItemStack> hotbar = Slot.Hotbar.hotbar()
|
|
.map(slot -> slot.getItem(player.getInventory()))
|
|
.collect(Collectors.toList());
|
|
for(ItemStack item : hotbar) {
|
|
if(item != null && ItemUtils.isWeapon(item)) {
|
|
weapons.put(player, item);
|
|
player.getInventory().remove(item);
|
|
break;
|
|
}
|
|
}
|
|
super.apply(player);
|
|
}
|
|
|
|
@Override
|
|
public void remove(MatchPlayer player) {
|
|
super.remove(player);
|
|
// Restore the player's old weapon
|
|
ItemStack weapon = weapons.remove(player);
|
|
if(weapon != null) {
|
|
ItemKitApplicator applicator = new ItemKitApplicator();
|
|
applicator.add(weapon);
|
|
applicator.apply(player);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public Stream<? extends Slot> saved() {
|
|
return Slot.Armor.armor();
|
|
}
|
|
|
|
@Override
|
|
public void disable() {
|
|
super.disable();
|
|
weapons.clear();
|
|
}
|
|
|
|
}
|