Prevent nametag usage unless player can kill target (#1337)

Addresses discussion #1333
This commit is contained in:
Adam 2021-05-29 15:36:02 -04:00 committed by GitHub
parent 64df0e8297
commit cac5aa04f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -57,6 +57,8 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerBucketEmptyEvent;
@ -1319,8 +1321,10 @@ class PlayerEventHandler implements Listener
}
}
ItemStack itemInHand = instance.getItemInHand(player, event.getHand());
//if preventing theft, prevent leashing claimed creatures
if (instance.config_claims_preventTheft && entity instanceof Creature && instance.getItemInHand(player, event.getHand()).getType() == Material.LEAD)
if (instance.config_claims_preventTheft && entity instanceof Creature && itemInHand.getType() == Material.LEAD)
{
Claim claim = this.dataStore.getClaimAt(entity.getLocation(), false, playerData.lastClaim);
if (claim != null)
@ -1334,6 +1338,19 @@ class PlayerEventHandler implements Listener
}
}
}
// Name tags may only be used on entities that the player is allowed to kill.
if (itemInHand.getType() == Material.NAME_TAG)
{
EntityDamageByEntityEvent damageEvent = new EntityDamageByEntityEvent(player, entity, EntityDamageEvent.DamageCause.CUSTOM, 0);
instance.getServer().getPluginManager().callEvent(damageEvent);
if (damageEvent.isCancelled())
{
event.setCancelled(true);
// Don't print message - damage event handler should have handled it.
return;
}
}
}
//when a player throws an egg