From 77df8b1e6da94ee17b6bb260b9fdc9e81f1369dc Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Thu, 13 Jan 2022 23:17:59 +0100 Subject: [PATCH] Added repeat delay --- .../frameSpawners/FrameSpawnerLocation.java | 19 ++++++--- .../frameSpawners/FrameSpawnerPlayer.java | 40 +++++++++++++++---- 2 files changed, 47 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/alttd/frameSpawners/FrameSpawnerLocation.java b/src/main/java/com/alttd/frameSpawners/FrameSpawnerLocation.java index 870a376..0248705 100644 --- a/src/main/java/com/alttd/frameSpawners/FrameSpawnerLocation.java +++ b/src/main/java/com/alttd/frameSpawners/FrameSpawnerLocation.java @@ -11,12 +11,14 @@ import java.util.List; public class FrameSpawnerLocation extends BukkitRunnable { - int amount; - List frames; - Iterator iterator; - Location location; - public FrameSpawnerLocation(int amount, List frames, Location location) { + private int amount; + private final long repeatDelay; + private final List frames; + private Iterator iterator; + private final Location location; + public FrameSpawnerLocation(int amount, int repeatDelay, List frames, Location location) { this.amount = amount; + this.repeatDelay = (repeatDelay * 1000L) / 20; this.frames = frames; this.iterator = frames.iterator(); this.location = location; @@ -29,6 +31,13 @@ public class FrameSpawnerLocation extends BukkitRunnable { else if (amount != 0) { iterator = frames.iterator(); amount--; + if (repeatDelay <= 0) + return; + try { //Wait before repeating the frames + Thread.sleep(repeatDelay); //TODO figure out why this isn't working and fix it + } catch (InterruptedException e) { + e.printStackTrace(); + } } else { this.cancel(); if (Config.DEBUG) diff --git a/src/main/java/com/alttd/frameSpawners/FrameSpawnerPlayer.java b/src/main/java/com/alttd/frameSpawners/FrameSpawnerPlayer.java index f15de9f..9949e08 100644 --- a/src/main/java/com/alttd/frameSpawners/FrameSpawnerPlayer.java +++ b/src/main/java/com/alttd/frameSpawners/FrameSpawnerPlayer.java @@ -1,7 +1,10 @@ package com.alttd.frameSpawners; import com.alttd.config.Config; +import com.alttd.objects.APartType; import com.alttd.objects.Frame; +import com.alttd.objects.ParticleSet; +import com.alttd.storage.PlayerSettings; import com.alttd.util.Logger; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; @@ -11,15 +14,23 @@ import java.util.List; public class FrameSpawnerPlayer extends BukkitRunnable { - int amount; - List frames; - Iterator iterator; - Player player; - public FrameSpawnerPlayer(int amount, List frames, Player player) { + private int amount; + private final long repeatDelay; + private final List frames; + private Iterator iterator; + private final Player player; + private final PlayerSettings playerSettings; + private final APartType aPartType; + private final String uniqueId; + public FrameSpawnerPlayer(int amount, int repeatDelay, List frames, Player player, PlayerSettings playerSettings, APartType aPartType, String uniqueId) { this.amount = amount; + this.repeatDelay = (repeatDelay * 1000L) / 20; this.frames = frames; this.iterator = frames.iterator(); this.player = player; + this.playerSettings = playerSettings; + this.aPartType = aPartType; + this.uniqueId = uniqueId; } @Override @@ -30,11 +41,26 @@ public class FrameSpawnerPlayer extends BukkitRunnable { Logger.info("Stopped repeating task due to player offline."); return; } + ParticleSet activeParticleSet = playerSettings.getParticles(aPartType); + if (activeParticleSet == null || !activeParticleSet.getParticleId().equalsIgnoreCase(uniqueId)) { + this.cancel(); + if (Config.DEBUG) + Logger.info("Stopped repeating task due to player switching/disabling particles."); + return; + } if (iterator.hasNext()) iterator.next().spawn(player.getLocation()); - else if (amount != 0) + else if (amount != 0) { iterator = frames.iterator(); - else { + amount--; + if (repeatDelay <= 0) + return; + try { //Wait before repeating the frames + Thread.sleep(repeatDelay); //TODO figure out why this doesn't work and fix it + } catch (InterruptedException e) { + e.printStackTrace(); + } + } else { this.cancel(); if (Config.DEBUG) Logger.info("Stopped repeating task due to end of frames.");