Click sound + release 2.1

This commit is contained in:
Mateus Moreira 2018-08-12 14:36:08 +01:00
parent 8b38473896
commit a00244db89
15 changed files with 299 additions and 4 deletions

View File

@ -6,7 +6,7 @@
<groupId>me.mattmoreira.plugins</groupId>
<artifactId>citizens-cmd</artifactId>
<version>2.1-SNAPSHOT</version>
<version>2.1</version>
<packaging>jar</packaging>
<name>CitizensCMD</name>

View File

@ -239,7 +239,7 @@ public final class CitizensCMD extends JavaPlugin {
*/
private void registerCommands() {
getCommand("npcmd").setExecutor(commandHandler);
Stream.of(new CMDHelp(), new CMDAdd(), new CMDCooldown(), new CMDList(), new CMDReload(), new CMDRemove(), new CMDEdit(), new CMDPrice()).forEach(commandHandler::register);
Stream.of(new CMDHelp(), new CMDAdd(), new CMDCooldown(), new CMDList(), new CMDReload(), new CMDRemove(), new CMDEdit(), new CMDPrice(), new CMDSound()).forEach(commandHandler::register);
}
/**

View File

@ -28,6 +28,7 @@ import net.citizensnpcs.api.event.NPCRemoveEvent;
import net.citizensnpcs.api.event.NPCRightClickEvent;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -70,6 +71,11 @@ public class NPCListener implements Listener {
}
}
if (CitizensCMD.getPlugin().getDataHandler().hasSound(npc)) {
List<String> soundProperties = CitizensCMD.getPlugin().getDataHandler().getNPCSound(npc);
player.playSound(player.getLocation(), Sound.valueOf(soundProperties.get(0)), Float.parseFloat(soundProperties.get(1)), Float.parseFloat(soundProperties.get(2)));
}
if (CitizensCMD.getPlugin().getDataHandler().hasNoCommands(npc, EnumTypes.ClickType.RIGHT)) return;
}
@ -159,7 +165,6 @@ public class NPCListener implements Listener {
}
}
if (!player.hasPermission("citizenscmd.bypass") || CitizensCMD.getPlugin().getDataHandler().getNPCCooldown(npc) != 0)
CitizensCMD.getPlugin().getCooldownHandler().addInteraction(npc, player.getUniqueId().toString(), System.nanoTime());
@ -185,6 +190,11 @@ public class NPCListener implements Listener {
}
}
if (CitizensCMD.getPlugin().getDataHandler().hasSound(npc)) {
List<String> soundProperties = CitizensCMD.getPlugin().getDataHandler().getNPCSound(npc);
player.playSound(player.getLocation(), Sound.valueOf(soundProperties.get(0)), Float.parseFloat(soundProperties.get(1)), Float.parseFloat(soundProperties.get(2)));
}
if (CitizensCMD.getPlugin().getDataHandler().hasNoCommands(npc, EnumTypes.ClickType.LEFT)) return;
}

View File

@ -0,0 +1,71 @@
/**
* CitizensCMD - Add-on for Citizens
* Copyright (C) 2018 Mateus Moreira
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package me.mattmoreira.citizenscmd.commands;
import me.mattmoreira.citizenscmd.CitizensCMD;
import me.mattmoreira.citizenscmd.commands.base.CommandBase;
import me.mattmoreira.citizenscmd.utility.Path;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import static me.mattmoreira.citizenscmd.utility.Util.*;
public class CMDSound extends CommandBase {
public CMDSound() {
super("sound", "citizenscmd.sound", false, null, 0, 3);
}
public void execute(Player player, String[] args) {
if (npcNotSelected(player)) return;
int npc = getSelectedNpcId(player);
if (args.length == 0) {
CitizensCMD.getPlugin().getDataHandler().removeSound(npc, player);
return;
}
String soundString = args[0];
Sound sound;
float volume = 1f;
float pitch = 1f;
if (args.length > 1)
if (isFloat(args[1]))
volume = Float.valueOf(args[1]);
if (args.length > 2)
if (isFloat(args[2]))
pitch = Float.valueOf(args[2]);
try {
sound = Sound.valueOf(soundString);
} catch (Exception e) {
player.sendMessage(color(HEADER));
player.sendMessage(CitizensCMD.getPlugin().getLang().getMessage(Path.INVALID_SOUND));
return;
}
CitizensCMD.getPlugin().getDataHandler().setSound(npc, sound, volume, pitch, player);
}
}

View File

@ -180,6 +180,10 @@ public class CommandHandler implements CommandExecutor, TabCompleter, IHandler {
return getCommandNames(subCMD, args, 5, (Player) sender);
}
break;
case "sound":
if (args.length == 2) return getCommandNames(subCMD, args, 1, (Player) sender);
break;
}
}
@ -203,7 +207,7 @@ public class CommandHandler implements CommandExecutor, TabCompleter, IHandler {
if (!args[arg - 1].equals("")) {
for (String commandName : argsComplete[arg - 1]) {
if (arg + 1 > args.length) break;
if (!commandName.startsWith(args[arg].toLowerCase())) continue;
if (!commandName.toLowerCase().startsWith(args[arg].toLowerCase())) continue;
commandNames.add(commandName);
}
} else {

View File

@ -21,6 +21,7 @@ package me.mattmoreira.citizenscmd.files;
import me.mattmoreira.citizenscmd.CitizensCMD;
import me.mattmoreira.citizenscmd.utility.EnumTypes;
import me.mattmoreira.citizenscmd.utility.Path;
import org.bukkit.Sound;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
@ -91,6 +92,7 @@ public class DataHandler {
data.put("npc-data." + parent + "." + child, dataConfigurator.getInt("npc-data." + parent + "." + child));
break;
case "sound":
case "right-click-commands":
case "left-click-commands":
data.put("npc-data." + parent + "." + child, dataConfigurator.getStringList("npc-data." + parent + "." + child));
@ -161,6 +163,11 @@ public class DataHandler {
dataConfigurator.set("npc-data.npc-" + npc + ".price", 0);
}
if (!data.containsKey("npc-data.npc-" + npc + ".sound")) {
data.put("npc-data.npc-" + npc + ".sound", new ArrayList<>());
dataConfigurator.set("npc-data.npc-" + npc + ".sound", new ArrayList<>());
}
player.sendMessage(color(HEADER));
player.sendMessage(CitizensCMD.getPlugin().getLang().getMessage(Path.NPC_ADDED));
@ -227,6 +234,44 @@ public class DataHandler {
}).start();
}
/**
* Sets the sound of the NPC command
*
* @param npc The NPC id
* @param sound The sound to play
* @param volume the volume
* @param pitch the pitch
* @param player The player who run the command
*/
public void setSound(int npc, Sound sound, float volume, float pitch, Player player) {
new Thread(() -> {
try {
createBasics();
dataConfigurator.load(savesFile);
List<String> soundProperties = new ArrayList<>();
soundProperties.add(sound.name());
soundProperties.add(String.valueOf(volume));
soundProperties.add(String.valueOf(pitch));
dataConfigurator.set("npc-data.npc-" + npc + ".sound", soundProperties);
if (data.containsKey("npc-data.npc-" + npc + ".sound"))
data.replace("npc-data.npc-" + npc + ".sound", soundProperties);
else
data.put("npc-data.npc-" + npc + ".sound", soundProperties);
player.sendMessage(color(HEADER));
player.sendMessage(CitizensCMD.getPlugin().getLang().getMessage(Path.SOUND_ADDED));
dataConfigurator.save(savesFile);
} catch (IOException | InvalidConfigurationException e) {
e.printStackTrace();
}
}).start();
}
/**
* Gets the click commands from the saves.yml
*
@ -266,6 +311,12 @@ public class DataHandler {
return true;
}
public boolean hasSound(int npc) {
if (data.containsKey("npc-data.npc-" + npc + ".sound"))
return !(((List<String>) data.get("npc-data.npc-" + npc + ".sound")).isEmpty());
return false;
}
/**
* Gets the cooldown of the NPC
*
@ -276,6 +327,10 @@ public class DataHandler {
return data.containsKey("npc-data.npc-" + npc + ".cooldown") ? (int) data.get("npc-data.npc-" + npc + ".cooldown") : 0;
}
public List<String> getNPCSound(int npc) {
return (List<String>) data.get("npc-data.npc-" + npc + ".sound");
}
/**
* Gets the price of the NPC
*
@ -317,6 +372,27 @@ public class DataHandler {
}).start();
}
public void removeSound(int npc, Player player) {
new Thread(() -> {
try {
createBasics();
dataConfigurator.load(savesFile);
List<String> soundProperties = new ArrayList<>();
data.replace("npc-data.npc-" + npc + ".sound", soundProperties);
dataConfigurator.set("npc-data.npc-" + npc + ".sound", soundProperties);
player.sendMessage(color(HEADER));
player.sendMessage(CitizensCMD.getPlugin().getLang().getMessage(Path.SOUND_REMOVED));
dataConfigurator.save(savesFile);
} catch (IOException | InvalidConfigurationException e) {
e.printStackTrace();
}
}).start();
}
/**
* Edits a command or permission from the NPC
*

View File

@ -91,6 +91,90 @@ public class LangHandler {
if (!langConf.contains(Path.MESSAGE_DISPLAY))
langConf.set(Path.MESSAGE_DISPLAY, "{name}:&r");
if (!langConf.contains(Path.INVALID_SOUND)) {
switch (lang) {
case "en":
langConf.set(Path.INVALID_SOUND, "&cPlease enter a valid sound!");
break;
case "pt":
langConf.set(Path.INVALID_SOUND, "&cSelecione um som válido!");
break;
case "ro":
langConf.set(Path.INVALID_SOUND, "&cIntroduceți un sunet valid!");
break;
case "bg":
langConf.set(Path.INVALID_SOUND, "&cМоля, въведете валиден звук!");
break;
case "no":
langConf.set(Path.INVALID_SOUND, "&cVennligst skriv inn en gyldig lyd!");
break;
case "ch":
langConf.set(Path.INVALID_SOUND, "&c请输入有效的声音!");
break;
}
}
if (!langConf.contains(Path.SOUND_ADDED)) {
switch (lang) {
case "en":
langConf.set(Path.SOUND_ADDED, "&aSound added successfully!");
break;
case "pt":
langConf.set(Path.SOUND_ADDED, "&aSom adicionado com sucesso!");
break;
case "ro":
langConf.set(Path.SOUND_ADDED, "&aSunetul a fost adăugat cu succes!");
break;
case "bg":
langConf.set(Path.SOUND_ADDED, "&aЗвукът е добавен успешно!");
break;
case "no":
langConf.set(Path.SOUND_ADDED, "&aLyd lagt til!");
break;
case "ch":
langConf.set(Path.SOUND_ADDED, "&a声音成功添加");
break;
}
}
if (!langConf.contains(Path.SOUND_REMOVED)) {
switch (lang) {
case "en":
langConf.set(Path.SOUND_REMOVED, "&aSound removed successfully!");
break;
case "pt":
langConf.set(Path.SOUND_REMOVED, "&aSom removido com sucesso!");
break;
case "ro":
langConf.set(Path.SOUND_REMOVED, "&aSunetul a fost eliminat cu succes!");
break;
case "bg":
langConf.set(Path.SOUND_REMOVED, "&aЗвукът е премахнат успешно!");
break;
case "no":
langConf.set(Path.SOUND_REMOVED, "&aLyden fjernet vellykket!");
break;
case "ch":
langConf.set(Path.SOUND_REMOVED, "&a声音已成功删除");
break;
}
}
for (String parent : langConf.getConfigurationSection("messages").getKeys(false)) {
for (String child : langConf.getConfigurationSection("messages." + parent).getKeys(false))
messages.put("messages." + parent + "." + child, langConf.getString("messages." + parent + "." + child));

View File

@ -38,6 +38,9 @@ public class Path {
public static final String RELOAD = MAIN_PATH_COMMANDS + "reload-command";
public static final String REMOVED_COMMAND = MAIN_PATH_COMMANDS + "removed-command";
public static final String EDITED_COMMAND = MAIN_PATH_COMMANDS + "edit-command";
public static final String INVALID_SOUND = MAIN_PATH_COMMANDS + "invalid-sound";
public static final String SOUND_ADDED = MAIN_PATH_COMMANDS + "sound-added";
public static final String SOUND_REMOVED = MAIN_PATH_COMMANDS + "sound-removed";
/**
* WARNINGS

View File

@ -22,6 +22,7 @@ import me.mattmoreira.citizenscmd.CitizensCMD;
import net.citizensnpcs.api.CitizensAPI;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Sound;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
@ -65,6 +66,19 @@ public class Util {
return false;
}
/**
* @param str String to check if it is a float number or not
* @return Returns true if it is a number false if it is a string or contains any non numeric character
*/
public static boolean isFloat(String str) {
try {
Float.parseFloat(str);
} catch (NumberFormatException | NullPointerException e) {
return false;
}
return true;
}
/**
* Checks if player has or not selected an NPC
*
@ -159,10 +173,26 @@ public class Util {
argComplete[2] = CitizensCMD.getPlugin().getDataHandler().getCompleteCommandsNumbers(getSelectedNpcId(player), EnumTypes.ClickType.LEFT);
argComplete[3] = CitizensCMD.getPlugin().getDataHandler().getCompleteCommandsNumbers(getSelectedNpcId(player), EnumTypes.ClickType.RIGHT);
argComplete[4] = new String[]{"console", "none", "permission", "server", "message"};
break;
case "sound":
argComplete[0] = getSoundsList();
break;
}
return argComplete;
}
private static String[] getSoundsList() {
Sound[] sounds = Sound.values();
String[] soundString = new String[sounds.length];
for (int i = 0; i < sounds.length; i++) {
soundString[i] = sounds[i].name();
}
return soundString;
}
/**
* Gets the difference in seconds between times
*

View File

@ -21,6 +21,9 @@ messages:
reload-command: "&aВсичко файлове бяха презаредени успешно!"
removed-command: "&aКомандата бе премахната успешно!"
edit-command: "&a{type} бе променен/а успешно!"
invalid-sound: "&cМоля, въведете валиден звук!"
sound-added: "&aЗвукът е добавен успешно!"
sound-removed: "&aЗвукът е премахнат успешно!"
warnings:
no-npc-selected: "&cИзбери NPC първо!"
invalid-cooldown: "&cВремето за изчакване трябва да бъде число!"

View File

@ -21,6 +21,9 @@ messages:
reload-command: "&a所有檔案已經被重新載入!"
removed-command: "&a這個指令已經被成功移除!"
edit-command: "&a {type} 已經被編輯!"
invalid-sound: "&c请输入有效的声音!"
sound-added: "&a声音成功添加"
sound-removed: "&a声音已成功删除"
warnings:
no-npc-selected: "&c你一定要選擇NPC來執行那個指令!"
invalid-cooldown: "&c冷卻時間並不是數字!"

View File

@ -21,6 +21,9 @@ messages:
reload-command: "&aAll files have been reloaded successfully!"
removed-command: "&aThe command was removed successfully!"
edit-command: "&aThe {type} was edited successfully!"
invalid-sound: "&cPlease enter a valid sound!"
sound-added: "&aSound added successfully!"
sound-removed: "&aSound removed successfully!"
warnings:
no-npc-selected: "&cYou must have an NPC selected to execute that command!"
invalid-cooldown: "&cThe cooldown must be a number!"

View File

@ -21,6 +21,9 @@ messages:
reload-command: "&aAlle fillene har blitt reloadet!"
removed-command: "&aKommandoen ble fjernet!"
edit-command: "&a{type} ble endret!"
invalid-sound: "&cVennligst skriv inn en gyldig lyd!"
sound-added: "&aLyd lagt til!"
sound-removed: "&aLyden fjernet vellykket!"
warnings:
no-npc-selected: "&cDu må velge en NPC for å utføre denne kommandoen!"
invalid-cooldown: "&cNedtellingen må være et tall!"

View File

@ -21,6 +21,8 @@ messages:
reload-command: "&aTodos os arquivos foram recarregados com sucesso!"
removed-command: "&aO comando foi removido com sucesso!"
edit-command: "&aO {type} foi editado com sucesso!"
invalid-sound: "&cSelecione um som válido!"
sound-added: "&aSom adicionado com sucesso!"
warnings:
no-npc-selected: "&cVocê deve ter um NPC selecionado para executar esse comando!"
invalid-cooldown: "&cO cooldown deve ser um número!"

View File

@ -21,6 +21,9 @@ messages:
reload-command: "&aToate fisierele au fost reincarcate cu succes!"
removed-command: "&aComanda a fost eliminata cu succes!"
edit-command: "&a{type} a fost editat cu succes!"
invalid-sound: "&cIntroduceți un sunet valid!"
sound-added: "&aSunetul a fost adăugat cu succes!"
sound-removed: "&aSunetul a fost eliminat cu succes!"
warnings:
no-npc-selected: "&cTrebuie sa ai un NPC selectat pentru a executa aceasta comanda!"
invalid-cooldown: "&cCooldown-ul trebuie sa fie un numar!"