Advertisement
Nik

Untitled

Nik
Apr 17th, 2014
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.00 KB | None | 0 0
  1. package l2r.gameserver.model;
  2.  
  3. import l2r.commons.collections.EmptyIterator;
  4. import l2r.gameserver.network.serverpackets.components.IStaticPacket;
  5.  
  6. import java.util.ArrayList;
  7. import java.util.Collections;
  8. import java.util.Iterator;
  9. import java.util.List;
  10. import java.util.function.Consumer;
  11. import java.util.function.Predicate;
  12. import java.util.stream.Collectors;
  13. import java.util.stream.Stream;
  14.  
  15. public interface PlayerGroup extends Iterable<Player>
  16. {
  17.     public static final PlayerGroup EMPTY = new PlayerGroup()
  18.     {
  19.         @Override
  20.         public Stream<Player> stream()
  21.         {
  22.             return Stream.empty();
  23.         }
  24.        
  25.         @Override
  26.         public Iterator<Player> iterator()
  27.         {
  28.             return EmptyIterator.getInstance();
  29.         }
  30.  
  31.         @Override
  32.         public int size()
  33.         {
  34.             return 0;
  35.         }
  36.  
  37.         @Override
  38.         public Player getLeader()
  39.         {
  40.             return null;
  41.         }
  42.  
  43.         @Override
  44.         public List<Player> getMembers(Player ... excluded)
  45.         {
  46.             return Collections.emptyList();
  47.         }
  48.  
  49.         @Override
  50.         public boolean containsMember(Player player)
  51.         {
  52.             return false;
  53.         }
  54.     };
  55.    
  56.     int size();
  57.     Player getLeader();
  58.     List<Player> getMembers(Player ... excluded);
  59.     boolean containsMember(Player player);
  60.    
  61.     /**
  62.      * Badly implemented. Iterates on every call. Useful only for singleton usage, else overriding is suggested.
  63.      * @return Maximum level of all members in the group.
  64.      */
  65.     default int getLevel()
  66.     {
  67.         return stream().mapToInt(Player::getLevel).max().orElse(0);
  68.     }
  69.  
  70.     default void sendPacket(IStaticPacket... packets)
  71.     {
  72.         stream().forEach(p -> p.sendPacket(packets));
  73.     }
  74.    
  75.     default void sendPacket(Predicate<Player> condition, IStaticPacket... packets)
  76.     {
  77.         stream().filter(condition).forEach(p -> p.sendPacket(packets));
  78.     }
  79.    
  80.     default void sendPacket(Player exclude, IStaticPacket... packets)
  81.     {
  82.         stream().filter(p -> p != exclude).forEach(p -> p.sendPacket(packets));
  83.     }
  84.    
  85.     default void sendPacketInRange(GameObject obj, int range, IStaticPacket... packets)
  86.     {
  87.         stream().filter(p -> p.isInRangeZ(obj, range)).forEach(p -> p.sendPacket(packets));
  88.     }
  89.    
  90.     default void sendMessage(String message)
  91.     {
  92.         stream().forEach(p -> p.sendMessage(message));
  93.     }
  94.    
  95.     default void sendMessage(Predicate<Player> condition, String message)
  96.     {
  97.         stream().filter(condition).forEach(p -> p.sendMessage(message));
  98.     }
  99.    
  100.     default void sendChatMessage(int objectId, int messageType, String charName, String text)
  101.     {
  102.         stream().forEach(p -> p.sendChatMessage(objectId, messageType, charName, text));
  103.     }
  104.    
  105.     default void sendChatMessage(Predicate<Player> condition, int objectId, int messageType, String charName, String text)
  106.     {
  107.         stream().filter(condition).forEach(p -> p.sendChatMessage(objectId, messageType, charName, text));
  108.     }
  109.    
  110.     default Stream<Player> stream()
  111.     {
  112.         return getMembers().stream();
  113.     }
  114.    
  115.     default void forEach(Predicate<Player> condition, Consumer<Player> action)
  116.     {
  117.         stream().filter(condition).forEach(action);
  118.     }
  119.    
  120.     default boolean isLeader(Player player)
  121.     {
  122.         if (getLeader() == null)
  123.             return false;
  124.        
  125.         return getLeader() == player;
  126.     }
  127.    
  128.     default List<Player> getMembersInRange(GameObject obj, int range)
  129.     {
  130.         return stream().filter(member -> member.isInRangeZ(obj, range)).collect(Collectors.toList());
  131.     }
  132.    
  133.     default int getMemberCountInRange(GameObject obj, int range)
  134.     {
  135.         return (int) stream().filter(member -> member.isInRangeZ(obj, range)).count();
  136.     }
  137.    
  138.     default List<Integer> getMembersObjIds(Player ... excluded)
  139.     {
  140.         return getMembers(excluded).stream().map(Player::getObjectId).collect(Collectors.toList());
  141.     }
  142.    
  143.     default List<Playable> getMembersWithPets(Player ... excluded)
  144.     {
  145.         List<Playable> result = new ArrayList<Playable>();
  146.         for(Player member : getMembers(excluded))
  147.         {
  148.             result.add(member);
  149.             if(member.getPet() != null)
  150.                 result.add(member.getPet());
  151.         }
  152.         return result;
  153.     }
  154.    
  155.     default Player getPlayerByName(String name)
  156.     {
  157.         if (name == null)
  158.             return null;
  159.        
  160.         return stream().filter(member -> name.equalsIgnoreCase(member.getName())).findAny().orElse(null);
  161.     }
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement