HolyGolf
Пользователь
- Сообщения
- 3
При подключении игрока к серверу - срабатывает ивент и создаётся стойка, но почему-то (как я понял) ничего не вносится в HashMap, следовательно не реагирует на команду "/hnames off" (функция unhiding) и при команде "/hnames on" (функция hiding) создаётся вторая стойка, которая реагирует на все команды и ивенты, т.к. она заносится в HashMap.
Java:
public class commands implements Listener, CommandExecutor {
private HideNickNames plugin = HideNickNames.getPlugin(HideNickNames.class);
public HashMap<UUID, UUID> hide = new HashMap<>();
public Boolean plugin_enable = plugin.getConfig().getBoolean("Hide_NameTags", true);
public void hiding(Player player){ /*Добавление стойки*/
UUID plr = player.getUniqueId();
if (!hide.containsKey(plr)) {
ArmorStand stand = player.getWorld().spawn(new Location(player.getWorld(), 5, 5, 5), ArmorStand.class);
stand.setVisible(true);
stand.setGravity(false);
stand.setInvulnerable(true);
stand.setMarker(true);
stand.setSmall(true);
stand.setCustomNameVisible(false);
player.addPassenger(stand);
hide.put(plr, stand.getUniqueId());
}
}
public void unhiding(Player player) { /*Включение ников (удаление стойки)*/
UUID plr = player.getUniqueId();
if (hide.containsKey(plr)) {
for (World w : getServer().getWorlds()) {
for (Entity entity : w.getEntities()) {
if (entity.getUniqueId().equals(hide.get(plr))) {
entity.remove();
hide.remove(plr);
break;
}
}
}
}
}
public void check(Player player) { /*Проверка и действие*/
String world = player.getWorld().getName();
if (plugin.getConfig().getBoolean("Hide_NameTags", true) && plugin.getConfig().getStringList("Enabled_Worlds").contains(world)) {
if (!plugin_enable) { /*Отображение ников при входе*/
unhiding(player);
} else { /*Скрытие ников при входе*/
hiding(player);
}
}
}
/*-----------------------------------------------------------------------------*/
/*Проверка при входе человека и тыкание на людей (Можно и в людей, без разницы)*/
/*Проверка при смене мира, выходе с сервера, а так же смерти.*/
/*-----------------------------------------------------------------------------*/
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
Player p = event.getPlayer();
unhiding(p);
}
@EventHandler
public void onPlayerRespawn(PlayerRespawnEvent event) {
Player p = event.getPlayer();
unhiding(p);
if (!hide.containsKey(p.getUniqueId())) {
check(p);
}
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player p = event.getPlayer();
check(p);
}
@EventHandler
public void PlayerChangedWorldEvent(PlayerChangedWorldEvent event){
if(!(event.getFrom() == event.getPlayer().getWorld())) {
Player p = event.getPlayer();
unhiding(p);
if (!hide.containsKey(p.getUniqueId())) {
check(p);
}
}
}
/*--------*/
/*Команды*/
/*--------*/
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (args.length == 0) /*Если нет аргументов*/ {
sender.sendMessage(ChatColor.YELLOW + "" + ChatColor.BOLD + "HideNickName\n------{\n" + ChatColor.AQUA + "" + ChatColor.BOLD + "/HNames [on/off]\n" + ChatColor.YELLOW + "" + ChatColor.BOLD + "}------"); /*Отображение списка команд в чате*/
return true;
} else if (sender.hasPermission("HideNicknames.switching") || sender.isOp()) /*Проверка на права*/ {
if (cmd.getName().equalsIgnoreCase("hnames") && sender instanceof Player) /*Проверка на консоль*/ {
if (args[0].equals("on")) /*Команда выключения ников*/ {
sender.sendMessage(ChatColor.YELLOW + "HideNickNames plugin turns on...");
plugin_enable = true;
for (Player online : Bukkit.getOnlinePlayers()) {
String world = online.getWorld().getName();
if (plugin.getConfig().getStringList("Enabled_Worlds").contains(world)) {
hiding(online);
}
}
return true;
} else if (args[0].equals("off")) /*Команда включения ников*/ {
sender.sendMessage(ChatColor.YELLOW + "HideNickNames plugin turns off...");
plugin_enable = false;
for (Player online : Bukkit.getOnlinePlayers()) {
unhiding(online);
}
} else {
sender.sendMessage(ChatColor.YELLOW + "What?!"); /*Неверный аргумент*/
}
} else {
sender.sendMessage(ChatColor.RED + "HideNickNames: Only players can use this commands!");
/*Если команда активирована с консоли*/
return true;
}
} else {
sender.sendMessage(ChatColor.RED + plugin.getConfig().getString("NoPermissionsMessage"));
return true;
}
return true;
}
}