mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-29 15:49:00 +01:00
Use random UUIDs instead of incrementing long for click callback ids (#9007)
This commit is contained in:
parent
5f6566b549
commit
d8a4261a4d
2 changed files with 14 additions and 19 deletions
|
@ -1177,8 +1177,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||
@@ -0,0 +0,0 @@
|
||||
+package io.papermc.paper.adventure.providers;
|
||||
+
|
||||
+import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
|
||||
+import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
|
||||
+import java.util.HashMap;
|
||||
+import java.util.Map;
|
||||
+import java.util.UUID;
|
||||
+import net.kyori.adventure.audience.Audience;
|
||||
+import net.kyori.adventure.text.event.ClickCallback;
|
||||
+import net.kyori.adventure.text.event.ClickEvent;
|
||||
|
@ -1186,7 +1187,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||
+
|
||||
+import java.util.Queue;
|
||||
+import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
+import java.util.concurrent.atomic.AtomicLong;
|
||||
+
|
||||
+@SuppressWarnings("UnstableApiUsage") // permitted provider
|
||||
+public class ClickCallbackProviderImpl implements ClickCallback.Provider {
|
||||
|
@ -1200,15 +1200,14 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||
+
|
||||
+ public static final class CallbackManager {
|
||||
+
|
||||
+ private final Long2ObjectMap<StoredCallback> callbacks = new Long2ObjectOpenHashMap<>();
|
||||
+ private final Map<UUID, StoredCallback> callbacks = new HashMap<>();
|
||||
+ private final Queue<StoredCallback> queue = new ConcurrentLinkedQueue<>();
|
||||
+ private final AtomicLong current = new AtomicLong();
|
||||
+
|
||||
+ private CallbackManager() {
|
||||
+ }
|
||||
+
|
||||
+ public long addCallback(final @NotNull ClickCallback<Audience> callback, final ClickCallback.@NotNull Options options) {
|
||||
+ final long id = current.getAndIncrement();
|
||||
+ public UUID addCallback(final @NotNull ClickCallback<Audience> callback, final ClickCallback.@NotNull Options options) {
|
||||
+ final UUID id = UUID.randomUUID();
|
||||
+ this.queue.add(new StoredCallback(callback, options, id));
|
||||
+ return id;
|
||||
+ }
|
||||
|
@ -1226,7 +1225,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||
+ }
|
||||
+ }
|
||||
+
|
||||
+ public void runCallback(final @NotNull Audience audience, final long id) {
|
||||
+ public void runCallback(final @NotNull Audience audience, final UUID id) {
|
||||
+ final StoredCallback callback = this.callbacks.get(id);
|
||||
+ if (callback != null && callback.valid()) { //TODO Message if expired/invalid?
|
||||
+ callback.takeUse();
|
||||
|
@ -1239,10 +1238,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||
+ private final long startedAt = System.nanoTime();
|
||||
+ private final ClickCallback<Audience> callback;
|
||||
+ private final long lifetime;
|
||||
+ private final long id;
|
||||
+ private final UUID id;
|
||||
+ private int remainingUses;
|
||||
+
|
||||
+ private StoredCallback(final @NotNull ClickCallback<Audience> callback, final ClickCallback.@NotNull Options options, final long id) {
|
||||
+ private StoredCallback(final @NotNull ClickCallback<Audience> callback, final ClickCallback.@NotNull Options options, final UUID id) {
|
||||
+ this.callback = callback;
|
||||
+ this.lifetime = options.lifetime().toNanos();
|
||||
+ this.remainingUses = options.uses();
|
||||
|
@ -1267,7 +1266,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||
+ return hasRemainingUses() && !expired();
|
||||
+ }
|
||||
+
|
||||
+ public long id() {
|
||||
+ public UUID id() {
|
||||
+ return this.id;
|
||||
+ }
|
||||
+ }
|
||||
|
|
|
@ -298,15 +298,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||
+
|
||||
+import io.papermc.paper.adventure.providers.ClickCallbackProviderImpl;
|
||||
+import io.papermc.paper.command.PaperSubcommand;
|
||||
+import net.kyori.adventure.text.Component;
|
||||
+import net.kyori.adventure.text.event.ClickCallback;
|
||||
+import net.kyori.adventure.text.event.ClickEvent;
|
||||
+import java.util.UUID;
|
||||
+import org.bukkit.command.CommandSender;
|
||||
+import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
+import org.checkerframework.framework.qual.DefaultQualifier;
|
||||
+
|
||||
+import java.time.Duration;
|
||||
+
|
||||
+@DefaultQualifier(NonNull.class)
|
||||
+public final class CallbackCommand implements PaperSubcommand {
|
||||
+ @Override
|
||||
|
@ -315,10 +311,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ final long id;
|
||||
+ final UUID id;
|
||||
+ try {
|
||||
+ id = Long.parseLong(args[0]);
|
||||
+ } catch (final NumberFormatException ignored) {
|
||||
+ id = UUID.fromString(args[0]);
|
||||
+ } catch (final IllegalArgumentException ignored) {
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
|
|
Loading…
Reference in a new issue