EpicEnchants/src/main/java/com/craftaro/epicenchants/effect/effects/DropHead.java

91 lines
2.8 KiB
Java

package com.craftaro.epicenchants.effect.effects;
import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial;
import com.craftaro.epicenchants.effect.EffectExecutor;
import com.craftaro.epicenchants.enums.EventType;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.SkullMeta;
import org.jetbrains.annotations.NotNull;
import java.util.Optional;
public class DropHead extends EffectExecutor {
public DropHead(ConfigurationSection section) {
super(section);
}
@Override
public void execute(@NotNull Player user, LivingEntity opponent, int level, EventType eventType) {
consume(entity -> getHead(entity).ifPresent(head -> entity.getWorld().dropItemNaturally(entity.getLocation(), head)), user, opponent);
}
private Optional<ItemStack> getHead(Entity entity) {
ItemStack out = XMaterial.PLAYER_HEAD.parseItem();
String skin = null;
switch (entity.getType()) {
case CHICKEN:
skin = "MHF_Chicken";
break;
case PIG:
skin = "MHF_Pig";
break;
case COW:
skin = "MHF_Cow";
break;
case SHEEP:
skin = "MHF_Sheep";
break;
case MUSHROOM_COW:
skin = "MHF_MushroomCow";
break;
case SPIDER:
skin = "MHF_Spider";
break;
case ZOMBIE:
out = XMaterial.ZOMBIE_HEAD.parseItem();
break;
case SKELETON:
out = XMaterial.SKELETON_SKULL.parseItem();
break;
case VILLAGER:
skin = "MHF_Villager";
break;
case MAGMA_CUBE:
skin = "MHF_LavaSlime";
break;
case BLAZE:
skin = "MHF_Blaze";
break;
case CREEPER:
out = XMaterial.CREEPER_HEAD.parseItem();
case ENDERMAN:
skin = "MHF_Enderman";
break;
case RABBIT:
skin = "MHF_Rabbit";
break;
case IRON_GOLEM:
skin = "MHF_Golem";
break;
case PLAYER:
break;
default:
return Optional.empty();
}
SkullMeta skullMeta = (SkullMeta) out.getItemMeta();
if ((skin != null && XMaterial.PLAYER_HEAD.isSimilar(out)) || entity instanceof Player) {
skullMeta.setOwner(entity instanceof Player ? entity.getName() : skin);
}
out.setItemMeta(skullMeta);
return Optional.of(out);
}
}