138 lines
4.7 KiB
Java
Raw Normal View History

package me.libraryaddict.disguise.utilities.sounds;
import me.libraryaddict.disguise.LibsDisguises;
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
2020-05-24 13:10:48 +12:00
import me.libraryaddict.disguise.utilities.params.ParamInfoManager;
import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
2020-05-24 01:44:19 +12:00
import org.bukkit.Sound;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Locale;
/**
* Created by libraryaddict on 23/05/2020.
*/
public class SoundManager {
public void load() {
2020-05-24 13:10:48 +12:00
SoundGroup.getGroups().clear();
loadSounds();
loadCustomSounds();
2020-05-24 13:10:48 +12:00
ParamInfoManager.getParamInfoSoundGroup().recalculate();
}
private void loadCustomSounds() {
File f = new File(LibsDisguises.getInstance().getDataFolder(), "configs/sounds.yml");
if (!f.exists()) {
f.getParentFile().mkdirs();
File old = new File(LibsDisguises.getInstance().getDataFolder(), "sounds.yml");
if (old.exists()) {
old.renameTo(f);
} else {
LibsDisguises.getInstance().saveResource("configs/sounds.yml", false);
}
}
YamlConfiguration config = YamlConfiguration.loadConfiguration(f);
for (String key : config.getKeys(false)) {
if (!config.isConfigurationSection(key) || key.equals("GroupName")) {
continue;
}
if (SoundGroup.getGroups().keySet().stream().anyMatch(k -> k.equalsIgnoreCase(key))) {
DisguiseUtilities.getLogger().warning("The SoundGroup " + key + " has already been registered!");
continue;
}
SoundGroup group = new SoundGroup(key);
ConfigurationSection section = config.getConfigurationSection(key);
for (SoundGroup.SoundType type : SoundGroup.SoundType.values()) {
if (type == SoundGroup.SoundType.CANCEL) {
continue;
}
List<String> list = section.getStringList(type.name().charAt(0) + type.name().substring(1).toLowerCase(Locale.ENGLISH));
if (list == null || list.isEmpty()) {
continue;
}
for (String sound : list) {
if (!sound.matches(".+:.+")) {
SoundGroup subGroup = SoundGroup.getGroup(sound);
if (subGroup == null) {
DisguiseUtilities.getLogger().warning("Invalid sound '" + sound + "'! Must be a minecraft:sound.name or SoundGroup name!");
continue;
}
Object[] sounds = subGroup.getDisguiseSounds().get(type);
if (sounds == null) {
DisguiseUtilities.getLogger()
.warning("Sound group '" + sound + "' does not contain a category for " + type + "! Can't use as default in " + key);
continue;
}
for (Object obj : sounds) {
group.addSound(obj, type);
}
continue;
}
group.addSound(sound, type);
}
}
DisguiseUtilities.getLogger().info("Loaded sound group '" + key + "'");
}
}
private void loadSounds() {
2020-11-12 10:56:18 +13:00
try (InputStream stream = LibsDisguises.getInstance().getResource("ANTI_PIRACY_SECRET_FILE")) {
String[] lines = new String(ReflectionManager.readFully(stream), StandardCharsets.UTF_8).split("\n");
for (String line : lines) {
2020-05-24 01:44:19 +12:00
String[] groups = line.split("/", -1);
SoundGroup group = new SoundGroup(groups[0]);
int i = 0;
for (SoundGroup.SoundType type : SoundGroup.SoundType.values()) {
2020-05-24 01:44:19 +12:00
String s = groups[++i];
if (s.isEmpty()) {
continue;
}
String[] sounds = s.split(",");
for (String sound : sounds) {
2020-05-24 01:44:19 +12:00
try {
Sound actualSound = Sound.valueOf(sound);
group.addSound(actualSound, type);
} catch (Exception ignored) {
2020-05-24 01:44:19 +12:00
}
}
}
}
} catch (IOException | NoClassDefFoundError e) {
e.printStackTrace();
}
2020-05-24 01:44:19 +12:00
}
}