use of de.Keyle.MyPet.skill.skills.BackpackImpl in project MyPet by xXKeyleXx.
the class MyPetEntityListener method onMyPet.
@EventHandler(priority = EventPriority.MONITOR)
public void onMyPet(final EntityDeathEvent event) {
// noinspection ConstantConditions
if (event.getEntity() == null) {
// catch invalid events (i.e. EnchantmentAPI)
return;
}
LivingEntity deadEntity = event.getEntity();
if (WorldGroup.getGroupByWorld(deadEntity.getWorld()).isDisabled()) {
return;
}
if (deadEntity instanceof MyPetBukkitEntity) {
MyPet myPet = ((MyPetBukkitEntity) deadEntity).getMyPet();
// check health for death events where the pet isn't really dead (/killall)
if (myPet == null || myPet.getHealth() > 0) {
return;
}
final MyPetPlayer owner = myPet.getOwner();
if (MyPetApi.getMyPetInfo().getReleaseOnDeath(myPet.getPetType()) && !owner.isMyPetAdmin()) {
MyPetRemoveEvent removeEvent = new MyPetRemoveEvent(myPet, MyPetRemoveEvent.Source.Death);
Bukkit.getServer().getPluginManager().callEvent(removeEvent);
if (myPet.getSkills().isActive(Backpack.class)) {
CustomInventory inv = myPet.getSkills().get(Backpack.class).getInventory();
inv.dropContentAt(myPet.getLocation().get());
}
if (myPet instanceof MyPetEquipment) {
((MyPetEquipment) myPet).dropEquipment();
}
myPet.removePet();
owner.setMyPetForWorldGroup(WorldGroup.getGroupByWorld(owner.getPlayer().getWorld().getName()), null);
myPet.getOwner().sendMessage(Util.formatText(Translation.getString("Message.Command.Release.Dead", owner), myPet.getPetName()));
MyPetApi.getMyPetManager().deactivateMyPet(owner, false);
MyPetApi.getRepository().removeMyPet(myPet.getUUID(), null);
return;
}
myPet.setRespawnTime((Configuration.Respawn.TIME_FIXED + MyPetApi.getMyPetInfo().getCustomRespawnTimeFixed(myPet.getPetType())) + (myPet.getExperience().getLevel() * (Configuration.Respawn.TIME_FACTOR + MyPetApi.getMyPetInfo().getCustomRespawnTimeFactor(myPet.getPetType()))));
myPet.setStatus(PetState.Dead);
if (deadEntity.getLastDamageCause() instanceof EntityDamageByEntityEvent) {
EntityDamageByEntityEvent e = (EntityDamageByEntityEvent) deadEntity.getLastDamageCause();
if (e.getDamager() instanceof Player) {
myPet.setRespawnTime((Configuration.Respawn.TIME_PLAYER_FIXED + MyPetApi.getMyPetInfo().getCustomRespawnTimeFixed(myPet.getPetType())) + (myPet.getExperience().getLevel() * (Configuration.Respawn.TIME_PLAYER_FACTOR + MyPetApi.getMyPetInfo().getCustomRespawnTimeFactor(myPet.getPetType()))));
} else if (e.getDamager() instanceof MyPetBukkitEntity) {
MyPet killerMyPet = ((MyPetBukkitEntity) e.getDamager()).getMyPet();
if (myPet.getSkills().isActive(Behavior.class) && killerMyPet.getSkills().isActive(Behavior.class)) {
Behavior killerBehaviorSkill = killerMyPet.getSkills().get(Behavior.class);
Behavior deadBehaviorSkill = myPet.getSkills().get(Behavior.class);
if (deadBehaviorSkill.getBehavior() == BehaviorMode.Duel && killerBehaviorSkill.getBehavior() == BehaviorMode.Duel) {
MyPetMinecraftEntity myPetEntity = ((MyPetBukkitEntity) deadEntity).getHandle();
if (e.getDamager().equals(myPetEntity.getMyPetTarget())) {
myPet.setRespawnTime(10);
killerMyPet.setHealth(Double.MAX_VALUE);
}
}
}
}
}
event.setDroppedExp(0);
event.getDrops().clear();
if (Configuration.LevelSystem.Experience.LOSS_FIXED > 0 || Configuration.LevelSystem.Experience.LOSS_PERCENT > 0) {
double lostExpirience = Configuration.LevelSystem.Experience.LOSS_FIXED;
lostExpirience += myPet.getExperience().getRequiredExp() * Configuration.LevelSystem.Experience.LOSS_PERCENT / 100;
if (lostExpirience > myPet.getExp()) {
lostExpirience = myPet.getExp();
}
if (myPet.getSkilltree() != null) {
int requiredLevel = myPet.getSkilltree().getRequiredLevel();
if (requiredLevel > 1) {
double minExp = myPet.getExperience().getExpByLevel(requiredLevel);
lostExpirience = myPet.getExp() - lostExpirience < minExp ? myPet.getExp() - minExp : lostExpirience;
}
}
if (Configuration.LevelSystem.Experience.ALLOW_LEVEL_DOWNGRADE) {
lostExpirience = myPet.getExperience().removeExp(lostExpirience);
} else {
lostExpirience = myPet.getExperience().removeCurrentExp(lostExpirience);
}
if (Configuration.LevelSystem.Experience.DROP_LOST_EXP && lostExpirience < 0) {
event.setDroppedExp((int) (Math.abs(lostExpirience)));
}
}
if (myPet.getSkills().isActive(Backpack.class)) {
BackpackImpl inventorySkill = myPet.getSkills().get(BackpackImpl.class);
inventorySkill.closeInventory();
if (inventorySkill.getDropOnDeath().getValue() && !owner.isMyPetAdmin()) {
inventorySkill.getInventory().dropContentAt(myPet.getLocation().get());
}
}
sendDeathMessage(event);
myPet.getOwner().sendMessage(Util.formatText(Translation.getString("Message.Spawn.Respawn.In", owner.getPlayer()), myPet.getPetName(), myPet.getRespawnTime()));
if (MyPetApi.getHookHelper().isEconomyEnabled() && owner.hasAutoRespawnEnabled() && myPet.getRespawnTime() >= owner.getAutoRespawnMin() && Permissions.has(owner.getPlayer(), "MyPet.command.respawn")) {
double costs = myPet.getRespawnTime() * Configuration.Respawn.COSTS_FACTOR + Configuration.Respawn.COSTS_FIXED;
if (MyPetApi.getHookHelper().getEconomy().canPay(owner, costs)) {
MyPetApi.getHookHelper().getEconomy().pay(owner, costs);
myPet.getOwner().sendMessage(Util.formatText(Translation.getString("Message.Command.Respawn.Paid", owner.getPlayer()), myPet.getPetName(), costs + " " + MyPetApi.getHookHelper().getEconomy().currencyNameSingular()));
myPet.setRespawnTime(1);
} else {
myPet.getOwner().sendMessage(Util.formatText(Translation.getString("Message.Command.Respawn.NoMoney", owner.getPlayer()), myPet.getPetName(), costs + " " + MyPetApi.getHookHelper().getEconomy().currencyNameSingular()));
}
}
}
}
Aggregations