fiveriverflow

BuffHandler Java

Aug 30th, 2019
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.73 KB | None | 0 0
  1. package server.model.players.content.buff;
  2.  
  3. import server.model.Entity;
  4. import server.model.items.Item;
  5. import server.model.minigames.tank.TankMinigame;
  6. import server.model.minigames.weapongame.WeaponMinigame;
  7. import server.model.players.Player;
  8. import server.model.players.content.dialogue.SimpleDialogues;
  9. import server.net.packet.PacketBuilder;
  10.  
  11. import java.util.Arrays;
  12. import java.util.List;
  13. import java.util.Objects;
  14. import java.util.Optional;
  15. import java.util.concurrent.CopyOnWriteArrayList;
  16.  
  17. public class BuffHandler {
  18.  
  19.     private final Entity entity;
  20.  
  21.     private List<BuffTimer> buffTimers = new CopyOnWriteArrayList<>();
  22.  
  23.     public BuffHandler(Entity player) {
  24.         this.entity = player;
  25.     }
  26.  
  27.     public static boolean isPack(int id) {
  28.         return Arrays.stream(BuffPack.values()).filter(Objects::nonNull).anyMatch(i -> i.getPackId() == id);
  29.     }
  30.  
  31.     public static BuffPack getPack(int id) {
  32.         for (BuffPack pack : BuffPack.values()) {
  33.             if (pack.getPackId() == id)
  34.                 return pack;
  35.         }
  36.         return null;
  37.     }
  38.  
  39.     public static void exchangePack(Player player, BuffPack pack) {
  40.         if (player.getInventory().getEmptySlots() > pack.getItems().length) {
  41.             player.getInventory().delete(pack.getPackId(), 1, true);
  42.             for (Item item : pack.getItems()) {
  43.                 player.getInventory().add(item);
  44.             }
  45.             SimpleDialogues.sendStatement(player, "You have successfully obtained the buffs from your buff pack.");
  46.         } else {
  47.             SimpleDialogues.sendStatement(player, "You need at least " + pack.getItems().length + " inventory spaces.");
  48.         }
  49.     }
  50.  
  51.     public void add(BuffTimers t) {
  52.         add(-1, t);
  53.     }
  54.  
  55.     public void increaseTimer(int time, BuffTimers t) {
  56.  
  57.         Optional<BuffTimer> opt = buffTimers.stream().filter(i -> i.getTimer().equals(t)).findAny();
  58.         if (!opt.isPresent()) {
  59.             add(time, t);
  60.             return;
  61.         }
  62.  
  63.         if (time == -1)
  64.             time = t.getTime();
  65.  
  66.         if (time == 0)
  67.             return;
  68.  
  69.         BuffTimer timer = opt.get();
  70.         int remaining = timer.getSecondsRemaining();
  71.         remove(t);
  72.  
  73.         time = remaining + time;
  74.  
  75.         if (remaining == -2)
  76.             time = -2;
  77.  
  78.         add(time, t);
  79.     }
  80.  
  81.     public void add(int time, BuffTimers t) {
  82.         Player p = entity.isPlayer() ? entity.toPlayer() : null;
  83.         if (p != null && p.getRaid() != null && t.getId() == 10) {
  84.             return;
  85.         }
  86.  
  87.         if (t == null) {
  88.             return;
  89.         }
  90.  
  91.         if (time == -1)
  92.             time = t.getTime();
  93.  
  94.         if (time == 0)
  95.             return;
  96.  
  97.         buffTimers.stream().filter(Objects::nonNull).forEach(i -> {
  98.             if (i.getTimer().getType() == t.getType() || i.getTimer().getId() == t.getId())
  99.                 if (t.isOverride())
  100.                     remove(i.getTimer());
  101.                 else
  102.                     return;
  103.         });
  104.  
  105.         BuffTimer timer = new BuffTimer(time, t);
  106.         buffTimers.add(timer);
  107.         time = timer.getStopwatch().getSecondsRemaining();
  108.         if (p != null) {
  109.             p.getSession().write(new PacketBuilder(130).writeByte(t.getId()).writeByte(0).writeInt(time).toPacket());
  110.             p.getItems().resetBonus();
  111.             p.getItems().getBonus();
  112.             p.getItems().writeBonus();
  113.         }
  114.     }
  115.  
  116.     public void remove(BuffTimers t) {
  117.         if (t == null) {
  118.             return;
  119.         }
  120.         buffTimers.removeIf(i -> i.getTimer().getId() == t.getId());
  121.         Player p = entity.isPlayer() ? entity.toPlayer() : null;
  122.         if (p != null) {
  123.             p.getSession().write(new PacketBuilder(130).writeByte(t.getId()).writeByte(1).writeInt(0).toPacket());
  124.             t.onEnd(p);
  125.             p.getItems().resetBonus();
  126.             p.getItems().getBonus();
  127.             p.getItems().writeBonus();
  128.         }
  129.     }
  130.  
  131.     public void reset(boolean removeAttendance, boolean removeDeath) {
  132.         Player p = entity.isPlayer() ? entity.toPlayer() : null;
  133.         for (BuffTimer t : buffTimers) {
  134.             if ((!removeAttendance && t.getTimer().getId() == BuffTimers.ATTENDANCE.getId()) || (!removeDeath && t.getTimer().getId() == BuffTimers.DEATH_PENALTY.getId())) {
  135.                 continue;
  136.             }
  137.             if (p != null) {
  138.                 p.getSession().write(
  139.                         new PacketBuilder(130).writeByte(t.getTimer().getId()).writeByte(1).writeInt(0).toPacket());
  140.                 t.getTimer().onEnd(p);
  141.             }
  142.             buffTimers.remove(t);
  143.         }
  144.         if (p != null) {
  145.             p.getItems().resetBonus();
  146.             p.getItems().getBonus();
  147.             p.getItems().writeBonus();
  148.         }
  149.     }
  150.  
  151.     public void run() {
  152.         if (buffTimers.size() == 0)
  153.             return;
  154.         for (BuffTimer t : buffTimers) {
  155.             t.setSecondsRemaining(t.getStopwatch().getSecondsRemaining());
  156.             if (t.getStopwatch().isExpired()) {
  157.                 remove(t.getTimer());
  158.             }
  159.         }
  160.     }
  161.  
  162.     public boolean isActive(BuffTimers t) {
  163.         if (t == null) {
  164.             return false;
  165.         }
  166.         Player p = entity.isPlayer() ? entity.toPlayer() : null;
  167.         if (p != null
  168.                 && (p.inPvP() || p.inWild() || WeaponMinigame.inWeaponGameArea(p) || TankMinigame.inTankGameArea(p)))
  169.             return false;
  170.         return buffTimers.stream().filter(Objects::nonNull).anyMatch(i -> i.getTimer().getId() == t.getId());
  171.     }
  172.  
  173.     public List<BuffTimer> getBuffs() {
  174.         return buffTimers;
  175.     }
  176.  
  177. }
Add Comment
Please, Sign In to add comment