Skip to content

Commit 64362ea

Browse files
committed
Added callbacks, and an event for expiring summons
1 parent 2da8ae4 commit 64362ea

File tree

7 files changed

+129
-13
lines changed

7 files changed

+129
-13
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package fr.jamailun.ultimatespellsystem.api.events;
2+
3+
import fr.jamailun.ultimatespellsystem.api.entities.SummonAttributes;
4+
import lombok.Getter;
5+
import lombok.RequiredArgsConstructor;
6+
import org.bukkit.event.Event;
7+
import org.bukkit.event.HandlerList;
8+
import org.jetbrains.annotations.NotNull;
9+
10+
/**
11+
* Event called when a summoned entity expired.
12+
*/
13+
@RequiredArgsConstructor
14+
@Getter
15+
public class SummonedEntityExpiredEvent extends Event {
16+
17+
@NotNull
18+
private final SummonAttributes summon;
19+
20+
private static final HandlerList HANDLERS = new HandlerList();
21+
@Override
22+
public @NotNull HandlerList getHandlers() {return HANDLERS;}
23+
public static HandlerList getHandlerList() {return HANDLERS;}
24+
}

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import fr.jamailun.ultimatespellsystem.api.providers.CallbackEventProvider;
55
import fr.jamailun.ultimatespellsystem.api.providers.JavaFunctionProvider;
66
import fr.jamailun.ultimatespellsystem.extension.callbacks.CallbackProvider;
7-
import fr.jamailun.ultimatespellsystem.extension.callbacks.ProjectileLandListener;
7+
import fr.jamailun.ultimatespellsystem.extension.callbacks.EntityDeathCallbacks;
8+
import fr.jamailun.ultimatespellsystem.extension.callbacks.SummonExpiresCallbacks;
9+
import fr.jamailun.ultimatespellsystem.extension.callbacks.ProjectileLandCallbacks;
810
import fr.jamailun.ultimatespellsystem.extension.functions.*;
911
import fr.jamailun.ultimatespellsystem.extension.providers.*;
1012
import org.bukkit.Bukkit;
@@ -57,14 +59,18 @@ public static void loadCallbacks(JavaPlugin plugin) {
5759
UltimateSpellSystem.logInfo("Loading extension callbacks.");
5860

5961
// Load elements
60-
loadCallback(plugin, new ProjectileLandListener());
62+
loadCallback(plugin, new ProjectileLandCallbacks());
63+
loadCallback(plugin, new EntityDeathCallbacks());
64+
loadCallback(plugin, new SummonExpiresCallbacks());
65+
66+
UltimateSpellSystem.logInfo("Loaded extension callbacks.");
6167
}
6268

6369
private static void loadCallback(JavaPlugin plugin, CallbackProvider<?> callbackProvider) {
6470
// 1. Event
6571
Bukkit.getPluginManager().registerEvents(callbackProvider, plugin);
6672
// 2. Register
67-
CallbackEventProvider.instance().registerCallback(callbackProvider.getCallback());
73+
callbackProvider.getCallbacks().forEach(CallbackEventProvider.instance()::registerCallback);
6874
}
6975

7076
}

plugin/src/main/java/fr/jamailun/ultimatespellsystem/extension/callbacks/CallbackProvider.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66
import org.jetbrains.annotations.Contract;
77
import org.jetbrains.annotations.NotNull;
88

9+
import java.util.Collection;
10+
911
public abstract class CallbackProvider<E extends Event> implements Listener {
1012

1113
@Contract("-> new")
12-
public abstract @NotNull CallbackAction<E, ?> getCallback();
14+
public abstract @NotNull Collection<CallbackAction<E, ?>> getCallbacks();
1315

1416
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package fr.jamailun.ultimatespellsystem.extension.callbacks;
2+
3+
import fr.jamailun.ultimatespellsystem.api.UltimateSpellSystem;
4+
import fr.jamailun.ultimatespellsystem.api.entities.CallbackAction;
5+
import fr.jamailun.ultimatespellsystem.api.entities.SummonAttributes;
6+
import fr.jamailun.ultimatespellsystem.dsl.objects.CallbackEvent;
7+
import org.bukkit.event.EventHandler;
8+
import org.bukkit.event.entity.EntityDeathEvent;
9+
import org.jetbrains.annotations.NotNull;
10+
11+
import java.util.Collection;
12+
import java.util.List;
13+
14+
/**
15+
* Used by {@code LAND} callbacks.
16+
*/
17+
public class EntityDeathCallbacks extends CallbackProvider<EntityDeathEvent> {
18+
19+
@EventHandler
20+
void onEvent(@NotNull EntityDeathEvent event) {
21+
SummonAttributes summon = UltimateSpellSystem.getSummonsManager().find(event.getEntity().getUniqueId());
22+
if(summon == null) return;
23+
summon.applyCallback(event);
24+
}
25+
26+
@Override
27+
public @NotNull Collection<CallbackAction<EntityDeathEvent, ?>> getCallbacks() {
28+
return List.of(
29+
new CallbackAction<>(
30+
CallbackEvent.of("die"),
31+
EntityDeathEvent.class,
32+
x -> null
33+
)
34+
);
35+
}
36+
37+
}

plugin/src/main/java/fr/jamailun/ultimatespellsystem/extension/callbacks/ProjectileLandListener.java renamed to plugin/src/main/java/fr/jamailun/ultimatespellsystem/extension/callbacks/ProjectileLandCallbacks.java

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,38 @@
66
import fr.jamailun.ultimatespellsystem.dsl.nodes.type.TypePrimitive;
77
import fr.jamailun.ultimatespellsystem.dsl.objects.CallbackEvent;
88
import fr.jamailun.ultimatespellsystem.dsl.tokenization.TokenType;
9-
import org.bukkit.Location;
109
import org.bukkit.event.EventHandler;
1110
import org.bukkit.event.entity.ProjectileHitEvent;
1211
import org.jetbrains.annotations.NotNull;
1312

13+
import java.util.Collection;
14+
import java.util.List;
15+
1416
/**
1517
* Used by {@code LAND} callbacks.
1618
*/
17-
public class ProjectileLandListener extends CallbackProvider<ProjectileHitEvent> {
19+
public class ProjectileLandCallbacks extends CallbackProvider<ProjectileHitEvent> {
1820

1921
@EventHandler
20-
void onProjectileLand(@NotNull ProjectileHitEvent event) {
21-
if(event.getHitBlock() == null) return;
22+
void onEvent(@NotNull ProjectileHitEvent event) {
2223
SummonAttributes summon = UltimateSpellSystem.getSummonsManager().find(event.getEntity().getUniqueId());
2324
if(summon == null) return;
2425
summon.applyCallback(event);
2526
}
2627

2728
@Override
28-
public @NotNull CallbackAction<ProjectileHitEvent, Location> getCallback() {
29-
return new CallbackAction<>(
30-
CallbackEvent.of("landed", TokenType.AT, TypePrimitive.LOCATION),
31-
ProjectileHitEvent.class,
32-
e -> e.getEntity().getLocation()
29+
public @NotNull Collection<CallbackAction<ProjectileHitEvent, ?>> getCallbacks() {
30+
return List.of(
31+
new CallbackAction<>(
32+
CallbackEvent.of("landed", TokenType.AT, TypePrimitive.LOCATION),
33+
ProjectileHitEvent.class,
34+
e -> e.getEntity().getLocation()
35+
),
36+
new CallbackAction<>(
37+
CallbackEvent.of("hit", TokenType.TO, TypePrimitive.ENTITY),
38+
ProjectileHitEvent.class,
39+
ProjectileHitEvent::getEntity
40+
)
3341
);
3442
}
3543

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package fr.jamailun.ultimatespellsystem.extension.callbacks;
2+
3+
import fr.jamailun.ultimatespellsystem.api.entities.CallbackAction;
4+
import fr.jamailun.ultimatespellsystem.api.events.SummonedEntityExpiredEvent;
5+
import fr.jamailun.ultimatespellsystem.dsl.objects.CallbackEvent;
6+
import org.bukkit.event.EventHandler;
7+
import org.jetbrains.annotations.NotNull;
8+
9+
import java.util.Collection;
10+
import java.util.List;
11+
12+
/**
13+
* Used by {@code LAND} callbacks.
14+
*/
15+
public class SummonExpiresCallbacks extends CallbackProvider<SummonedEntityExpiredEvent> {
16+
17+
@EventHandler
18+
void onEvent(@NotNull SummonedEntityExpiredEvent event) {
19+
event.getSummon().applyCallback(event);
20+
}
21+
22+
@Override
23+
public @NotNull Collection<CallbackAction<SummonedEntityExpiredEvent, ?>> getCallbacks() {
24+
return List.of(
25+
new CallbackAction<>(
26+
CallbackEvent.of("expire"),
27+
SummonedEntityExpiredEvent.class,
28+
x -> null
29+
)
30+
);
31+
}
32+
33+
}

plugin/src/main/java/fr/jamailun/ultimatespellsystem/plugin/entities/SummonAttributesImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44
import fr.jamailun.ultimatespellsystem.api.entities.SummonAttributes;
55
import fr.jamailun.ultimatespellsystem.api.entities.UssEntityType;
66
import fr.jamailun.ultimatespellsystem.api.entities.SpellEntity;
7+
import fr.jamailun.ultimatespellsystem.api.events.SummonedEntityExpiredEvent;
78
import fr.jamailun.ultimatespellsystem.api.runner.SpellRuntime;
89
import fr.jamailun.ultimatespellsystem.api.providers.SummonPropertiesProvider;
910
import fr.jamailun.ultimatespellsystem.dsl.nodes.type.Duration;
11+
import org.bukkit.Bukkit;
1012
import org.bukkit.Location;
1113
import org.bukkit.entity.*;
1214
import org.bukkit.event.Event;
@@ -89,6 +91,10 @@ public final void summon(Consumer<UUID> callback, SpellRuntime runtime) {
8991

9092
// Start the death timer
9193
deathTimer = UltimateSpellSystem.runTaskLater(() -> {
94+
if(entity.isValid()) {
95+
// Called before the remove, so that the entity is still accessible.
96+
Bukkit.getPluginManager().callEvent(new SummonedEntityExpiredEvent(this));
97+
}
9298
entity.remove();
9399
callback.accept(getUUID());
94100
}, summonDuration.toTicks());

0 commit comments

Comments
 (0)