diff --git a/src/main/java/com/alttd/AltitudeParticles.java b/src/main/java/com/alttd/AltitudeParticles.java index a1ce746..abe5c2b 100644 --- a/src/main/java/com/alttd/AltitudeParticles.java +++ b/src/main/java/com/alttd/AltitudeParticles.java @@ -1,8 +1,10 @@ package com.alttd; import com.alttd.commands.CommandManager; +import com.alttd.commands.subcommands.CommandReload; import com.alttd.config.Config; import com.alttd.config.DatabaseConfig; +import com.alttd.config.ParticleConfig; import com.alttd.database.Database; import com.alttd.listeners.*; import com.alttd.objects.APartType; @@ -26,8 +28,7 @@ public class AltitudeParticles extends JavaPlugin { @Override public void onEnable() { - Config.reload(); - DatabaseConfig.reload(); + reload(); Database.getDatabase().init(); new CommandManager(); registerEvents(); @@ -49,4 +50,10 @@ public class AltitudeParticles extends JavaPlugin { pluginManager.registerEvents(new GUIListener(), this); } + public void reload() { + Config.reload(); + DatabaseConfig.reload(); + ParticleConfig.reload(); + } + } diff --git a/src/main/java/com/alttd/commands/subcommands/CommandReload.java b/src/main/java/com/alttd/commands/subcommands/CommandReload.java index 44b9a0e..6d2a772 100644 --- a/src/main/java/com/alttd/commands/subcommands/CommandReload.java +++ b/src/main/java/com/alttd/commands/subcommands/CommandReload.java @@ -1,8 +1,10 @@ package com.alttd.commands.subcommands; +import com.alttd.AltitudeParticles; import com.alttd.commands.SubCommand; import com.alttd.config.Config; import com.alttd.config.DatabaseConfig; +import com.alttd.config.ParticleConfig; import org.bukkit.command.CommandSender; import java.util.ArrayList; @@ -12,8 +14,7 @@ public class CommandReload extends SubCommand { @Override public boolean onCommand(CommandSender commandSender, String[] args) { - Config.reload(); - DatabaseConfig.reload(); + AltitudeParticles.getInstance().reload(); commandSender.sendMiniMessage("Reloaded AltitudeParticles config.", null); return true; } diff --git a/src/main/java/com/alttd/config/Config.java b/src/main/java/com/alttd/config/Config.java index 010ea65..03785ca 100644 --- a/src/main/java/com/alttd/config/Config.java +++ b/src/main/java/com/alttd/config/Config.java @@ -16,7 +16,7 @@ public final class Config extends AbstractConfig { version = config.getInt("config-version", 1); config.set("config-version", 1); - config.readConfig(Config.class, null); + config.readConfig(config.getClass(), null); } public static String HELP_MESSAGE_WRAPPER = "AltitudeParticles help:\n"; diff --git a/src/main/java/com/alttd/config/DatabaseConfig.java b/src/main/java/com/alttd/config/DatabaseConfig.java index 8027a40..bd1c5bf 100644 --- a/src/main/java/com/alttd/config/DatabaseConfig.java +++ b/src/main/java/com/alttd/config/DatabaseConfig.java @@ -14,7 +14,7 @@ public class DatabaseConfig extends AbstractConfig { public static void reload() { config = new DatabaseConfig(); - config.readConfig(DatabaseConfig.class, null); + config.readConfig(config.getClass(), null); } public static String DRIVER = "mysql"; diff --git a/src/main/java/com/alttd/config/ParticleConfig.java b/src/main/java/com/alttd/config/ParticleConfig.java new file mode 100644 index 0000000..93c11dc --- /dev/null +++ b/src/main/java/com/alttd/config/ParticleConfig.java @@ -0,0 +1,98 @@ +package com.alttd.config; + +import com.alttd.objects.APartType; +import com.alttd.objects.AParticle; +import com.alttd.objects.Frame; +import com.alttd.objects.ParticleSet; +import com.alttd.storage.ParticleStorage; +import com.alttd.util.Logger; +import com.destroystokyo.paper.ParticleBuilder; +import org.bukkit.Material; +import org.bukkit.Particle; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.inventory.ItemStack; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class ParticleConfig extends AbstractConfig { + + static ParticleConfig config; + public ParticleConfig() { + super(new File(System.getProperty("user.home") + File.separator + "share" + File.separator + "configs" + File.separator + "AltitudeParticles"), "particles.yml"); + } + + public static void reload() { + config = new ParticleConfig(); + + config.readConfig(config.getClass(), null); + } + + private static void loadParticles() { + ParticleStorage.clear(); + ConfigurationSection particles = config.getConfigurationSection("particles"); + if (particles == null) { + Logger.warning("No particles in particles config"); + return; + } + for (String key : particles.getKeys(false)) { + ConfigurationSection cs = particles.getConfigurationSection(key); + if (cs == null) + continue; + APartType aPartType = APartType.valueOf(cs.getString("part-type")); + ParticleSet particleSet = new ParticleSet( + getAParticle(cs), + cs.getInt("frame-delay"), + cs.getInt("repeat"), + cs.getInt("repeat-delay"), + aPartType, + cs.getString("unique-name"), + cs.getString("permission"), + new ItemStack(Material.valueOf(cs.getString("material")))); + ParticleStorage.addParticleSet(aPartType, particleSet); + } + } + + private static List getAParticle(ConfigurationSection configurationSection) { + List list = new ArrayList<>(); + ConfigurationSection frames = configurationSection.getConfigurationSection("frames"); + if (frames == null) { + Logger.warning("Unable to find frames for something"); + return null; + } + for (String key : frames.getKeys(false)) { + ConfigurationSection cs = frames.getConfigurationSection(key); + if (cs == null) { + Logger.warning("Unable to load particle %", key); + return null; + } + int offset = frames.getInt("offset-range"); + List aParticleList = new ArrayList<>(); + List x = Arrays.stream(cs.getString("x").split(", ")).map(Double::valueOf).collect(Collectors.toList()); + List y = Arrays.stream(cs.getString("y").split(", ")).map(Double::valueOf).collect(Collectors.toList()); + List z = Arrays.stream(cs.getString("z").split(", ")).map(Double::valueOf).collect(Collectors.toList()); + if (x.size() != y.size() || y.size() != z.size()) { + Logger.warning("Unable to load % xyz is not the same length", key); + } + ParticleBuilder particleBuilder = getParticleBuilder(cs); + for (int i = 0; i < x.size(); i++) { + aParticleList.add(new AParticle(x.get(i), y.get(i), z.get(i), offset, particleBuilder)); + } + list.add(new Frame(aParticleList)); + } + return list; + } + + private static ParticleBuilder getParticleBuilder(ConfigurationSection cs) { + cs.getString("particle"); + ConfigurationSection color = cs.getConfigurationSection("color"); + ParticleBuilder particle = new ParticleBuilder(Particle.valueOf(cs.getString("particle"))); + if (color != null) { + particle = particle.color(color.getInt("r"), color.getInt("g"), color.getInt("b")); + } + return particle.count(cs.getInt("count", 1)); + } +} diff --git a/src/main/java/com/alttd/objects/APartType.java b/src/main/java/com/alttd/objects/APartType.java index 7798c7a..32a284b 100644 --- a/src/main/java/com/alttd/objects/APartType.java +++ b/src/main/java/com/alttd/objects/APartType.java @@ -3,6 +3,8 @@ package com.alttd.objects; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import java.util.Arrays; +import java.util.Optional; import java.util.concurrent.TimeUnit; public enum APartType { //TODO add description? diff --git a/src/main/java/com/alttd/particles/InitParticles.java b/src/main/java/com/alttd/particles/InitParticles.java index 734da6a..b930a57 100644 --- a/src/main/java/com/alttd/particles/InitParticles.java +++ b/src/main/java/com/alttd/particles/InitParticles.java @@ -2,8 +2,8 @@ package com.alttd.particles; public class InitParticles { public static void init() { - new Test(); - new Alpha(); - new Cupid(); +// new Test(); +// new Alpha(); +// new Cupid(); } } diff --git a/src/main/java/com/alttd/storage/ParticleStorage.java b/src/main/java/com/alttd/storage/ParticleStorage.java index 2a75e9e..023e3c9 100644 --- a/src/main/java/com/alttd/storage/ParticleStorage.java +++ b/src/main/java/com/alttd/storage/ParticleStorage.java @@ -21,4 +21,8 @@ public class ParticleStorage { public static List getParticleSets(APartType aPartType) { return particles.getOrDefault(aPartType, new ArrayList<>()); } + + public static void clear() { + particles.clear(); + } }