package com.hypixel.hytale.builtin.adventure.npcobjectives.task;
import com.hypixel.hytale.builtin.adventure.npcobjectives.assets.KillObjectiveTaskAsset;
import com.hypixel.hytale.builtin.adventure.objectives.Objective;
import com.hypixel.hytale.builtin.adventure.objectives.task.CountObjectiveTask;
import com.hypixel.hytale.builtin.tagset.TagSetPlugin;
import com.hypixel.hytale.builtin.tagset.config.NPCGroup;
import com.hypixel.hytale.codec.builder.BuilderCodec;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.component.Store;
import com.hypixel.hytale.server.core.entity.Entity;
import com.hypixel.hytale.server.core.entity.EntityUtils;
import com.hypixel.hytale.server.core.entity.UUIDComponent;
import com.hypixel.hytale.server.core.entity.entities.Player;
import com.hypixel.hytale.server.core.modules.entity.damage.Damage;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.server.npc.entities.NPCEntity;
import javax.annotation.Nonnull;
public abstract class KillObjectiveTask extends CountObjectiveTask implements KillTask {
public static final BuilderCodec<KillObjectiveTask> CODEC;
public KillObjectiveTask(@Nonnull KillObjectiveTaskAsset asset, int taskSetIndex, int taskIndex) {
super(asset, taskSetIndex, taskIndex);
}
protected KillObjectiveTask() {
}
@Nonnull
public KillObjectiveTaskAsset getAsset() {
return (KillObjectiveTaskAsset)super.getAsset();
}
public void checkKilledEntity(@Nonnull Store<EntityStore> store, @Nonnull Ref<EntityStore> npcRef, @Nonnull Objective objective, @Nonnull NPCEntity npc, @Nonnull Damage info) {
String key = this.getAsset().getNpcGroupId();
int index = NPCGroup.getAssetMap().getIndex(key);
if (index == -2147483648) {
throw new IllegalArgumentException("Unknown npc group! " + key);
} else if (TagSetPlugin.get(NPCGroup.class).tagInSet(index, npc.getNPCTypeIndex())) {
if (info.getSource() instanceof Damage.EntitySource) {
Ref<EntityStore> attackerEntityRef = ((Damage.EntitySource)info.getSource()).getRef();
Entity attackerEntity = EntityUtils.getEntity(attackerEntityRef, attackerEntityRef.getStore());
if (attackerEntity instanceof Player) {
UUIDComponent attackerUuidComponent = (UUIDComponent)store.getComponent(attackerEntityRef, UUIDComponent.getComponentType());
assert attackerUuidComponent != null;
if (objective.getActivePlayerUUIDs().contains(attackerUuidComponent.getUuid())) {
this.increaseTaskCompletion(store, npcRef, 1, objective);
}
}
}
}
}
static {
CODEC = BuilderCodec.abstractBuilder(KillObjectiveTask.class, CountObjectiveTask.CODEC).build();
}
}