Code (Text):
package eternalpolar.spigot.emenussounds;
import eternalpolar.spigot.eternalmenus.api.event.MenuClickEvent;
import eternalpolar.spigot.eternalmenus.api.event.MenuCloseEvent;
import eternalpolar.spigot.eternalmenus.api.event.MenuOpenEvent;
import org.bukkit.Bukkit;
import org.bukkit.Sound;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SoundExtension implements Listener {
private final JavaPlugin plugin;
private Sound openSound;
private Sound closeSound;
private Sound clickSound;
private float volume;
private float pitch;
private File configFile;
private FileConfiguration config;
private int majorVersion;
public SoundExtension(JavaPlugin plugin) {
this.plugin = plugin;
determineServerVersion();
setupConfig();
loadSoundsFromConfig();
registerListener();
}
private void determineServerVersion() {
String version = Bukkit.getBukkitVersion();
Pattern pattern = Pattern.compile("1\\.(\\d+)");
Matcher matcher = pattern.matcher(version);
if (matcher.find()) {
try {
majorVersion = Integer.parseInt(matcher.group(1));
} catch (NumberFormatException e) {
majorVersion = 8;
}
} else {
majorVersion = 8;
}
}
private void setupConfig() {
configFile = new File(plugin.getDataFolder(), "config.yml");
if (!configFile.exists()) {
plugin.getDataFolder().mkdirs();
try {
configFile.createNewFile();
} catch (IOException ignored) {
}
}
config = YamlConfiguration.loadConfiguration(configFile);
setDefaultConfigValues();
}
private void setDefaultConfigValues() {
String defaultOpenSound;
String defaultClickSound;
if (majorVersion >= 13) {
defaultOpenSound = "BLOCK_CHEST_OPEN";
defaultClickSound = "UI_BUTTON_CLICK";
} else if (majorVersion >= 9) {
defaultOpenSound = "CHEST_OPEN";
defaultClickSound = "UI_BUTTON_CLICK";
} else {
defaultOpenSound = "CHEST_OPEN";
defaultClickSound = "CLICK";
}
config.addDefault("sounds.open", defaultOpenSound);
config.addDefault("sounds.click", defaultClickSound);
config.addDefault("volume", 1.0);
config.addDefault("pitch", 1.0);
config.options().copyDefaults(true);
try {
config.save(configFile);
} catch (IOException ignored) {
}
}
private void loadSoundsFromConfig() {
try {
String openSoundName = config.getString("sounds.open");
String clickSoundName = config.getString("sounds.click");
if (majorVersion >= 13) {
openSoundName = convertOldSoundName(openSoundName);
clickSoundName = convertOldSoundName(clickSoundName);
}
openSound = getSoundByName(openSoundName);
clickSound = getSoundByName(clickSoundName);
if (openSound == null || closeSound == null || clickSound == null) {
setupFallbackSounds();
return;
}
volume = (float) config.getDouble("volume");
pitch = (float) config.getDouble("pitch");
} catch (Exception e) {
setupFallbackSounds();
}
}
private String convertOldSoundName(String oldName) {
if (oldName == null) return null;
switch (oldName) {
case "CHEST_OPEN": return "BLOCK_CHEST_OPEN";
case "CLICK": return "UI_BUTTON_CLICK";
default: return oldName;
}
}
private Sound getSoundByName(String soundName) {
if (soundName == null) return null;
try {
return Sound.valueOf(soundName);
} catch (IllegalArgumentException e) {
return null;
}
}
private void setupFallbackSounds() {
if (majorVersion >= 13) {
openSound = Sound.BLOCK_CHEST_OPEN;
clickSound = Sound.UI_BUTTON_CLICK;
} else if (majorVersion >= 9) {
openSound = Sound.valueOf("CHEST_OPEN");
clickSound = Sound.valueOf("UI_BUTTON_CLICK");
} else {
openSound = Sound.valueOf("CHEST_OPEN");
clickSound = Sound.valueOf("CLICK");
}
volume = 1.0f;
pitch = 1.0f;
}
private void registerListener() {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}
@EventHandler
public void onMenuOpen(MenuOpenEvent event) {
if (!event.isCancelled()) {
Player player = event.getPlayer();
player.playSound(player.getLocation(), openSound, volume, pitch);
}
}
@EventHandler
public void onMenuClick(MenuClickEvent event) {
if (!event.isCancelled()) {
Player player = event.getPlayer();
player.playSound(player.getLocation(), clickSound, volume, pitch);
}
}
public static void load(JavaPlugin plugin) {
try {
new SoundExtension(plugin);
} catch (Exception ignored) {
}
}
}