mirror of
https://github.com/YouHaveTrouble/Enchantio.git
synced 2026-05-11 21:56:55 +00:00
call an event on beheading so other plugins can modify the dropped head
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
package me.youhavetrouble.enchantio.events;
|
||||
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.event.entity.EntityEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* Called when an entity is beheaded by a weapon with the Beheading enchantment.
|
||||
*/
|
||||
public class EntityBeheadEvent extends EntityEvent implements Cancellable {
|
||||
|
||||
private static final HandlerList HANDLERS = new HandlerList();
|
||||
|
||||
private ItemStack headToDrop;
|
||||
private boolean cancelled = false;
|
||||
|
||||
public EntityBeheadEvent(@NotNull Entity entity, @NotNull ItemStack headToDrop) {
|
||||
super(entity);
|
||||
this.headToDrop = headToDrop;
|
||||
}
|
||||
|
||||
public @NotNull ItemStack getHeadToDrop() {
|
||||
return headToDrop;
|
||||
}
|
||||
|
||||
public void setHeadToDrop(@NotNull ItemStack headToDrop) {
|
||||
this.headToDrop = headToDrop;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
this.cancelled = cancel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull HandlerList getHandlers() {
|
||||
return HANDLERS;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static HandlerList getHandlerList() {
|
||||
return HANDLERS;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,6 +5,8 @@ import io.papermc.paper.registry.RegistryKey;
|
||||
import me.youhavetrouble.enchantio.EnchantioConfig;
|
||||
import me.youhavetrouble.enchantio.enchants.BeheadingEnchant;
|
||||
import me.youhavetrouble.enchantio.enchants.EnchantioEnchant;
|
||||
import me.youhavetrouble.enchantio.events.EntityBeheadEvent;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Registry;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
@@ -49,38 +51,46 @@ public class BeheadingListener implements Listener {
|
||||
|
||||
if (ThreadLocalRandom.current().nextDouble() > chance) return;
|
||||
|
||||
ItemStack head = null;
|
||||
|
||||
switch (event.getEntity().getType()) {
|
||||
case ZOMBIE -> {
|
||||
if (listContainsItemType(event.getDrops(), Material.ZOMBIE_HEAD)) return;
|
||||
event.getDrops().add(new ItemStack(org.bukkit.Material.ZOMBIE_HEAD));
|
||||
head = new ItemStack(org.bukkit.Material.ZOMBIE_HEAD);
|
||||
}
|
||||
case PIGLIN -> {
|
||||
if (listContainsItemType(event.getDrops(), Material.PIGLIN_HEAD)) return;
|
||||
event.getDrops().add(new ItemStack(org.bukkit.Material.PIGLIN_HEAD));
|
||||
head = new ItemStack(org.bukkit.Material.PIGLIN_HEAD);
|
||||
}
|
||||
case WITHER_SKELETON -> {
|
||||
if (listContainsItemType(event.getDrops(), Material.WITHER_SKELETON_SKULL)) return;
|
||||
event.getDrops().add(new ItemStack(org.bukkit.Material.WITHER_SKELETON_SKULL));
|
||||
head = new ItemStack(org.bukkit.Material.WITHER_SKELETON_SKULL);
|
||||
}
|
||||
case SKELETON -> {
|
||||
if (listContainsItemType(event.getDrops(), Material.SKELETON_SKULL)) return;
|
||||
event.getDrops().add(new ItemStack(org.bukkit.Material.SKELETON_SKULL));
|
||||
head = new ItemStack(org.bukkit.Material.SKELETON_SKULL);
|
||||
}
|
||||
case CREEPER -> {
|
||||
if (listContainsItemType(event.getDrops(), Material.CREEPER_HEAD)) return;
|
||||
event.getDrops().add(new ItemStack(org.bukkit.Material.CREEPER_HEAD));
|
||||
head = new ItemStack(org.bukkit.Material.CREEPER_HEAD);
|
||||
}
|
||||
case ENDER_DRAGON -> {
|
||||
if (listContainsItemType(event.getDrops(), Material.DRAGON_HEAD)) return;
|
||||
event.getDrops().add(new ItemStack(org.bukkit.Material.DRAGON_HEAD));
|
||||
head = new ItemStack(org.bukkit.Material.DRAGON_HEAD);
|
||||
}
|
||||
case PLAYER -> {
|
||||
if (listContainsItemType(event.getDrops(), Material.PLAYER_HEAD)) return;
|
||||
Player player = (Player) event.getEntity();
|
||||
event.getDrops().add(getPlayerHead(player));
|
||||
head = getPlayerHead(player);
|
||||
}
|
||||
}
|
||||
|
||||
if (head == null) return;
|
||||
EntityBeheadEvent beheadEvent = new EntityBeheadEvent(event.getEntity(), head);
|
||||
Bukkit.getPluginManager().callEvent(beheadEvent);
|
||||
if (beheadEvent.isCancelled()) return;
|
||||
event.getDrops().add(beheadEvent.getHeadToDrop());
|
||||
|
||||
}
|
||||
|
||||
private boolean listContainsItemType(@NotNull Iterable<ItemStack> list, @NotNull Material type) {
|
||||
|
||||
Reference in New Issue
Block a user