From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Yannick Lamprecht Date: Sat, 10 Feb 2024 20:49:47 +0100 Subject: [PATCH] improve BanList types diff --git a/src/main/java/io/papermc/paper/ban/BanListType.java b/src/main/java/io/papermc/paper/ban/BanListType.java new file mode 100644 index 0000000000000000000000000000000000000000..2980abf2f41cb14f0ee5c829c365f8e304130618 --- /dev/null +++ b/src/main/java/io/papermc/paper/ban/BanListType.java @@ -0,0 +1,29 @@ +package io.papermc.paper.ban; + +import org.bukkit.BanList; +import org.bukkit.ban.IpBanList; +import org.bukkit.ban.ProfileBanList; +import org.jetbrains.annotations.NotNull; + +/** + * Represents a ban-type that a {@link BanList} may track. + * It enforces the correct return value at compile time. + */ +public interface BanListType { + + /** + * Banned IP addresses + */ + BanListType IP = new BanListTypeImpl<>(IpBanList.class); + /** + * Banned player profiles + */ + BanListType PROFILE = new BanListTypeImpl<>(ProfileBanList.class); + + /** + * Returns the type class of the ban list used generically + * + * @return the type class + */ + @NotNull Class typeClass(); +} diff --git a/src/main/java/io/papermc/paper/ban/BanListTypeImpl.java b/src/main/java/io/papermc/paper/ban/BanListTypeImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..1159e7cd29fbf11f3fa1448fcf9d0768e1bcb0a3 --- /dev/null +++ b/src/main/java/io/papermc/paper/ban/BanListTypeImpl.java @@ -0,0 +1,8 @@ +package io.papermc.paper.ban; + +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; + +@ApiStatus.Internal +record BanListTypeImpl(@NotNull Class typeClass) implements BanListType { +} diff --git a/src/main/java/org/bukkit/BanList.java b/src/main/java/org/bukkit/BanList.java index a77c0411a68a9bad33ddfb335b7a996a843e478c..0e0baadde9e34d28db56dc68e66aaf66c60d12df 100644 --- a/src/main/java/org/bukkit/BanList.java +++ b/src/main/java/org/bukkit/BanList.java @@ -16,7 +16,9 @@ public interface BanList { /** * Represents a ban-type that a {@link BanList} may track. + * @deprecated use {@link io.papermc.paper.ban.BanListType} to enforce the correct return value at compile time. */ + @Deprecated // Paper - BanList Type Improvements public enum Type { /** * Banned player names diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java index ca27559cf4aa1c2e44fdca2022e213b1b1c80f4e..db46e3233edf18bd91a6da8612ccc9f0080d5c17 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java @@ -1633,11 +1633,27 @@ public final class Bukkit { * @param The ban target * * @return a ban list of the specified type + * @deprecated use {@link #getBanList(io.papermc.paper.ban.BanListType)} to enforce the correct return value at compile time. */ @NotNull + @Deprecated // Paper - add BanListType (which has a generic) public static > T getBanList(@NotNull BanList.Type type) { return server.getBanList(type); } + // Paper start - add BanListType (which has a generic) + /** + * Gets a ban list for the supplied type. + * + * @param type the type of list to fetch, cannot be null + * @param The ban target + * + * @return a ban list of the specified type + */ + @NotNull + public static , E> B getBanList(final io.papermc.paper.ban.@NotNull BanListType type) { + return server.getBanList(type); + } + // Paper end - add BanListType (which has a generic) /** * Gets a set containing all player operators. diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java index b4f8281d3797ec825a7671f38077cd65d5a1d76e..0eb61b090d6f8fa6d99735ff3680dac774c52c1f 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -1394,10 +1394,25 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi * @param The ban target * * @return a ban list of the specified type + * @deprecated use {@link #getBanList(io.papermc.paper.ban.BanListType)} to enforce the correct return value at compile time. */ + @Deprecated // Paper - add BanListType (which has a generic) @NotNull public > T getBanList(@NotNull BanList.Type type); + // Paper start - add BanListType (which has a generic) + /** + * Gets a ban list for the supplied type. + * + * @param type the type of list to fetch, cannot be null + * @param The ban target + * + * @return a ban list of the specified type + */ + @NotNull + , E> B getBanList(@NotNull io.papermc.paper.ban.BanListType type); + // Paper end - add BanListType (which has a generic) + /** * Gets a set containing all player operators. *