Skip to content

Commit b5bfb9a

Browse files
Update to Paper 1.21.11 (SkriptLang#8328)
1 parent 371fb88 commit b5bfb9a

14 files changed

Lines changed: 317 additions & 28 deletions

File tree

.github/workflows/java-21-builds.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
if: "! contains(toJSON(github.event.commits.*.message), '[ci skip]')"
1414
uses: ./.github/workflows/parallelize-tests.yml
1515
with:
16-
environments: 1.21,1.21.1,1.21.3,1.21.4,1.21.5,1.21.8,1.21.10
16+
environments: 1.21,1.21.1,1.21.3,1.21.4,1.21.5,1.21.8,1.21.10,1.21.11
1717
java_version: 21
1818
parallel_jobs: 3
1919

.github/workflows/junit-21-builds.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
if: "! contains(toJSON(github.event.commits.*.message), '[ci skip]')"
1414
uses: ./.github/workflows/parallelize-tests.yml
1515
with:
16-
environments: 1.21,1.21.1,1.21.3,1.21.4,1.21.5,1.21.8,1.21.10
16+
environments: 1.21,1.21.1,1.21.3,1.21.4,1.21.5,1.21.8,1.21.10,1.21.11
1717
java_version: 21
1818
parallel_jobs: 3
1919

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ dependencies {
2929
shadow group: 'org.bstats', name: 'bstats-bukkit', version: '3.1.0'
3030
shadow group: 'net.kyori', name: 'adventure-text-serializer-bungeecord', version: '4.4.1'
3131

32-
implementation group: 'io.papermc.paper', name: 'paper-api', version: '1.21.10-R0.1-SNAPSHOT'
32+
implementation group: 'io.papermc.paper', name: 'paper-api', version: '1.21.11-R0.1-SNAPSHOT'
3333
implementation group: 'com.google.code.findbugs', name: 'findbugs', version: '3.0.1'
3434

3535
// bundled with Minecraft 1.19.4+ for display entity transforms

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ groupid=ch.njol
77
name=skript
88
version=2.13.2
99
jarName=Skript.jar
10-
testEnv=java21/paper-1.21.10
10+
testEnv=java21/paper-1.21.11
1111
testEnvJavaVersion=21

src/main/java/ch/njol/skript/Skript.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
import org.skriptlang.skript.bukkit.brewing.BrewingModule;
9696
import org.skriptlang.skript.bukkit.damagesource.DamageSourceModule;
9797
import org.skriptlang.skript.bukkit.displays.DisplayModule;
98+
import org.skriptlang.skript.bukkit.entity.EntityModule;
9899
import org.skriptlang.skript.bukkit.fishing.FishingModule;
99100
import org.skriptlang.skript.bukkit.furnace.FurnaceModule;
100101
import org.skriptlang.skript.bukkit.input.InputModule;
@@ -600,6 +601,7 @@ public void onEnable() {
600601
LootTableModule.load();
601602
skript.loadModules(
602603
new DamageSourceModule(),
604+
new EntityModule(),
603605
new ItemComponentModule(),
604606
new BrewingModule(),
605607
new CommonModule()

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.bukkit.World;
99
import org.bukkit.entity.*;
1010
import org.bukkit.entity.boat.*;
11+
import org.jetbrains.annotations.ApiStatus;
1112
import org.jetbrains.annotations.NotNull;
1213
import org.jetbrains.annotations.Nullable;
1314

@@ -54,22 +55,26 @@ public boolean equals(@Nullable Object obj) {
5455

5556
private final static List<SimpleEntityDataInfo> types = new ArrayList<>();
5657

57-
private static void addSimpleEntity(String codeName, Class<? extends Entity> entityClass) {
58+
@ApiStatus.Internal
59+
public static void addSimpleEntity(String codeName, Class<? extends Entity> entityClass) {
5860
addSimpleEntity(codeName, entityClass, Kleenean.UNKNOWN);
5961
}
6062

6163
/**
6264
* @param allowSpawning Whether to override the default {@link #canSpawn(World)} behavior and allow this entity to be spawned.
6365
*/
64-
private static void addSimpleEntity(String codeName, Class<? extends Entity> entityClass, Kleenean allowSpawning) {
66+
@ApiStatus.Internal
67+
public static void addSimpleEntity(String codeName, Class<? extends Entity> entityClass, Kleenean allowSpawning) {
6568
types.add(new SimpleEntityDataInfo(codeName, entityClass, false, allowSpawning));
6669
}
6770

68-
private static void addSuperEntity(String codeName, Class<? extends Entity> entityClass) {
71+
@ApiStatus.Internal
72+
public static void addSuperEntity(String codeName, Class<? extends Entity> entityClass) {
6973
addSuperEntity(codeName, entityClass, Kleenean.UNKNOWN);
7074
}
7175

72-
private static void addSuperEntity(String codeName, Class<? extends Entity> entityClass, Kleenean allowSpawning) {
76+
@ApiStatus.Internal
77+
public static void addSuperEntity(String codeName, Class<? extends Entity> entityClass, Kleenean allowSpawning) {
7378
types.add(new SimpleEntityDataInfo(codeName, entityClass, true, allowSpawning));
7479
}
7580

@@ -245,6 +250,11 @@ private static void addSuperEntity(String codeName, Class<? extends Entity> enti
245250
addSimpleEntity("mannequin", Mannequin.class);
246251
}
247252

253+
if (Skript.isRunningMinecraft(1, 21, 11)) {
254+
addSimpleEntity("camel husk", CamelHusk.class);
255+
addSimpleEntity("parched", Parched.class);
256+
}
257+
248258
// SuperTypes
249259
addSuperEntity("human", HumanEntity.class);
250260
addSuperEntity("damageable", Damageable.class);

src/main/java/ch/njol/skript/expressions/ExprWorldBorderWarningTime.java

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import ch.njol.skript.expressions.base.SimplePropertyExpression;
1010
import ch.njol.skript.util.Timespan;
1111
import ch.njol.skript.util.Timespan.TimePeriod;
12+
import ch.njol.util.Math2;
1213
import ch.njol.util.coll.CollectionUtils;
1314
import org.bukkit.WorldBorder;
1415
import org.bukkit.event.Event;
@@ -39,29 +40,26 @@ public class ExprWorldBorderWarningTime extends SimplePropertyExpression<WorldBo
3940

4041
@Override
4142
public void change(Event event, Object @Nullable [] delta, ChangeMode mode) {
42-
long input = mode == ChangeMode.RESET ? 15 : (((Timespan) delta[0]).getAs(TimePeriod.SECOND));
43+
long input = delta == null ? 15 : (((Timespan) delta[0]).getAs(TimePeriod.SECOND));
4344
for (WorldBorder worldBorder : getExpr().getArray(event)) {
44-
switch (mode) {
45-
case SET, RESET:
46-
worldBorder.setWarningTime((int) Math.min(input, Integer.MAX_VALUE));
47-
break;
48-
case ADD:
49-
if (worldBorder.getWarningTime() + input > Integer.MAX_VALUE) {
50-
worldBorder.setWarningTime(Integer.MAX_VALUE);
51-
} else {
52-
worldBorder.setWarningTime((int) (worldBorder.getWarningTime() + input));
53-
}
54-
break;
55-
case REMOVE:
56-
if (worldBorder.getWarningTime() - input > Integer.MAX_VALUE) {
57-
worldBorder.setWarningTime(Integer.MAX_VALUE);
58-
} else {
59-
worldBorder.setWarningTime((int) Math.max(worldBorder.getWarningTime() - input, 0));
60-
}
61-
}
45+
long warningTime = switch (mode) {
46+
case SET, RESET -> input;
47+
case ADD -> Math2.addClamped(worldBorder.getWarningTime(), input);
48+
case REMOVE -> Math2.addClamped(worldBorder.getWarningTime(), -input);
49+
default -> throw new IllegalStateException();
50+
};
51+
setWarningTime(worldBorder, warningTime);
6252
}
6353
}
6454

55+
private static void setWarningTime(WorldBorder worldBorder, long inputTime) {
56+
// make sure this won't cause an overflow, as internal value is in ticks
57+
long time = Math2.multiplyClamped(inputTime, 20);
58+
// fit and convert back to seconds
59+
int warningTime = ((int) Math2.fit(0, time, Integer.MAX_VALUE)) / 20;
60+
worldBorder.setWarningTime(warningTime);
61+
}
62+
6563
@Override
6664
public Class<? extends Timespan> getReturnType() {
6765
return Timespan.class;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.skriptlang.skript.bukkit.entity;
2+
3+
import ch.njol.skript.Skript;
4+
import ch.njol.skript.entity.SimpleEntityData;
5+
import org.bukkit.entity.AbstractNautilus;
6+
import org.skriptlang.skript.addon.AddonModule;
7+
import org.skriptlang.skript.addon.SkriptAddon;
8+
import org.skriptlang.skript.bukkit.entity.nautilus.*;
9+
10+
public class EntityModule implements AddonModule {
11+
12+
@Override
13+
public void load(SkriptAddon addon) {
14+
if (Skript.classExists("org.bukkit.entity.Nautilus")) {
15+
NautilusData.register();
16+
ZombieNautilusData.register();
17+
SimpleEntityData.addSuperEntity("any nautilus", AbstractNautilus.class);
18+
}
19+
}
20+
21+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package org.skriptlang.skript.bukkit.entity.nautilus;
2+
3+
import ch.njol.skript.entity.EntityData;
4+
import ch.njol.skript.lang.Literal;
5+
import ch.njol.skript.lang.SkriptParser.ParseResult;
6+
import ch.njol.util.Kleenean;
7+
import org.bukkit.entity.Nautilus;
8+
import org.jetbrains.annotations.NotNull;
9+
import org.jetbrains.annotations.Nullable;
10+
11+
import java.util.Objects;
12+
13+
public class NautilusData extends EntityData<Nautilus> {
14+
15+
public static void register() {
16+
EntityData.register(NautilusData.class, "nautilus", Nautilus.class, 0, "nautilus");
17+
}
18+
19+
private Kleenean isTamed = Kleenean.UNKNOWN;
20+
21+
public NautilusData() { }
22+
23+
@Override
24+
protected boolean init(Literal<?>[] exprs, int matchedCodeName, int matchedPattern, ParseResult parseResult) {
25+
if (parseResult.hasTag("tamed")) {
26+
isTamed = Kleenean.TRUE;
27+
}
28+
return true;
29+
}
30+
31+
@Override
32+
protected boolean init(@Nullable Class<? extends Nautilus> entityClass, @Nullable Nautilus nautilus) {
33+
if (nautilus != null) {
34+
isTamed = Kleenean.get(nautilus.isTamed());
35+
}
36+
return true;
37+
}
38+
39+
@Override
40+
public void set(Nautilus nautilus) {
41+
nautilus.setTamed(isTamed.isTrue());
42+
}
43+
44+
@Override
45+
protected boolean match(Nautilus nautilus) {
46+
return kleeneanMatch(isTamed, nautilus.isTamed());
47+
}
48+
49+
@Override
50+
public Class<? extends Nautilus> getType() {
51+
return Nautilus.class;
52+
}
53+
54+
@Override
55+
public @NotNull EntityData<?> getSuperType() {
56+
return new NautilusData();
57+
}
58+
59+
@Override
60+
protected int hashCode_i() {
61+
return Objects.hashCode(isTamed);
62+
}
63+
64+
@Override
65+
protected boolean equals_i(EntityData<?> entityData) {
66+
if (!(entityData instanceof NautilusData other)) {
67+
return false;
68+
}
69+
return isTamed == other.isTamed;
70+
}
71+
72+
@Override
73+
public boolean isSupertypeOf(EntityData<?> entityData) {
74+
if (!(entityData instanceof NautilusData other)) {
75+
return false;
76+
}
77+
return kleeneanMatch(isTamed, other.isTamed);
78+
}
79+
80+
}
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
package org.skriptlang.skript.bukkit.entity.nautilus;
2+
3+
import ch.njol.skript.classes.registry.RegistryClassInfo;
4+
import ch.njol.skript.entity.EntityData;
5+
import ch.njol.skript.lang.Literal;
6+
import ch.njol.skript.lang.SkriptParser.ParseResult;
7+
import ch.njol.skript.registrations.Classes;
8+
import ch.njol.skript.variables.Variables;
9+
import ch.njol.util.Kleenean;
10+
import ch.njol.util.coll.CollectionUtils;
11+
import io.papermc.paper.registry.RegistryAccess;
12+
import io.papermc.paper.registry.RegistryKey;
13+
import org.bukkit.Registry;
14+
import org.bukkit.entity.ZombieNautilus;
15+
import org.bukkit.entity.ZombieNautilus.Variant;
16+
import org.jetbrains.annotations.NotNull;
17+
import org.jetbrains.annotations.Nullable;
18+
19+
import java.util.Objects;
20+
21+
public class ZombieNautilusData extends EntityData<ZombieNautilus> {
22+
23+
private static Variant[] VARIANTS;
24+
25+
public static void register() {
26+
EntityData.register(ZombieNautilusData.class, "zombie nautilus", ZombieNautilus.class, 0, "zombie nautilus");
27+
Variables.yggdrasil.registerSingleClass(Variant.class, "ZombieNautilus.Variant");
28+
29+
Registry<@NotNull Variant> variantRegistry = RegistryAccess.registryAccess().getRegistry(RegistryKey.ZOMBIE_NAUTILUS_VARIANT);
30+
VARIANTS = variantRegistry.stream().toArray(Variant[]::new);
31+
Classes.registerClass(new RegistryClassInfo<>(Variant.class, variantRegistry, "zombienautilusvariant", "zombie nautilus variants")
32+
.user("zombie ?nautilus ?variants?")
33+
.name("Zombie Nautilus Variant")
34+
.description("Represents the variant of a zombie nautilus.")
35+
.since("INSERT VERSION")
36+
.documentationId("ZombieNautilusVariant"));
37+
}
38+
39+
private Kleenean isTamed = Kleenean.UNKNOWN;
40+
private @Nullable Variant variant = null;
41+
42+
public ZombieNautilusData() { }
43+
44+
public ZombieNautilusData(@Nullable Variant variant) {
45+
this.variant = variant;
46+
}
47+
48+
@Override
49+
protected boolean init(Literal<?>[] exprs, int matchedCodeName, int matchedPattern, ParseResult parseResult) {
50+
if (parseResult.hasTag("tamed")) {
51+
isTamed = Kleenean.TRUE;
52+
}
53+
if (exprs[0] != null) {
54+
//noinspection unchecked
55+
variant = ((Literal<ZombieNautilus.Variant>) exprs[0]).getSingle();
56+
}
57+
return true;
58+
}
59+
60+
@Override
61+
protected boolean init(@Nullable Class<? extends ZombieNautilus> entityClass, @Nullable ZombieNautilus zombieNautilus) {
62+
if (zombieNautilus != null) {
63+
isTamed = Kleenean.get(zombieNautilus.isTamed());
64+
variant = zombieNautilus.getVariant();
65+
}
66+
return true;
67+
}
68+
69+
@Override
70+
public void set(ZombieNautilus zombieNautilus) {
71+
zombieNautilus.setTamed(isTamed.isTrue());
72+
Variant variant = this.variant;
73+
if (variant == null) {
74+
variant = CollectionUtils.getRandom(VARIANTS);
75+
}
76+
assert variant != null;
77+
zombieNautilus.setVariant(variant);
78+
}
79+
80+
@Override
81+
protected boolean match(ZombieNautilus zombieNautilus) {
82+
return kleeneanMatch(isTamed, zombieNautilus.isTamed()) &&
83+
dataMatch(variant, zombieNautilus.getVariant());
84+
}
85+
86+
@Override
87+
public Class<? extends ZombieNautilus> getType() {
88+
return ZombieNautilus.class;
89+
}
90+
91+
@Override
92+
public @NotNull EntityData<?> getSuperType() {
93+
return new ZombieNautilusData();
94+
}
95+
96+
@Override
97+
protected int hashCode_i() {
98+
return Objects.hash(isTamed, variant);
99+
}
100+
101+
@Override
102+
protected boolean equals_i(EntityData<?> entityData) {
103+
if (!(entityData instanceof ZombieNautilusData other)) {
104+
return false;
105+
}
106+
return isTamed == other.isTamed && variant == other.variant;
107+
}
108+
109+
@Override
110+
public boolean isSupertypeOf(EntityData<?> entityData) {
111+
if (!(entityData instanceof ZombieNautilusData other)) {
112+
return false;
113+
}
114+
return kleeneanMatch(isTamed, other.isTamed) && dataMatch(variant, other.variant);
115+
}
116+
117+
}

0 commit comments

Comments
 (0)