aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYannick Lamprecht <[email protected]>2024-03-03 21:36:17 +0100
committerGitHub <[email protected]>2024-03-03 12:36:17 -0800
commitbbc03d811602c3040658875dfc921ce3724091b0 (patch)
treeabecab83f955c5609603a95792c1593ae313112c
parent8870d22bc76c45fe8cad6040d8e7325dae52568c (diff)
downloadPaper-bbc03d811602c3040658875dfc921ce3724091b0.tar.gz
Paper-bbc03d811602c3040658875dfc921ce3724091b0.zip
improve BanList types (#10239)
-rw-r--r--patches/api/0464-improve-BanList-types.patch131
-rw-r--r--patches/server/1050-improve-BanList-types.patch32
2 files changed, 163 insertions, 0 deletions
diff --git a/patches/api/0464-improve-BanList-types.patch b/patches/api/0464-improve-BanList-types.patch
new file mode 100644
index 0000000000..4fe0de3900
--- /dev/null
+++ b/patches/api/0464-improve-BanList-types.patch
@@ -0,0 +1,131 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Yannick Lamprecht <[email protected]>
+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<T> {
++
++ /**
++ * Banned IP addresses
++ */
++ BanListType<IpBanList> IP = new BanListTypeImpl<>(IpBanList.class);
++ /**
++ * Banned player profiles
++ */
++ BanListType<ProfileBanList> PROFILE = new BanListTypeImpl<>(ProfileBanList.class);
++
++ /**
++ * Returns the type class of the ban list used generically
++ *
++ * @return the type class
++ */
++ @NotNull Class<T> 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;
++
++record BanListTypeImpl<T>(@NotNull Class<T> typeClass) implements BanListType<T> {
++}
+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<T> {
+
+ /**
+ * 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 <T> 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 extends BanList<?>> 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 <B> The ban target
++ *
++ * @return a ban list of the specified type
++ */
++ @NotNull
++ public static <B extends BanList<E>, E> B getBanList(final io.papermc.paper.ban.@NotNull BanListType<B> 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 <T> 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 extends BanList<?>> 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 <B> The ban target
++ *
++ * @return a ban list of the specified type
++ */
++ @NotNull
++ <B extends BanList<E>, E> B getBanList(@NotNull io.papermc.paper.ban.BanListType<B> type);
++ // Paper end - add BanListType (which has a generic)
++
+ /**
+ * Gets a set containing all player operators.
+ *
diff --git a/patches/server/1050-improve-BanList-types.patch b/patches/server/1050-improve-BanList-types.patch
new file mode 100644
index 0000000000..ad92622c45
--- /dev/null
+++ b/patches/server/1050-improve-BanList-types.patch
@@ -0,0 +1,32 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Yannick Lamprecht <[email protected]>
+Date: Sat, 10 Feb 2024 20:50:01 +0100
+Subject: [PATCH] improve BanList types
+
+
+diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+index 9f7ed337463cc9bb370a5541d9de5cd8f9c1a78a..c490a29bcf7410bc54959ee71375605964379ed5 100644
+--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
++++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+@@ -2215,6 +2215,21 @@ public final class CraftServer implements Server {
+ };
+ }
+
++ // Paper start - add BanListType (which has a generic)
++ @SuppressWarnings("unchecked")
++ @Override
++ public <B extends BanList<E>, E> B getBanList(final io.papermc.paper.ban.BanListType<B> type) {
++ Preconditions.checkArgument(type != null, "BanList.BanType cannot be null");
++ if (type == io.papermc.paper.ban.BanListType.IP) {
++ return (B) new CraftIpBanList(this.playerList.getIpBans());
++ } else if (type == io.papermc.paper.ban.BanListType.PROFILE) {
++ return (B) new CraftProfileBanList(this.playerList.getBans());
++ } else {
++ throw new IllegalArgumentException("Unknown BanListType: " + type);
++ }
++ }
++ // Paper end - add BanListType (which has a generic)
++
+ @Override
+ public void setWhitelist(boolean value) {
+ this.playerList.setUsingWhiteList(value);