mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2026-05-20 14:49:50 +08:00
Apply changes from #63 (Anime-Game-Servers/Grasscutter-Quests)
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
package emu.grasscutter.game.ability;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import emu.grasscutter.data.binout.AbilityData;
|
||||
import emu.grasscutter.game.entity.GameEntity;
|
||||
import emu.grasscutter.server.event.entity.EntityDamageEvent;
|
||||
import emu.grasscutter.utils.Utils;
|
||||
import lombok.Getter;
|
||||
|
||||
public final class Ability {
|
||||
@Getter private AbilityData data;
|
||||
@Getter private GameEntity owner;
|
||||
|
||||
@Getter private AbilityManager manager;
|
||||
@Getter private Map<String, AbilityModifierController> modifiers
|
||||
= new HashMap<>();
|
||||
|
||||
@Getter private int hash;
|
||||
|
||||
public Ability(AbilityData data, GameEntity owner) {
|
||||
this.data = data;
|
||||
this.owner = owner;
|
||||
this.manager = owner.getScene().getWorld().getHost().getAbilityManager();
|
||||
this.hash = Utils.abilityHash(data.abilityName);
|
||||
|
||||
data.initialize();
|
||||
}
|
||||
|
||||
public void onAdded() {
|
||||
if (this.data.onAdded == null) return;
|
||||
for (var action : data.onAdded) {
|
||||
this.manager.executeAction(this, action);
|
||||
}
|
||||
}
|
||||
|
||||
public void onRemoved() {
|
||||
var tempModifiers = new HashMap<>(this.modifiers);
|
||||
tempModifiers.values().forEach(AbilityModifierController::onRemoved);
|
||||
}
|
||||
|
||||
public void onBeingHit(EntityDamageEvent event) {
|
||||
var tempModifiers = new HashMap<>(this.modifiers);
|
||||
tempModifiers.values().forEach(m -> m.onBeingHit(event));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user