diff --git a/Spigot-API-Patches/0278-added-PlayerNameEntityEvent.patch b/Spigot-API-Patches/0278-added-PlayerNameEntityEvent.patch new file mode 100644 index 0000000000..a38082f8e8 --- /dev/null +++ b/Spigot-API-Patches/0278-added-PlayerNameEntityEvent.patch @@ -0,0 +1,130 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jake Potrebic +Date: Sun, 5 Jul 2020 00:34:24 -0700 +Subject: [PATCH] added PlayerNameEntityEvent + + +diff --git a/src/main/java/io/papermc/paper/event/player/PlayerNameEntityEvent.java b/src/main/java/io/papermc/paper/event/player/PlayerNameEntityEvent.java +new file mode 100755 +index 0000000000000000000000000000000000000000..ef9e53a73eff469bbaa8fb20c634297acb9d1986 +--- /dev/null ++++ b/src/main/java/io/papermc/paper/event/player/PlayerNameEntityEvent.java +@@ -0,0 +1,118 @@ ++package io.papermc.paper.event.player; ++ ++import net.kyori.adventure.text.Component; ++import org.bukkit.entity.LivingEntity; ++import org.bukkit.entity.Player; ++import org.bukkit.event.Cancellable; ++import org.bukkit.event.HandlerList; ++import org.bukkit.event.player.PlayerEvent; ++import org.jetbrains.annotations.NotNull; ++import org.jetbrains.annotations.Nullable; ++ ++/** ++ * Called when the player is attempting to rename a mob ++ */ ++public class PlayerNameEntityEvent extends PlayerEvent implements Cancellable { ++ ++ private LivingEntity entity; ++ private Component name; ++ private boolean persistent; ++ private boolean cancelled; ++ ++ public PlayerNameEntityEvent(@NotNull Player player, @NotNull LivingEntity entity, @NotNull Component name, boolean persistent) { ++ super(player); ++ this.entity = entity; ++ this.name = name; ++ this.persistent = persistent; ++ } ++ ++ /** ++ * Gets the name to be given to the entity. ++ * @return the name ++ */ ++ @Nullable ++ public Component getName() { ++ return name; ++ } ++ ++ /** ++ * Sets the name to be given to the entity. ++ * ++ * @param name the name ++ */ ++ public void setName(@Nullable Component name) { ++ this.name = name; ++ } ++ ++ /** ++ * Gets the entity involved in this event. ++ * ++ * @return the entity ++ */ ++ @NotNull ++ public LivingEntity getEntity() { ++ return entity; ++ } ++ ++ /** ++ * Sets the entity involved in this event. ++ * ++ * @param entity the entity ++ */ ++ public void setEntity(@NotNull LivingEntity entity) { ++ this.entity = entity; ++ } ++ ++ /** ++ * Gets whether this will set the mob to be persistent. ++ * ++ * @return persistent ++ */ ++ public boolean isPersistent() { ++ return persistent; ++ } ++ ++ /** ++ * Sets whether this will set the mob to be persistent. ++ * ++ * @param persistent persistent ++ */ ++ public void setPersistent(boolean persistent) { ++ this.persistent = persistent; ++ } ++ ++ /** ++ * Gets the cancellation state of this event. A cancelled event will not ++ * be executed in the server, but will still pass to other plugins ++ * ++ * @return true if this event is cancelled ++ */ ++ @Override ++ public boolean isCancelled() { ++ return cancelled; ++ } ++ ++ /** ++ * Sets the cancellation state of this event. A cancelled event will not ++ * be executed in the server, but will still pass to other plugins. ++ * ++ * @param cancel true if you wish to cancel this event ++ */ ++ @Override ++ public void setCancelled(boolean cancel) { ++ this.cancelled = cancel; ++ } ++ ++ private static final HandlerList HANDLER_LIST = new HandlerList(); ++ ++ @NotNull ++ @Override ++ public HandlerList getHandlers() { ++ return HANDLER_LIST; ++ } ++ ++ @NotNull ++ public static HandlerList getHandlerList() { ++ return HANDLER_LIST; ++ } ++} diff --git a/Spigot-Server-Patches/0688-added-PlayerNameEntityEvent.patch b/Spigot-Server-Patches/0688-added-PlayerNameEntityEvent.patch new file mode 100644 index 0000000000..fcc4d586d8 --- /dev/null +++ b/Spigot-Server-Patches/0688-added-PlayerNameEntityEvent.patch @@ -0,0 +1,41 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jake Potrebic +Date: Sun, 5 Jul 2020 00:33:54 -0700 +Subject: [PATCH] added PlayerNameEntityEvent + + +diff --git a/src/main/java/net/minecraft/server/ItemNameTag.java b/src/main/java/net/minecraft/server/ItemNameTag.java +index 01163ce38602f9345f00ee0535b4e73be7c6d735..a34772e329df62d9176b0aa392197e2771c69da4 100644 +--- a/src/main/java/net/minecraft/server/ItemNameTag.java ++++ b/src/main/java/net/minecraft/server/ItemNameTag.java +@@ -1,5 +1,10 @@ + package net.minecraft.server; + ++// Paper start ++import io.papermc.paper.adventure.PaperAdventure; ++import io.papermc.paper.event.player.PlayerNameEntityEvent; ++// Paper end ++ + public class ItemNameTag extends Item { + + public ItemNameTag(Item.Info item_info) { +@@ -10,11 +15,15 @@ public class ItemNameTag extends Item { + public EnumInteractionResult a(ItemStack itemstack, EntityHuman entityhuman, EntityLiving entityliving, EnumHand enumhand) { + if (itemstack.hasName() && !(entityliving instanceof EntityHuman)) { + if (!entityhuman.world.isClientSide && entityliving.isAlive()) { +- entityliving.setCustomName(itemstack.getName()); +- if (entityliving instanceof EntityInsentient) { +- ((EntityInsentient) entityliving).setPersistent(); ++ // Paper start ++ PlayerNameEntityEvent event = new PlayerNameEntityEvent(((EntityPlayer) entityhuman).getBukkitEntity(), entityliving.getBukkitLivingEntity(), PaperAdventure.asAdventure(itemstack.getName()), true); ++ if (!event.callEvent()) return EnumInteractionResult.PASS; ++ EntityLiving newEntityLiving = ((org.bukkit.craftbukkit.entity.CraftLivingEntity) event.getEntity()).getHandle(); ++ newEntityLiving.setCustomName(event.getName() != null ? PaperAdventure.asVanilla(event.getName()) : null); ++ if (event.isPersistent() && newEntityLiving instanceof EntityInsentient) { ++ ((EntityInsentient) newEntityLiving).setPersistent(); + } +- ++ // Paper end + itemstack.subtract(1); + } +