improve BanList types (#10239)

This commit is contained in:
Yannick Lamprecht 2024-03-03 21:36:17 +01:00
parent 715e4018a4
commit 29009b5f04
2 changed files with 163 additions and 0 deletions

View file

@ -0,0 +1,131 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Yannick Lamprecht <yannicklamprecht@live.de>
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..0000000000000000000000000000000000000000
--- /dev/null
+++ b/src/main/java/io/papermc/paper/ban/BanListType.java
@@ -0,0 +0,0 @@
+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..0000000000000000000000000000000000000000
--- /dev/null
+++ b/src/main/java/io/papermc/paper/ban/BanListTypeImpl.java
@@ -0,0 +0,0 @@
+package io.papermc.paper.ban;
+
+import org.jetbrains.annotations.ApiStatus;
+import org.jetbrains.annotations.NotNull;
+
+@ApiStatus.Internal
+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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/BanList.java
+++ b/src/main/java/org/bukkit/BanList.java
@@ -0,0 +0,0 @@ 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -0,0 +0,0 @@ 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -0,0 +0,0 @@ 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.
*

View file

@ -0,0 +1,32 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Yannick Lamprecht <yannicklamprecht@live.de>
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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -0,0 +0,0 @@ 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);