From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Aikar Date: Sat, 28 Apr 2018 10:28:50 -0400 Subject: [PATCH] Add Ban Methods to Player Objects Allows a more logical API for banning players. player.banPlayer("Breaking the rules"); diff --git a/src/main/java/org/bukkit/OfflinePlayer.java b/src/main/java/org/bukkit/OfflinePlayer.java index 2f404c6cefbbd842932620aa62750b343e90e41c..11b470b07a8b5d9e7f87df5abe9bd4f5bf9f86ef 100644 --- a/src/main/java/org/bukkit/OfflinePlayer.java +++ b/src/main/java/org/bukkit/OfflinePlayer.java @@ -67,6 +67,73 @@ public interface OfflinePlayer extends ServerOperator, AnimalTamer, Configuratio * @return true if banned, otherwise false */ public boolean isBanned(); + // Paper start + /** + * Permanently Bans this player from the server + * + * @param reason Reason for Ban + * @return Ban Entry + * @deprecated use {@link #ban(String, Date, String)} + */ + @NotNull + @Deprecated(since = "1.20.4") + public default BanEntry banPlayer(@Nullable String reason) { + return banPlayer(reason, null, null); + } + + /** + * Permanently Bans this player from the server + * @param reason Reason for Ban + * @param source Source of the ban, or null for default + * @return Ban Entry + * @deprecated use {@link #ban(String, Date, String)} + */ + @NotNull + @Deprecated(since = "1.20.4") + public default BanEntry banPlayer(@Nullable String reason, @Nullable String source) { + return banPlayer(reason, null, source); + } + + /** + * Bans this player from the server + * @param reason Reason for Ban + * @param expires When to expire the ban + * @return Ban Entry + * @deprecated use {@link #ban(String, Date, String)} + */ + @NotNull + @Deprecated(since = "1.20.4") + public default BanEntry banPlayer(@Nullable String reason, @Nullable java.util.Date expires) { + return banPlayer(reason, expires, null); + } + + /** + * Bans this player from the server + * @param reason Reason for Ban + * @param expires When to expire the ban + * @param source Source of the ban or null for default + * @return Ban Entry + * @deprecated use {@link #ban(String, Date, String)} + */ + @NotNull + @Deprecated(since = "1.20.4") + public default BanEntry banPlayer(@Nullable String reason, @Nullable java.util.Date expires, @Nullable String source) { + return banPlayer(reason, expires, source, true); + } + + /** + * @deprecated use {@link #ban(String, Date, String)} + */ + @NotNull + @Deprecated(since = "1.20.4") + public default BanEntry banPlayer(@Nullable String reason, @Nullable java.util.Date expires, @Nullable String source, boolean kickIfOnline) { + BanEntry banEntry = Bukkit.getServer().getBanList(BanList.Type.NAME).addBan(getName(), reason, expires, source); + if (kickIfOnline && isOnline()) { + getPlayer().kickPlayer(reason); + } + return banEntry; + } + // Paper end /** * Adds this user to the {@link ProfileBanList}. If a previous ban exists, this will diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java index 949b34e9c9f8b4be48c09f80d78d9453f0ff0ee3..c65a1204c948df81664357524d9d1e6abafb7776 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java @@ -1255,6 +1255,186 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM public void sendMap(@NotNull MapView map); // Paper start + /** + * Permanently Bans the Profile and IP address currently used by the player. + * + * @param reason Reason for ban + * @return Ban Entry + * @deprecated use {@link #ban(String, Date, String)} and {@link #banIp(String, Date, String, boolean)} + */ + // For reference, Bukkit defines this as nullable, while they impl isn't, we'll follow API. + @Nullable + @Deprecated(since = "1.20.4") + public default org.bukkit.BanEntry banPlayerFull(@Nullable String reason) { + return banPlayerFull(reason, null, null); + } + + /** + * Permanently Bans the Profile and IP address currently used by the player. + * + * @param reason Reason for ban + * @param source Source of ban, or null for default + * @return Ban Entry + * @deprecated use {@link #ban(String, Date, String)} and {@link #banIp(String, Date, String, boolean)} + */ + @Nullable + @Deprecated(since = "1.20.4") + public default org.bukkit.BanEntry banPlayerFull(@Nullable String reason, @Nullable String source) { + return banPlayerFull(reason, null, source); + } + + /** + * Bans the Profile and IP address currently used by the player. + * + * @param reason Reason for Ban + * @param expires When to expire the ban + * @return Ban Entry + * @deprecated use {@link #ban(String, Date, String)} and {@link #banIp(String, Date, String, boolean)} + */ + @Nullable + @Deprecated(since = "1.20.4") + public default org.bukkit.BanEntry banPlayerFull(@Nullable String reason, @Nullable java.util.Date expires) { + return banPlayerFull(reason, expires, null); + } + + /** + * Bans the Profile and IP address currently used by the player. + * + * @param reason Reason for Ban + * @param expires When to expire the ban + * @param source Source of the ban, or null for default + * @return Ban Entry + * @deprecated use {@link #ban(String, Date, String)} and {@link #banIp(String, Date, String, boolean)} + */ + @Nullable + @Deprecated(since = "1.20.4") + public default org.bukkit.BanEntry banPlayerFull(@Nullable String reason, @Nullable java.util.Date expires, @Nullable String source) { + banPlayer(reason, expires, source); + return banPlayerIP(reason, expires, source, true); + } + + /** + * Permanently Bans the IP address currently used by the player. + * Does not ban the Profile, use {@link #banPlayerFull(String, java.util.Date, String)} + * + * @param reason Reason for ban + * @param kickPlayer Whether or not to kick the player afterwards + * @return Ban Entry + * @deprecated use {@link #ban(String, Date, String)} and {@link #banIp(String, Date, String, boolean)} + */ + @Nullable + @Deprecated(since = "1.20.4") + public default org.bukkit.BanEntry banPlayerIP(@Nullable String reason, boolean kickPlayer) { + return banPlayerIP(reason, null, null, kickPlayer); + } + + /** + * Permanently Bans the IP address currently used by the player. + * Does not ban the Profile, use {@link #banPlayerFull(String, java.util.Date, String)} + * @param reason Reason for ban + * @param source Source of ban, or null for default + * @param kickPlayer Whether or not to kick the player afterwards + * @return Ban Entry + * @deprecated use {@link #ban(String, Date, String)} and {@link #banIp(String, Date, String, boolean)} + */ + @Nullable + @Deprecated(since = "1.20.4") + public default org.bukkit.BanEntry banPlayerIP(@Nullable String reason, @Nullable String source, boolean kickPlayer) { + return banPlayerIP(reason, null, source, kickPlayer); + } + + /** + * Bans the IP address currently used by the player. + * Does not ban the Profile, use {@link #banPlayerFull(String, java.util.Date, String)} + * @param reason Reason for Ban + * @param expires When to expire the ban + * @param kickPlayer Whether or not to kick the player afterwards + * @return Ban Entry + * @deprecated use {@link #ban(String, Date, String)} and {@link #banIp(String, Date, String, boolean)} + */ + @Nullable + @Deprecated(since = "1.20.4") + public default org.bukkit.BanEntry banPlayerIP(@Nullable String reason, @Nullable java.util.Date expires, boolean kickPlayer) { + return banPlayerIP(reason, expires, null, kickPlayer); + } + + /** + * Permanently Bans the IP address currently used by the player. + * Does not ban the Profile, use {@link #banPlayerFull(String, java.util.Date, String)} + * + * @param reason Reason for ban + * @return Ban Entry + * @deprecated use {@link #ban(String, Date, String)} and {@link #banIp(String, Date, String, boolean)} + */ + @Nullable + @Deprecated(since = "1.20.4") + public default org.bukkit.BanEntry banPlayerIP(@Nullable String reason) { + return banPlayerIP(reason, null, null); + } + + /** + * Permanently Bans the IP address currently used by the player. + * Does not ban the Profile, use {@link #banPlayerFull(String, java.util.Date, String)} + * @param reason Reason for ban + * @param source Source of ban, or null for default + * @return Ban Entry + * @deprecated use {@link #ban(String, Date, String)} and {@link #banIp(String, Date, String, boolean)} + */ + @Nullable + @Deprecated(since = "1.20.4") + public default org.bukkit.BanEntry banPlayerIP(@Nullable String reason, @Nullable String source) { + return banPlayerIP(reason, null, source); + } + + /** + * Bans the IP address currently used by the player. + * Does not ban the Profile, use {@link #banPlayerFull(String, java.util.Date, String)} + * @param reason Reason for Ban + * @param expires When to expire the ban + * @return Ban Entry + * @deprecated use {@link #ban(String, Date, String)} and {@link #banIp(String, Date, String, boolean)} + */ + @Nullable + @Deprecated(since = "1.20.4") + public default org.bukkit.BanEntry banPlayerIP(@Nullable String reason, @Nullable java.util.Date expires) { + return banPlayerIP(reason, expires, null); + } + + /** + * Bans the IP address currently used by the player. + * Does not ban the Profile, use {@link #banPlayerFull(String, java.util.Date, String)} + * @param reason Reason for Ban + * @param expires When to expire the ban + * @param source Source of the ban or null for default + * @return Ban Entry + * @deprecated use {@link #ban(String, Date, String)} and {@link #banIp(String, Date, String, boolean)} + */ + @Nullable + @Deprecated(since = "1.20.4") + public default org.bukkit.BanEntry banPlayerIP(@Nullable String reason, @Nullable java.util.Date expires, @Nullable String source) { + return banPlayerIP(reason, expires, source, true); + } + + /** + * Bans the IP address currently used by the player. + * Does not ban the Profile, use {@link #banPlayerFull(String, java.util.Date, String)} + * @param reason Reason for Ban + * @param expires When to expire the ban + * @param source Source of the ban or null for default + * @param kickPlayer if the targeted player should be kicked + * @return Ban Entry + * @deprecated use {@link #ban(String, Date, String)} and {@link #banIp(String, Date, String, boolean)} + */ + @Nullable + @Deprecated(since = "1.20.4") + public default org.bukkit.BanEntry banPlayerIP(@Nullable String reason, @Nullable java.util.Date expires, @Nullable String source, boolean kickPlayer) { + org.bukkit.BanEntry banEntry = org.bukkit.Bukkit.getServer().getBanList(org.bukkit.BanList.Type.IP).addBan(getAddress().getAddress().getHostAddress(), reason, expires, source); + if (kickPlayer && isOnline()) { + getPlayer().kickPlayer(reason); + } + + return banEntry; + } /** * Sends an Action Bar message to the client.