Added PlayerUtils#tryAsPlayer

This commit is contained in:
Auxilor
2022-04-25 10:14:24 +01:00
parent 94534b2f61
commit e6cdc7d2ba
2 changed files with 52 additions and 0 deletions

View File

@@ -10,8 +10,14 @@ import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.AnimalTamer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.Tameable;
import org.bukkit.projectiles.ProjectileSource;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.function.Consumer;
@@ -142,6 +148,39 @@ public final class PlayerUtils {
}
}
/**
* Try an entity as a player.
*
* @param entity The entity.
* @return The player, or null if no player could be found.
*/
@Nullable
public static Player tryAsPlayer(@Nullable final Entity entity) {
if (entity == null) {
return null;
}
if (entity instanceof Player player) {
return player;
}
if (entity instanceof Projectile projectile) {
ProjectileSource shooter = projectile.getShooter();
if (shooter instanceof Player player) {
return player;
}
}
if (entity instanceof Tameable tameable) {
AnimalTamer tamer = tameable.getOwner();
if (tamer instanceof Player player) {
return player;
}
}
return null;
}
private PlayerUtils() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}

View File

@@ -5,6 +5,7 @@ package com.willfp.eco.util
import net.kyori.adventure.audience.Audience
import org.bukkit.OfflinePlayer
import org.bukkit.command.CommandSender
import org.bukkit.entity.Entity
import org.bukkit.entity.Player
/**
@@ -30,3 +31,15 @@ fun CommandSender.asAudience(): Audience =
*/
fun Player.runExempted(action: () -> Unit) =
PlayerUtils.runExempted(this, action)
/**
* @see PlayerUtils.runExempted
*/
fun Player.runExempted(action: (Player) -> Unit) =
PlayerUtils.runExempted(this, action)
/**
* @see PlayerUtils.tryAsPlayer
*/
fun Entity?.tryAsPlayer(): Player? =
PlayerUtils.tryAsPlayer(this)