mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-27 15:00:13 +01:00
Fixup NamespacedKey handling
This commit is contained in:
parent
21837e419b
commit
898bf90054
9 changed files with 26 additions and 6 deletions
|
@ -38,7 +38,7 @@ public class CraftLootTable implements org.bukkit.loot.LootTable {
|
|||
}
|
||||
|
||||
public static org.bukkit.loot.LootTable minecraftToBukkit(ResourceKey<LootTable> minecraft) {
|
||||
return (minecraft == null) ? null : Bukkit.getLootTable(CraftLootTable.minecraftToBukkitKey(minecraft));
|
||||
return (minecraft == null || minecraft.location().getPath().isEmpty()) ? null : Bukkit.getLootTable(CraftLootTable.minecraftToBukkitKey(minecraft)); // Paper - fix some NamespacedKey parsing
|
||||
}
|
||||
|
||||
public static NamespacedKey minecraftToBukkitKey(ResourceKey<LootTable> minecraft) {
|
||||
|
|
|
@ -159,6 +159,19 @@ public class CraftRegistry<B extends Keyed, M> implements Registry<B> {
|
|||
+ ", this can happen if a plugin creates its own registry entry with out properly registering it.");
|
||||
}
|
||||
|
||||
// Paper start - fixup upstream being dum
|
||||
public static <T extends org.bukkit.Keyed, M> java.util.Optional<T> unwrapAndConvertHolder(final io.papermc.paper.registry.RegistryKey<T> registryKey, final Holder<M> value) {
|
||||
return unwrapAndConvertHolder(io.papermc.paper.registry.RegistryAccess.registryAccess().getRegistry(registryKey), value);
|
||||
}
|
||||
|
||||
public static <T extends org.bukkit.Keyed, M> java.util.Optional<T> unwrapAndConvertHolder(final Registry<T> registry, final Holder<M> value) {
|
||||
if (registry instanceof CraftRegistry<?,?> craftRegistry && craftRegistry.supportsDirectHolders() && value.kind() == Holder.Kind.DIRECT) {
|
||||
return java.util.Optional.of(((CraftRegistry<T, M>) registry).convertDirectHolder(value));
|
||||
}
|
||||
return value.unwrapKey().map(key -> registry.get(CraftNamespacedKey.fromMinecraft(key.location())));
|
||||
}
|
||||
// Paper end - fixup upstream being dum
|
||||
|
||||
// Paper - move to PaperRegistries
|
||||
|
||||
// Paper - NOTE: As long as all uses of the method below relate to *serialization* via ConfigurationSerializable, it's fine
|
||||
|
|
|
@ -33,6 +33,7 @@ public class CraftAttribute implements Attribute, Handleable<net.minecraft.world
|
|||
string = FieldRename.convertAttributeName(ApiVersion.CURRENT, string);
|
||||
string = string.toLowerCase(Locale.ROOT);
|
||||
NamespacedKey key = NamespacedKey.fromString(string);
|
||||
if (key == null) return null; // Paper - Fixup NamespacedKey handling
|
||||
|
||||
// Now also convert from when keys where saved
|
||||
return CraftRegistry.get(Registry.ATTRIBUTE, key, ApiVersion.CURRENT);
|
||||
|
|
|
@ -38,7 +38,11 @@ public class CraftBanner extends CraftBlockEntityState<BannerBlockEntity> implem
|
|||
if (banner.getPatterns() != null) {
|
||||
for (int i = 0; i < banner.getPatterns().layers().size(); i++) {
|
||||
BannerPatternLayers.Layer p = banner.getPatterns().layers().get(i);
|
||||
this.patterns.add(new Pattern(DyeColor.getByWoolData((byte) p.color().getId()), CraftPatternType.minecraftHolderToBukkit(p.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());
|
||||
if (type.isEmpty()) continue;
|
||||
this.patterns.add(new Pattern(DyeColor.getByWoolData((byte) p.color().getId()), type.get()));
|
||||
// Paper end - fix upstream not handling inlined banner pattern
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@ 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 painting variants are not supported yet in the API!")); // Paper
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -42,7 +42,7 @@ public class CraftMetaBanner extends CraftMetaItem implements BannerMeta {
|
|||
for (int i = 0; i < Math.min(patterns.size(), 20); i++) {
|
||||
BannerPatternLayers.Layer p = patterns.get(i);
|
||||
DyeColor color = DyeColor.getByWoolData((byte) p.color().getId());
|
||||
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 inlined banner pattern
|
||||
|
||||
if (color != null && pattern != null) {
|
||||
this.patterns.add(new Pattern(color, pattern));
|
||||
|
|
|
@ -17,6 +17,7 @@ import org.bukkit.block.BlockState;
|
|||
import org.bukkit.block.banner.Pattern;
|
||||
import org.bukkit.block.banner.PatternType;
|
||||
import org.bukkit.configuration.serialization.DelegateDeserialization;
|
||||
import org.bukkit.craftbukkit.CraftRegistry;
|
||||
import org.bukkit.craftbukkit.block.CraftBlockStates;
|
||||
import org.bukkit.craftbukkit.block.banner.CraftPatternType;
|
||||
import org.bukkit.inventory.meta.BlockStateMeta;
|
||||
|
@ -53,7 +54,7 @@ public class CraftMetaShield extends CraftMetaItem implements ShieldMeta, BlockS
|
|||
for (int i = 0; i < Math.min(patterns.size(), 20); i++) {
|
||||
BannerPatternLayers.Layer p = patterns.get(i);
|
||||
DyeColor color = DyeColor.getByWoolData((byte) p.color().getId());
|
||||
PatternType pattern = CraftPatternType.minecraftHolderToBukkit(p.pattern());
|
||||
PatternType pattern = CraftRegistry.unwrapAndConvertHolder(io.papermc.paper.registry.RegistryKey.BANNER_PATTERN, p.pattern()).orElse(null); // Paper - fix upstream not being correct
|
||||
|
||||
if (color != null && pattern != null) {
|
||||
this.addPattern(new Pattern(color, pattern));
|
||||
|
|
|
@ -69,6 +69,7 @@ public class CraftPotionType implements PotionType.InternalPotionData {
|
|||
string = FieldRename.convertPotionTypeName(ApiVersion.CURRENT, string);
|
||||
string = string.toLowerCase(Locale.ROOT);
|
||||
NamespacedKey key = NamespacedKey.fromString(string);
|
||||
if (key == null) return null; // Paper - Fixup NamespacedKey handling
|
||||
|
||||
// Now also convert from when keys where saved
|
||||
return CraftRegistry.get(Registry.POTION, key, ApiVersion.CURRENT);
|
||||
|
|
|
@ -13,7 +13,7 @@ public final class CraftNamespacedKey {
|
|||
return null;
|
||||
}
|
||||
ResourceLocation minecraft = ResourceLocation.tryParse(string);
|
||||
return (minecraft == null) ? null : CraftNamespacedKey.fromMinecraft(minecraft);
|
||||
return (minecraft == null || minecraft.getPath().isEmpty()) ? null : CraftNamespacedKey.fromMinecraft(minecraft); // Paper - Bukkit's parser does not match Vanilla for empty paths
|
||||
}
|
||||
|
||||
public static NamespacedKey fromString(String string) {
|
||||
|
|
Loading…
Reference in a new issue