Apply changes from #63 (Anime-Game-Servers/Grasscutter-Quests)

This commit is contained in:
KingRainbow44
2023-04-23 22:51:08 -04:00
Unverified
parent d608831594
commit c9d6225194
20 changed files with 893 additions and 460 deletions
@@ -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));
}
}