In terms of services, testing 1st, paying 2nd, getting it 3rd.
As about items, it should be the other way around, proving that you got the money 1st, getting the items 2nd, paying 3rd. You lose items, not money.
Even though, a middleman is very helpful, especially with the items.
It's like Facebook. If you reply with BS to a post (server review in our case), more people will reply back to you, slaying you into pieces in 10 different languages.
Your "party.getMembersCount() >= 2" condition is for the party overall.
You need to store the healers at-invite and remove them at-leave, so you know they are actually in the party.
filter(player -> player.getClassId() == 97).size()
or
Fast and ugly for the sake of L2J:
private static final List<Player> HEALER_LIST = new ArrayList<>();
If player.getClassId == 97:
HEALES_LIST.add(player);
HEALER_LIST.remove(player);
You can use the condition If HEALER_LIST.size() >= 2 to forbid an amount and you don't need to check getClassId, because you already checked that at add/remove.
You also got this: for (Player healer : HEALER_LIST)
So you can do stuff with the healer while being in the party.
Make the player to leave party while changing subclasses.
What are you talking about? Why the player cares if the weapon has a passive or not, unless the developer is lazy to create the client side to make it look like a real SA.
Don't do the mistake to add bonus stats to the item lol. Your players will have bugged stats and will require character restart to fix it. You got passives for a reason. Stop doing that people!