92 lines
		
	
	
	
		
			2.9 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
	
		
			2.9 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 | 
						|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
 | 
						|
Date: Wed, 2 Mar 2022 13:36:21 -0800
 | 
						|
Subject: [PATCH] Add PaperRegistry
 | 
						|
 | 
						|
 | 
						|
diff --git a/src/main/java/io/papermc/paper/registry/Reference.java b/src/main/java/io/papermc/paper/registry/Reference.java
 | 
						|
new file mode 100644
 | 
						|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
 | 
						|
--- /dev/null
 | 
						|
+++ b/src/main/java/io/papermc/paper/registry/Reference.java
 | 
						|
@@ -0,0 +0,0 @@
 | 
						|
+package io.papermc.paper.registry;
 | 
						|
+
 | 
						|
+import org.bukkit.Keyed;
 | 
						|
+import org.bukkit.NamespacedKey;
 | 
						|
+import org.bukkit.Registry;
 | 
						|
+import org.jetbrains.annotations.NotNull;
 | 
						|
+import org.jetbrains.annotations.Nullable;
 | 
						|
+
 | 
						|
+/**
 | 
						|
+ * Represents a reference to a server-backed registry value that may
 | 
						|
+ * change.
 | 
						|
+ *
 | 
						|
+ * @param <T> type of the value
 | 
						|
+ */
 | 
						|
+public interface Reference<T extends Keyed> extends Keyed {
 | 
						|
+
 | 
						|
+    /**
 | 
						|
+     * Gets the value from the registry with the key.
 | 
						|
+     *
 | 
						|
+     * @return the value
 | 
						|
+     * @throws java.util.NoSuchElementException if there is no value with this key
 | 
						|
+     */
 | 
						|
+    @NotNull T value();
 | 
						|
+
 | 
						|
+    /**
 | 
						|
+     * Gets the value from the registry with the key.
 | 
						|
+     *
 | 
						|
+     * @return the value or null if it doesn't exist
 | 
						|
+     */
 | 
						|
+    @Nullable T valueOrNull();
 | 
						|
+
 | 
						|
+    /**
 | 
						|
+     * Creates a reference to a registered value.
 | 
						|
+     *
 | 
						|
+     * @param registry the registry the value is located in
 | 
						|
+     * @param key the key to the value
 | 
						|
+     * @param <T> the type of the value
 | 
						|
+     * @return a reference
 | 
						|
+     */
 | 
						|
+    static <T extends Keyed> @NotNull Reference<T> create(@NotNull Registry<T> registry, @NotNull NamespacedKey key) {
 | 
						|
+        return new ReferenceImpl<>(registry, key);
 | 
						|
+    }
 | 
						|
+}
 | 
						|
diff --git a/src/main/java/io/papermc/paper/registry/ReferenceImpl.java b/src/main/java/io/papermc/paper/registry/ReferenceImpl.java
 | 
						|
new file mode 100644
 | 
						|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
 | 
						|
--- /dev/null
 | 
						|
+++ b/src/main/java/io/papermc/paper/registry/ReferenceImpl.java
 | 
						|
@@ -0,0 +0,0 @@
 | 
						|
+package io.papermc.paper.registry;
 | 
						|
+
 | 
						|
+import org.bukkit.Keyed;
 | 
						|
+import org.bukkit.NamespacedKey;
 | 
						|
+import org.bukkit.Registry;
 | 
						|
+import org.jetbrains.annotations.NotNull;
 | 
						|
+import org.jetbrains.annotations.Nullable;
 | 
						|
+
 | 
						|
+import java.util.NoSuchElementException;
 | 
						|
+
 | 
						|
+record ReferenceImpl<T extends Keyed>(@NotNull Registry<T> registry, @NotNull NamespacedKey key) implements Reference<T> {
 | 
						|
+
 | 
						|
+    @Override
 | 
						|
+    public @NotNull T value() {
 | 
						|
+        final T value = this.registry.get(this.key);
 | 
						|
+        if (value == null) {
 | 
						|
+            throw new NoSuchElementException("No such value with key " + this.key);
 | 
						|
+        }
 | 
						|
+        return value;
 | 
						|
+    }
 | 
						|
+
 | 
						|
+    @Override
 | 
						|
+    public @Nullable T valueOrNull() {
 | 
						|
+        return this.registry.get(this.key);
 | 
						|
+    }
 | 
						|
+
 | 
						|
+    @Override
 | 
						|
+    public @NotNull NamespacedKey getKey() {
 | 
						|
+        return this.key;
 | 
						|
+    }
 | 
						|
+}
 |