Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ dependencies {
shadow group: 'io.papermc', name: 'paperlib', version: '1.0.8'
shadow group: 'org.bstats', name: 'bstats-bukkit', version: '3.1.0'

implementation group: 'io.papermc.paper', name: 'paper-api', version: '26.1.1.build.+'
implementation group: 'io.papermc.paper', name: 'paper-api', version: '26.1.2.build.+'
implementation group: 'com.google.code.findbugs', name: 'findbugs', version: '3.0.1'

// bundled with Minecraft 1.19.4+ for display entity transforms
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@ groupid=ch.njol
name=skript
version=2.15.2
jarName=Skript.jar
testEnv=java25/paper-26.1.1
testEnv=java25/paper-26.1.2
testEnvJavaVersion=25
81 changes: 81 additions & 0 deletions src/main/java/ch/njol/skript/events/EvtEntityLunge.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package ch.njol.skript.events;

import ch.njol.skript.Skript;
import ch.njol.skript.entity.EntityType;
import ch.njol.skript.lang.Literal;
import ch.njol.skript.lang.SkriptEvent;
import ch.njol.skript.lang.SkriptParser;
import ch.njol.skript.registrations.EventConverter;
import ch.njol.skript.registrations.EventValues;
import io.papermc.paper.event.entity.EntityLungeEvent;
import org.bukkit.event.Event;
import org.jetbrains.annotations.Nullable;

@SuppressWarnings("unchecked")
public class EvtEntityLunge extends SkriptEvent {

@Nullable
private Literal<EntityType> entityTypes;

static {
// Since paper 26.1.2
if (Skript.classExists("io.papermc.paper.event.entity.EntityLungeEvent")) {
Skript.registerEvent("Entity Lunge", EvtEntityLunge.class, EntityLungeEvent.class, "[%-entitytypes%] lunge")
.description("Called when an entity lunges.",
"Either by using a spear enchanted with the lunge enchantment (e.g. players, skeletons)",
"or because of a mob's natural lunge attack (e.g. ravagers).",
"Lunge attack propels entity forward horizontally.")
.examples("on lunge:",
"\tset lunge power to 4",
"on ravager lunge:",
"\tcancel event"
)
.since("2.16");
Comment thread
vuxeim marked this conversation as resolved.
Outdated
Comment thread
vuxeim marked this conversation as resolved.
Outdated
}

EventValues.registerEventValue(EntityLungeEvent.class, Integer.class, new EventConverter<>() {
Comment thread
vuxeim marked this conversation as resolved.
Outdated
@Override
public void set(EntityLungeEvent event, Integer value) {
event.setLungePower(value);
}

@Override
public Integer convert(EntityLungeEvent event) {
return event.getLungePower();
}
});
}

@Override
public boolean init(Literal<?>[] args, int matchedPattern, SkriptParser.ParseResult parseResult) {
Comment thread
vuxeim marked this conversation as resolved.
Outdated
entityTypes = (Literal<EntityType>) args[0];
return true;
}

@Override
public boolean check(Event event) {

Comment thread
vuxeim marked this conversation as resolved.
Outdated
if (!(event instanceof EntityLungeEvent lungeEvent)) {
return false;
}

if (entityTypes == null) {
return false;
}

boolean matches = false;
for (EntityType et : entityTypes.getAll()) {
if (et.isInstance(lungeEvent.getEntity())) {
Comment thread
vuxeim marked this conversation as resolved.
Outdated
matches = true;
Comment thread
vuxeim marked this conversation as resolved.
Outdated
break;
}
}
return matches;
}

@Override
public String toString(@Nullable Event e, boolean debug) {
Comment thread
vuxeim marked this conversation as resolved.
Outdated
return (entityTypes != null ? entityTypes.toString(e, debug) : "") + " lunge";
Comment thread
vuxeim marked this conversation as resolved.
Outdated
}

}
72 changes: 72 additions & 0 deletions src/main/java/ch/njol/skript/expressions/ExprLungePower.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package ch.njol.skript.expressions;

import ch.njol.skript.Skript;
import ch.njol.skript.doc.*;
import ch.njol.skript.expressions.base.EventValueExpression;
import ch.njol.skript.expressions.base.WrapperExpression;
import ch.njol.skript.lang.*;
import ch.njol.util.Kleenean;
import ch.njol.util.coll.CollectionUtils;
import io.papermc.paper.event.entity.EntityLungeEvent;
import org.bukkit.event.Event;
import org.jetbrains.annotations.Nullable;

@Name("Lunge Power")
@Description({"The power of lunge attack.",
"Can be set to modify the distance of the lunge attack.",
"Initially, the lunge power is determined by the enchantment level of the lunge enchantment" +
"of the weapon used to perform the lunge attack (e.g. a spear).",
"But some mobs (e.g. ravagers) can also perform lunge attacks without a weapon."})
Comment thread
vuxeim marked this conversation as resolved.
Outdated
@Example("""
on skeleton lunge:
if the lunge power is 1, 2 or 3:
broadcast "Normal lunge power"
else if the lunge power is greater than 3:
broadcast "Overpowered lunge power"
""")
@Example("""
on lunge:
set event-lunge power to 5
""")
@Since("2.16")
public class ExprLungePower extends WrapperExpression<Integer> implements EventRestrictedSyntax {

static {
// Since paper 26.1.2
if (Skript.classExists("io.papermc.paper.event.entity.EntityLungeEvent")) {
Skript.registerExpression(ExprLungePower.class, Integer.class, ExpressionType.SIMPLE, "[the] [event-]lunge power");
}
}

@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) {
Comment thread
vuxeim marked this conversation as resolved.
Outdated
if (exprs.length != 0) {
return false;
}

setExpr(new EventValueExpression<>(Integer.class));
return ((EventValueExpression<Integer>) getExpr()).init();
}

@Override
public Class<? extends Event>[] supportedEvents() {
return CollectionUtils.array(EntityLungeEvent.class);
}

@Override
public boolean isSingle() {
return true;
}

@Override
public Class<Integer> getReturnType() {
return Integer.class;
}

@Override
public String toString(@Nullable Event event, boolean debug) {
return "lunge power";
}

}
17 changes: 17 additions & 0 deletions src/test/skript/environments/java25/paper-26.1.2.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "paper-26.1.2",
"resources": [
{"source": "server.properties.generic", "target": "server.properties"}
],
"paperDownloads": [
{
"version": "26.1.2",
"target": "paperclip.jar"
}
],
"skriptTarget": "plugins/Skript.jar",
"commandLine": [
"-Dcom.mojang.eula.agree=true",
"-jar", "paperclip.jar", "--nogui"
]
}
Loading