|
1 | 1 | package org.bukkit.craftbukkit.entity;
|
2 | 2 |
|
3 | 3 | import com.google.common.base.Preconditions;
|
| 4 | +import io.papermc.paper.adventure.PaperAdventure; |
4 | 5 | import io.papermc.paper.registry.HolderableBase;
|
5 | 6 | import net.minecraft.core.Holder;
|
| 7 | +import net.minecraft.core.Registry; |
6 | 8 | import net.minecraft.core.registries.Registries;
|
| 9 | +import net.minecraft.resources.ResourceKey; |
7 | 10 | import net.minecraft.world.entity.animal.ChickenVariant;
|
| 11 | +import net.minecraft.world.item.EitherHolder; |
8 | 12 | import org.bukkit.craftbukkit.CraftRegistry;
|
9 | 13 | import org.bukkit.craftbukkit.CraftServer;
|
10 | 14 | import org.bukkit.entity.Chicken;
|
11 | 15 | import org.jspecify.annotations.NullMarked;
|
| 16 | +import java.util.Optional; |
12 | 17 |
|
13 | 18 | @NullMarked
|
14 | 19 | public class CraftChicken extends CraftAnimals implements Chicken {
|
@@ -49,6 +54,26 @@ public static Variant minecraftHolderToBukkit(Holder<ChickenVariant> minecraft)
|
49 | 54 | return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.CHICKEN_VARIANT);
|
50 | 55 | }
|
51 | 56 |
|
| 57 | + public static Variant minecraftEitherHolderToBukkit(EitherHolder<ChickenVariant> minecraft) { |
| 58 | + final Optional<Holder<ChickenVariant>> left = minecraft.contents().left(); |
| 59 | + if (left.isPresent()) { |
| 60 | + return CraftRegistry.minecraftHolderToBukkit(left.get(), Registries.CHICKEN_VARIANT); |
| 61 | + } |
| 62 | + final Optional<ResourceKey<ChickenVariant>> right = minecraft.contents().right(); |
| 63 | + if (right.isPresent()) { |
| 64 | + final Holder.Reference<ChickenVariant> orThrow = CraftRegistry.getMinecraftRegistry(right.get().registryKey()).getOrThrow(right.get()); |
| 65 | + return minecraftToBukkit(orThrow.value()); |
| 66 | + } |
| 67 | + throw new IllegalStateException("Cannot map entry for " + minecraft); |
| 68 | + } |
| 69 | + |
| 70 | + public static EitherHolder<ChickenVariant> bukkitToMinecraftEitherHolder(Variant variant) { |
| 71 | + final Registry<ChickenVariant> chickenVariantRegistry = CraftRegistry.getMinecraftRegistry(Registries.CHICKEN_VARIANT); |
| 72 | + final Optional<Holder.Reference<ChickenVariant>> chickenVariantReference = chickenVariantRegistry.get(PaperAdventure.asVanilla(variant.key())); |
| 73 | + return chickenVariantReference.map(EitherHolder::new).orElseGet(() -> new EitherHolder<>(PaperAdventure.asVanilla(chickenVariantRegistry.key(), variant.key()))); |
| 74 | + |
| 75 | + } |
| 76 | + |
52 | 77 | public static ChickenVariant bukkitToMinecraft(Variant bukkit) {
|
53 | 78 | return CraftRegistry.bukkitToMinecraft(bukkit);
|
54 | 79 | }
|
|
0 commit comments