Skip to content

Commit efbde8d

Browse files
Strider Support (SkriptLang#7748)
* Initial Commit * Fuzesions Additions (#1) * Update src/main/java/ch/njol/skript/entity/StriderData.java Co-authored-by: Fusezion <fusezionstream@gmail.com>
1 parent 6199739 commit efbde8d

6 files changed

Lines changed: 231 additions & 0 deletions

File tree

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package ch.njol.skript.conditions;
2+
3+
import ch.njol.skript.conditions.base.PropertyCondition;
4+
import ch.njol.skript.doc.Description;
5+
import ch.njol.skript.doc.Example;
6+
import ch.njol.skript.doc.Name;
7+
import ch.njol.skript.doc.Since;
8+
import org.bukkit.entity.LivingEntity;
9+
import org.bukkit.entity.Strider;
10+
11+
@Name("Strider Is Shivering")
12+
@Description("Whether a strider is shivering.")
13+
@Example("""
14+
if last spawned strider is shivering:
15+
make last spawned strider stop shivering
16+
""")
17+
@Since("INSERT VERSION")
18+
public class CondStriderIsShivering extends PropertyCondition<LivingEntity> {
19+
20+
static {
21+
register(CondStriderIsShivering.class, "shivering", "livingentities");
22+
}
23+
24+
@Override
25+
public boolean check(LivingEntity entity) {
26+
return entity instanceof Strider strider && strider.isShivering();
27+
}
28+
29+
@Override
30+
protected String getPropertyName() {
31+
return "shivering";
32+
}
33+
34+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package ch.njol.skript.effects;
2+
3+
import ch.njol.skript.Skript;
4+
import ch.njol.skript.doc.Description;
5+
import ch.njol.skript.doc.Example;
6+
import ch.njol.skript.doc.Name;
7+
import ch.njol.skript.doc.Since;
8+
import ch.njol.skript.lang.Effect;
9+
import ch.njol.skript.lang.Expression;
10+
import ch.njol.skript.lang.SkriptParser.ParseResult;
11+
import ch.njol.skript.lang.SyntaxStringBuilder;
12+
import ch.njol.util.Kleenean;
13+
import org.bukkit.entity.LivingEntity;
14+
import org.bukkit.entity.Strider;
15+
import org.bukkit.event.Event;
16+
import org.jetbrains.annotations.Nullable;
17+
18+
@Name("Strider Shivering")
19+
@Description("Make a strider start/stop shivering.")
20+
@Example("""
21+
if last spawned strider is shivering:
22+
make last spawned strider stop shivering
23+
""")
24+
@Since("INSERT VERSION")
25+
public class EffStriderShivering extends Effect {
26+
27+
static {
28+
Skript.registerEffect(EffStriderShivering.class,
29+
"make %livingentities% start shivering",
30+
"force %livingentities% to start shivering",
31+
"make %livingentities% stop shivering",
32+
"force %livingentities% to stop shivering");
33+
}
34+
35+
private Expression<LivingEntity> entities;
36+
private boolean start;
37+
38+
@Override
39+
public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) {
40+
//noinspection unchecked
41+
entities = (Expression<LivingEntity>) exprs[0];
42+
start = matchedPattern <= 1;
43+
return true;
44+
}
45+
46+
@Override
47+
protected void execute(Event event) {
48+
for (LivingEntity entity : entities.getArray(event)) {
49+
if (entity instanceof Strider strider) {
50+
strider.setShivering(start);
51+
}
52+
}
53+
}
54+
55+
@Override
56+
public String toString(@Nullable Event event, boolean debug) {
57+
SyntaxStringBuilder builder = new SyntaxStringBuilder(event, debug);
58+
builder.append("make", entities);
59+
if (start) {
60+
builder.append("start");
61+
} else {
62+
builder.append("stop");
63+
}
64+
builder.append("shivering");
65+
return builder.toString();
66+
}
67+
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package ch.njol.skript.entity;
2+
3+
import ch.njol.skript.lang.Literal;
4+
import ch.njol.skript.lang.SkriptParser.ParseResult;
5+
import ch.njol.util.Kleenean;
6+
import org.bukkit.entity.Strider;
7+
import org.jetbrains.annotations.Nullable;
8+
9+
import java.util.Objects;
10+
11+
public class StriderData extends EntityData<Strider> {
12+
13+
static {
14+
register(StriderData.class, "strider", Strider.class, 1,
15+
"warm strider", "strider", "shivering strider");
16+
}
17+
18+
private Kleenean shivering = Kleenean.UNKNOWN;
19+
20+
public StriderData() {}
21+
22+
public StriderData(Kleenean shivering) {
23+
this.shivering = shivering;
24+
}
25+
26+
@Override
27+
protected boolean init(Literal<?>[] exprs, int matchedPattern, ParseResult parseResult) {
28+
shivering = Kleenean.get(matchedPattern - 1);
29+
return true;
30+
}
31+
32+
@Override
33+
protected boolean init(@Nullable Class<? extends Strider> entityClass, @Nullable Strider entity) {
34+
shivering = Kleenean.get(entity == null ? 0 : (entity.isShivering() ? 1 : -1));
35+
return true;
36+
}
37+
38+
@Override
39+
public void set(Strider entity) {
40+
entity.setShivering(shivering.isTrue());
41+
}
42+
43+
@Override
44+
protected boolean match(Strider entity) {
45+
return shivering.isUnknown() || (this.shivering.isTrue() == entity.isShivering());
46+
}
47+
48+
@Override
49+
public boolean isSupertypeOf(EntityData<?> entityData) {
50+
return entityData instanceof StriderData striderData
51+
&& (this.shivering.isUnknown() || striderData.shivering.is(shivering).isTrue());
52+
}
53+
54+
@Override
55+
public Class<? extends Strider> getType() {
56+
return Strider.class;
57+
}
58+
59+
@Override
60+
public EntityData<? super Strider> getSuperType() {
61+
return new StriderData(shivering);
62+
}
63+
64+
@Override
65+
protected int hashCode_i() {
66+
return Objects.hash(shivering);
67+
}
68+
69+
@Override
70+
protected boolean equals_i(EntityData<?> entityData) {
71+
return entityData instanceof StriderData striderData
72+
&& striderData.shivering == this.shivering;
73+
}
74+
75+
@Override
76+
public String toString(int flags) {
77+
StringBuilder builder = new StringBuilder();
78+
switch (shivering) {
79+
case TRUE -> builder.append("shivering ");
80+
case FALSE -> builder.append("warm ");
81+
};
82+
return builder.append("strider").toString();
83+
}
84+
85+
}

src/main/resources/lang/default.lang

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1167,6 +1167,12 @@ entities:
11671167
strider:
11681168
name: strider¦s
11691169
pattern: <age> strider(|1¦s)|(4¦)strider (kid(|1¦s)|child(|1¦ren))
1170+
warm strider:
1171+
name: warm strider¦s
1172+
pattern: <age> warm strider(|1¦s)|(4¦)warm strider (kid(|1¦s)|child(|1¦ren))
1173+
shivering strider:
1174+
name: shivering strider¦s, cold strider¦s
1175+
pattern: <age> (cold|shivering) strider(|1¦s)|(4¦)(cold|shivering) strider (kid(|1¦s)|child(|1¦ren))
11701176
#1.16.2 entity
11711177
piglin brute:
11721178
name: piglin brute¦s
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
local function easySpawn(type:entitytype) :: entity:
2+
spawn {_type} at test location
3+
delete spawned entity
4+
return spawned entity
5+
6+
test "StriderData - Strider Entity Data":
7+
set {_normal_strider} to easySpawn(strider)
8+
assert {_normal_strider} is not shivering with "The strider spawned using 'strider' should not be shivering"
9+
10+
set {_warm_strider} to easySpawn(warm strider)
11+
assert {_warm_strider} is not shivering with "The strider spawned using 'warm strider' should not be shivering"
12+
13+
set {_shivering_strider} to easySpawn(shivering strider)
14+
assert {_shivering_strider} is shivering with "The strider spawned using 'shivering strider' wasn't shivering"
15+
16+
17+
test "StriderData - Strider Entity Data Comparison":
18+
set {_normal_strider} to easySpawn(strider)
19+
assert {_normal_strider} is a strider
20+
assert {_normal_strider} is a warm strider # Striders should always be warm for one tick after spawning
21+
assert {_normal_strider} is not a cold strider
22+
23+
set {_warm_strider} to easySpawn(warm strider)
24+
assert {_warm_strider} is a strider
25+
assert {_warm_strider} is a warm strider # Striders should always be warm for one tick after spawning
26+
assert {_warm_strider} is not a cold strider
27+
28+
set {_shivering_strider} to easySpawn(shivering strider)
29+
assert {_shivering_strider} is a strider
30+
assert {_shivering_strider} is not a warm strider
31+
assert {_shivering_strider} is a cold strider
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
test "strider shivering":
2+
spawn a strider at test-location:
3+
set {_entity} to entity
4+
make {_entity} start shivering
5+
assert {_entity} is shivering with "Strider should be shivering"
6+
make {_entity} stop shivering
7+
assert {_entity} is not shivering with "Strider should not be shivering"
8+
clear entity within {_entity}

0 commit comments

Comments
 (0)