SHARE
TWEET

BuffHandler Java

fiveriverflow Aug 23rd, 2019 82 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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 void add(BuffTimers t) {
  28.         add(-1, t);
  29.     }
  30.  
  31.     public void increaseTimer(int time, BuffTimers t) {
  32.  
  33.         Optional<BuffTimer> opt = buffTimers.stream().filter(i -> i.getTimer().equals(t)).findAny();
  34.         if (!opt.isPresent()) {
  35.             add(time, t);
  36.             return;
  37.         }
  38.  
  39.         if (time == -1)
  40.             time = t.getTime();
  41.  
  42.         if (time == 0)
  43.             return;
  44.  
  45.         BuffTimer timer = opt.get();
  46.         int remaining = timer.getSecondsRemaining();
  47.         remove(t);
  48.  
  49.         time = remaining + time;
  50.  
  51.         if (remaining == -2)
  52.             time = -2;
  53.  
  54.         add(time, t);
  55.     }
  56.  
  57.     public void add(int time, BuffTimers t) {
  58.         Player p = entity.isPlayer() ? entity.toPlayer() : null;
  59.         if (p != null && p.getRaid() != null && t.getId() == 10) {
  60.             return;
  61.         }
  62.  
  63.         if (t == null) {
  64.             return;
  65.         }
  66.  
  67.         if (time == -1)
  68.             time = t.getTime();
  69.  
  70.         if (time == 0)
  71.             return;
  72.  
  73.         buffTimers.stream().filter(Objects::nonNull).forEach(i -> {
  74.             if (i.getTimer().getType() == t.getType() || i.getTimer().getId() == t.getId())
  75.                 if (t.isOverride())
  76.                     remove(i.getTimer());
  77.                 else
  78.                     return;
  79.         });
  80.  
  81.         BuffTimer timer = new BuffTimer(time, t);
  82.         buffTimers.add(timer);
  83.         time = timer.getStopwatch().getSecondsRemaining();
  84.         if (p != null) {
  85.             p.getSession().write(new PacketBuilder(130).writeByte(t.getId()).writeByte(0).writeInt(time).toPacket());
  86.             p.getItems().resetBonus();
  87.             p.getItems().getBonus();
  88.             p.getItems().writeBonus();
  89.         }
  90.     }
  91.  
  92.     public void remove(BuffTimers t) {
  93.         if (t == null) {
  94.             return;
  95.         }
  96.         buffTimers.removeIf(i -> i.getTimer().getId() == t.getId());
  97.         Player p = entity.isPlayer() ? entity.toPlayer() : null;
  98.         if (p != null) {
  99.             p.getSession().write(new PacketBuilder(130).writeByte(t.getId()).writeByte(1).writeInt(0).toPacket());
  100.             t.onEnd(p);
  101.             p.getItems().resetBonus();
  102.             p.getItems().getBonus();
  103.             p.getItems().writeBonus();
  104.         }
  105.     }
  106.  
  107.     public void reset(boolean removeAttendance, boolean removeDeath) {
  108.         Player p = entity.isPlayer() ? entity.toPlayer() : null;
  109.         for (BuffTimer t : buffTimers) {
  110.             if ((!removeAttendance && t.getTimer().getId() == BuffTimers.ATTENDANCE.getId()) || (!removeDeath && t.getTimer().getId() == BuffTimers.DEATH_PENALTY.getId())) {
  111.                 continue;
  112.             }
  113.             if (p != null) {
  114.                 p.getSession().write(
  115.                         new PacketBuilder(130).writeByte(t.getTimer().getId()).writeByte(1).writeInt(0).toPacket());
  116.                 t.getTimer().onEnd(p);
  117.             }
  118.             buffTimers.remove(t);
  119.         }
  120.         if (p != null) {
  121.             p.getItems().resetBonus();
  122.             p.getItems().getBonus();
  123.             p.getItems().writeBonus();
  124.         }
  125.     }
  126.  
  127.     public boolean isActive(BuffTimers t) {
  128.         if (t == null) {
  129.             return false;
  130.         }
  131.         Player p = entity.isPlayer() ? entity.toPlayer() : null;
  132.         if (p != null
  133.                 && (p.inPvP() || p.inWild() || WeaponMinigame.inWeaponGameArea(p) || TankMinigame.inTankGameArea(p)))
  134.             return false;
  135.         return buffTimers.stream().filter(Objects::nonNull).anyMatch(i -> i.getTimer().getId() == t.getId());
  136.     }
  137.  
  138.     public List<BuffTimer> getBuffs() {
  139.         return buffTimers;
  140.     }
  141.  
  142. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top