Fix frame iterator resetting mid run, improved logging
Frame iterator was resetting every run due to a shared iterator between runs, this is now unique per run. Include frame keys for logging, log the frame spawning in debug logs.
This commit is contained in:
parent
f6ee8eacf5
commit
b60df9dc8d
|
|
@ -150,7 +150,7 @@ public class ParticleConfig {
|
|||
* @return A ParticleSet created from the ParticleData
|
||||
*/
|
||||
public ParticleSet convertToParticleSet(ParticleData particleData) {
|
||||
log.info("Converting ParticleData to ParticleSet for {}", particleData.getParticleName());
|
||||
log.info("Converting ParticleData to ParticleSet for [{}]", particleData.getParticleName());
|
||||
List<Frame> loadedFrames = new ArrayList<>();
|
||||
double randomOffset = particleData.getRandomOffset();
|
||||
|
||||
|
|
@ -175,7 +175,11 @@ public class ParticleConfig {
|
|||
aParticleList.add(new AParticle(x, y + 0.2, z, randomOffset, particleBuilder));
|
||||
}
|
||||
|
||||
loadedFrames.add(new Frame(aParticleList));
|
||||
loadedFrames.add(new Frame(entry.getKey(), aParticleList));
|
||||
}
|
||||
|
||||
if (Config.DEBUG) {
|
||||
log.info("Loaded {} frames for [{}]", loadedFrames.size(), particleData.getParticleName());
|
||||
}
|
||||
|
||||
// Create and return the ParticleSet
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ public class FrameSpawnerPlayer extends BukkitRunnable {
|
|||
|
||||
private int amount;
|
||||
private final List<Frame> frames;
|
||||
private Iterator<Frame> iterator;
|
||||
private final Player player;
|
||||
private final PlayerSettings playerSettings;
|
||||
private final APartType aPartType;
|
||||
|
|
@ -34,7 +33,6 @@ public class FrameSpawnerPlayer extends BukkitRunnable {
|
|||
public FrameSpawnerPlayer(int amount, List<Frame> frames, int frameDelay, Player player, PlayerSettings playerSettings, APartType aPartType, String uniqueId, boolean stationary) {
|
||||
this.amount = amount;
|
||||
this.frames = frames;
|
||||
this.iterator = frames.iterator();
|
||||
this.player = player;
|
||||
this.playerSettings = playerSettings;
|
||||
this.aPartType = aPartType;
|
||||
|
|
@ -58,26 +56,27 @@ public class FrameSpawnerPlayer extends BukkitRunnable {
|
|||
Location location = player.getLocation();
|
||||
float yaw = location.getYaw();
|
||||
ParticleSet activeParticleSet = playerSettings.getParticles(aPartType);
|
||||
if (activeParticleSet == null || !activeParticleSet.getParticleId().equalsIgnoreCase(uniqueId) || !playerSettings.hasActiveParticles()) {
|
||||
this.cancel();
|
||||
if (Config.DEBUG)
|
||||
log.info("Stopped repeating task due to player switching/disabling particles.");
|
||||
return;
|
||||
}
|
||||
if (shouldStopTask(activeParticleSet)) return;
|
||||
if (amount == 0) {
|
||||
this.cancel();
|
||||
if (Config.DEBUG)
|
||||
log.info("Stopped repeating task due to end of frames.");
|
||||
}
|
||||
iterator = frames.iterator();
|
||||
final Iterator<Frame> iterator = frames.iterator();
|
||||
if (Config.DEBUG) {
|
||||
log.info("Starting frame spawn for player {}.", player.getName());
|
||||
}
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!iterator.hasNext()) {
|
||||
if (!iterator.hasNext() || shouldStopTask(activeParticleSet)) {
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
Frame next = iterator.next();
|
||||
if (Config.DEBUG) {
|
||||
log.info("Spawning frame with {} particles at {} for player {}", next.getKey(), location, player.getName());
|
||||
}
|
||||
if (stationary) {
|
||||
next.spawn(location, yaw);
|
||||
}
|
||||
|
|
@ -90,6 +89,16 @@ public class FrameSpawnerPlayer extends BukkitRunnable {
|
|||
amount--;
|
||||
}
|
||||
|
||||
private boolean shouldStopTask(ParticleSet activeParticleSet) {
|
||||
if (activeParticleSet == null || !activeParticleSet.getParticleId().equalsIgnoreCase(uniqueId) || !playerSettings.hasActiveParticles()) {
|
||||
this.cancel();
|
||||
if (Config.DEBUG)
|
||||
log.info("Stopped repeating task due to player switching/disabling particles.");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean isVanished(Player player) {
|
||||
return VanishAPI.isInvisible(player) || player.getGameMode().equals(GameMode.SPECTATOR);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.alttd.objects;
|
||||
|
||||
import com.alttd.storage.PlayerSettings;
|
||||
import lombok.Getter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
|
|
@ -11,9 +12,12 @@ import java.util.concurrent.ThreadLocalRandom;
|
|||
import java.util.stream.Collectors;
|
||||
|
||||
public class Frame {
|
||||
List<AParticle> aParticles;
|
||||
@Getter
|
||||
private final String key;
|
||||
private final List<AParticle> aParticles;
|
||||
|
||||
public Frame(List<AParticle> aParticles) {
|
||||
public Frame(String key, List<AParticle> aParticles) {
|
||||
this.key = key;
|
||||
this.aParticles = aParticles;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user