Измените то, что говорит знак с помощью команды

Когда я запускаю определенную команду, мне нужно изменить знак, на который я смотрю.

Вот мой текущий код:

if (cmd.getName().equalsIgnoreCase("ft")) {
        if (!(p.hasPermission("ft.use"))) {
            p.sendMessage(ChatColor.RED + "You do not have permission.");
            return true;
        } else {
            Sign sign = (Sign) p.getTargetBlock(null, 10).getState();
            if (args.length == 0) {
                p.sendMessage(ChatColor.RED + "Usage: /ft <name> <1/2/3/4>");
                return true;
            } else if (args.length == 2) {
                String name = args[0];
                String id = args[1];
                if (args[1].equalsIgnoreCase("1")) {
                    if (getConfig().get("FastTravel." + name + "." + 1) != null) {
                        p.sendMessage(ChatColor.RED + args[0] + " 1 already exists please use another ID.");
                        return true;        
                    }else {
                        if(getConfig().get("FastTravel.Price") != null){
                        sign.setLine(0, "[FastTravel]");
                        sign.setLine(1, name + " 1");
                        sign.setLine(3, (String) getConfig().get("FastTravel.Price"));
                        p.sendMessage(ChatColor.GREEN + "You set the FastTravel sign '" + name + " 1'.");
                        getConfig().set("FastTravel." + args[0] +"."+ 1, p.getLocation());
                        saveConfig();
                        return true;
                        }else {
                            p.sendMessage(ChatColor.RED + "The price for FastTravel has not been set.");
                            p.sendMessage(ChatColor.RED + "Please set the price by using /setprice <price>");
                            return true;
                        }
                    }
                }
            }
        }

Итак, если бы кто-то набрал команду /ft Test 1, знак, на который он смотрел, выглядел бы так:

Строка 1: [FastTravel]
Строка 2: Тест 1
Строка 3: (Пустой)
Строка 4: Цена

Все p.sendMessage() работают нормально, но знак не меняется.


person user4758973    schedule 07.04.2015    source источник


Ответы (1)


Если вы хотите обновить текст знака, вы должны вызвать sign.update(true) после установки его строк:

//set the sign's text
sign.setLine(0, "[FastTravel]");
sign.setLine(1, name + " 1");
sign.setLine(3, (String) getConfig().get("FastTravel.Price"));

//update the sign
sign.update(true);
person Jojodmo    schedule 07.04.2015
comment
@ user4758973 Нет проблем. Кроме того, вы можете проверить, является ли блок перед игроком знаком, прежде чем преобразовать его в знак, используя if(p.getTargetBlock(null, 10) instanceof Sign). В противном случае вы можете получить ClassCastException< /а> - person Jojodmo; 07.04.2015
comment
Я добавил это сегодня после того, как понял. Благодарю вас! - person user4758973; 08.04.2015