33import de .oliver .fancynpcs .api .Npc ;
44import de .oliver .fancynpcs .api .NpcAttribute ;
55import de .oliver .fancynpcs .v1_21_5 .ReflectionHelper ;
6+ import net .minecraft .core .Holder ;
7+ import net .minecraft .core .HolderLookup ;
8+ import net .minecraft .core .registries .Registries ;
9+ import net .minecraft .data .registries .VanillaRegistries ;
10+ import net .minecraft .resources .ResourceKey ;
11+ import net .minecraft .resources .ResourceLocation ;
612import net .minecraft .world .entity .EquipmentSlot ;
713import net .minecraft .world .entity .animal .Pig ;
14+ import net .minecraft .world .entity .animal .PigVariant ;
815import net .minecraft .world .item .Items ;
916import org .bukkit .entity .EntityType ;
1017
@@ -16,6 +23,16 @@ public class PigAttributes {
1623 public static List <NpcAttribute > getAllAttributes () {
1724 List <NpcAttribute > attributes = new ArrayList <>();
1825
26+ attributes .add (new NpcAttribute (
27+ "variant" ,
28+ getPigVariantRegistry ()
29+ .listElementIds ()
30+ .map (id -> id .location ().getPath ())
31+ .toList (),
32+ List .of (EntityType .CAT ),
33+ PigAttributes ::setVariant
34+ ));
35+
1936 attributes .add (new NpcAttribute (
2037 "has_saddle" ,
2138 List .of ("true" , "false" ),
@@ -26,6 +43,19 @@ public static List<NpcAttribute> getAllAttributes() {
2643 return attributes ;
2744 }
2845
46+ private static void setVariant (Npc npc , String value ) {
47+ final Pig pig = ReflectionHelper .getEntity (npc );
48+
49+ Holder <PigVariant > variant = getPigVariantRegistry ()
50+ .get (ResourceKey .create (
51+ Registries .PIG_VARIANT ,
52+ ResourceLocation .withDefaultNamespace (value .toLowerCase ())
53+ ))
54+ .orElseThrow ();
55+
56+ pig .setVariant (variant );
57+ }
58+
2959 private static void setHasSaddle (Npc npc , String value ) {
3060 Pig pig = ReflectionHelper .getEntity (npc );
3161
@@ -36,4 +66,11 @@ private static void setHasSaddle(Npc npc, String value) {
3666 }
3767 }
3868
69+ private static HolderLookup .RegistryLookup <PigVariant > getPigVariantRegistry () {
70+ return VanillaRegistries
71+ .createLookup ()
72+ .lookup (Registries .PIG_VARIANT )
73+ .orElseThrow ();
74+ }
75+
3976}
0 commit comments