package be.isach.ultracosmetics.cosmetics.emotes; import org.bukkit.scheduler.BukkitRunnable; /** * Settings manager. * * @author iSach * @since 06-17-2016 */ class EmoteAnimation extends BukkitRunnable { private static final int INTERVAL_BETWEEN_REPLAY = 20; private int ticks, ticksPerFrame, currentFrame, intervalTick; private Emote emote; private boolean running, up = true; EmoteAnimation(int ticksPerFrame, Emote emote) { this.ticksPerFrame = ticksPerFrame; this.emote = emote; this.ticks = 0; this.running = false; } @Override public void run() { if (ticks < ticksPerFrame) { ticks++; } else { ticks = 0; updateTexture(); } } void start() { this.running = true; runTaskTimer(emote.getUltraCosmetics(), 0, ticksPerFrame); } void stop() { if(!running) { return; } this.running = false; try { cancel(); } catch (Exception exc) { // ??? } } private void updateTexture() { if (!running) return; emote.getPlayer().getInventory().setHelmet(emote.getType().getFrames().get(currentFrame)); emote.setItemStack(emote.getType().getFrames().get(currentFrame)); if (up) { if (currentFrame >= emote.getType().getMaxFrames() - 1) { up = false; } else { currentFrame++; } } else { if (currentFrame <= 0) { if (intervalTick >= INTERVAL_BETWEEN_REPLAY / ticksPerFrame) { up = true; intervalTick = 0; } else { intervalTick++; } } else { currentFrame--; } } } }