Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package server.model.players.content.buff;
- import server.model.Entity;
- import server.model.items.Item;
- import server.model.minigames.tank.TankMinigame;
- import server.model.minigames.weapongame.WeaponMinigame;
- import server.model.players.Player;
- import server.model.players.content.dialogue.SimpleDialogues;
- import server.net.packet.PacketBuilder;
- import java.util.Arrays;
- import java.util.List;
- import java.util.Objects;
- import java.util.Optional;
- import java.util.concurrent.CopyOnWriteArrayList;
- public class BuffHandler {
- private final Entity entity;
- private List<BuffTimer> buffTimers = new CopyOnWriteArrayList<>();
- public BuffHandler(Entity player) {
- this.entity = player;
- }
- public void add(BuffTimers t) {
- add(-1, t);
- }
- public void increaseTimer(int time, BuffTimers t) {
- Optional<BuffTimer> opt = buffTimers.stream().filter(i -> i.getTimer().equals(t)).findAny();
- if (!opt.isPresent()) {
- add(time, t);
- return;
- }
- if (time == -1)
- time = t.getTime();
- if (time == 0)
- return;
- BuffTimer timer = opt.get();
- int remaining = timer.getSecondsRemaining();
- remove(t);
- time = remaining + time;
- if (remaining == -2)
- time = -2;
- add(time, t);
- }
- public void add(int time, BuffTimers t) {
- Player p = entity.isPlayer() ? entity.toPlayer() : null;
- if (p != null && p.getRaid() != null && t.getId() == 10) {
- return;
- }
- if (t == null) {
- return;
- }
- if (time == -1)
- time = t.getTime();
- if (time == 0)
- return;
- buffTimers.stream().filter(Objects::nonNull).forEach(i -> {
- if (i.getTimer().getType() == t.getType() || i.getTimer().getId() == t.getId())
- if (t.isOverride())
- remove(i.getTimer());
- else
- return;
- });
- BuffTimer timer = new BuffTimer(time, t);
- buffTimers.add(timer);
- time = timer.getStopwatch().getSecondsRemaining();
- if (p != null) {
- p.getSession().write(new PacketBuilder(130).writeByte(t.getId()).writeByte(0).writeInt(time).toPacket());
- p.getItems().resetBonus();
- p.getItems().getBonus();
- p.getItems().writeBonus();
- }
- }
- public void remove(BuffTimers t) {
- if (t == null) {
- return;
- }
- buffTimers.removeIf(i -> i.getTimer().getId() == t.getId());
- Player p = entity.isPlayer() ? entity.toPlayer() : null;
- if (p != null) {
- p.getSession().write(new PacketBuilder(130).writeByte(t.getId()).writeByte(1).writeInt(0).toPacket());
- t.onEnd(p);
- p.getItems().resetBonus();
- p.getItems().getBonus();
- p.getItems().writeBonus();
- }
- }
- public void reset(boolean removeAttendance, boolean removeDeath) {
- Player p = entity.isPlayer() ? entity.toPlayer() : null;
- for (BuffTimer t : buffTimers) {
- if ((!removeAttendance && t.getTimer().getId() == BuffTimers.ATTENDANCE.getId()) || (!removeDeath && t.getTimer().getId() == BuffTimers.DEATH_PENALTY.getId())) {
- continue;
- }
- if (p != null) {
- p.getSession().write(
- new PacketBuilder(130).writeByte(t.getTimer().getId()).writeByte(1).writeInt(0).toPacket());
- t.getTimer().onEnd(p);
- }
- buffTimers.remove(t);
- }
- if (p != null) {
- p.getItems().resetBonus();
- p.getItems().getBonus();
- p.getItems().writeBonus();
- }
- }
- public boolean isActive(BuffTimers t) {
- if (t == null) {
- return false;
- }
- Player p = entity.isPlayer() ? entity.toPlayer() : null;
- if (p != null
- && (p.inPvP() || p.inWild() || WeaponMinigame.inWeaponGameArea(p) || TankMinigame.inTankGameArea(p)))
- return false;
- return buffTimers.stream().filter(Objects::nonNull).anyMatch(i -> i.getTimer().getId() == t.getId());
- }
- public List<BuffTimer> getBuffs() {
- return buffTimers;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement