Skip to content

Commit

Permalink
add event to stop power execute
Browse files Browse the repository at this point in the history
  • Loading branch information
MrXiaoM committed Aug 17, 2024
1 parent ac14886 commit ee6b4c3
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 1 deletion.
47 changes: 47 additions & 0 deletions src/main/java/think/rpgitems/event/RPGPowerTriggerPreEvent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package think.rpgitems.event;

import lombok.Getter;
import lombok.Setter;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import think.rpgitems.item.RPGItem;
import think.rpgitems.power.Pimpl;
import think.rpgitems.power.PowerResult;
import think.rpgitems.power.trigger.Trigger;

import java.util.Map;
import java.util.TreeMap;

@Getter @Setter
public class RPGPowerTriggerPreEvent<TEvent extends Event, TPower extends Pimpl, TResult, TReturn> extends PlayerEvent implements Cancellable {
private static final HandlerList handlers = new HandlerList();
@Override @NotNull
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}

private boolean cancelled = false;
private final RPGItem rpg;
private final ItemStack item;
private final Event event;
private final Trigger<TEvent, TPower, TResult, TReturn> trigger;
private final Object context;
private final Map<String, PowerResult<TResult>> skippingPowersById = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);

public RPGPowerTriggerPreEvent(@NotNull Player player, RPGItem rpg, ItemStack item, Event event, Trigger<TEvent, TPower, TResult, TReturn> trigger, Object context) {
super(player);
this.rpg = rpg;
this.item = item;
this.event = event;
this.trigger = trigger;
this.context = context;
}
}
11 changes: 10 additions & 1 deletion src/main/java/think/rpgitems/item/RPGItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -1334,6 +1334,11 @@ public Pair<List<Power>, List<Condition<?>>> getAllPowersAndConditions(ItemStack
}

public <TEvent extends Event, TPower extends Pimpl, TResult, TReturn> TReturn power(Player player, ItemStack i, TEvent event, Trigger<TEvent, TPower, TResult, TReturn> trigger, Object context) {
RPGPowerTriggerPreEvent<TEvent, TPower, TResult, TReturn> e = new RPGPowerTriggerPreEvent<>(player, this, i, event, trigger, context);
Bukkit.getPluginManager().callEvent(e);
if (e.isCancelled()) {
return trigger.def(player, i, event);
}
powerCustomTrigger(player, i, event, trigger, context);

Pair<List<Power>, List<Condition<?>>> pair = getAllPowersAndConditions(i);
Expand All @@ -1354,7 +1359,11 @@ public <TEvent extends Event, TPower extends Pimpl, TResult, TReturn> TReturn po
boolean flag = true;
if (power.getPower() instanceof BasePower) {
BasePower base = (BasePower) power.getPower();
if (!plugin.magic.costMagic(player, base.getCostMagic())) {
PowerResult<TResult> skipping = e.getSkippingPowersById().get(base.getPowerId());
if (skipping != null) {
result = skipping;
flag = false;
} else if (!plugin.magic.costMagic(player, base.getCostMagic())) {
result = PowerResult.cost();
flag = false;
magicFlag += base.getCostMagic();
Expand Down

0 comments on commit ee6b4c3

Please sign in to comment.