Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.herocraftonline.dev.heroes.skill.skills;
- import net.minecraft.server.EntityPlayer;
- import net.minecraft.server.MobEffect;
- import net.minecraft.server.Packet41MobEffect;
- import net.minecraft.server.Packet42RemoveMobEffect;
- import org.bukkit.craftbukkit.entity.CraftPlayer;
- import org.bukkit.entity.Player;
- import org.bukkit.entity.Projectile;
- import org.bukkit.event.Event.Priority;
- import org.bukkit.event.Event.Type;
- import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
- import org.bukkit.util.config.ConfigurationNode;
- import com.herocraftonline.dev.heroes.Heroes;
- import com.herocraftonline.dev.heroes.api.HeroesEventListener;
- import com.herocraftonline.dev.heroes.api.WeaponDamageEvent;
- import com.herocraftonline.dev.heroes.effects.EffectType;
- import com.herocraftonline.dev.heroes.effects.PeriodicEffect;
- import com.herocraftonline.dev.heroes.hero.Hero;
- import com.herocraftonline.dev.heroes.skill.PassiveSkill;
- import com.herocraftonline.dev.heroes.skill.Skill;
- import com.herocraftonline.dev.heroes.skill.SkillType;
- import com.herocraftonline.dev.heroes.util.Setting;
- public class SkillFrenzy extends PassiveSkill {
- private String applyText = null;
- private String unapplyText = null;
- public SkillFrenzy(Heroes plugin) {
- super(plugin, "Frenzy");
- setDescription("Makes you move faster, deal more damage at lower health");
- setTypes(SkillType.COUNTER, SkillType.MOVEMENT, SkillType.BUFF, SkillType.HARMFUL);
- registerEvent(Type.CUSTOM_EVENT, new SkillHeroListener(), Priority.Normal);
- }
- @Override
- public ConfigurationNode getDefaultConfig() {
- ConfigurationNode node = super.getDefaultConfig();
- node.setProperty("max-damage-modifier", 2);
- node.setProperty("use-speed-modifier", "true");
- node.setProperty(Setting.APPLY_TEXT.node(), "%hero% went into a %skill%!");
- node.setProperty(Setting.UNAPPLY_TEXT.node(), "%hero% came out of a %skill%!");
- return node;
- }
- @Override
- public void init() {
- applyText = getSetting(null, Setting.APPLY_TEXT.node(), "%hero% gained %skill%!");
- applyText = applyText.replace("%hero%", "$1").replace("%skill%", "$2");
- unapplyText = getSetting(null, Setting.UNAPPLY_TEXT.node(), "%hero% lost %skill%!");
- unapplyText = unapplyText.replace("%hero%", "$1").replace("%skill%", "$2");
- }
- @Override
- protected void apply(Hero hero){
- FrenzyEffect effect = new FrenzyEffect(this,getName());
- effect.setPersistent(true);
- hero.addEffect(effect);
- Player player = hero.getPlayer();
- broadcast(player.getLocation(), applyText, player.getDisplayName(), getName());
- }
- @Override
- protected void unapply(Hero hero) {
- if (hero.hasEffect(getName())) {
- hero.removeEffect(hero.getEffect(getName()));
- Player player = hero.getPlayer();
- broadcast(player.getLocation(), unapplyText, player.getDisplayName(), getName());
- }
- }
- public class FrenzyEffect extends PeriodicEffect {
- private MobEffect mobEffect = new MobEffect(1, 0, 0);
- public FrenzyEffect(Skill skill, String name) {
- super(skill, name, 2000);
- this.types.add(EffectType.BENEFICIAL);
- }
- @Override
- public void tick(Hero hero) {
- super.tick(hero);
- if (hero.getHealth()/hero.getMaxHealth() <= .5) {
- this.mobEffect = new MobEffect(1, 40, 2);
- Player player = hero.getPlayer();
- EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
- entityPlayer.netServerHandler.sendPacket(new Packet42RemoveMobEffect(entityPlayer.id, this.mobEffect));
- entityPlayer.netServerHandler.sendPacket(new Packet41MobEffect(entityPlayer.id, this.mobEffect));
- }
- }
- @Override
- public void remove(Hero hero) {
- Player player = hero.getPlayer();
- EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
- entityPlayer.netServerHandler.sendPacket(new Packet42RemoveMobEffect(entityPlayer.id, this.mobEffect));
- }
- }
- public class SkillHeroListener extends HeroesEventListener {
- @Override
- public void onWeaponDamage(WeaponDamageEvent event) {
- if (event.getCause() != DamageCause.ENTITY_ATTACK)
- return;
- if (event.getDamager() instanceof Player) {
- Player player = (Player) event.getDamager();
- Hero hero = plugin.getHeroManager().getHero(player);
- if (hero.hasSkill("Frenzy")) {
- double damageBonus = (double) getSetting(hero.getHeroClass(), "max-damage-modifier", 2) * hero.getMaxHealth() / hero.getHealth();
- event.setDamage((int) (event.getDamage() * damageBonus));
- }
- } else if (event.getDamager() instanceof Projectile) {
- if (((Projectile) event.getDamager()).getShooter() instanceof Player) {
- Player player = (Player) ((Projectile) event.getDamager()).getShooter();
- Hero hero = plugin.getHeroManager().getHero(player);
- if (hero.hasSkill("Frenzy")) {
- double damageBonus = (double) getSetting(hero.getHeroClass(), "max-damage-modifier", 2) * hero.getMaxHealth() / hero.getHealth();
- event.setDamage((int) (event.getDamage() * damageBonus));
- }
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement