@Override public void onStart(BuffInfo info) { final L2Character target = info.getEffected(); if ((target == null) || target.isDead() || target.isDoor()) { return; } double amount = 0; final double power = _power; final boolean full = (power == 100.0); amount = full ? target.getMaxMp() : (target.getMaxMp() * power) / 100.0; // Prevents overheal and negative amount amount = Math.max(Math.min(amount, target.getMaxRecoverableMp() - target.getCurrentMp()), 0); if (amount != 0) { target.setCurrentMp(amount + target.getCurrentMp()); } SystemMessage sm; if (info.getEffector().getObjectId() != target.getObjectId()) { sm = SystemMessage.getSystemMessage(SystemMessageId.S2_MP_HAS_BEEN_RESTORED_BY_C1); sm.addCharName(info.getEffector()); } else { sm = SystemMessage.getSystemMessage(SystemMessageId.S1_MP_HAS_BEEN_RESTORED); } sm.addInt((int) amount); target.sendPacket(sm); }