diff --git a/src/main/java/com/alttd/config/ParticleConfig.java b/src/main/java/com/alttd/config/ParticleConfig.java index 8b1030f..5fd29e3 100644 --- a/src/main/java/com/alttd/config/ParticleConfig.java +++ b/src/main/java/com/alttd/config/ParticleConfig.java @@ -73,6 +73,7 @@ public class ParticleConfig { int repeat = (int) (long) jsonObject.get("repeat"); int repeatDelay = (int) (long) jsonObject.get("repeat_delay"); double randomOffset = (double) jsonObject.get("random_offset"); + boolean stationary = (boolean) jsonObject.get("stationary"); JSONObject frames = (JSONObject) jsonObject.get("frames"); List loadedFrames = new ArrayList<>(); for (Object key : frames.keySet()) { @@ -101,12 +102,15 @@ public class ParticleConfig { //TODO implement } else if (particleType.getDataType().equals(ItemStack.class)) { //TODO implement + } else { + double data = (double) pData.get("extra"); + particleBuilder.extra(data); } aParticleList.add(new AParticle(x, y, z, randomOffset, particleBuilder)); } loadedFrames.add(new Frame(aParticleList)); } - return new ParticleSet(loadedFrames, displayName, List.of(lore.split("\n")), frameDelay, repeat, repeatDelay, aPartType, particleName, permission, packagePermission, displayItem); + return new ParticleSet(loadedFrames, displayName, List.of(lore.split("\n")), frameDelay, repeat, repeatDelay, stationary, aPartType, particleName, permission, packagePermission, displayItem); } public static void reload() { diff --git a/src/main/java/com/alttd/frameSpawners/FrameSpawnerPlayer.java b/src/main/java/com/alttd/frameSpawners/FrameSpawnerPlayer.java index d9a3abe..e437866 100644 --- a/src/main/java/com/alttd/frameSpawners/FrameSpawnerPlayer.java +++ b/src/main/java/com/alttd/frameSpawners/FrameSpawnerPlayer.java @@ -7,6 +7,7 @@ import com.alttd.objects.Frame; import com.alttd.objects.ParticleSet; import com.alttd.storage.PlayerSettings; import com.alttd.util.Logger; +import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; @@ -23,7 +24,8 @@ public class FrameSpawnerPlayer extends BukkitRunnable { private final APartType aPartType; private final String uniqueId; private final int frameDelay; - public FrameSpawnerPlayer(int amount, List frames, int frameDelay, Player player, PlayerSettings playerSettings, APartType aPartType, String uniqueId) { + private final boolean stationary; + public FrameSpawnerPlayer(int amount, List frames, int frameDelay, Player player, PlayerSettings playerSettings, APartType aPartType, String uniqueId, boolean stationary) { this.amount = amount; this.frames = frames; this.iterator = frames.iterator(); @@ -32,6 +34,7 @@ public class FrameSpawnerPlayer extends BukkitRunnable { this.aPartType = aPartType; this.uniqueId = uniqueId; this.frameDelay = frameDelay; + this.stationary = stationary; } @Override @@ -42,6 +45,8 @@ public class FrameSpawnerPlayer extends BukkitRunnable { Logger.info("Stopped repeating task due to player offline."); return; } + Location location = player.getLocation(); + float yaw = location.getYaw(); ParticleSet activeParticleSet = playerSettings.getParticles(aPartType); if (activeParticleSet == null || !activeParticleSet.getParticleId().equalsIgnoreCase(uniqueId) || !playerSettings.hasActiveParticles()) { this.cancel(); @@ -57,9 +62,15 @@ public class FrameSpawnerPlayer extends BukkitRunnable { new BukkitRunnable() { @Override public void run() { - if (!iterator.hasNext()) + if (!iterator.hasNext()) { this.cancel(); - iterator.next().spawn(player.getLocation(), player.getLocation().getYaw()); + return; + } + Frame next = iterator.next(); + if (stationary) + next.spawn(location, yaw); + else + next.spawn(player.getLocation(), player.getLocation().getYaw()); } }.runTaskTimerAsynchronously(AltitudeParticles.getInstance(), 0, frameDelay); iterator = frames.iterator(); diff --git a/src/main/java/com/alttd/objects/ParticleSet.java b/src/main/java/com/alttd/objects/ParticleSet.java index a90572c..bb566d5 100644 --- a/src/main/java/com/alttd/objects/ParticleSet.java +++ b/src/main/java/com/alttd/objects/ParticleSet.java @@ -27,8 +27,9 @@ public class ParticleSet { private final String permission; private final String packPermission; private final ItemStack itemStack; + private final boolean stationary; - public ParticleSet(List frames, String name, List lore, int frameDelay, int repeat, int repeatDelay, APartType aPartType, String uniqueId, String permission, String packPermission,ItemStack itemStack) { + public ParticleSet(List frames, String name, List lore, int frameDelay, int repeat, int repeatDelay, boolean stationary, APartType aPartType, String uniqueId, String permission, String packPermission, ItemStack itemStack) { MiniMessage miniMessage = MiniMessage.miniMessage(); this.frames = frames; this.frameDelay = frameDelay; @@ -38,6 +39,7 @@ public class ParticleSet { this.uniqueId = uniqueId; this.permission = permission; this.packPermission = packPermission; + this.stationary = stationary; ItemMeta itemMeta = itemStack.getItemMeta(); itemMeta.displayName(miniMessage.deserialize(name)); itemMeta.lore(lore.stream().map(miniMessage::deserialize).collect(Collectors.toList())); @@ -57,7 +59,7 @@ public class ParticleSet { return; if (Config.DEBUG) Logger.info("Starting particle set % for %.", uniqueId, player.getName()); - FrameSpawnerPlayer frameSpawnerPlayer = new FrameSpawnerPlayer(repeat, frames, frameDelay, player, playerSettings, aPartType, uniqueId); + FrameSpawnerPlayer frameSpawnerPlayer = new FrameSpawnerPlayer(repeat, frames, frameDelay, player, playerSettings, aPartType, uniqueId, stationary); frameSpawnerPlayer.runTaskTimerAsynchronously(AltitudeParticles.getInstance(), 0, repeatDelay); }