0
Я попытался разработать что-то вроде TeleportSigns для моего Minecraft-Server. Но когда я пытаюсь изменить строку знака, ничего не происходит.Java - Spigot - Изменить строку знака
Это код для изменения строки:
// loadTpSign
public static void loadTpSign(Sign sign) {
sign.setLine(0, "\2474[\2476Minepedia\2474]");
sign.update();
sign.setLine(1, "\247f\247l" + sign.getLine(1));
sign.update();
sign.setLine(2, "\2478\247l" + Server.getPlayer(sign.getLine(1)) + "/" + Server.getMaxPlayers(sign.getLine(1)));
sign.update();
sign.setLine(3, Server.getStatus(sign.getLine(1).toLowerCase()));
sign.update();
}
Я бегу метод loadTpSign
в этом методе:
// createTpSign
public static void createTpSign(Sign sign, String server) {
try {
PreparedStatement ps = MySQL.getConnection()
.prepareStatement("INSERT INTO TpSigns (world, x, y, z) VALUES (?,?,?,?)");
ps.setString(1, sign.getWorld().getName());
ps.setInt(2, sign.getX());
ps.setInt(3, sign.getY());
ps.setInt(4, sign.getZ());
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
main.TpSignsList.add(new Location(sign.getWorld(), sign.getX(), sign.getY(), sign.getZ()));
TpSigns.loadTpSign(sign);
}
И этот метод я бегу в SignChangeEvent:
@EventHandler
public void onSignChange(SignChangeEvent ev) {
if (ev.getPlayer() != null) {
Player p = ev.getPlayer();
if (p.hasPermission("tpsign")) {
if (ev.getLine(0).equalsIgnoreCase("[TPSIGN]")) {
TpSigns.createTpSign((Sign) ev.getBlock().getState(), ev.getLine(1).toLowerCase());
}
}
}
}
Я также пробовал его с запуском sign.update() только один раз. Но это тоже не сработало. Я также обновил свой вопрос, чтобы вы могли видеть, где я запускаю метод. – Nightfighter001
TpSigns.createTpSign ((Sign) ev.getBlock(). GetState(), ev.getLine (1) .toLowerCase()); Почему именно вы бросаете его в блокстат? – AscendedKitten
Я посмотрел «Блок» в JavaDoc и там было сказано, что вам нужно получить BlockState и передать его знаку, чтобы получить знак – Nightfighter001