function init(hero) {
    hero.setName("Atreus");
    hero.setAliases("Son_of_War", "Boy");
    hero.setVersion("\u00A7c\u00A7lGOW \u00A7f\u00A7l2018\u00A7r");
    hero.setTier(4);
    
    hero.setHelmet("Head");
    hero.setChestplate("Body");
    hero.setLeggings("Legs");
    hero.setBoots("Boots");
    hero.addPrimaryEquipment("fiskheroes:compound_bow{display:{Name:Talon Bow}}", true);
    hero.addEquipment("fiskheroes:quiver");
    
    hero.addPowers("fiskheroes:archery", "gowhp:runicsummon");
    hero.addAttribute("PUNCH_DAMAGE", 3.5, 0);
    hero.addAttribute("WEAPON_DAMAGE", 2.0, 0);
    hero.addAttribute("JUMP_HEIGHT", 0.8, 0);
    hero.addAttribute("SPRINT_SPEED", 0.05, 1);
    hero.addAttribute("FALL_RESISTANCE", 5.0, 0);
    hero.addAttribute("BOW_DRAWBACK", 0.4, 1);

    hero.addKeyBind("HORIZONTAL_BOW", "key.horizontalBow", 1);
    hero.addKeyBind("CHARGED_BEAM", "Wrath of the Wolf", 5);

    hero.setDefaultScale(0.7);
    hero.setModifierEnabled(isModifierEnabled);
    hero.setKeyBindEnabled(isKeyBindEnabled);
    hero.addAttributeProfile("RUNICSUMMON", runicsummonProfile);
    hero.setAttributeProfile(getAttributeProfile);
    hero.setHasProperty(hasProperty);

    hero.addSoundEvent("MASK_OPEN", "gowhp:atreus_voice_lines");
}

function hasProperty(entity, property) {
    return property == "MASK_TOGGLE";
}

function runicsummonProfile(profile) {
    profile.revokeAugments();
    profile.addAttribute("BASE_SPEED", -1, 0);
    profile.addAttribute("JUMP_HEIGHT", -1, 0);
}

function getAttributeProfile(entity) {
    if (entity.getData("fiskheroes:beam_charging")) {
        return "RUNICSUMMON";
    }
}

function isModifierEnabled(entity, modifier) {
    switch (modifier.name()) {
    case "fiskheroes:charged_beam":
        return entity.getHeldItem().name() == 'fiskheroes:compound_bow';
    default:
        return true;
    }
}

function isKeyBindEnabled(entity, keyBind) {
    switch (keyBind) {
        case "CHARGED_BEAM":
            return entity.getHeldItem().name() == 'fiskheroes:compound_bow';
        default:
            return true;
    }
}