mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-21 07:41:30 +01:00
Handle custom registry elements properly (#11230)
* Handle custom registry elements properly * update error message Datapack made painting variant support is added in https://github.com/PaperMC/Paper/pull/11244 * change msg for art conversion --------- Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
This commit is contained in:
parent
0c47bf87a2
commit
d44aa26792
@ -9,6 +9,24 @@ items need to exist without having a key and so
|
|||||||
getKey() methods on Keyed objects that have a registry
|
getKey() methods on Keyed objects that have a registry
|
||||||
are marked as Deprecated or Obsolete.
|
are marked as Deprecated or Obsolete.
|
||||||
|
|
||||||
|
diff --git a/src/main/java/org/bukkit/Art.java b/src/main/java/org/bukkit/Art.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/org/bukkit/Art.java
|
||||||
|
+++ b/src/main/java/org/bukkit/Art.java
|
||||||
|
@@ -0,0 +0,0 @@ public enum Art implements Keyed {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ // Paper start - deprecate getKey
|
||||||
|
+ /**
|
||||||
|
+ * @deprecated use {@link Registry#getKey(Keyed)} and {@link Registry#ART}. Painting variants
|
||||||
|
+ * can exist without a key.
|
||||||
|
+ */
|
||||||
|
+ @Deprecated(since = "1.21")
|
||||||
|
+ // Paper end - deprecate getKey
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public NamespacedKey getKey() {
|
||||||
diff --git a/src/main/java/org/bukkit/MusicInstrument.java b/src/main/java/org/bukkit/MusicInstrument.java
|
diff --git a/src/main/java/org/bukkit/MusicInstrument.java b/src/main/java/org/bukkit/MusicInstrument.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/org/bukkit/MusicInstrument.java
|
--- a/src/main/java/org/bukkit/MusicInstrument.java
|
||||||
@ -22,7 +40,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ * @deprecated use {@link Registry#getKey(Keyed)} and {@link Registry#INSTRUMENT}. MusicInstruments
|
+ * @deprecated use {@link Registry#getKey(Keyed)} and {@link Registry#INSTRUMENT}. MusicInstruments
|
||||||
+ * can exist without a key.
|
+ * can exist without a key.
|
||||||
+ */
|
+ */
|
||||||
+ @Deprecated
|
+ @Deprecated(forRemoval = true, since = "1.20.5")
|
||||||
+ @Override
|
+ @Override
|
||||||
+ public abstract @NotNull NamespacedKey getKey();
|
+ public abstract @NotNull NamespacedKey getKey();
|
||||||
+ // Paper end - deprecate getKey
|
+ // Paper end - deprecate getKey
|
||||||
@ -127,6 +145,24 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ // Paper end - improve Registry
|
+ // Paper end - improve Registry
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
diff --git a/src/main/java/org/bukkit/Sound.java b/src/main/java/org/bukkit/Sound.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/org/bukkit/Sound.java
|
||||||
|
+++ b/src/main/java/org/bukkit/Sound.java
|
||||||
|
@@ -0,0 +0,0 @@ public enum Sound implements Keyed, net.kyori.adventure.sound.Sound.Type { // Pa
|
||||||
|
this.key = NamespacedKey.minecraft(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ // Paper start - deprecate getKey
|
||||||
|
+ /**
|
||||||
|
+ * @deprecated use {@link Registry#getKey(Keyed)} and {@link Registry#SOUNDS}. Sounds
|
||||||
|
+ * can exist without a key.
|
||||||
|
+ */
|
||||||
|
+ @Deprecated(since = "1.20.5")
|
||||||
|
+ // Paper end - deprecate getKey
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public NamespacedKey getKey() {
|
||||||
diff --git a/src/main/java/org/bukkit/block/banner/PatternType.java b/src/main/java/org/bukkit/block/banner/PatternType.java
|
diff --git a/src/main/java/org/bukkit/block/banner/PatternType.java b/src/main/java/org/bukkit/block/banner/PatternType.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/org/bukkit/block/banner/PatternType.java
|
--- a/src/main/java/org/bukkit/block/banner/PatternType.java
|
||||||
@ -140,7 +176,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ * @deprecated use {@link Registry#getKey(Keyed)} and {@link Registry#BANNER_PATTERN}. PatternTypes
|
+ * @deprecated use {@link Registry#getKey(Keyed)} and {@link Registry#BANNER_PATTERN}. PatternTypes
|
||||||
+ * can exist without a key.
|
+ * can exist without a key.
|
||||||
+ */
|
+ */
|
||||||
+ @Deprecated
|
+ @Deprecated(since = "1.20.5")
|
||||||
+ // Paper end - deprecate getKey
|
+ // Paper end - deprecate getKey
|
||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
|
@ -16,7 +16,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
- this.setupResultSlot((Holder) this.selectablePatterns.get(id));
|
- this.setupResultSlot((Holder) this.selectablePatterns.get(id));
|
||||||
+ // Paper start - Add PlayerLoomPatternSelectEvent
|
+ // Paper start - Add PlayerLoomPatternSelectEvent
|
||||||
+ int selectablePatternIndex = id;
|
+ int selectablePatternIndex = id;
|
||||||
+ io.papermc.paper.event.player.PlayerLoomPatternSelectEvent event = new io.papermc.paper.event.player.PlayerLoomPatternSelectEvent((Player) player.getBukkitEntity(), ((CraftInventoryLoom) getBukkitView().getTopInventory()), org.bukkit.craftbukkit.block.banner.CraftPatternType.minecraftHolderToBukkit((this.selectablePatterns.get(selectablePatternIndex))));
|
+ io.papermc.paper.event.player.PlayerLoomPatternSelectEvent event = new io.papermc.paper.event.player.PlayerLoomPatternSelectEvent((Player) player.getBukkitEntity(), ((CraftInventoryLoom) getBukkitView().getTopInventory()), org.bukkit.craftbukkit.block.banner.CraftPatternType.minecraftHolderToBukkit(this.selectablePatterns.get(selectablePatternIndex)));
|
||||||
+ if (!event.callEvent()) {
|
+ if (!event.callEvent()) {
|
||||||
+ player.containerMenu.sendAllDataToRemote();
|
+ player.containerMenu.sendAllDataToRemote();
|
||||||
+ return false;
|
+ return false;
|
||||||
|
@ -4,40 +4,6 @@ Date: Sat, 6 Jan 2024 14:31:00 +0100
|
|||||||
Subject: [PATCH] Fixup NamespacedKey handling
|
Subject: [PATCH] Fixup NamespacedKey handling
|
||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/inventory/LoomMenu.java b/src/main/java/net/minecraft/world/inventory/LoomMenu.java
|
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
||||||
--- a/src/main/java/net/minecraft/world/inventory/LoomMenu.java
|
|
||||||
+++ b/src/main/java/net/minecraft/world/inventory/LoomMenu.java
|
|
||||||
@@ -0,0 +0,0 @@ public class LoomMenu extends AbstractContainerMenu {
|
|
||||||
return stillValid(this.access, player, Blocks.LOOM);
|
|
||||||
}
|
|
||||||
|
|
||||||
+ private static final org.slf4j.Logger LOGGER = com.mojang.logging.LogUtils.getLogger(); // Paper - handle custom banner pattern, skip the event
|
|
||||||
+ private static boolean PRINTED_PATTERN_TYPE_NAG = false; // Paper - handle custom banner pattern, skip the event
|
|
||||||
+
|
|
||||||
@Override
|
|
||||||
public boolean clickMenuButton(net.minecraft.world.entity.player.Player player, int id) {
|
|
||||||
if (id >= 0 && id < this.selectablePatterns.size()) {
|
|
||||||
+ // Paper start - handle custom banner pattern, skip the event (todo remove once this is supported)
|
|
||||||
+ java.util.Optional<org.bukkit.block.banner.PatternType> patternType = org.bukkit.craftbukkit.CraftRegistry.unwrapAndConvertHolder(org.bukkit.Registry.BANNER_PATTERN, this.selectablePatterns.get(id));
|
|
||||||
+ if (patternType.isEmpty()) {
|
|
||||||
+ if (!PRINTED_PATTERN_TYPE_NAG) {
|
|
||||||
+ LOGGER.warn("A datapack added a custom banner pattern, those are not supported yet in the API, skipping the PlayerLoomPatternSelectEvent for {}.", player.getScoreboardName());
|
|
||||||
+ PRINTED_PATTERN_TYPE_NAG = true;
|
|
||||||
+ }
|
|
||||||
+ this.selectedBannerPatternIndex.set(id);
|
|
||||||
+ this.setupResultSlot((Holder) this.selectablePatterns.get(id));
|
|
||||||
+ return true;
|
|
||||||
+ }
|
|
||||||
+ // Paper end - handle custom banner pattern
|
|
||||||
+
|
|
||||||
// Paper start - Add PlayerLoomPatternSelectEvent
|
|
||||||
int selectablePatternIndex = id;
|
|
||||||
- io.papermc.paper.event.player.PlayerLoomPatternSelectEvent event = new io.papermc.paper.event.player.PlayerLoomPatternSelectEvent((Player) player.getBukkitEntity(), ((CraftInventoryLoom) getBukkitView().getTopInventory()), org.bukkit.craftbukkit.block.banner.CraftPatternType.minecraftHolderToBukkit((this.selectablePatterns.get(selectablePatternIndex))));
|
|
||||||
+ io.papermc.paper.event.player.PlayerLoomPatternSelectEvent event = new io.papermc.paper.event.player.PlayerLoomPatternSelectEvent((Player) player.getBukkitEntity(), ((CraftInventoryLoom) getBukkitView().getTopInventory()), patternType.get());
|
|
||||||
if (!event.callEvent()) {
|
|
||||||
player.containerMenu.sendAllDataToRemote();
|
|
||||||
return false;
|
|
||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftLootTable.java b/src/main/java/org/bukkit/craftbukkit/CraftLootTable.java
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftLootTable.java b/src/main/java/org/bukkit/craftbukkit/CraftLootTable.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftLootTable.java
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftLootTable.java
|
||||||
@ -93,14 +59,27 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
for (int i = 0; i < banner.getPatterns().layers().size(); i++) {
|
for (int i = 0; i < banner.getPatterns().layers().size(); i++) {
|
||||||
BannerPatternLayers.Layer p = banner.getPatterns().layers().get(i);
|
BannerPatternLayers.Layer p = banner.getPatterns().layers().get(i);
|
||||||
- this.patterns.add(new Pattern(DyeColor.getByWoolData((byte) p.color().getId()), CraftPatternType.minecraftHolderToBukkit(p.pattern())));
|
- this.patterns.add(new Pattern(DyeColor.getByWoolData((byte) p.color().getId()), CraftPatternType.minecraftHolderToBukkit(p.pattern())));
|
||||||
+ // Paper start - fix upstream not handling custom banner pattern
|
+ // Paper start - fix upstream not handling inlined banner pattern
|
||||||
+ java.util.Optional<org.bukkit.block.banner.PatternType> type = org.bukkit.craftbukkit.CraftRegistry.unwrapAndConvertHolder(org.bukkit.Registry.BANNER_PATTERN, p.pattern());
|
+ java.util.Optional<org.bukkit.block.banner.PatternType> type = org.bukkit.craftbukkit.CraftRegistry.unwrapAndConvertHolder(org.bukkit.Registry.BANNER_PATTERN, p.pattern());
|
||||||
+ if (type.isEmpty()) continue;
|
+ if (type.isEmpty()) continue;
|
||||||
+ this.patterns.add(new Pattern(DyeColor.getByWoolData((byte) p.color().getId()), type.get()));
|
+ this.patterns.add(new Pattern(DyeColor.getByWoolData((byte) p.color().getId()), type.get()));
|
||||||
+ // Paper end
|
+ // Paper end - fix upstream not handling inlined banner pattern
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java
|
||||||
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java
|
||||||
|
@@ -0,0 +0,0 @@ public class CraftPainting extends CraftHanging implements Painting {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Art getArt() {
|
||||||
|
- return CraftArt.minecraftHolderToBukkit(this.getHandle().getVariant());
|
||||||
|
+ return org.bukkit.craftbukkit.CraftRegistry.unwrapAndConvertHolder(org.bukkit.Registry.ART, this.getHandle().getVariant()).orElseThrow(() -> new IllegalStateException("Inlined/custom painting variants are not supported yet in the API!")); // Paper
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaArmor.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaArmor.java
|
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaArmor.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaArmor.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaArmor.java
|
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaArmor.java
|
||||||
@ -126,7 +105,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
BannerPatternLayers.Layer p = patterns.get(i);
|
BannerPatternLayers.Layer p = patterns.get(i);
|
||||||
DyeColor color = DyeColor.getByWoolData((byte) p.color().getId());
|
DyeColor color = DyeColor.getByWoolData((byte) p.color().getId());
|
||||||
- PatternType pattern = CraftPatternType.minecraftHolderToBukkit(p.pattern());
|
- PatternType pattern = CraftPatternType.minecraftHolderToBukkit(p.pattern());
|
||||||
+ PatternType pattern = org.bukkit.craftbukkit.CraftRegistry.unwrapAndConvertHolder(org.bukkit.Registry.BANNER_PATTERN, p.pattern()).orElse(null); // Paper - fix upstream not handling custom banner pattern
|
+ PatternType pattern = org.bukkit.craftbukkit.CraftRegistry.unwrapAndConvertHolder(org.bukkit.Registry.BANNER_PATTERN, p.pattern()).orElse(null); // Paper - fix upstream not handling inlined banner pattern
|
||||||
|
|
||||||
if (color != null && pattern != null) {
|
if (color != null && pattern != null) {
|
||||||
this.patterns.add(new Pattern(color, pattern));
|
this.patterns.add(new Pattern(color, pattern));
|
||||||
@ -139,7 +118,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
|
|
||||||
getOrEmpty(tag, CraftMetaMusicInstrument.GOAT_HORN_INSTRUMENT).ifPresent((instrument) -> {
|
getOrEmpty(tag, CraftMetaMusicInstrument.GOAT_HORN_INSTRUMENT).ifPresent((instrument) -> {
|
||||||
- this.instrument = CraftMusicInstrument.minecraftHolderToBukkit(instrument);
|
- this.instrument = CraftMusicInstrument.minecraftHolderToBukkit(instrument);
|
||||||
+ this.instrument = org.bukkit.craftbukkit.CraftRegistry.unwrapAndConvertHolder(org.bukkit.Registry.INSTRUMENT, instrument).orElse(null); // Paper - fix upstream not handling custom instruments
|
+ this.instrument = org.bukkit.craftbukkit.CraftRegistry.unwrapAndConvertHolder(org.bukkit.Registry.INSTRUMENT, instrument).orElse(null); // Paper - fix upstream not handling inlined instrument
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -682,7 +682,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ super(tag, extraHandledDcts); // Paper
|
+ super(tag, extraHandledDcts); // Paper
|
||||||
|
|
||||||
getOrEmpty(tag, CraftMetaMusicInstrument.GOAT_HORN_INSTRUMENT).ifPresent((instrument) -> {
|
getOrEmpty(tag, CraftMetaMusicInstrument.GOAT_HORN_INSTRUMENT).ifPresent((instrument) -> {
|
||||||
this.instrument = org.bukkit.craftbukkit.CraftRegistry.unwrapAndConvertHolder(org.bukkit.Registry.INSTRUMENT, instrument).orElse(null); // Paper - fix upstream not handling custom instruments
|
this.instrument = org.bukkit.craftbukkit.CraftRegistry.unwrapAndConvertHolder(org.bukkit.Registry.INSTRUMENT, instrument).orElse(null); // Paper - fix upstream not handling inlined instrument
|
||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaOminousBottle.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaOminousBottle.java
|
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaOminousBottle.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaOminousBottle.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaOminousBottle.java
|
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaOminousBottle.java
|
||||||
|
Loading…
Reference in New Issue
Block a user