Skip to content

Commit 985ebcf

Browse files
committed
Quick handling for ChickenVariant data component, remove dupe
1 parent 536b9b4 commit 985ebcf

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

paper-server/src/main/java/io/papermc/paper/datacomponent/DataComponentAdapters.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,6 @@ public static void bootstrap() {
163163
// register(DataComponents.LOCK, PaperLockCode::new);
164164
register(DataComponents.CONTAINER_LOOT, PaperSeededContainerLoot::new);
165165
register(DataComponents.BREAK_SOUND, nms -> PaperAdventure.asAdventureKey(nms.unwrapKey().get()), api -> BuiltInRegistries.SOUND_EVENT.getOrThrow(PaperAdventure.asVanilla(Registries.SOUND_EVENT, api)));
166-
register(DataComponents.VILLAGER_VARIANT, nms -> PaperAdventure.asAdventureKey(nms.unwrapKey().get()), api -> BuiltInRegistries.VILLAGER_TYPE.getOrThrow(PaperAdventure.asVanilla(Registries.VILLAGER_TYPE, api)));
167166
// TODO break_sound, provides_, entity data
168167
register(DataComponents.TOOLTIP_DISPLAY, PaperTooltipDisplay::new);
169168
register(DataComponents.WEAPON, PaperWeapon::new);
@@ -182,8 +181,8 @@ public static void bootstrap() {
182181
register(DataComponents.RABBIT_VARIANT, (nms) -> Rabbit.Type.values()[nms.ordinal()], (api) -> net.minecraft.world.entity.animal.Rabbit.Variant.byId(api.ordinal()));
183182
register(DataComponents.PIG_VARIANT, CraftPig.CraftVariant::minecraftHolderToBukkit, CraftPig.CraftVariant::bukkitToMinecraftHolder);
184183
register(DataComponents.COW_VARIANT, CraftCow.CraftVariant::minecraftHolderToBukkit, CraftCow.CraftVariant::bukkitToMinecraftHolder);
185-
// TODO:
186-
//register(DataComponents.CHICKEN_VARIANT, CraftChicken.CraftVariant::minecraftHolderToBukkit, CraftChicken.CraftVariant::bukkitToMinecraftHolder);
184+
// TODO: We should probably find a cleaner pattern for handling this which retains the EitherHolder, this does kinda suck in terms of exposure, however
185+
register(DataComponents.CHICKEN_VARIANT, CraftChicken.CraftVariant::minecraftEitherHolderToBukkit, CraftChicken.CraftVariant::bukkitToMinecraftEitherHolder);
187186
register(DataComponents.FROG_VARIANT, CraftFrog.CraftVariant::minecraftHolderToBukkit, CraftFrog.CraftVariant::bukkitToMinecraftHolder);
188187
register(DataComponents.HORSE_VARIANT, (nms) -> Horse.Style.values()[nms.ordinal()], (api) -> net.minecraft.world.entity.animal.horse.Variant.byId(api.ordinal()));
189188
register(DataComponents.PAINTING_VARIANT, CraftArt::minecraftHolderToBukkit, CraftArt::bukkitToMinecraftHolder);

paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java

+25
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
package org.bukkit.craftbukkit.entity;
22

33
import com.google.common.base.Preconditions;
4+
import io.papermc.paper.adventure.PaperAdventure;
45
import io.papermc.paper.registry.HolderableBase;
56
import net.minecraft.core.Holder;
7+
import net.minecraft.core.Registry;
68
import net.minecraft.core.registries.Registries;
9+
import net.minecraft.resources.ResourceKey;
710
import net.minecraft.world.entity.animal.ChickenVariant;
11+
import net.minecraft.world.item.EitherHolder;
812
import org.bukkit.craftbukkit.CraftRegistry;
913
import org.bukkit.craftbukkit.CraftServer;
1014
import org.bukkit.entity.Chicken;
1115
import org.jspecify.annotations.NullMarked;
16+
import java.util.Optional;
1217

1318
@NullMarked
1419
public class CraftChicken extends CraftAnimals implements Chicken {
@@ -49,6 +54,26 @@ public static Variant minecraftHolderToBukkit(Holder<ChickenVariant> minecraft)
4954
return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.CHICKEN_VARIANT);
5055
}
5156

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+
5277
public static ChickenVariant bukkitToMinecraft(Variant bukkit) {
5378
return CraftRegistry.bukkitToMinecraft(bukkit);
5479
}

0 commit comments

Comments
 (0)