44import ch .njol .skript .lang .Literal ;
55import ch .njol .skript .lang .SkriptParser .ParseResult ;
66import ch .njol .skript .registrations .Classes ;
7+ import ch .njol .skript .util .Patterns ;
8+ import ch .njol .util .Kleenean ;
79import ch .njol .util .coll .CollectionUtils ;
810import com .google .common .collect .Iterators ;
911import org .bukkit .entity .Pig ;
1416
1517public class PigData extends EntityData <Pig > {
1618
17- public enum SaddleState {
18- NOT_SADDLED , UNKNOWN , SADDLED
19- }
20-
21- private static final SaddleState [] SADDLE_STATES = SaddleState .values ();
2219 private static final boolean VARIANTS_ENABLED ;
23- private static final Object [] variants ;
20+ private static final Object [] VARIANTS ;
21+ private static final Patterns <Kleenean > PATTERNS = new Patterns <>(new Object [][]{
22+ {"pig" , Kleenean .UNKNOWN },
23+ {"saddled pig" , Kleenean .TRUE },
24+ {"unsaddled pig" , Kleenean .FALSE }
25+ });
2426
2527 static {
26- EntityData .register (PigData .class , "pig" , Pig .class , 1 , "unsaddled pig" , "pig" , "saddled pig" );
28+ EntityData .register (PigData .class , "pig" , Pig .class , 0 , PATTERNS . getPatterns () );
2729 if (Skript .classExists ("org.bukkit.entity.Pig$Variant" )) {
2830 VARIANTS_ENABLED = true ;
29- variants = Iterators .toArray (Classes .getExactClassInfo (Pig .Variant .class ).getSupplier ().get (), Pig .Variant .class );
31+ VARIANTS = Iterators .toArray (Classes .getExactClassInfo (Pig .Variant .class ).getSupplier ().get (), Pig .Variant .class );
3032 } else {
3133 VARIANTS_ENABLED = false ;
32- variants = null ;
34+ VARIANTS = null ;
3335 }
3436 }
3537
36- private SaddleState saddled = SaddleState .UNKNOWN ;
38+ private Kleenean saddled = Kleenean .UNKNOWN ;
3739 private @ Nullable Object variant = null ;
3840
3941 public PigData () {}
4042
4143 // TODO: When safe, 'variant' should have the type changed to 'Pig.Variant'
42- public PigData (SaddleState saddled , @ Nullable Object variant ) {
43- this .saddled = saddled ;
44+ public PigData (@ Nullable Kleenean saddled , @ Nullable Object variant ) {
45+ this .saddled = saddled != null ? saddled : Kleenean . UNKNOWN ;
4446 this .variant = variant ;
4547 }
4648
4749 @ Override
4850 protected boolean init (Literal <?>[] exprs , int matchedPattern , ParseResult parseResult ) {
49- saddled = SADDLE_STATES [ matchedPattern ] ;
51+ saddled = PATTERNS . getInfo ( matchedPattern ) ;
5052 if (VARIANTS_ENABLED ) {
5153 Literal <?> expr = null ;
52- if (exprs [0 ] != null ) { // pig
54+ if (exprs [0 ] != null ) { // pig, saddled pig, unsaddled pig
5355 expr = exprs [0 ];
54- } else if (exprs [1 ] != null ) { // piglet
56+ } else if (exprs . length >= 2 && exprs [1 ] != null ) { // piglet
5557 expr = exprs [1 ];
5658 }
5759 if (expr != null ) {
@@ -64,33 +66,29 @@ protected boolean init(Literal<?>[] exprs, int matchedPattern, ParseResult parse
6466
6567 @ Override
6668 protected boolean init (@ Nullable Class <? extends Pig > entityClass , @ Nullable Pig pig ) {
67- saddled = SaddleState .UNKNOWN ;
69+ saddled = Kleenean .UNKNOWN ;
6870 if (pig != null ) {
69- saddled = pig .hasSaddle () ? SaddleState . SADDLED : SaddleState . NOT_SADDLED ;
71+ saddled = Kleenean . get ( pig .hasSaddle ()) ;
7072 if (VARIANTS_ENABLED )
7173 variant = pig .getVariant ();
7274 }
7375 return true ;
7476 }
75-
76- @ Override
77- protected boolean deserialize (String string ) {
78- return true ;
79- }
8077
8178 @ Override
8279 public void set (Pig pig ) {
83- pig .setSaddle (saddled == SaddleState . SADDLED );
80+ pig .setSaddle (saddled . isTrue () );
8481 if (VARIANTS_ENABLED ) {
85- Object finalVariant = variant != null ? variant : CollectionUtils .getRandom (variants );
82+ Object finalVariant = variant != null ? variant : CollectionUtils .getRandom (VARIANTS );
8683 pig .setVariant ((Pig .Variant ) finalVariant );
8784 }
8885 }
8986
9087 @ Override
9188 protected boolean match (Pig pig ) {
92- return (saddled == SaddleState .UNKNOWN || (pig .hasSaddle () ? SaddleState .SADDLED : SaddleState .NOT_SADDLED ) == saddled )
93- && (variant == null || variant == pig .getVariant ());
89+ if (!saddled .isUnknown () && saddled != Kleenean .get (pig .hasSaddle ()))
90+ return false ;
91+ return variant == null || variant == pig .getVariant ();
9492 }
9593
9694 @ Override
@@ -116,7 +114,7 @@ protected int hashCode_i() {
116114 public boolean isSupertypeOf (EntityData <?> entityData ) {
117115 if (!(entityData instanceof PigData other ))
118116 return false ;
119- if (saddled != SaddleState . UNKNOWN && saddled != other .saddled )
117+ if (! saddled . isUnknown () && saddled != other .saddled )
120118 return false ;
121119 return variant == null || variant == other .variant ;
122120 }
0 commit comments