Skip to content

Commit 29a47dd

Browse files
PigData HotFix (#8012)
1 parent 665a077 commit 29a47dd

File tree

1 file changed

+25
-27
lines changed

1 file changed

+25
-27
lines changed

src/main/java/ch/njol/skript/entity/PigData.java

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import ch.njol.skript.lang.Literal;
55
import ch.njol.skript.lang.SkriptParser.ParseResult;
66
import ch.njol.skript.registrations.Classes;
7+
import ch.njol.skript.util.Patterns;
8+
import ch.njol.util.Kleenean;
79
import ch.njol.util.coll.CollectionUtils;
810
import com.google.common.collect.Iterators;
911
import org.bukkit.entity.Pig;
@@ -14,44 +16,44 @@
1416

1517
public 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

Comments
 (0)