AbstractPlayerGroup.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. /*
  2. * Copyright (C) 2004-2013 L2J Server
  3. *
  4. * This file is part of L2J Server.
  5. *
  6. * L2J Server is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * L2J Server is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. package com.l2jserver.gameserver.model;
  20. import java.util.ArrayList;
  21. import java.util.List;
  22. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  23. import com.l2jserver.gameserver.network.SystemMessageId;
  24. import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
  25. import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
  26. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  27. import com.l2jserver.util.Rnd;
  28. /**
  29. * @author Battlecruiser
  30. */
  31. public abstract class AbstractPlayerGroup
  32. {
  33. /**
  34. * @return all members of this group
  35. */
  36. public abstract List<L2PcInstance> getMembers();
  37. /**
  38. * @return object IDs of all members of this group
  39. */
  40. public List<Integer> getMembersObjectId()
  41. {
  42. final List<Integer> ids = new ArrayList<>();
  43. forEachMember(new IL2Procedure<L2PcInstance>()
  44. {
  45. @Override
  46. public boolean execute(L2PcInstance member)
  47. {
  48. ids.add(member.getObjectId());
  49. return true;
  50. }
  51. });
  52. return ids;
  53. }
  54. /**
  55. * @return leader of this group
  56. */
  57. public abstract L2PcInstance getLeader();
  58. /**
  59. * @return the leader's object ID
  60. */
  61. public int getLeaderObjectId()
  62. {
  63. return getLeader().getObjectId();
  64. }
  65. /**
  66. * @return count of all players in this group
  67. */
  68. public int getMemberCount()
  69. {
  70. return getMembers().size();
  71. }
  72. /**
  73. * @return level of this group
  74. */
  75. public abstract int getLevel();
  76. /**
  77. * Broadcast packet to every member of this group
  78. * @param packet packet to broadcast
  79. */
  80. public void broadcastPacket(final L2GameServerPacket packet)
  81. {
  82. forEachMember(new IL2Procedure<L2PcInstance>()
  83. {
  84. @Override
  85. public boolean execute(L2PcInstance member)
  86. {
  87. if (member != null)
  88. {
  89. member.sendPacket(packet);
  90. }
  91. return true;
  92. }
  93. });
  94. }
  95. /**
  96. * Broadcasts a System Message to this group
  97. * @param message System Message to bradcast
  98. */
  99. public void broadcastMessage(SystemMessageId message)
  100. {
  101. broadcastPacket(SystemMessage.getSystemMessage(message));
  102. }
  103. /**
  104. * Broadcasts a string message to this group
  105. * @param text to broadcast
  106. */
  107. public void broadcastString(String text)
  108. {
  109. broadcastPacket(SystemMessage.sendString(text));
  110. }
  111. public void broadcastCreatureSay(final CreatureSay msg, final L2PcInstance broadcaster)
  112. {
  113. forEachMember(new IL2Procedure<L2PcInstance>()
  114. {
  115. @Override
  116. public boolean execute(L2PcInstance member)
  117. {
  118. if ((member != null) && !BlockList.isBlocked(member, broadcaster))
  119. {
  120. member.sendPacket(msg);
  121. }
  122. return true;
  123. }
  124. });
  125. }
  126. /**
  127. * @param player to be contained
  128. * @return {@code true} if this group contains player
  129. */
  130. public boolean containsPlayer(L2PcInstance player)
  131. {
  132. return getMembers().contains(player);
  133. }
  134. /**
  135. * @return random member of this group
  136. */
  137. public L2PcInstance getRandomPlayer()
  138. {
  139. return getMembers().get(Rnd.get(getMemberCount()));
  140. }
  141. /**
  142. * Iterates over the group and executes procedure on each member
  143. * @param procedure to be executed on members, <br>
  144. * if it returns {@code true}, loop will continue, <br>
  145. * if it returns {@code false}, loop will break
  146. * @return {@code false} if it was interrupted by a {@code false} return of the procedure
  147. */
  148. public boolean forEachMember(IL2Procedure<L2PcInstance> procedure)
  149. {
  150. for (L2PcInstance player : getMembers())
  151. {
  152. if (!procedure.execute(player))
  153. {
  154. return false;
  155. }
  156. }
  157. return true;
  158. }
  159. }