ProjectAres/PGM/src/main/java/tc/oc/pgm/mutation/types/kit/ArmorMutation.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();
}
}