From 0171060ae28ddfb1bcb1437f863388d7c2eb5f1b Mon Sep 17 00:00:00 2001 From: Bukkit/Spigot Date: Sun, 8 Jan 2023 20:36:06 +1100 Subject: [PATCH] SPIGOT-7034: Add methods for set/get instrument in Goat Horn By: byquanton <32410361+byquanton@users.noreply.github.com> --- .../main/java/org/bukkit/MusicInstrument.java | 66 +++++++++++++++++++ .../inventory/meta/MusicInstrumentMeta.java | 27 ++++++++ 2 files changed, 93 insertions(+) create mode 100644 paper-api/src/main/java/org/bukkit/MusicInstrument.java create mode 100644 paper-api/src/main/java/org/bukkit/inventory/meta/MusicInstrumentMeta.java diff --git a/paper-api/src/main/java/org/bukkit/MusicInstrument.java b/paper-api/src/main/java/org/bukkit/MusicInstrument.java new file mode 100644 index 0000000000..614dc9f2ff --- /dev/null +++ b/paper-api/src/main/java/org/bukkit/MusicInstrument.java @@ -0,0 +1,66 @@ +package org.bukkit; + +import com.google.common.base.Preconditions; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public final class MusicInstrument implements Keyed { + + private static final Map INSTRUMENTS = new HashMap<>(); + // + public static final MusicInstrument PONDER = getInstrument("ponder_goat_horn"); + public static final MusicInstrument SING = getInstrument("sing_goat_horn"); + public static final MusicInstrument SEEK = getInstrument("seek_goat_horn"); + public static final MusicInstrument FEEL = getInstrument("feel_goat_horn"); + public static final MusicInstrument ADMIRE = getInstrument("admire_goat_horn"); + public static final MusicInstrument CALL = getInstrument("call_goat_horn"); + public static final MusicInstrument YEARN = getInstrument("yearn_goat_horn"); + public static final MusicInstrument DREAM = getInstrument("dream_goat_horn"); + // + private final NamespacedKey key; + + private MusicInstrument(NamespacedKey key) { + this.key = key; + + INSTRUMENTS.put(key, this); + } + + @NotNull + @Override + public NamespacedKey getKey() { + return key; + } + + /** + * Returns a {@link MusicInstrument} by a {@link NamespacedKey}. + * + * @param namespacedKey the key + * @return the event or null + */ + @Nullable + public static MusicInstrument getByKey(@NotNull NamespacedKey namespacedKey) { + Preconditions.checkArgument(namespacedKey != null, "NamespacedKey cannot be null"); + + return INSTRUMENTS.get(namespacedKey); + } + + /** + * Returns all known MusicInstruments. + * + * @return the memoryKeys + */ + @NotNull + public static Collection values() { + return Collections.unmodifiableCollection(INSTRUMENTS.values()); + } + + private static MusicInstrument getInstrument(@NotNull String name) { + Preconditions.checkArgument(name != null, "Instrument name cannot be null"); + + return new MusicInstrument(NamespacedKey.minecraft(name)); + } +} diff --git a/paper-api/src/main/java/org/bukkit/inventory/meta/MusicInstrumentMeta.java b/paper-api/src/main/java/org/bukkit/inventory/meta/MusicInstrumentMeta.java new file mode 100644 index 0000000000..2a9bf331fd --- /dev/null +++ b/paper-api/src/main/java/org/bukkit/inventory/meta/MusicInstrumentMeta.java @@ -0,0 +1,27 @@ +package org.bukkit.inventory.meta; + +import org.bukkit.MusicInstrument; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public interface MusicInstrumentMeta extends ItemMeta { + + /** + * Sets the goat horn's instrument. + * + * @param instrument the instrument to set + */ + void setInstrument(@Nullable MusicInstrument instrument); + + /** + * Gets the instrument of the goat horn. + * + * @return The instrument of the goat horn + */ + @Nullable + MusicInstrument getInstrument(); + + @Override + @NotNull + MusicInstrumentMeta clone(); +}