Skip to content

Commit e2cb3e9

Browse files
committed
add_absorption function
1 parent 16f2d8b commit e2cb3e9

File tree

4 files changed

+76
-42
lines changed

4 files changed

+76
-42
lines changed

plugin/src/main/java/fr/jamailun/ultimatespellsystem/extension/ExtensionLoader.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import fr.jamailun.ultimatespellsystem.extension.callbacks.ProjectileLandCallbacks;
1313
import fr.jamailun.ultimatespellsystem.extension.citizens.CitizensExtensionLoader;
1414
import fr.jamailun.ultimatespellsystem.extension.functions.*;
15-
import fr.jamailun.ultimatespellsystem.extension.listeners.EntityMoveListener;
1615
import fr.jamailun.ultimatespellsystem.extension.listeners.ItemPickupListener;
1716
import fr.jamailun.ultimatespellsystem.extension.providers.*;
1817
import org.bukkit.Bukkit;
@@ -63,6 +62,7 @@ public static synchronized void loadStatic() {
6362
JavaFunctionProvider.instance().registerFunction(new GetFoodLevelFunction());
6463
JavaFunctionProvider.instance().registerFunction(new SetFoodLevelFunction());
6564
JavaFunctionProvider.instance().registerFunction(new SolidBlockBellowFunction());
65+
JavaFunctionProvider.instance().registerFunction(new AddAbsorptionFunction());
6666
LogFunctions.register();
6767

6868
// Others
@@ -96,7 +96,6 @@ public static void loadCallbacks(JavaPlugin plugin) {
9696
loadCallback(plugin, new SummonExpiresCallbacks());
9797

9898
// Load listeners
99-
registerEvents(plugin, new EntityMoveListener());
10099
registerEvents(plugin, new ItemPickupListener());
101100

102101
UssLogger.logInfo("Loaded extension callbacks and listeners.");

plugin/src/main/java/fr/jamailun/ultimatespellsystem/extension/functions/AbstractFunction.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import fr.jamailun.ultimatespellsystem.api.runner.errors.InvalidTypeException;
77
import fr.jamailun.ultimatespellsystem.api.runner.functions.RunnableJavaFunction;
88
import fr.jamailun.ultimatespellsystem.dsl.nodes.expressions.functions.FunctionArgument;
9+
import fr.jamailun.ultimatespellsystem.dsl.nodes.type.Duration;
910
import fr.jamailun.ultimatespellsystem.dsl.nodes.type.Type;
1011
import fr.jamailun.ultimatespellsystem.plugin.entities.BukkitSpellEntity;
1112
import org.bukkit.Location;
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package fr.jamailun.ultimatespellsystem.extension.functions;
2+
3+
import fr.jamailun.ultimatespellsystem.api.UltimateSpellSystem;
4+
import fr.jamailun.ultimatespellsystem.api.runner.RuntimeExpression;
5+
import fr.jamailun.ultimatespellsystem.api.runner.SpellRuntime;
6+
import fr.jamailun.ultimatespellsystem.dsl.nodes.expressions.functions.FunctionArgument;
7+
import fr.jamailun.ultimatespellsystem.dsl.nodes.expressions.functions.FunctionType;
8+
import fr.jamailun.ultimatespellsystem.dsl.nodes.type.Duration;
9+
import fr.jamailun.ultimatespellsystem.dsl.nodes.type.TypePrimitive;
10+
import org.bukkit.NamespacedKey;
11+
import org.bukkit.attribute.Attribute;
12+
import org.bukkit.attribute.AttributeModifier;
13+
import org.bukkit.entity.LivingEntity;
14+
import org.jetbrains.annotations.NotNull;
15+
16+
import java.util.List;
17+
import java.util.UUID;
18+
19+
/**
20+
* Add absorption hearts.
21+
*/
22+
public class AddAbsorptionFunction extends AbstractFunction {
23+
24+
public AddAbsorptionFunction() {
25+
super(
26+
"add_absorption",
27+
// Returns new health
28+
TypePrimitive.BOOLEAN.asType(),
29+
// Args : the entity to heal, and the amount
30+
List.of(
31+
new FunctionArgument(
32+
FunctionType.accept(TypePrimitive.ENTITY),
33+
"entity", false
34+
),
35+
new FunctionArgument(
36+
FunctionType.accept(TypePrimitive.NUMBER),
37+
"amount", false
38+
),
39+
new FunctionArgument(
40+
FunctionType.accept(TypePrimitive.DURATION),
41+
"duration", false
42+
)
43+
)
44+
);
45+
}
46+
47+
@Override
48+
public Boolean compute(@NotNull List<RuntimeExpression> arguments, @NotNull SpellRuntime runtime) {
49+
LivingEntity target = toLivingEntity("add_absorption:entity", arguments.get(0), runtime);
50+
double amount = toDouble("add_absorption:amount", arguments.get(1), runtime);
51+
Duration duration = runtime.safeEvaluate(arguments.get(2), Duration.class);
52+
if(target == null || duration == null)
53+
return false;
54+
var absorptionAttribute = target.getAttribute(Attribute.GENERIC_MAX_ABSORPTION);
55+
if(absorptionAttribute == null)
56+
return false;
57+
58+
var absKey = new NamespacedKey("ultimate-spell-system", "add_absorption-"+ UUID.randomUUID());
59+
var modifier = new AttributeModifier(absKey, amount, AttributeModifier.Operation.ADD_NUMBER);
60+
61+
UltimateSpellSystem.getScheduler().run(() -> {
62+
// Add absorption hearts
63+
absorptionAttribute.addTransientModifier(modifier);
64+
target.setAbsorptionAmount(target.getAbsorptionAmount() + amount);
65+
// Remove after duration
66+
UltimateSpellSystem.getScheduler().runTaskLater(() -> {
67+
target.setAbsorptionAmount(Math.max(0, target.getAbsorptionAmount() - amount));
68+
absorptionAttribute.removeModifier(modifier);
69+
}, duration.toTicks());
70+
});
71+
72+
return true;
73+
}
74+
}

plugin/src/main/java/fr/jamailun/ultimatespellsystem/extension/listeners/EntityMoveListener.java

Lines changed: 0 additions & 40 deletions
This file was deleted.

0 commit comments

Comments
 (0)